Enhance monitoring configuration by adding status update interval and alert delays for CPU, RAM, and disk metrics. Update Makefile to include dependency checks for testing, and modify requirements to include requests library. Refactor message sender and metrics collector for improved logging and alert handling.
This commit is contained in:
@@ -160,57 +160,72 @@ class TestMetricsCollector:
|
||||
assert isinstance(uptime, str)
|
||||
assert 'м' in uptime or 'ч' in uptime or 'д' in uptime
|
||||
|
||||
@patch('metrics_collector.psutil')
|
||||
def test_get_system_info_success(self, mock_psutil, metrics_collector):
|
||||
def test_get_system_info_success(self, metrics_collector):
|
||||
"""Тест получения системной информации"""
|
||||
# Настраиваем моки
|
||||
mock_psutil.cpu_percent.return_value = 25.5
|
||||
mock_psutil.getloadavg.return_value = (1.2, 1.1, 1.0)
|
||||
mock_psutil.cpu_count.return_value = 8
|
||||
|
||||
mock_memory = Mock()
|
||||
mock_memory.used = 8 * (1024**3)
|
||||
mock_memory.total = 16 * (1024**3)
|
||||
mock_psutil.virtual_memory.return_value = mock_memory
|
||||
|
||||
mock_swap = Mock()
|
||||
mock_swap.used = 1 * (1024**3)
|
||||
mock_swap.total = 2 * (1024**3)
|
||||
mock_swap.percent = 50.0
|
||||
mock_psutil.swap_memory.return_value = mock_swap
|
||||
|
||||
mock_disk = Mock()
|
||||
mock_disk.used = 100 * (1024**3)
|
||||
mock_disk.total = 500 * (1024**3)
|
||||
mock_disk.free = 400 * (1024**3)
|
||||
mock_psutil.disk_usage.return_value = mock_disk
|
||||
|
||||
# Мокаем _get_disk_usage чтобы возвращал наш мок
|
||||
with patch.object(metrics_collector, '_get_disk_usage', return_value=mock_disk):
|
||||
mock_disk_io = Mock()
|
||||
mock_disk_io.read_count = 1000
|
||||
mock_disk_io.write_count = 500
|
||||
mock_disk_io.read_bytes = 1024 * (1024**2)
|
||||
mock_disk_io.write_bytes = 512 * (1024**2)
|
||||
mock_psutil.disk_io_counters.return_value = mock_disk_io
|
||||
# Мокаем все необходимые функции psutil
|
||||
with patch('metrics_collector.psutil.cpu_percent', return_value=25.5) as mock_cpu, \
|
||||
patch('metrics_collector.psutil.getloadavg', return_value=(1.2, 1.1, 1.0)) as mock_load, \
|
||||
patch('metrics_collector.psutil.cpu_count', return_value=8) as mock_cpu_count, \
|
||||
patch('metrics_collector.psutil.cpu_times_percent') as mock_cpu_times, \
|
||||
patch('metrics_collector.psutil.virtual_memory') as mock_virtual_memory, \
|
||||
patch('metrics_collector.psutil.swap_memory') as mock_swap_memory, \
|
||||
patch('metrics_collector.psutil.disk_usage') as mock_disk_usage, \
|
||||
patch('metrics_collector.psutil.disk_io_counters') as mock_disk_io, \
|
||||
patch('metrics_collector.psutil.boot_time', return_value=time.time() - 86400) as mock_boot_time, \
|
||||
patch('os.uname') as mock_uname:
|
||||
|
||||
mock_psutil.boot_time.return_value = time.time() - 86400
|
||||
# Настраиваем моки для CPU
|
||||
mock_cpu_times_obj = Mock()
|
||||
mock_cpu_times_obj.iowait = 2.5
|
||||
mock_cpu_times.return_value = mock_cpu_times_obj
|
||||
|
||||
with patch('os.uname') as mock_uname:
|
||||
mock_uname.return_value.nodename = "test-host"
|
||||
|
||||
# Настраиваем моки для памяти
|
||||
mock_memory = Mock()
|
||||
mock_memory.used = 8 * (1024**3)
|
||||
mock_memory.total = 16 * (1024**3)
|
||||
mock_virtual_memory.return_value = mock_memory
|
||||
|
||||
# Настраиваем моки для swap
|
||||
mock_swap = Mock()
|
||||
mock_swap.used = 1 * (1024**3)
|
||||
mock_swap.total = 2 * (1024**3)
|
||||
mock_swap.percent = 50.0
|
||||
mock_swap_memory.return_value = mock_swap
|
||||
|
||||
# Настраиваем моки для диска
|
||||
mock_disk = Mock()
|
||||
mock_disk.used = 100 * (1024**3)
|
||||
mock_disk.total = 500 * (1024**3)
|
||||
mock_disk.free = 400 * (1024**3)
|
||||
mock_disk_usage.return_value = mock_disk
|
||||
|
||||
# Настраиваем моки для disk I/O
|
||||
mock_disk_io_obj = Mock()
|
||||
mock_disk_io_obj.read_count = 1000
|
||||
mock_disk_io_obj.write_count = 500
|
||||
mock_disk_io_obj.read_bytes = 1024 * (1024**2)
|
||||
mock_disk_io_obj.write_bytes = 512 * (1024**2)
|
||||
mock_disk_io.return_value = mock_disk_io_obj
|
||||
|
||||
# Настраиваем мок для hostname
|
||||
mock_uname.return_value.nodename = "test-host"
|
||||
|
||||
# Мокаем _get_disk_usage чтобы возвращал наш мок
|
||||
with patch.object(metrics_collector, '_get_disk_usage', return_value=mock_disk):
|
||||
system_info = metrics_collector.get_system_info()
|
||||
|
||||
assert isinstance(system_info, dict)
|
||||
assert 'cpu_percent' in system_info
|
||||
assert 'ram_percent' in system_info
|
||||
assert 'disk_percent' in system_info
|
||||
assert 'io_wait_percent' in system_info
|
||||
assert 'server_hostname' in system_info
|
||||
|
||||
# Проверяем расчеты
|
||||
assert system_info['cpu_percent'] == 25.5
|
||||
assert system_info['ram_percent'] == 50.0 # 8/16 * 100
|
||||
assert system_info['disk_percent'] == 20.0 # 100/500 * 100
|
||||
assert system_info['io_wait_percent'] == 2.5
|
||||
assert system_info['server_hostname'] == "test-host"
|
||||
|
||||
def test_get_system_info_error(self, metrics_collector):
|
||||
@@ -332,6 +347,13 @@ class TestMetricsCollector:
|
||||
|
||||
def test_check_alerts(self, metrics_collector):
|
||||
"""Тест проверки алертов"""
|
||||
# Сбрасываем состояния алертов для чистого теста
|
||||
metrics_collector.alert_states = {'cpu': False, 'ram': False, 'disk': False}
|
||||
metrics_collector.alert_start_times = {'cpu': None, 'ram': None, 'disk': None}
|
||||
|
||||
# Устанавливаем минимальные задержки для тестов
|
||||
metrics_collector.alert_delays = {'cpu': 0, 'ram': 0, 'disk': 0}
|
||||
|
||||
# Тестируем превышение порога CPU
|
||||
system_info = {
|
||||
'cpu_percent': 85.0, # Выше порога 80.0
|
||||
@@ -402,7 +424,8 @@ class TestMetricsCollectorEdgeCases:
|
||||
"""Тест работы при отсутствии информации о диске"""
|
||||
collector = MetricsCollector()
|
||||
|
||||
with patch.object(collector, '_get_disk_usage', return_value=None):
|
||||
with patch.object(collector, '_get_disk_usage', return_value=None), \
|
||||
patch('metrics_collector.psutil.cpu_percent', side_effect=Exception("Test error")):
|
||||
system_info = collector.get_system_info()
|
||||
assert system_info == {}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user