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
This commit is contained in:
2025-08-04 12:03:45 +03:00
parent ccbe0c669d
commit 46261f066b
7 changed files with 1152 additions and 678 deletions

252
LIBRARY_USAGE.md Normal file
View File

@@ -0,0 +1,252 @@
# Использование 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)
```