Files
morele_scraper/utils/monitor.py
2025-06-18 21:22:55 +03:00

61 lines
2.4 KiB
Python

# utils/monitor.py
"""
Система мониторинга парсера
"""
import psutil
import time
import json
from datetime import datetime
from pathlib import Path
class SystemMonitor:
"""Мониторинг системных ресурсов"""
def __init__(self, log_file='logs/monitoring.log'):
self.log_file = Path(log_file)
self.log_file.parent.mkdir(exist_ok=True)
def get_system_stats(self):
"""Получает статистику системы"""
stats = {
'timestamp': datetime.now().isoformat(),
'cpu_percent': psutil.cpu_percent(interval=1),
'memory_percent': psutil.virtual_memory().percent,
'disk_usage': psutil.disk_usage('/').percent,
'network_io': dict(psutil.net_io_counters()._asdict()) if hasattr(psutil, 'net_io_counters') else {},
'process_count': len(psutil.pids())
}
return stats
def log_stats(self):
"""Записывает статистику в лог"""
stats = self.get_system_stats()
with open(self.log_file, 'a', encoding='utf-8') as f:
f.write(json.dumps(stats, ensure_ascii=False) + '\n')
def check_disk_space(self, warning_threshold=80, critical_threshold=90):
"""Проверяет свободное место на диске"""
disk_usage = psutil.disk_usage('/').percent
if disk_usage >= critical_threshold:
return 'critical', f"Критически мало места на диске: {disk_usage}%"
elif disk_usage >= warning_threshold:
return 'warning', f"Мало места на диске: {disk_usage}%"
else:
return 'ok', f"Место на диске: {disk_usage}%"
def check_memory_usage(self, warning_threshold=80, critical_threshold=90):
"""Проверяет использование памяти"""
memory_usage = psutil.virtual_memory().percent
if memory_usage >= critical_threshold:
return 'critical', f"Критически высокое использование памяти: {memory_usage}%"
elif memory_usage >= warning_threshold:
return 'warning', f"Высокое использование памяти: {memory_usage}%"
else:
return 'ok', f"Использование памяти: {memory_usage}%"