Init
This commit is contained in:
124
internal/service/service.go
Normal file
124
internal/service/service.go
Normal file
@@ -0,0 +1,124 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"git.benadis.ru/gitops/benadis-rac/internal/config"
|
||||
"git.benadis.ru/gitops/benadis-rac/internal/constants"
|
||||
"git.benadis.ru/gitops/benadis-rac/internal/logger"
|
||||
"git.benadis.ru/gitops/benadis-rac/internal/rac"
|
||||
)
|
||||
|
||||
// ServiceModeService сервис для управления сервисным режимом
|
||||
type ServiceModeService struct {
|
||||
racClient *rac.Client
|
||||
config *config.AppConfig
|
||||
logger logger.Logger
|
||||
}
|
||||
|
||||
// NewServiceModeService создает новый сервис
|
||||
func NewServiceModeService(cfg *config.AppConfig, log logger.Logger) *ServiceModeService {
|
||||
racClient := rac.NewClient(cfg, log)
|
||||
return &ServiceModeService{
|
||||
racClient: racClient,
|
||||
config: cfg,
|
||||
logger: log,
|
||||
}
|
||||
}
|
||||
|
||||
// EnableServiceMode включает сервисный режим
|
||||
func (s *ServiceModeService) EnableServiceMode(ctx context.Context) error {
|
||||
s.logger.Info("Starting service mode enablement")
|
||||
|
||||
// Получаем UUID кластера
|
||||
clusterUUID, err := s.racClient.GetClusterUUID(ctx)
|
||||
if err != nil {
|
||||
return fmt.Errorf(constants.ErrGetClusterUUID, err)
|
||||
}
|
||||
|
||||
// Получаем UUID информационной базы
|
||||
infobaseUUID, err := s.racClient.GetInfobaseUUID(ctx, clusterUUID)
|
||||
if err != nil {
|
||||
return fmt.Errorf(constants.ErrGetInfobaseUUID, err)
|
||||
}
|
||||
|
||||
// Подготавливаем параметры
|
||||
params := rac.ServiceModeParams{
|
||||
ClusterUUID: clusterUUID,
|
||||
InfobaseUUID: infobaseUUID,
|
||||
Enable: true,
|
||||
DeniedMessage: constants.DefaultDeniedMessage,
|
||||
PermissionCode: constants.DefaultPermissionCode,
|
||||
}
|
||||
|
||||
// Включаем сервисный режим
|
||||
if err := s.racClient.EnableServiceMode(ctx, params); err != nil {
|
||||
return fmt.Errorf(constants.ErrEnableServiceMode, err)
|
||||
}
|
||||
|
||||
s.logger.Info(constants.LogMsgServiceModeEnabled)
|
||||
return nil
|
||||
}
|
||||
|
||||
// DisableServiceMode выключает сервисный режим
|
||||
func (s *ServiceModeService) DisableServiceMode(ctx context.Context) error {
|
||||
s.logger.Info("Starting service mode disablement")
|
||||
|
||||
// Получаем UUID кластера
|
||||
clusterUUID, err := s.racClient.GetClusterUUID(ctx)
|
||||
if err != nil {
|
||||
return fmt.Errorf(constants.ErrGetClusterUUID, err)
|
||||
}
|
||||
|
||||
// Получаем UUID информационной базы
|
||||
infobaseUUID, err := s.racClient.GetInfobaseUUID(ctx, clusterUUID)
|
||||
if err != nil {
|
||||
return fmt.Errorf(constants.ErrGetInfobaseUUID, err)
|
||||
}
|
||||
|
||||
// Подготавливаем параметры
|
||||
params := rac.ServiceModeParams{
|
||||
ClusterUUID: clusterUUID,
|
||||
InfobaseUUID: infobaseUUID,
|
||||
Enable: false,
|
||||
}
|
||||
|
||||
// Выключаем сервисный режим
|
||||
if err := s.racClient.DisableServiceMode(ctx, params); err != nil {
|
||||
return fmt.Errorf(constants.ErrDisableServiceMode, err)
|
||||
}
|
||||
|
||||
s.logger.Info(constants.LogMsgServiceModeDisabled)
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetServiceModeStatus получает текущий статус сервисного режима
|
||||
func (s *ServiceModeService) GetServiceModeStatus(ctx context.Context) (bool, error) {
|
||||
s.logger.Info("Getting service mode status")
|
||||
|
||||
// Получаем UUID кластера
|
||||
clusterUUID, err := s.racClient.GetClusterUUID(ctx)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf(constants.ErrGetClusterUUID, err)
|
||||
}
|
||||
|
||||
// Получаем UUID информационной базы
|
||||
infobaseUUID, err := s.racClient.GetInfobaseUUID(ctx, clusterUUID)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf(constants.ErrGetInfobaseUUID, err)
|
||||
}
|
||||
|
||||
// Проверяем статус (используем VerifyServiceMode для проверки включенного состояния)
|
||||
err = s.racClient.VerifyServiceMode(ctx, clusterUUID, infobaseUUID, true)
|
||||
if err != nil {
|
||||
// Если проверка на включенное состояние не прошла, проверяем выключенное
|
||||
err = s.racClient.VerifyServiceMode(ctx, clusterUUID, infobaseUUID, false)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf(constants.ErrDetermineServiceModeStatus, err)
|
||||
}
|
||||
return false, nil // Сервисный режим выключен
|
||||
}
|
||||
|
||||
return true, nil // Сервисный режим включен
|
||||
}
|
||||
Reference in New Issue
Block a user