Skip to content

serty2005/goMH

Repository files navigation

goMH - Мультитул для технической поддержки

goMH — это специализированный инструмент для технической поддержки систем автоматизации ресторанов (iiko, Syrve). Программа предоставляет единый CLI/TUI интерфейс для автоматизации рутинных задач: установки ПО, настройки оборудования, диагностики и управления удаленным доступом в среде Windows.

Назначение

Проект призван заменить разрозненные скрипты (bat/ps1) и ручные действия инженеров внедрения и поддержки. Все операции выполняются через интерактивное меню с автоматическим контролем ошибок и логированием.

Основные возможности

  • Дистрибутивы: Установка iiko и Syrve (Front, Back, Chain). Поддержка Portable-версий и Патчей.
  • Плагины: Интеллектуальная установка плагинов iikoFront с проверкой совместимости API.
  • Диагностика: Сбор логов (включая вложенные архивы), tail -f для логов, очистка временных файлов.
  • Периферия: Настройка сканеров ШК через виртуальные COM-порты (VComCaster).
  • Утилиты: Запуск и автоматическое скачивание OrderCheck и FrontTools.
  • Оборудование: Установка драйверов ФР (Атол, Штрих, Poscenter) с умной очисткой старых версий.
  • Сеть: Настройка проброса портов через FRPC с автоматическим поиском свободных портов на сервере.
  • Удаленный доступ: Установка TeamViewer (Host), LiteManager, агента сбора данных ФР (POSRelayd).

Automation CLI

В проекте появился стабильный non-interactive режим для внешнего запуска из saga/adapters:

goMH.exe automation run --request .\request.json
Get-Content .\request.json | goMH.exe automation run --stdin
goMH.exe automation list-operations

Ключевые свойства режима:

  • stdout содержит только финальный JSON response.
  • stderr содержит только диагностические/status-сообщения.
  • automation слой использует существующие app/modruntime и taskqueue.
  • поддерживаются dry_run, timeout_seconds, working_dir, root_override и machine-readable task log.

Подробная спецификация контракта, примеры request/response и exit codes описаны в документе docs/automation-cli.md.


Runtime И Очередь

После рефакторинга приложение использует единый runtime для GUI и TUI:

  • taskqueue — единая очередь задач, статусов, прогресса и task-логов.
  • app/modruntime — общий слой выполнения модулей с привязкой AssetManager и WinUtils к TaskContext.
  • logstream — отдельный параллельный механизм для просмотра логов; это больше не частный случай queue-задачи.
  • core.QueueModule — единый контракт модуля: конфигурация, построение плана, выполнение.

Коротко по режимам:

  • постановка задачи из TUI и GUI идет через один и тот же modruntime.Service;
  • queue-задачи пишут прогресс и строки в task-log, доступный обоим интерфейсам;
  • просмотр лога может работать отдельно от очереди: в stdout или в task-контекст;
  • завершение задач и их статусы пишутся в общий лог утилиты через пакет logging.

Модули программы

1. Дистрибутивы (iiko & Syrve)

Модуль для работы с продуктами iiko и Syrve.

  • Источники:
    • Официальные: Скачивание релизных версий с официальных источников iiko и Syrve.
    • Portable: Загрузка портативных версий (ZIP) с внутреннего FTP/HTTP источника.
  • Portable-режим:
    • Автоматическая распаковка архивов (с учетом вложенности).
    • Создание ярлыка на рабочем столе с ключом /AdditionalTmpFolder.
  • Система патчинга (iikoFront):
    • Автоматический поиск доступных патчей для установленной версии.
    • Восстановление существующего бэкапа перед установкой.
    • Бэкапирование заменяемых файлов.
    • Откат изменений при ошибках.

2. Управление плагинами (iiko-plugins)

Установка и обновление плагинов для iikoFront.

  • Манифест: Загружает JSON-манифест доступных плагинов. Манифест генерируется скриптом ежедневного опроса ресурса патчей.
  • Совместимость: Фильтрует плагины, проверяя совместимость их ApiVersion с установленной версией iikoFront.
  • Автообновление: При установке iikoFront модуль может автоматически обновить критические плагины (например, SberbankPlugin, DualConnector) до актуальных версий, сохраняя конфиги.

3. VComCaster (Сканеры ШК)

Комплексная настройка сканеров штрих-кодов в режим эмуляции COM-порта.

  • Драйвер com0com: Автоматическая установка и создание виртуальной пары портов.
  • Детекция оборудования: Сканирование USB-шин для поиска подключенных сканеров.
  • Генерация конфига: Создание config.ini для маппинга физического устройства на виртуальный порт.
  • Интеграция с iiko: Автоматическая правка config.xml iikoFront (прописывание порта сканера), если процесс iikoFront не запущен.
  • Автозапуск: Создание задачи в Планировщике Windows на автозапуск при старте компьютера.

4. FRPC (Туннелирование)

Клиент для быстрого проброса портов (Fast Reverse Proxy).

  • API-интеграция: Обращается к серверу FRPS для поиска свободных портов в заданном диапазоне.
  • Служба Windows: Установка через NSSM с настройкой автозапуска.
  • Конфигурация: Автоматическая генерация frpc.ini с уникальными именами секций.

5. Фискальные драйверы (FiscalDrivers)

Установка драйверов ККТ.

  • Universal Driver Installer: Для драйверов Poscenter и KKTlab (Штрих) реализован алгоритм предварительного поиска и тихого удаления старых версий во избежание конфликтов.
  • Атол: Стандартная тихая установка ДТО 10.

6. Утилиты обслуживания (ServiceUtils)

Набор инструментов для диагностики.

  • Log Collector:
    • Сбор логов за последние N дней.
    • Умный поиск: сканирует не только текстовые файлы, но и распаковывает вложенные архивы (.zip, .gz, .7z) для проверки даты изменения файлов внутри них.
  • Temp Cleaner: Очистка временных файлов по маскам путей.
  • Live Log: Просмотр логов в реальном времени (аналог tail -f).
  • OrderCheck & FrontTools:
    • Утилиты не зашиты в сборку, а скачиваются через AssetManager при первом обращении.
    • Автоматическое определение типа БД iikoFront (.sdf или .db) и выбор соответствующей версии FrontTools.
    • Для OrderCheck автоматическое нахождение БД Алкоплагина и предложение пользователю что открыть.

7. Удаленный доступ

  • TeamViewer: Получение динамической ссылки (Custom Design) через API TeamViewer.
  • POSRelayd Agent: Установка агента сбора данных ФР, настройка службы и триггеров запуска.
  • LiteManager: Тихая установка MSI.

8. Regime

Модуль для работы с системой Честный Знак (локальный компонент).

  • Проверка наличия .NET Framework 4.8.
  • Автоматическая установка .NET 4.8 при отсутствии.
  • Тихая установка/обновление MSI пакета Regime.

Установка и запуск

Требования

  • ОС: Windows 10/11 (x64/x86).
  • Права: Запуск от имени администратора обязателен.
  • Интернет: Необходим для загрузки конфига и дистрибутивов.

Конфигурация (config.json)

При запуске программа ищет config.json рядом с исполняемым файлом. Если он не найден — скачивает актуальный конфиг с центрального сервера.

Пример структуры конфига:

{
  "root_path": "C:\\MH",
  "logging": {
    "level": "INFO",
    "file_enabled": true
  },
  "self_update_config": {
    "enabled": true,
    "reference_url": "https://server.com/goMH.exe",
    "hash_url": "https://server.com/goMH.md5"
  },
  "modules": [ {"id": "iiko"}, {"id": "VComCaster"} ],
  "asset_catalog": { ... }
}

Самообновление

При запуске goMH проверяет наличие новой версии на сервере (сравнивая MD5-хеш). Если доступно обновление, программа автоматически скачивает новый EXE-файл, выполняет безопасную подмену и перезапускается.



Конфигурация (config.json)

Программа полностью управляется через файл config.json. Это позволяет менять ссылки на дистрибутивы, добавлять новые драйверы и настраивать пути без пересборки приложения.

Актуальный раздел логирования:

"logging": {
  "level": "INFO",
  "file_enabled": true
}

Переходная совместимость:

  • log_level все еще читается как legacy-алиас для logging.level;
  • если logging.file_enabled не задан, файловый лог включен по умолчанию;
  • общий лог пишется в goMH.log рядом с исполняемым файлом.

Логика загрузки

При запуске goMH.exe ищет конфигурацию в следующем приоритете:

  1. Аргумент командной строки: goMH.exe -config="my_custom_config.json"
  2. Локальный файл: Файл config.json, лежащий рядом с исполняемым файлом.
  3. Удаленный сервер (Default): Если локального файла нет, программа автоматически скачивает актуальную конфигурацию с:
    http://f.serty.top/distr/installer/config.json

Структура файла конфигурации

{
  "root_path": "C:\\MH",               // Корневая папка для работы (логи, временные файлы)
  "assets_cache_path": "C:\\MH\\_assets", // Папка для кэширования скачанных установщиков
  "logging": {
    "level": "INFO",                   // Уровень детализации логов (debug, info, warn, error)
    "file_enabled": true               // Запись общего лога в goMH.log рядом с exe
  },
  "log_level": "INFO",                 // Legacy-алиас для плавной миграции старых конфигов

  // Настройка самообновления
  "self_update_config": {
    "enabled": true,
    "reference_url": "https://f.serty.top/distr/installer/goMH.exe",
    "hash_url": "https://f.serty.top/distr/installer/goMH.md5"
  },

  // Доступные FTP-серверы (используются для загрузки драйверов и portable-версий)
  "ftp_config": [
    {
      "host": "ftp.example.com",
      "port": 21,
      "user": "user",
      "pass": "pass"
    }
  ],

  // Специфичные настройки дистрибутивов iiko и Syrve
  "distro_config": {
    "iiko": {
      "components": [
				{
					"id": "iiko_rms_back", // Уникальное имя компонента
					"menu_text": "iikoRMS BackOffice", // Текст в меню
					"install_args": "/install /passive", // Аргументы установки
					"run_after": "C:\\Program Files\\iiko\\iikoRMS\\Office\\BackOffice.exe", // Путь для запуска
					"url_template": "https://downloads.iiko.online/{{VERSION}}/iiko/RMS/BackOffice/Setup.RMS.BackOffice.exe", // URL для загрузки офц источник
					"portable_archive_key": "iiko_rms" // Ключ для поиска portable-архива
				}, { ... }],       // Список компонентов (Front, BackOffice)
      "patches_base_url": "https://rapid.iiko.ru/versionPatches"    // URL для поиска патчей
    },
    "syrve": { ... }, // Настройки для Syrve аналогичны iiko
    "iiko_portable_sources": { // Настройки для загрузки portable-версий
			"http_source": { // Отдельный HTTP-источник
				"enabled": true, // Включаем-отключаем
				"url": "https://f.serty.top/iikoBacks", // URL корня для загрузки
				"archive_names": { // Ключ -> Шаблон имени архива
					"iiko_rms": "RMSOffice{{version}}.zip", // Можно указать сложный путь до архива
					"iiko_chain": "ChainOffice{{version}}.zip"
				}
			},
			"ftp_source": { // Отдельный FTP-источник, поля аналогичны
				...
			}
		},
    "excluded_plugins": [ ... ],   // Плагины, которые нужно игнорировать, достаточно фрагмента имени
    "auto_update_plugins": [ ... ] // Части имен плагинов для автообновления
  },

  "TeamViewerConfig": {
		"ShortURL": "http://get.teamviewer.com/organization_url", // короткая ссылка на скачивание актуального дистрибутива
		"ApiURL": "https://get.teamviewer.com/api/CustomDesign"
	},

  // Настройки модуля FRPC (туннелирование)
  "frpc_config": {
    "install_path": "C:\\MH\\FRPC",
    "server_config": {
      "host": "frps.example.com",
      "api_port": 443,
      "tunnel_port": 50005,
      "user": "admin",
      "pass": "secret"
    }
  },

  // Настройки для очистки и сбора логов
  "MaintenanceConfig": { // Каталоги поддерживают wildcard (*)
    "TempPaths": [ "C:\\Windows\\Temp", ... ],
    "LogCollectorPaths": [ "C:\\Users\\*\\AppData\\Roaming\\iiko\\...", ... ]
  },

  // Каталог ресурсов (Asset Manager)
  // Связывает ID ресурса с URL для скачивания
  "asset_catalog": {
    "7zip_installer": {
      "url": "https://.../7z1900-x64.exe",
      "type": "file",
      "download_method": "HTTP" // Можно указать метод загрузки вручную
    },
    "VComCaster_Package": {
      "url": "https://.../vcomcaster.zip",
      "type": "zip",
      "destination": "vcomcaster" // Можно указать куда распаковывать
    }
  },

  // Список драйверов фискальных регистраторов
  "fiscal_drivers_config": [ // Секция для каждого драйвера
    ...
  ]
}

Файл конфигурации config.json по-умолчанию ищется рядом с .exe. Если рядом нет, он загружается с http://f.serty.top/distr/installer/config.json Чувствительных данных на FTP-серверах, указанных в конфигурации быть не должно.


Сборка проекта

Проект написан на Go 1.25.1.

# Установка зависимостей
go mod download

# Сборка (production)
go build -ldflags="-s -w" -o goMH.exe main.go

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

  • main.go: Точка входа, инициализация, главное меню.
  • core/: Интерфейсы (Installer, AssetManager, WinUtils).
  • app/modruntime/: Общий runtime модулей и единая постановка задач.
  • taskqueue/: Очередь выполнения, task-логи, события и отмена.
  • logstream/: Параллельный tail/read механизм для просмотра логов.
  • assetmgr/: Загрузка файлов (HTTP/FTP), кэширование, распаковка (ZIP/7z).
  • winutils/: Системные вызовы (WMI, Registry, Services, Shortcuts).
  • modules/: Реализация бизнес-логики модулей.
  • tui/: Пользовательский интерфейс (меню, прогресс-бары).
  • config/: Структуры конфигурации.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages