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

252 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Использование 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)
```