Files
benadis-rac/internal/service/service.go
2025-08-04 11:03:25 +03:00

125 lines
4.1 KiB
Go

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 // Сервисный режим включен
}