feat: add new helper methods for RAC operations docs: add comprehensive library usage documentation chore: move example to examples/library_usage directory
252 lines
7.6 KiB
Markdown
252 lines
7.6 KiB
Markdown
# Использование 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)
|
||
``` |