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