# Использование benadis-rac как библиотеки После рефакторинга библиотека benadis-rac может использоваться без импорта внутренних пакетов. ## Установка ```bash go get git.benadis.ru/gitops/benadis-rac ``` ## Импорт ```go import "git.benadis.ru/gitops/benadis-rac" ``` ## Основное использование ### Способ 1: Использование функции ManageServiceMode (рекомендуется) ```go package main import ( "context" "time" benadis_rac "git.benadis.ru/gitops/benadis-rac" ) func main() { // Создаем конфигурацию config := &benadis_rac.Config{ // RAC configuration RACPath: "C:\\Program Files\\1cv8\\8.3.25.1257\\bin\\rac.exe", ConnectionTimeout: 30 * time.Second, CommandTimeout: 60 * time.Second, RetryCount: 3, RetryDelay: 5 * time.Second, // Server configuration ServerHost: "localhost", ServerPort: 1541, RACPort: 1545, ServerName: "server1c", BaseName: "test_base", // Authentication ClusterAdmin: "admin", ClusterAdminPassword: "password", DBAdmin: "dbadmin", DBAdminPassword: "dbpassword", // Service mode settings DeniedMessage: "Система находится на техническом обслуживании", PermissionCode: "maintenance", } // Устанавливаем значения по умолчанию config.SetDefaults() // Валидируем конфигурацию if err := config.Validate(); err != nil { panic(err) } // Создаем логгер logger := benadis_rac.NewLogger("info") // Создаем контекст ctx := context.Background() // Включаем сервисный режим err := benadis_rac.ManageServiceMode(ctx, config, logger, true) if err != nil { panic(err) } // Выключаем сервисный режим err = benadis_rac.ManageServiceMode(ctx, config, logger, false) if err != nil { panic(err) } } ``` ### Способ 2: Использование клиента ```go package main import ( "context" benadis_rac "git.benadis.ru/gitops/benadis-rac" ) func main() { // Создаем конфигурацию (аналогично способу 1) config := &benadis_rac.Config{ // ... настройки конфигурации } config.SetDefaults() // Создаем клиент client, err := benadis_rac.NewClient(config) if err != nil { panic(err) } ctx := context.Background() // Проверяем текущий статус enabled, err := client.GetServiceModeStatus(ctx) if err != nil { panic(err) } // Включаем сервисный режим err = client.EnableServiceMode(ctx) if err != nil { panic(err) } // Выключаем сервисный режим err = client.DisableServiceMode(ctx) if err != nil { panic(err) } } ``` ## Структура конфигурации ```go type Config struct { // RAC configuration RACPath string // Путь к исполняемому файлу RAC ConnectionTimeout time.Duration // Таймаут подключения CommandTimeout time.Duration // Таймаут выполнения команды RetryCount int // Количество повторных попыток RetryDelay time.Duration // Задержка между попытками // Server configuration ServerHost string // Хост сервера 1C ServerPort int // Порт сервера 1C RACPort int // Порт RAC ServerName string // Имя сервера BaseName string // Имя информационной базы // Authentication ClusterAdmin string // Администратор кластера ClusterAdminPassword string // Пароль администратора кластера DBAdmin string // Администратор ИБ DBAdminPassword string // Пароль администратора ИБ // Service mode settings DeniedMessage string // Сообщение при блокировке PermissionCode string // Код разрешения } ``` ## Интерфейс логгера Вы можете использовать встроенный логгер или реализовать свой: ```go type Logger interface { Debug(msg string, args ...any) Info(msg string, args ...any) Warn(msg string, args ...any) Error(msg string, args ...any) DebugCommand(msg string, command []string) } // Создание встроенного логгера logger := benadis_rac.NewLogger("info") // debug, info, warn, error ``` ## Методы управления ### ManageServiceMode Основная функция для управления сервисным режимом: ```go func ManageServiceMode(ctx context.Context, config *Config, logger Logger, enable bool) error ``` ### Методы клиента - `EnableServiceMode(ctx context.Context) error` - включить сервисный режим - `DisableServiceMode(ctx context.Context) error` - выключить сервисный режим - `GetServiceModeStatus(ctx context.Context) (bool, error)` - получить статус сервисного режима ## Значения по умолчанию ```go const ( DefaultDeniedMessage = "Техническое обслуживание. Попробуйте позже." DefaultPermissionCode = "service-mode" DefaultRACPort = 1545 DefaultConnectionTimeout = 30 * time.Second DefaultCommandTimeout = 60 * time.Second DefaultRetryCount = 3 DefaultRetryDelay = 5 * time.Second ) ``` ## Валидация конфигурации Обязательные поля: - `ServerHost` - хост сервера 1C - `RACPath` - путь к исполняемому файлу RAC - `BaseName` - имя информационной базы - `ClusterAdmin` - администратор кластера - `DBAdmin` - администратор ИБ ## Обработка ошибок Все методы возвращают детализированные ошибки с контекстом: ```go if err := client.EnableServiceMode(ctx); err != nil { log.Printf("Failed to enable service mode: %v", err) } ``` ## Миграция с предыдущей версии ### Было (с внутренними пакетами): ```go import ( "git.benadis.ru/gitops/benadis-rac/internal/config" "git.benadis.ru/gitops/benadis-rac/internal/logger" "git.benadis.ru/gitops/benadis-rac/internal/service" ) // Загрузка из файлов конфигурации appConfig, err := config.LoadConfig("config.yaml", "secret.yaml", "project.yaml") log := logger.NewLogger("info") svc := service.NewServiceModeService(appConfig, log) ``` ### Стало (только публичный API): ```go import benadis_rac "git.benadis.ru/gitops/benadis-rac" // Прямая передача значений в структуру config := &benadis_rac.Config{ RACPath: "path/to/rac", ServerHost: "localhost", // ... другие поля } logger := benadis_rac.NewLogger("info") benadis_rac.ManageServiceMode(ctx, config, logger, true) ```