feat: add new helper methods for RAC operations docs: add comprehensive library usage documentation chore: move example to examples/library_usage directory
7.6 KiB
7.6 KiB
Использование 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- хост сервера 1CRACPath- путь к исполняемому файлу RACBaseName- имя информационной базы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)