feat(reliability): supervisor sampling, event feed, boot marker

This commit is contained in:
2026-08-22 13:41:49 -06:00
parent e329fd2a1c
commit 7a27218149
3 changed files with 150 additions and 0 deletions
+33
View File
@@ -139,5 +139,38 @@ class HealthCheckTest(unittest.TestCase):
self.assertIn('pool_disabled', payload)
class SupervisorExtrasTest(unittest.TestCase):
def runTestWith(self): # helper: reuse existing setUp fake_run
pass
def test_mem_percent_math(self):
import tempfile
content = 'MemTotal: 250000 kB\nMemAvailable: 100000 kB\n'
path = tempfile.mktemp()
open(path, 'w').write(content)
self.assertEqual(server._mem_percent(path), 60)
def test_health_reports_events_and_counters(self):
import mk8_events
mk8_events.log_event('restart', msg='x')
status, h = server.h_health(None)
self.assertEqual(status, 200)
self.assertIn('events', h)
self.assertIn('boots', h['reliability'])
def test_boot_marker_detects_unexpected(self):
import mk8_events, tempfile, os
marker = tempfile.mktemp()
old = server.BOOT_MARKER
server.BOOT_MARKER = marker
try:
open(marker, 'w').write('0')
self.assertTrue(server.check_boot_marker())
os.unlink(marker)
self.assertFalse(server.check_boot_marker())
finally:
server.BOOT_MARKER = old
if __name__ == '__main__':
unittest.main()
+63
View File
@@ -0,0 +1,63 @@
import os
import sys
import unittest
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'payload',
'user', 'remote_access', 'pager-webui'))
import server
def setUpModule():
__import__('importlib').reload(server)
class ReliabilityApiTest(unittest.TestCase):
def setUp(self):
self.runs = []
self.old_device_run = server.device_run
server._health.update({
'sigsegv_last': None, 'last_fix': 0.0, 'fixes': 0,
'last_action': None, 'pineap_up': False, 'monitor_fixes': 0})
def fake_run(args, timeout=20, input_data=None):
self.runs.append((list(args), timeout))
return (0, '', '')
server.device_run = fake_run
def tearDown(self):
server.device_run = self.old_device_run
def test_h_health_exposes_reliability_feed(self):
status, h = server.h_health(None)
self.assertEqual(status, 200)
for key in ('reliability', 'events', 'guard'):
self.assertIn(key, h)
for counter in ('boots', 'unexpected_boots', 'rollbacks',
'restarts', 'guard_fixes'):
self.assertIn(counter, h['reliability'])
self.assertIsInstance(h['events'], list)
self.assertIn('in_sync', h['guard'])
self.assertIn('pool_size', h['guard'])
def test_check_boot_marker_uses_module_marker_path(self):
import tempfile
marker = tempfile.mktemp()
old = server.BOOT_MARKER
server.BOOT_MARKER = marker
try:
if os.path.exists(marker):
os.unlink(marker)
self.assertFalse(server.check_boot_marker())
self.assertTrue(os.path.exists(marker),
'check_boot_marker must use server.BOOT_MARKER')
open(marker, 'w').write('0')
self.assertTrue(server.check_boot_marker())
finally:
if os.path.exists(marker):
os.unlink(marker)
server.BOOT_MARKER = old
if __name__ == '__main__':
unittest.main()