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:
252
LIBRARY_USAGE.md
Normal file
252
LIBRARY_USAGE.md
Normal 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)
|
||||
```
|
||||
Reference in New Issue
Block a user