CLI-утилита для отслеживания событий в GitLab с push-уведомлениями.
- Отслеживание событий во всех проектах GitLab
- Поддержка коммитов, Merge Requests, Issues, Pipeline и комментариев
- Кроссплатформенные push-уведомления с правильным стекированием
- Работа в режиме демона или однократный запуск
- Унифицированная система кэширования для предотвращения дублирования уведомлений
- Асинхронный режим для улучшенной производительности
- Python 3.9+
- GitLab personal access token
Для конечных пользователей:
git clone https://github.com/CoOre/glping.git
cd glping
make prod-setupДля разработчиков:
git clone https://github.com/CoOre/glping.git
cd glping
make dev-setupgit clone https://github.com/CoOre/glping.git
cd glping
pip install -e .pip install -r requirements.txt# Установка пакета в системную директорию
pip install -e .Для правильной работы уведомлений на macOS установите terminal-notifier:
# Через Homebrew
brew install terminal-notifier
# Или вручную
curl -L https://github.com/julienXX/terminal-notifier/releases/download/2.0.0/terminal-notifier-2.0.0.zip -o terminal-notifier.zip
unzip terminal-notifier.zip
sudo cp terminal-notifier-2.0.0/terminal-notifier.app/Contents/MacOS/terminal-notifier /usr/local/bin/- Скопируйте файл конфигурации:
cp .env.example .env- Отредактируйте
.envфайл:
GITLAB_URL=https://gitlab.example.com
GITLAB_TOKEN=your_private_token_here
CHECK_INTERVAL=60
CACHE_FILE=glping_cache.json- Создайте GitLab personal access token:
- Перейдите в Settings → Access Tokens
- Создайте токен с правами
read_apiиread_repository
# Запуск в режиме демона (по умолчанию)
glping
# Однократная проверка
glping --once
# Запуск с детальным логированием
glping --verbose
# Изменить интервал проверки
glping --interval 120
# Отслеживать только конкретный проект
glping --project 12345
# Сбросить кеш
glping --reset-cache
# Тестовое уведомление
glping --test-notification
# Тест стекирования уведомлений
glping --test-stacking# Мониторинг всех проектов с интервалом 30 секунд
glping --daemon --interval 30 --verbose
# Проверка конкретного проекта один раз
glping --once --project 12345 --verbose
# Тестирование уведомлений
glping --test-notification
# Тестирование стекирования уведомлений
glping --test-stackingДля macOS рекомендуется использовать встроенную систему launchd вместо crontab:
# Быстрая настройка
./launchd_setup.sh
# Проверить статус
launchctl list | grep glping
# Посмотреть логи
tail -f ~/glping/logs/glping.logПреимущества launchd:
- ✅ Идеальные уведомления без "редактора скриптов"
- ✅ Автоматический перезапуск при сбоях
- ✅ Встроенное логирование
- ✅ Нативный для macOS
Для использования в crontab указывайте полный путь к команде:
# Редактирование crontab
crontab -e
# Добавить строку (используйте полный путь):
* * * * * /usr/local/bin/glping --async --optimized --once --verbose >> ~/glping.log 2>&1Важно: crontab использует ограниченное окружение, поэтому уведомления могут появляться "от редактора скриптов". Для правильных уведомлений используйте launchd.
# Запустить сервис
launchctl start com.glping.daemon
# Остановить сервис
launchctl stop com.glping.daemon
# Перезапустить сервис
launchctl kickstart -k gui/$(id -u)/com.glping.daemon
# Удалить сервис
./launchd_cleanup.sh
# Просмотр логов
tail -f ~/glping/logs/glping.log
tail -f ~/glping/logs/glping.error.logMakefile предоставляет удобные скрипты для установки и управления:
# Показать доступные команды
make help
# Проверить системные требования
make check-reqs
# Установка для конечных пользователей
make prod-setup
# Установка для разработчиков
make dev-setup
# Запустить все тесты
make test
# Тестировать уведомления
make test-notif
# Тестировать стекирования уведомлений
make test-stacking
# Удалить приложение
make uninstall
# Очистить артефакты сборки
make clean- Коммиты - новые коммиты и сообщения
- Merge Requests - создание, обновление, комментарии, закрытие, мёрдж
- Issues - создание, комментарии, закрытие, reopen
- Pipeline - успешное выполнение и падение
- Комментарии - ко всем сатегориям сущностей
glping/
├── __init__.py # Пакетная информация и версия
├── main.py # Точка входа CLI
├── config.py # Конфигурация из .env
├── cache.py # Унифицированная система кэширования
├── lock.py # Утилиты файловой блокировки
├── base_gitlab_api.py # Базовый класс GitLab API
├── base_watcher.py # Базовый класс наблюдателя
├── gitlab_api.py # Синхронная обёртка для GitLab API
├── async_gitlab_api.py # Асинхронная обёртка для GitLab API
├── notifier.py # Push-уведомления с поддержкой стекирования
├── optimized_notifier.py # Оптимизированные уведомления
├── watcher.py # Синхронная основная логика
├── async_watcher.py # Асинхронная основная логика
├── assets/ # Ресурсы приложения
│ ├── glping-icon.png # Основная иконка
│ ├── glping-icon-128.png # Иконка 128px
│ └── glping-icon-256.png # Иконка 256px
├── utils/ # Утилиты
│ ├── __init__.py # Пакет утилит
│ ├── date_utils.py # Работа с датами и временем
│ ├── event_utils.py # Обработка событий
│ └── url_utils.py # Обработка URL
├── requirements.txt # Зависимости
├── setup.py # Установка пакета
├── pyproject.toml # Современная конфигурация проекта
├── .env.example # Пример конфигурации
├── com.glping.daemon.plist # launchd конфигурация для macOS
├── launchd_setup.sh # Скрипт настройки launchd
├── launchd_cleanup.sh # Скрипт очистки launchd
└── ~/glping/logs/ # Директория для логов launchd
- Базовые классы:
BaseGitLabApiиBaseWatcherобеспечивают переиспользование кода - Утилиты: Модуль
utilsсодержит функции для работы с датами, событиями и URL - Асинхронная поддержка: Полная поддержка асинхронных операций для улучшенной производительности
- Оптимизированные уведомления: Умная система фильтрации и стекирования уведомлений
Утилита использует унифицированный JSON файл (glping_cache.json) для хранения:
- Метаданных (дата установки, время последней проверки)
- ID последнего обработанного события для каждого проекта
- Времени последней активности проектов
Это предотвращает дублирование уведомлений и позволяет отслеживать только новые события. Система автоматически мигрирует данные из старых форматов кэша.
Поддерживаются кроссплатформенные уведомления:
- macOS - системные уведомления с правильным стекированием через terminal-notifier
- Linux - notify2/libnotify с автоматическим определением DISPLAY
- Windows - win10toast
- Стекирование уведомлений на macOS - все уведомления остаются видимыми
- Уникальные группы для каждого уведомления предотвращают замену
- Поддержка URL - при клике на уведомление открывается соответствующая страница в GitLab
- Кроссплатформенность - единый API для всех операционных систем
- Умное определение окружения - автоматически адаптируется для cron/launchd
- Оптимизация для macOS - в cron окружении использует Finder вместо Terminal
Используйте launchd вместо crontab:
./launchd_setup.shУбедитесь что установлен notify2:
pip install notify2
sudo apt-get install libnotify-binpython -m glping.main --once --verbose# Тестирование уведомлений
python -m glping.main --test-notification
# Тестирование стекирования уведомлений
python tests/test_notification_stacking.py
# Тестирование подключения
python -m glping.main --once --verbose
# Запуск всех тестов
make testMIT License - Copyright (c) 2025 Vladimir Nosov
./launchd_cleanup.sh# 1. Сохраните текущую crontab
crontab -l > crontab_backup.txt
# 2. Удалите glping из crontab
crontab -e
# Удалите строку с glping
# 3. Настройте launchd
./launchd_setup.sh
# 4. Проверьте работу
tail -f ~/glping/logs/glping.logVladimir Nosov inosovvv@gmail.com
https://github.com/CoOre/glping
- LAUNCHD_SETUP.md - Подробная инструкция по настройке launchd
- DEVELOPMENT.md - Руководство для разработчиков
- CONTRIBUTING.md - Как внести вклад в проект
- CHANGELOG.md - Список изменений
- ARCHITECTURE.md - Архитектура проекта
pip install glpingГотовые бинарные файлы доступны в релизах GitHub:
glping-linux- для Linuxglping-macos- для macOSglping-windows.exe- для Windows