mirror of
https://github.com/databasus/databasus.git
synced 2026-04-06 00:32:03 +02:00
FEATURE (databases): Add healthcheck MySQL and MariaDB
This commit is contained in:
@@ -8,9 +8,9 @@ import (
|
||||
)
|
||||
|
||||
type HealthcheckAttemptBackgroundService struct {
|
||||
healthcheckConfigService *healthcheck_config.HealthcheckConfigService
|
||||
checkPgHealthUseCase *CheckPgHealthUseCase
|
||||
logger *slog.Logger
|
||||
healthcheckConfigService *healthcheck_config.HealthcheckConfigService
|
||||
checkDatabaseHealthUseCase *CheckDatabaseHealthUseCase
|
||||
logger *slog.Logger
|
||||
}
|
||||
|
||||
func (s *HealthcheckAttemptBackgroundService) Run() {
|
||||
@@ -39,9 +39,9 @@ func (s *HealthcheckAttemptBackgroundService) checkDatabases() {
|
||||
|
||||
for _, healthcheckConfig := range healthcheckConfigs {
|
||||
go func(healthcheckConfig *healthcheck_config.HealthcheckConfig) {
|
||||
err := s.checkPgHealthUseCase.Execute(now, healthcheckConfig)
|
||||
err := s.checkDatabaseHealthUseCase.Execute(now, healthcheckConfig)
|
||||
if err != nil {
|
||||
s.logger.Error("failed to check pg health", "error", err)
|
||||
s.logger.Error("failed to check database health", "error", err)
|
||||
}
|
||||
}(&healthcheckConfig)
|
||||
}
|
||||
|
||||
@@ -13,13 +13,13 @@ import (
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type CheckPgHealthUseCase struct {
|
||||
type CheckDatabaseHealthUseCase struct {
|
||||
healthcheckAttemptRepository *HealthcheckAttemptRepository
|
||||
healthcheckAttemptSender HealthcheckAttemptSender
|
||||
databaseService DatabaseService
|
||||
}
|
||||
|
||||
func (uc *CheckPgHealthUseCase) Execute(
|
||||
func (uc *CheckDatabaseHealthUseCase) Execute(
|
||||
now time.Time,
|
||||
healthcheckConfig *healthcheck_config.HealthcheckConfig,
|
||||
) error {
|
||||
@@ -68,7 +68,7 @@ func (uc *CheckPgHealthUseCase) Execute(
|
||||
|
||||
err = uc.healthcheckAttemptRepository.DeleteOlderThan(
|
||||
database.ID,
|
||||
time.Now().Add(-time.Duration(healthcheckConfig.StoreAttemptsDays)*24*time.Hour),
|
||||
time.Now().UTC().Add(-time.Duration(healthcheckConfig.StoreAttemptsDays)*24*time.Hour),
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -77,7 +77,7 @@ func (uc *CheckPgHealthUseCase) Execute(
|
||||
return nil
|
||||
}
|
||||
|
||||
func (uc *CheckPgHealthUseCase) updateDatabaseHealthStatusIfChanged(
|
||||
func (uc *CheckDatabaseHealthUseCase) updateDatabaseHealthStatusIfChanged(
|
||||
database *databases.Database,
|
||||
healthcheckConfig *healthcheck_config.HealthcheckConfig,
|
||||
heathcheckAttempt *HealthcheckAttempt,
|
||||
@@ -147,7 +147,7 @@ func (uc *CheckPgHealthUseCase) updateDatabaseHealthStatusIfChanged(
|
||||
return nil
|
||||
}
|
||||
|
||||
func (uc *CheckPgHealthUseCase) healthcheckDatabase(
|
||||
func (uc *CheckDatabaseHealthUseCase) healthcheckDatabase(
|
||||
now time.Time,
|
||||
database *databases.Database,
|
||||
) (*HealthcheckAttempt, error) {
|
||||
@@ -175,21 +175,30 @@ func (uc *CheckPgHealthUseCase) healthcheckDatabase(
|
||||
return attempt, nil
|
||||
}
|
||||
|
||||
func (uc *CheckPgHealthUseCase) validateDatabase(
|
||||
func (uc *CheckDatabaseHealthUseCase) validateDatabase(
|
||||
database *databases.Database,
|
||||
) error {
|
||||
if database.Type != databases.DatabaseTypePostgres {
|
||||
return errors.New("database type is not postgres")
|
||||
}
|
||||
|
||||
if database.Postgresql == nil {
|
||||
return errors.New("database Postgresql is not set")
|
||||
switch database.Type {
|
||||
case databases.DatabaseTypePostgres:
|
||||
if database.Postgresql == nil {
|
||||
return fmt.Errorf("database Postgresql config is not set")
|
||||
}
|
||||
case databases.DatabaseTypeMysql:
|
||||
if database.Mysql == nil {
|
||||
return fmt.Errorf("database MySQL config is not set")
|
||||
}
|
||||
case databases.DatabaseTypeMariadb:
|
||||
if database.Mariadb == nil {
|
||||
return fmt.Errorf("database MariaDB config is not set")
|
||||
}
|
||||
default:
|
||||
return fmt.Errorf("unsupported database type: %s", database.Type)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (uc *CheckPgHealthUseCase) isReadyForNewAttempt(
|
||||
func (uc *CheckDatabaseHealthUseCase) isReadyForNewAttempt(
|
||||
now time.Time,
|
||||
database *databases.Database,
|
||||
healthcheckConfig *healthcheck_config.HealthcheckConfig,
|
||||
@@ -211,7 +220,7 @@ func (uc *CheckPgHealthUseCase) isReadyForNewAttempt(
|
||||
return now.After(nextAttemptTime.Add(-1 * time.Second)), nil
|
||||
}
|
||||
|
||||
func (uc *CheckPgHealthUseCase) sendDbStatusNotification(
|
||||
func (uc *CheckDatabaseHealthUseCase) sendDbStatusNotification(
|
||||
healthcheckConfig *healthcheck_config.HealthcheckConfig,
|
||||
database *databases.Database,
|
||||
newHealthStatus databases.HealthStatus,
|
||||
@@ -18,7 +18,7 @@ import (
|
||||
"github.com/stretchr/testify/mock"
|
||||
)
|
||||
|
||||
func Test_CheckPgHealthUseCase(t *testing.T) {
|
||||
func Test_CheckDatabaseHealthUseCase(t *testing.T) {
|
||||
user := users_testing.CreateTestUser(users_enums.UserRoleAdmin)
|
||||
|
||||
// Create workspace directly via service
|
||||
@@ -65,7 +65,7 @@ func Test_CheckPgHealthUseCase(t *testing.T) {
|
||||
}
|
||||
|
||||
// Create use case with mock sender
|
||||
useCase := &CheckPgHealthUseCase{
|
||||
useCase := &CheckDatabaseHealthUseCase{
|
||||
healthcheckAttemptRepository: &HealthcheckAttemptRepository{},
|
||||
healthcheckAttemptSender: mockSender,
|
||||
databaseService: mockDatabaseService,
|
||||
@@ -129,7 +129,7 @@ func Test_CheckPgHealthUseCase(t *testing.T) {
|
||||
}
|
||||
|
||||
// Create use case with mock sender
|
||||
useCase := &CheckPgHealthUseCase{
|
||||
useCase := &CheckDatabaseHealthUseCase{
|
||||
healthcheckAttemptRepository: &HealthcheckAttemptRepository{},
|
||||
healthcheckAttemptSender: mockSender,
|
||||
databaseService: mockDatabaseService,
|
||||
@@ -206,7 +206,7 @@ func Test_CheckPgHealthUseCase(t *testing.T) {
|
||||
}
|
||||
|
||||
// Create use case with mock sender
|
||||
useCase := &CheckPgHealthUseCase{
|
||||
useCase := &CheckDatabaseHealthUseCase{
|
||||
healthcheckAttemptRepository: &HealthcheckAttemptRepository{},
|
||||
healthcheckAttemptSender: mockSender,
|
||||
databaseService: mockDatabaseService,
|
||||
@@ -282,7 +282,7 @@ func Test_CheckPgHealthUseCase(t *testing.T) {
|
||||
}
|
||||
|
||||
// Create use case with mock sender
|
||||
useCase := &CheckPgHealthUseCase{
|
||||
useCase := &CheckDatabaseHealthUseCase{
|
||||
healthcheckAttemptRepository: &HealthcheckAttemptRepository{},
|
||||
healthcheckAttemptSender: mockSender,
|
||||
databaseService: mockDatabaseService,
|
||||
@@ -349,7 +349,7 @@ func Test_CheckPgHealthUseCase(t *testing.T) {
|
||||
}
|
||||
|
||||
// Create use case with mock sender
|
||||
useCase := &CheckPgHealthUseCase{
|
||||
useCase := &CheckDatabaseHealthUseCase{
|
||||
healthcheckAttemptRepository: &HealthcheckAttemptRepository{},
|
||||
healthcheckAttemptSender: mockSender,
|
||||
databaseService: mockDatabaseService,
|
||||
@@ -15,7 +15,7 @@ var healthcheckAttemptService = &HealthcheckAttemptService{
|
||||
workspaces_services.GetWorkspaceService(),
|
||||
}
|
||||
|
||||
var checkPgHealthUseCase = &CheckPgHealthUseCase{
|
||||
var checkDatabaseHealthUseCase = &CheckDatabaseHealthUseCase{
|
||||
healthcheckAttemptRepository,
|
||||
notifiers.GetNotifierService(),
|
||||
databases.GetDatabaseService(),
|
||||
@@ -23,7 +23,7 @@ var checkPgHealthUseCase = &CheckPgHealthUseCase{
|
||||
|
||||
var healthcheckAttemptBackgroundService = &HealthcheckAttemptBackgroundService{
|
||||
healthcheck_config.GetHealthcheckConfigService(),
|
||||
checkPgHealthUseCase,
|
||||
checkDatabaseHealthUseCase,
|
||||
logger.GetLogger(),
|
||||
}
|
||||
var healthcheckAttemptController = &HealthcheckAttemptController{
|
||||
|
||||
Reference in New Issue
Block a user