Skip to content

Commit c825c04

Browse files
committed
feat(statuspal): also detect 'emergency-maintenance' state
1 parent 466f806 commit c825c04

File tree

4 files changed

+780
-2
lines changed

4 files changed

+780
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Build, CI/CD:
1717
Monitoring Plugins:
1818

1919
* nextcloud-enterprise: provides information about an installed Nextcloud Enterprise subscription
20+
* statuspal: also detect 'emergency-maintenance' state
2021
* valkey-status: support user and password credentials, fix tls connection [PR #954](https://github.com/Linuxfabrik/monitoring-plugins/pull/954), thanks to [Claudio Kuenzler](https://github.com/Napsty)
2122

2223

check-plugins/statuspal/statuspal

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ except ImportError as e:
3232

3333

3434
__author__ = 'Linuxfabrik GmbH, Zurich/Switzerland'
35-
__version__ = '2025100601'
35+
__version__ = '2025101701'
3636

3737
DESCRIPTION = """Statuspal is a status page provider from Germany. This check plugin gets
3838
the summary of a Statuspal status page, checks its status, services,
@@ -154,7 +154,7 @@ def statuspalstate2state(sps):
154154
return STATE_OK
155155
if sps == 'minor' or sps == 'performance':
156156
return STATE_WARN
157-
if sps == 'major':
157+
if sps == 'major' or sps == 'emergency-maintenance':
158158
return STATE_CRIT
159159
return STATE_UNKNOWN
160160

check-plugins/statuspal/unit-test/run

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,102 @@ class TestCheck(unittest.TestCase):
338338
self.assertIn('HR-ZAG-1.Object Storage SOS ! [OK]', stdout)
339339
self.assertEqual(retc, STATE_WARN)
340340

341+
def test_if_check_runs_EXAMPLE08(self):
342+
stdout, stderr, retc = lib.base.coe(lib.shell.shell_exec(self.check + ' --test=stdout/EXAMPLE08,,0'))
343+
self.assertIn('Ongoing maintenance since 2025-10-17 11:44:56: [AT-VIE-2] Network Maintenance - Core Router Upgrade from 2025-10-17 14:00 to 2025-10-17 16:00', stdout)
344+
self.assertIn('Major incidents @ Exoscale (exoscale.com, TZ Europe/Zurich)', stdout)
345+
self.assertIn('Service ! State ', stdout)
346+
self.assertIn('-----------------------------------------------+-----------', stdout)
347+
self.assertIn('Global.DNS ! [OK] ', stdout)
348+
self.assertIn('Global.Portal ! [OK] ', stdout)
349+
self.assertIn('Global.Support Hotline ! [OK] ', stdout)
350+
self.assertIn('CH-GVA-2 ! [OK] ', stdout)
351+
self.assertIn('CH-GVA-2.API ! [OK] ', stdout)
352+
self.assertIn('CH-GVA-2.Block Storage ! [OK] ', stdout)
353+
self.assertIn('CH-GVA-2.Compute ! [OK] ', stdout)
354+
self.assertIn('CH-GVA-2.Managed Database service DBaaS ! [OK] ', stdout)
355+
self.assertIn('CH-GVA-2.Managed Private Networks ! [OK] ', stdout)
356+
self.assertIn('CH-GVA-2.Managed Kubernetes SKS ! [OK] ', stdout)
357+
self.assertIn('CH-GVA-2.Network Internet Transit Connectivity ! [OK] ', stdout)
358+
self.assertIn('CH-GVA-2.Network Load Balancer NLB ! [OK] ', stdout)
359+
self.assertIn('CH-GVA-2.Object Storage SOS ! [OK] ', stdout)
360+
self.assertIn('CH-DK-2 ! [OK] ', stdout)
361+
self.assertIn('CH-DK-2.API ! [OK] ', stdout)
362+
self.assertIn('CH-DK-2.Block Storage ! [OK] ', stdout)
363+
self.assertIn('CH-DK-2.Compute ! [OK] ', stdout)
364+
self.assertIn('CH-DK-2.Managed Database service DBaaS ! [OK] ', stdout)
365+
self.assertIn('CH-DK-2.Managed Kubernetes SKS ! [OK] ', stdout)
366+
self.assertIn('CH-DK-2.Managed Private Networks ! [OK] ', stdout)
367+
self.assertIn('CH-DK-2.Network Internet Transit Connectivity ! [OK] ', stdout)
368+
self.assertIn('CH-DK-2.Network Load Balancer NLB ! [OK] ', stdout)
369+
self.assertIn('CH-DK-2.Object Storage SOS ! [OK] ', stdout)
370+
self.assertIn('DE-FRA-1 ! [OK] ', stdout)
371+
self.assertIn('DE-FRA-1.API ! [OK] ', stdout)
372+
self.assertIn('DE-FRA-1.Block Storage ! [OK] ', stdout)
373+
self.assertIn('DE-FRA-1.Compute ! [OK] ', stdout)
374+
self.assertIn('DE-FRA-1.Managed Database service DBaaS ! [OK] ', stdout)
375+
self.assertIn('DE-FRA-1.Managed Kubernetes SKS ! [OK] ', stdout)
376+
self.assertIn('DE-FRA-1.Managed Private Networks ! [OK] ', stdout)
377+
self.assertIn('DE-FRA-1.Network Internet Transit Connectivity ! [OK] ', stdout)
378+
self.assertIn('DE-FRA-1.Network Load Balancer NLB ! [OK] ', stdout)
379+
self.assertIn('DE-FRA-1.Object Storage SOS ! [OK] ', stdout)
380+
self.assertIn('DE-MUC-1 ! [OK] ', stdout)
381+
self.assertIn('DE-MUC-1.API ! [OK] ', stdout)
382+
self.assertIn('DE-MUC-1.Compute ! [OK] ', stdout)
383+
self.assertIn('DE-MUC-1.Managed Database service DBaaS ! [OK] ', stdout)
384+
self.assertIn('DE-MUC-1.Managed Kubernetes SKS ! [OK] ', stdout)
385+
self.assertIn('DE-MUC-1.Managed Private Networks ! [OK] ', stdout)
386+
self.assertIn('DE-MUC-1.Network Internet Transit Connectivity ! [OK] ', stdout)
387+
self.assertIn('DE-MUC-1.Network Load Balancer NLB ! [OK] ', stdout)
388+
self.assertIn('DE-MUC-1.Object Storage SOS ! [OK] ', stdout)
389+
self.assertIn('AT-VIE-1 ! [OK] ', stdout)
390+
self.assertIn('AT-VIE-1.API ! [OK] ', stdout)
391+
self.assertIn('AT-VIE-1.Block Storage ! [OK] ', stdout)
392+
self.assertIn('AT-VIE-1.Compute ! [OK] ', stdout)
393+
self.assertIn('AT-VIE-1.Managed Database service DBaaS ! [OK] ', stdout)
394+
self.assertIn('AT-VIE-1.Managed Kubernetes SKS ! [OK] ', stdout)
395+
self.assertIn('AT-VIE-1.Managed Private Networks ! [OK] ', stdout)
396+
self.assertIn('AT-VIE-1.Network Internet Transit Connectivity ! [OK] ', stdout)
397+
self.assertIn('AT-VIE-1.Network Load Balancer NLB ! [OK] ', stdout)
398+
self.assertIn('AT-VIE-1.Object Storage SOS ! [OK] ', stdout)
399+
self.assertIn('AT-VIE-2 ! [OK] ', stdout)
400+
self.assertIn('AT-VIE-2.API ! [CRITICAL]', stdout)
401+
self.assertIn('AT-VIE-2.Block Storage ! [CRITICAL]', stdout)
402+
self.assertIn('AT-VIE-2.Compute ! [CRITICAL]', stdout)
403+
self.assertIn('AT-VIE-2.Managed Database service DBaaS ! [CRITICAL]', stdout)
404+
self.assertIn('AT-VIE-2.Managed Kubernetes SKS ! [CRITICAL]', stdout)
405+
self.assertIn('AT-VIE-2.Managed Private Networks ! [CRITICAL]', stdout)
406+
self.assertIn('AT-VIE-2.Network Internet Transit Connectivity ! [CRITICAL]', stdout)
407+
self.assertIn('AT-VIE-2.Network Load Balancer NLB ! [CRITICAL]', stdout)
408+
self.assertIn('AT-VIE-2.Object Storage SOS ! [CRITICAL]', stdout)
409+
self.assertIn('BG-SOF-1 ! [CRITICAL]', stdout)
410+
self.assertIn('BG-SOF-1.API ! [OK] ', stdout)
411+
self.assertIn('BG-SOF-1.Block Storage ! [OK] ', stdout)
412+
self.assertIn('BG-SOF-1.Compute ! [OK] ', stdout)
413+
self.assertIn('BG-SOF-1.Managed Database service DBaaS ! [OK] ', stdout)
414+
self.assertIn('BG-SOF-1.Managed Kubernetes SKS ! [OK] ', stdout)
415+
self.assertIn('BG-SOF-1.Managed Private Networks ! [OK] ', stdout)
416+
self.assertIn('BG-SOF-1.Network Internet Transit Connectivity ! [OK] ', stdout)
417+
self.assertIn('BG-SOF-1.Network Load Balancer NLB ! [OK] ', stdout)
418+
self.assertIn('BG-SOF-1.Object Storage SOS ! [OK] ', stdout)
419+
self.assertIn('HR-ZAG-1 ! [OK] ', stdout)
420+
self.assertIn('HR-ZAG-1.API ! [OK] ', stdout)
421+
self.assertIn('HR-ZAG-1.Block Storage ! [OK] ', stdout)
422+
self.assertIn('HR-ZAG-1.Compute ! [OK] ', stdout)
423+
self.assertIn('HR-ZAG-1.Managed Database service DBaaS ! [OK] ', stdout)
424+
self.assertIn('HR-ZAG-1.Managed Kubernetes SKS ! [OK] ', stdout)
425+
self.assertIn('HR-ZAG-1.Managed Private Networks ! [OK] ', stdout)
426+
self.assertIn('HR-ZAG-1.Network Internet Transit Connectivity ! [OK] ', stdout)
427+
self.assertIn('HR-ZAG-1.Network Load Balancer NLB ! [OK] ', stdout)
428+
self.assertIn('HR-ZAG-1.Object Storage SOS ! [OK] ', stdout)
429+
self.assertIn('Maintenance ! Type ! Start ! End ', stdout)
430+
self.assertIn('-----------------------------------------------------------------------------------------------+-----------------------+---------------------+------------', stdout)
431+
self.assertIn('[AT-VIE-2] Network Maintenance - Core Router Upgrade from 2025-10-17 14:00 to 2025-10-17 16:00 ! emergency-maintenance ! 2025-10-17 11:44:56 ! in progress', stdout)
432+
self.assertIn('Upcoming Maintenance ! Type ! Start ! End ', stdout)
433+
self.assertIn('--------------------------------+-----------+---------------------+--------------------', stdout)
434+
self.assertIn('Datacenter power generator test ! scheduled ! 2025-11-13 21:00:00 ! 2025-11-14 05:00:00', stdout)
435+
self.assertEqual(retc, STATE_CRIT)
436+
341437

342438
if __name__ == '__main__':
343439
unittest.main()

0 commit comments

Comments
 (0)