/
lexis
/
SF_calendar
Обзор
Документация
Войти
/
lexis
/
SF_calendar
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
2
Аналитика
Безопасность
master
scripts/log_monitor.py
102 строки
4 KB
Lexislex
📚 Обновлена документация с новыми функциями
06 сен 2025, 10:20
06 сен 2025, 10:20
e470d9f
Код
Авторство
О чём код?
#!/usr/bin/env python3 """ Скрипт для мониторинга размера логов и отправки уведомлений """ import os import sys import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from datetime import datetime from pathlib import Path # Добавляем путь к корневой директории sys.path.append(os.path.dirname(os.path.dirname(__file__))) def get_logs_dir(): """Получение директории с логами""" return os.path.join(os.path.dirname(os.path.dirname(__file__)), 'logs') def check_log_size(max_size_mb=100): """Проверка размера логов""" logs_dir = get_logs_dir() if not os.path.exists(logs_dir): return False, "Директория логов не найдена" total_size = 0 large_files = [] for file_path in Path(logs_dir).glob("*.log*"): if file_path.is_file(): file_size_mb = file_path.stat().st_size / (1024 * 1024) total_size += file_size_mb if file_size_mb > max_size_mb: large_files.append((file_path.name, file_size_mb)) return total_size > max_size_mb, { 'total_size': total_size, 'large_files': large_files, 'max_size': max_size_mb } def send_notification(message, subject="SF Calendar Bot - Log Alert"): """Отправка уведомления (заглушка)""" # Здесь можно добавить отправку в Telegram, email или другой сервис print(f"ALERT: {subject}") print(f"Message: {message}") # Пример отправки в Telegram (если настроен) # import requests # bot_token = os.getenv('BOT_TOKEN') # admin_id = os.getenv('ADMIN_ID') # if bot_token and admin_id: # url = f"https://api.telegram.org/bot{bot_token}/sendMessage" # data = { # 'chat_id': admin_id, # 'text': f"🚨 {subject}\n\n{message}", # 'parse_mode': 'Markdown' # } # requests.post(url, data=data) def main(): max_size = int(os.getenv('LOG_MAX_TOTAL_SIZE', '100')) # MB is_over_limit, details = check_log_size(max_size) if is_over_limit: message = f""" 📊 **Статистика логов SF Calendar Bot** ⚠️ **ПРЕВЫШЕН ЛИМИТ РАЗМЕРА ЛОГОВ** 📈 **Общий размер:** {details['total_size']:.2f} MB 🚫 **Лимит:** {details['max_size']} MB 📅 **Время проверки:** {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} 📁 **Большие файлы:** """ for filename, size in details['large_files']: message += f"• {filename}: {size:.2f} MB\n" message += f""" 🔧 **Рекомендации:** 1. Запустить сжатие логов: `python3 scripts/log_manager.py compress` 2. Очистить старые логи: `python3 scripts/log_manager.py clean` 3. Проверить настройки ротации в .env файле 💡 **Автоматическая очистка:** - Сжатие логов старше 7 дней: ежедневно в 2:00 - Удаление логов старше 30 дней: ежедневно в 3:00 """ send_notification(message) return 1 else: print(f"✅ Размер логов в норме: {details['total_size']:.2f} MB / {details['max_size']} MB") return 0 if __name__ == '__main__': exit_code = main() sys.exit(exit_code)