Files
benadis-rac/LIBRARY_USAGE.md
gitops 46261f066b refactor: restructure library to expose public API directly
feat: add new helper methods for RAC operations
docs: add comprehensive library usage documentation
chore: move example to examples/library_usage directory
2025-08-04 12:03:45 +03:00

7.6 KiB
Raw Permalink Blame History

Использование benadis-rac как библиотеки

После рефакторинга библиотека benadis-rac может использоваться без импорта внутренних пакетов.

Установка

go get git.benadis.ru/gitops/benadis-rac

Импорт

import "git.benadis.ru/gitops/benadis-rac"

Основное использование

Способ 1: Использование функции ManageServiceMode (рекомендуется)

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: Использование клиента

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)
    }
}

Структура конфигурации

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 // Код разрешения
}

Интерфейс логгера

Вы можете использовать встроенный логгер или реализовать свой:

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

Основная функция для управления сервисным режимом:

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) - получить статус сервисного режима

Значения по умолчанию

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 - администратор ИБ

Обработка ошибок

Все методы возвращают детализированные ошибки с контекстом:

if err := client.EnableServiceMode(ctx); err != nil {
    log.Printf("Failed to enable service mode: %v", err)
}

Миграция с предыдущей версии

Было (с внутренними пакетами):

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):

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)