Files
benadis-rac/requirements.md
2025-08-04 11:03:25 +03:00

17 KiB
Raw Blame History

Requirements для проекта GitOps RAC

Обзор проекта

GitOps RAC - это Go-библиотека и CLI-утилита для управления сервисным режимом информационных баз 1С:Предприятие через утилиту RAC (Remote Administration Client). Проект реализует автоматизацию операций включения/выключения сервисного режима с поддержкой принудительного отключения пользователей и верификации операций.

Функциональные требования

1. Основная функциональность

1.1 Управление сервисным режимом

  • Включение сервисного режима с автоматическим отключением всех активных пользователей
  • Выключение сервисного режима с восстановлением доступа
  • Проверка статуса текущего состояния сервисного режима
  • Верификация операций - проверка корректности выполнения команд

1.2 Работа с пользовательскими сессиями

  • Получение списка активных сессий пользователей
  • Принудительное завершение всех пользовательских сессий
  • Обработка ошибок при завершении отдельных сессий (продолжение работы)

1.3 Интеграция с RAC

  • Выполнение команд через утилиту rac.exe
  • Автоматическое получение UUID кластера и информационной базы
  • Поддержка аутентификации на уровне кластера и базы данных

2. Интерфейсы использования

2.1 CLI интерфейс

  • Команды: enable, disable, status
  • Флаги: -config, -secret, -command, -version, -help
  • Переопределение параметров конфигурации через командную строку

2.2 Библиотечный API

  • Публичный интерфейс ServiceModeManager
  • Методы: EnableServiceMode(), DisableServiceMode(), GetServiceModeStatus()
  • Поддержка контекста для отмены операций

Нефункциональные требования

3. Производительность и надежность

3.1 Retry-логика

  • Настраиваемое количество попыток (по умолчанию: 3)
  • Настраиваемая задержка между попытками (по умолчанию: 5 секунд)
  • Обработка временных сбоев сети и сервера

3.2 Таймауты

  • Таймаут подключения (по умолчанию: 30 секунд)
  • Таймаут выполнения команды (по умолчанию: 60 секунд)
  • Общий таймаут операции (по умолчанию: 5 минут)

3.3 Контекст и отмена операций

  • Поддержка context.Context для всех операций
  • Возможность отмены длительных операций
  • Корректная обработка отмены контекста

4. Безопасность

4.1 Управление секретами

  • Разделение конфигурации и секретов (config.yaml / secret.yaml)
  • Маскирование паролей в логах (замена на ***)
  • Отсутствие секретов в основной конфигурации

4.2 Валидация

  • Валидация обязательных параметров конфигурации
  • Проверка корректности путей к файлам
  • Валидация входных параметров

5. Логирование и мониторинг

5.1 Структурированное логирование

  • Использование log/slog для JSON-логирования
  • Уровни логирования: Debug, Info, Warn, Error
  • Добавление метаданных (версия приложения, источник)

5.2 Детализация логов

  • Логирование всех RAC команд (с маскированием паролей)
  • Отслеживание попыток retry
  • Логирование результатов верификации
  • Информация о завершении сессий пользователей

6. Конфигурация

6.1 Файлы конфигурации

config.yaml должен содержать:

  • Параметры подключения (server_host, server_port, rac_port)
  • Путь к rac.exe (rac_path)
  • Настройки таймаутов и retry
  • Параметры логирования
  • Имена сервера и базы данных

secret.yaml должен содержать:

  • Учетные данные кластера (cluster_admin, cluster_admin_password)
  • Учетные данные базы данных (db_admin, db_admin_password)

6.2 Настраиваемые параметры

  • Сообщение для пользователей при включении сервисного режима
  • Код разрешения для сервисного режима
  • Все таймауты и параметры retry
  • Уровень логирования

Архитектурные требования

7. Структура проекта

7.1 Модульная архитектура

benadis-rac/
├── cmd/                    # CLI приложение
├── internal/               # Внутренние пакеты
│   ├── config/            # Управление конфигурацией
│   ├── constants/         # Константы приложения
│   ├── logger/            # Логирование
│   ├── rac/              # Взаимодействие с RAC
│   └── service/          # Бизнес-логика
├── gitops_rac.go          # Публичный API
└── integration_test.go    # Интеграционные тесты

7.2 Принципы проектирования

  • SOLID принципы - каждый компонент имеет единственную ответственность
  • Dependency Injection - внедрение зависимостей через конструкторы
  • Интерфейсы - использование интерфейсов для абстракции (Logger, ServiceModeManager)
  • Модульность - четкое разделение ответственности между пакетами

8. Управление константами

8.1 Централизованные константы

  • Все строковые литералы вынесены в пакет constants
  • Сообщения об ошибках
  • Сообщения для логирования
  • Параметры по умолчанию
  • RAC команды и параметры

8.2 Типизированные константы

  • Версия приложения
  • Таймауты (time.Duration)
  • Числовые значения (порты, счетчики)
  • Флаги паролей для маскирования

Требования к тестированию

9. Unit тесты

  • Покрытие всех публичных функций
  • Тестирование обработки ошибок
  • Мок-тесты для внешних зависимостей
  • Тестирование валидации конфигурации

10. Интеграционные тесты

  • Тесты с реальным 1С сервером
  • Проверка полного цикла операций
  • Тестирование retry-логики
  • Верификация маскирования паролей

Предложения по улучшению

11. Расширение функциональности

11.1 Мониторинг и метрики

  • Экспорт метрик в формате Prometheus
    • Количество успешных/неуспешных операций
    • Время выполнения операций
    • Количество активных сессий
  • Health check endpoint для проверки доступности
  • Статистика использования команд и операций

11.2 Уведомления

  • Webhook уведомления о смене статуса сервисного режима
  • Email уведомления администраторам
  • Slack/Teams интеграция для команд разработки
  • Настраиваемые шаблоны уведомлений

11.3 Планировщик задач

  • Cron-подобный планировщик для автоматического включения/выключения
  • Календарные окна обслуживания
  • Интеграция с внешними планировщиками (Kubernetes CronJob, systemd timer)

12. Операционные улучшения

12.1 Конфигурация

  • Поддержка переменных окружения для всех параметров
  • Конфигурация через Kubernetes ConfigMap/Secret
  • Горячая перезагрузка конфигурации без перезапуска
  • Валидация конфигурации с детальными сообщениями об ошибках

12.2 Безопасность

  • Интеграция с внешними системами управления секретами:
    • HashiCorp Vault
    • Kubernetes Secrets
    • Azure Key Vault
    • AWS Secrets Manager
  • Ротация паролей с автоматическим обновлением
  • Аудит операций с записью в отдельный лог
  • RBAC для разграничения доступа к операциям

12.3 Мониторинг и диагностика

  • Structured logging с дополнительными полями:
    • Correlation ID для трассировки операций
    • User ID инициатора операции
    • Временные метки с микросекундами
  • Distributed tracing (OpenTelemetry/Jaeger)
  • Профилирование производительности (pprof)

13. Масштабируемость

13.1 Поддержка множественных баз

  • Конфигурация нескольких информационных баз
  • Групповые операции над множеством баз
  • Параллельное выполнение операций
  • Приоритизация операций по базам

13.2 Кластеризация

  • Поддержка нескольких кластеров 1С
  • Load balancing между кластерами
  • Failover при недоступности основного кластера
  • Синхронизация состояния между экземплярами

13.3 Производительность

  • Пулы соединений к RAC
  • Кэширование UUID кластеров и баз
  • Асинхронные операции для неблокирующего выполнения
  • Batch операции для массовых изменений

14. Интеграции

14.1 CI/CD интеграция

  • GitHub Actions для автоматизации развертывания
  • GitLab CI пайплайны
  • Jenkins плагины
  • Helm charts для Kubernetes развертывания

14.2 Мониторинг систем

  • Grafana dashboards для визуализации метрик
  • Alertmanager правила для уведомлений
  • Nagios/Zabbix плагины для мониторинга
  • DataDog/New Relic интеграция

14.3 API расширения

  • REST API для внешних систем
  • GraphQL для гибких запросов
  • gRPC для высокопроизводительных интеграций
  • WebSocket для real-time уведомлений

15. Пользовательский интерфейс

15.1 Web интерфейс

  • Веб-панель управления для администраторов
  • Dashboard с текущим статусом всех баз
  • История операций с возможностью фильтрации
  • Планировщик задач с графическим интерфейсом

15.2 Мобильное приложение

  • Мобильное приложение для экстренного управления
  • Push уведомления о критических событиях
  • Биометрическая аутентификация

16. Документация и обучение

16.1 Документация

  • OpenAPI/Swagger спецификация для API
  • Интерактивная документация с примерами
  • Руководство по миграции между версиями
  • Best practices для production использования

16.2 Инструменты разработки

  • Docker образы для разработки и тестирования
  • Makefile для автоматизации сборки
  • Pre-commit hooks для проверки качества кода
  • Benchmark тесты для оценки производительности

Технические ограничения

17. Совместимость

  • Go версия: 1.24+
  • 1С:Предприятие: 8.3.x
  • Операционные системы: Windows, Linux, macOS
  • Архитектуры: amd64, arm64

18. Зависимости

  • Минимальное количество внешних зависимостей
  • Использование только стабильных и поддерживаемых библиотек
  • Регулярное обновление зависимостей для безопасности

19. Производительность

  • Время отклика: < 5 секунд для стандартных операций
  • Потребление памяти: < 100MB в runtime
  • CPU использование: < 10% при нормальной нагрузке
  • Concurrent операции: до 10 одновременных операций

Критерии приемки

20. Функциональные критерии

  • Успешное включение/выключение сервисного режима
  • Корректная верификация операций
  • Принудительное отключение пользователей
  • Маскирование паролей в логах
  • Retry-логика при сбоях

21. Качественные критерии

  • Покрытие unit тестами > 80%
  • Успешное прохождение интеграционных тестов
  • Отсутствие критических уязвимостей безопасности
  • Соответствие Go coding standards
  • Полная документация API

22. Операционные критерии

  • Стабильная работа в production окружении
  • Корректная обработка всех типов ошибок
  • Информативное логирование для диагностики
  • Возможность мониторинга состояния приложения

Заключение

Проект GitOps RAC представляет собой зрелое решение для автоматизации управления сервисным режимом 1С:Предприятие. Текущая реализация покрывает основные потребности и следует лучшим практикам разработки на Go.

Предложенные улучшения позволят расширить функциональность для enterprise использования, улучшить операционные характеристики и интегрироваться с современными DevOps практиками.

Приоритизация улучшений должна основываться на конкретных потребностях пользователей и доступных ресурсах для разработки.