2026-10-11 20:57:42 +08:00
|
|
|
import sys
|
|
|
|
|
import unittest
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
from unittest.mock import patch
|
|
|
|
|
sys.path.insert(0,str(Path(__file__).resolve().parents[1]/'plugin'))
|
|
|
|
|
import worker
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MetricsTests(unittest.TestCase):
|
|
|
|
|
def test_existing_agent_fields_become_standard_history_metrics(self):
|
|
|
|
|
value = {'timestamp': 123, 'machine': {'name':'Pi'}, 'system': {
|
|
|
|
|
'cpu_percent': 10, 'memory_total_bytes': 8000, 'memory_used_bytes': 4000,
|
|
|
|
|
'disk_total_bytes': 16000, 'disk_used_bytes': 5000},
|
2026-10-15 00:35:02 +08:00
|
|
|
'uptime_seconds': 1000, 'network': {'observed_at':120,'link_speed_mbps':1000,'rx_bytes_per_second':0,'tx_bytes_per_second':1234},
|
2026-10-11 20:57:42 +08:00
|
|
|
'display': {'alerts': []}}
|
|
|
|
|
with patch.object(worker,'request',return_value=value): result=worker.collect({})
|
|
|
|
|
values = {m['key']:m['value'] for m in result['metrics']}
|
|
|
|
|
self.assertEqual(values['memory_used_bytes'],4000)
|
|
|
|
|
self.assertEqual(values['uptime_seconds'],1000)
|
|
|
|
|
self.assertEqual(values['network_link_speed_mbps'],1000)
|
2026-10-14 23:43:41 +08:00
|
|
|
self.assertEqual(values['network_rx_bytes_per_second'],0)
|
|
|
|
|
self.assertEqual(values['network_tx_bytes_per_second'],1234)
|
2026-10-15 00:35:02 +08:00
|
|
|
self.assertEqual(next(m['observed_at'] for m in result['metrics'] if m['key']=='network_tx_bytes_per_second'),120)
|
2026-10-15 09:13:50 +08:00
|
|
|
self.assertEqual(result['collection']['interval_seconds'],1)
|
2026-10-11 20:57:42 +08:00
|
|
|
self.assertTrue(result['alerts_complete'])
|
|
|
|
|
|
2026-10-15 01:00:13 +08:00
|
|
|
def test_collection_minimum_and_slower_device(self):
|
2026-10-15 09:13:50 +08:00
|
|
|
self.assertEqual(worker.collection_interval({'collection':{'interval_seconds':1}}),1)
|
2026-10-15 01:00:13 +08:00
|
|
|
self.assertEqual(worker.collection_interval({'collection':{'interval_seconds':5}}),5)
|
2026-10-15 09:13:50 +08:00
|
|
|
self.assertEqual(worker.collection_interval({'collection':{'interval_seconds':True}}),1)
|
2026-10-15 01:00:13 +08:00
|
|
|
|
2026-10-11 20:57:42 +08:00
|
|
|
def test_absent_or_boolean_fields_not_invented(self):
|
2026-10-14 23:43:41 +08:00
|
|
|
value={'system': {'cpu_percent': True}, 'machine':{}, 'network': {'link_speed_mbps': None, 'rx_bytes_per_second':float('nan'), 'tx_bytes_per_second':True}}
|
2026-10-11 20:57:42 +08:00
|
|
|
with patch.object(worker,'request',return_value=value): result=worker.collect({})
|
|
|
|
|
self.assertEqual(result['metrics'],[])
|
|
|
|
|
|
|
|
|
|
if __name__=='__main__': unittest.main()
|