Files
benadis-rac/example/main.go
2025-08-04 11:03:25 +03:00

267 lines
10 KiB
Go
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.
// Package main демонстрирует использование библиотеки benadis-rac
// для управления сервисным режимом 1C
package main
import (
"context"
"fmt"
"log"
"os"
"time"
benadisrac "git.benadis.ru/gitops/benadis-rac"
)
// ExampleConfig содержит примеры конфигурации для демонстрации
type ExampleConfig struct {
ConfigPath string
SecretPath string
ProjectPath string
LogLevel string
}
// getDefaultConfig возвращает конфигурацию по умолчанию
func getDefaultConfig() ExampleConfig {
return ExampleConfig{
ConfigPath: "../config.yaml",
SecretPath: "../secret.yaml",
ProjectPath: "../project.yaml",
LogLevel: "Info",
}
}
// demonstrateBasicUsage демонстрирует базовое использование библиотеки
func demonstrateBasicUsage() error {
fmt.Println("=== Демонстрация базового использования библиотеки GitOps RAC ===")
// Получаем конфигурацию
cfg := getDefaultConfig()
// Создаем клиент
fmt.Println("Создание клиента...")
client, err := benadisrac.NewClient(benadisrac.Config{
ConfigPath: cfg.ConfigPath,
SecretPath: cfg.SecretPath,
ProjectPath: cfg.ProjectPath,
LogLevel: cfg.LogLevel,
})
if err != nil {
return fmt.Errorf("ошибка создания клиента: %w", err)
}
fmt.Println("✓ Клиент успешно создан")
// Создаем контекст с таймаутом
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
// Получаем текущий статус
fmt.Println("\nПроверка текущего статуса сервисного режима...")
status, err := client.GetServiceModeStatus(ctx)
if err != nil {
return fmt.Errorf("ошибка получения статуса: %w", err)
}
fmt.Printf("✓ Текущий статус сервисного режима: %t\n", status)
return nil
}
// demonstrateServiceModeOperations демонстрирует операции с сервисным режимом
func demonstrateServiceModeOperations() error {
fmt.Println("\n=== Демонстрация операций с сервисным режимом ===")
// Создаем клиент
cfg := getDefaultConfig()
client, err := benadisrac.NewClient(benadisrac.Config{
ConfigPath: cfg.ConfigPath,
SecretPath: cfg.SecretPath,
ProjectPath: cfg.ProjectPath,
LogLevel: "Debug", // Используем Debug для подробного логирования
})
if err != nil {
return fmt.Errorf("ошибка создания клиента: %w", err)
}
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
defer cancel()
// Получаем начальный статус
initialStatus, err := client.GetServiceModeStatus(ctx)
if err != nil {
return fmt.Errorf("ошибка получения начального статуса: %w", err)
}
fmt.Printf("Начальный статус: %t\n", initialStatus)
// Если сервисный режим выключен, включаем его
if !initialStatus {
fmt.Println("\nВключение сервисного режима...")
if err := client.EnableServiceMode(ctx); err != nil {
return fmt.Errorf("ошибка включения сервисного режима: %w", err)
}
fmt.Println("✓ Сервисный режим включен")
// Проверяем статус после включения
status, err := client.GetServiceModeStatus(ctx)
if err != nil {
return fmt.Errorf("ошибка проверки статуса после включения: %w", err)
}
fmt.Printf("✓ Статус после включения: %t\n", status)
// Ждем немного
time.Sleep(2 * time.Second)
// Выключаем сервисный режим
fmt.Println("\nВыключение сервисного режима...")
if err := client.DisableServiceMode(ctx); err != nil {
return fmt.Errorf("ошибка выключения сервисного режима: %w", err)
}
fmt.Println("✓ Сервисный режим выключен")
} else {
fmt.Println("\nВыключение сервисного режима...")
if err := client.DisableServiceMode(ctx); err != nil {
return fmt.Errorf("ошибка выключения сервисного режима: %w", err)
}
fmt.Println("✓ Сервисный режим выключен")
// Проверяем статус после выключения
status, err := client.GetServiceModeStatus(ctx)
if err != nil {
return fmt.Errorf("ошибка проверки статуса после выключения: %w", err)
}
fmt.Printf("✓ Статус после выключения: %t\n", status)
// Ждем немного
time.Sleep(2 * time.Second)
// Включаем сервисный режим обратно
fmt.Println("\nВключение сервисного режима обратно...")
if err := client.EnableServiceMode(ctx); err != nil {
return fmt.Errorf("ошибка включения сервисного режима: %w", err)
}
fmt.Println("✓ Сервисный режим включен обратно")
}
// Финальная проверка статуса
finalStatus, err := client.GetServiceModeStatus(ctx)
if err != nil {
return fmt.Errorf("ошибка получения финального статуса: %w", err)
}
fmt.Printf("\n✓ Финальный статус: %t\n", finalStatus)
return nil
}
// demonstrateErrorHandling демонстрирует обработку ошибок
func demonstrateErrorHandling() {
fmt.Println("\n=== Демонстрация обработки ошибок ===")
// Попытка создать клиент с неверными путями
fmt.Println("Попытка создания клиента с неверными путями...")
_, err := benadisrac.NewClient(benadisrac.Config{
ConfigPath: "nonexistent-config.yaml",
SecretPath: "nonexistent-secret.yaml",
ProjectPath: "nonexistent-project.yaml",
LogLevel: "Info",
})
if err != nil {
fmt.Printf("✓ Ожидаемая ошибка: %v\n", err)
} else {
fmt.Println("⚠ Неожиданно: ошибка не возникла")
}
// Попытка создать клиент с неверным уровнем логирования
fmt.Println("\nПопытка создания клиента с неверным уровнем логирования...")
cfg := getDefaultConfig()
cfg.LogLevel = "InvalidLevel"
client, err := benadisrac.NewClient(benadisrac.Config{
ConfigPath: cfg.ConfigPath,
SecretPath: cfg.SecretPath,
ProjectPath: cfg.ProjectPath,
LogLevel: cfg.LogLevel,
})
if err != nil {
fmt.Printf("✓ Ошибка при неверном уровне логирования: %v\n", err)
} else if client != nil {
fmt.Println("✓ Клиент создан, но может использовать уровень логирования по умолчанию")
}
}
// printUsageInstructions выводит инструкции по использованию
func printUsageInstructions() {
fmt.Println("\n=== Инструкции по использованию библиотеки GitOps RAC ===")
fmt.Println("\n1. Импортируйте библиотеку:")
fmt.Println(` import benadisrac "git.benadis.ru/gitops/benadis-rac/"`)
fmt.Println("\n2. Создайте конфигурацию:")
fmt.Println(` cfg := benadisrac.Config{`)
fmt.Println(` ConfigPath: "config.yaml",`)
fmt.Println(` SecretPath: "secret.yaml",`)
fmt.Println(` ProjectPath: "project.yaml",`)
fmt.Println(` LogLevel: "Info",`)
fmt.Println(` }`)
fmt.Println("\n3. Создайте клиент:")
fmt.Println(` client, err := benadisrac.NewClient(cfg)`)
fmt.Println(` if err != nil {`)
fmt.Println(` log.Fatal(err)`)
fmt.Println(` }`)
fmt.Println("\n4. Используйте методы клиента:")
fmt.Println(` ctx := context.Background()`)
fmt.Println(` status, err := client.GetServiceModeStatus(ctx)`)
fmt.Println(` err = client.EnableServiceMode(ctx)`)
fmt.Println(` err = client.DisableServiceMode(ctx)`)
fmt.Println("\n5. Доступные уровни логирования: Debug, Info, Warn, Error")
fmt.Println("\n6. Все операции поддерживают context.Context для управления таймаутами")
}
func main() {
fmt.Println("GitOps RAC Library Example")
fmt.Println("==========================")
// Проверяем аргументы командной строки
if len(os.Args) > 1 {
switch os.Args[1] {
case "--help", "-h":
printUsageInstructions()
return
case "--basic":
if err := demonstrateBasicUsage(); err != nil {
log.Printf("Ошибка в базовой демонстрации: %v", err)
}
return
case "--operations":
if err := demonstrateServiceModeOperations(); err != nil {
log.Printf("Ошибка в демонстрации операций: %v", err)
}
return
case "--errors":
demonstrateErrorHandling()
return
}
}
// Выполняем все демонстрации по умолчанию
fmt.Println("Запуск всех демонстраций...")
fmt.Println("Используйте флаги: --basic, --operations, --errors, --help")
fmt.Println()
// Базовое использование
if err := demonstrateBasicUsage(); err != nil {
log.Printf("Ошибка в базовой демонстрации: %v", err)
}
// Операции с сервисным режимом (только если базовая демонстрация прошла успешно)
if err := demonstrateServiceModeOperations(); err != nil {
log.Printf("Ошибка в демонстрации операций: %v", err)
}
// Обработка ошибок
demonstrateErrorHandling()
// Инструкции
printUsageInstructions()
fmt.Println("\n=== Демонстрация завершена ===")
}