Skip to content

Commit 6eb2029

Browse files
committed
statuspal: handle incident_type "performance"
1 parent e671fc2 commit 6eb2029

File tree

4 files changed

+746
-7
lines changed

4 files changed

+746
-7
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Monitoring Plugins:
2626
* deb-updates: apt-get returns with an error ([#904](https://github.com/Linuxfabrik/monitoring-plugins/issues/904))
2727
* icinga-topflap-services: prevent stacktrace when required parameters are empty
2828
* openstack-swift-stat: problem with python-keystoneclient, optimize requirements* ([#900](https://github.com/Linuxfabrik/lib/issues/900))
29+
* statuspal: handle incident_type "performance"
2930
* valkey-status|redis-status: improve `--ignore-thp` ([#898](https://github.com/Linuxfabrik/lib/issues/898))
3031

3132

check-plugins/statuspal/statuspal

Lines changed: 10 additions & 7 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__ = '2025062701'
35+
__version__ = '2025071801'
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,
@@ -146,7 +146,10 @@ def concat_values(mydict, hierarchy):
146146
def statuspalstate2state(sps):
147147
"""Convert Statuspal's incident level to the Nagios world.
148148
"""
149-
if sps is None or sps == 'scheduled' or sps == 'info':
149+
if sps is None:
150+
return STATE_OK
151+
sps = sps.lower()
152+
if sps == 'scheduled' or sps == 'info':
150153
return STATE_OK
151154
if sps == 'minor' or sps == 'performance':
152155
return STATE_WARN
@@ -217,8 +220,8 @@ def main():
217220
msg += ': {}'.format(result['incidents'][0]['title'].strip())
218221
if result['incidents'][0]['updates']:
219222
msg += ' / {} ({})'.format(
220-
result['incidents'][0]['updates'][0]['description'],
221-
result['incidents'][0]['updates'][0]['updated_at'].replace('T', ' '),
223+
result['incidents'][0]['updates'][0]['description'].strip(),
224+
result['incidents'][0]['updates'][0]['updated_at'].replace('T', ' ').strip(),
222225
)
223226
msg += ' (see {})'.format(result['incidents'][0]['url']) if result['incidents'][0]['url'] else '' # pylint: disable=C0301
224227

@@ -268,10 +271,10 @@ def main():
268271
header=['Maintenance', 'Type', 'Start', 'End'],
269272
)
270273
# get newest maintenance task
271-
if table_data[2]['starts_at'] <= lib.time.now(as_type='iso'):
274+
if table_data[0]['starts_at'] <= lib.time.now(as_type='iso'):
272275
msg = 'Ongoing maintenance since {}: {}\n{}'.format(
273-
table_data[2]['starts_at'],
274-
table_data[2]['title'],
276+
table_data[0]['starts_at'],
277+
table_data[0]['title'],
275278
msg,
276279
)
277280

check-plugins/statuspal/unit-test/run

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,95 @@ class TestCheck(unittest.TestCase):
249249
self.assertIn('BG-SOF-1.Managed Private Networks ! [OK]', stdout)
250250
self.assertEqual(retc, STATE_OK)
251251

252+
def test_if_check_runs_EXAMPLE07(self):
253+
stdout, stderr, retc = lib.base.coe(lib.shell.shell_exec(self.check + ' --test=stdout/EXAMPLE07,,0'))
254+
self.assertIn('Minor incidents @ Exoscale (exoscale.com, TZ Europe/Zurich): [Network] Increased internet network latencies and packet loss / The issue has been identified. Mitigation has been applied. (2025-07-18 08:49:50) (see https://exoscalestatus.com/incidents/198647)', stdout)
255+
self.assertIn('Service ! State ', stdout)
256+
self.assertIn('-----------------------------------------------+----------', stdout)
257+
self.assertIn('Global.DNS ! [OK] ', stdout)
258+
self.assertIn('Global.Portal ! [OK] ', stdout)
259+
self.assertIn('Global.Support Hotline ! [OK] ', stdout)
260+
self.assertIn('CH-GVA-2 ! [OK] ', stdout)
261+
self.assertIn('CH-GVA-2.API ! [OK] ', stdout)
262+
self.assertIn('CH-GVA-2.Block Storage ! [OK] ', stdout)
263+
self.assertIn('CH-GVA-2.Compute ! [OK] ', stdout)
264+
self.assertIn('CH-GVA-2.Managed Database service DBaaS ! [OK] ', stdout)
265+
self.assertIn('CH-GVA-2.Managed Private Networks ! [OK] ', stdout)
266+
self.assertIn('CH-GVA-2.Managed Kubernetes SKS ! [OK] ', stdout)
267+
self.assertIn('CH-GVA-2.Network Internet Transit Connectivity ! [OK] ', stdout)
268+
self.assertIn('CH-GVA-2.Network Load Balancer NLB ! [OK] ', stdout)
269+
self.assertIn('CH-GVA-2.Object Storage SOS ! [OK] ', stdout)
270+
self.assertIn('CH-DK-2 ! [OK] ', stdout)
271+
self.assertIn('CH-DK-2.API ! [OK] ', stdout)
272+
self.assertIn('CH-DK-2.Block Storage ! [OK] ', stdout)
273+
self.assertIn('CH-DK-2.Compute ! [OK] ', stdout)
274+
self.assertIn('CH-DK-2.Managed Database service DBaaS ! [OK] ', stdout)
275+
self.assertIn('CH-DK-2.Managed Kubernetes SKS ! [OK] ', stdout)
276+
self.assertIn('CH-DK-2.Managed Private Networks ! [OK] ', stdout)
277+
self.assertIn('CH-DK-2.Network Internet Transit Connectivity ! [WARNING]', stdout)
278+
self.assertIn('CH-DK-2.Network Load Balancer NLB ! [OK] ', stdout)
279+
self.assertIn('CH-DK-2.Object Storage SOS ! [OK] ', stdout)
280+
self.assertIn('DE-FRA-1 ! [WARNING]', stdout)
281+
self.assertIn('DE-FRA-1.API ! [OK] ', stdout)
282+
self.assertIn('DE-FRA-1.Block Storage ! [OK] ', stdout)
283+
self.assertIn('DE-FRA-1.Compute ! [OK] ', stdout)
284+
self.assertIn('DE-FRA-1.Managed Database service DBaaS ! [OK] ', stdout)
285+
self.assertIn('DE-FRA-1.Managed Kubernetes SKS ! [OK] ', stdout)
286+
self.assertIn('DE-FRA-1.Managed Private Networks ! [OK] ', stdout)
287+
self.assertIn('DE-FRA-1.Network Internet Transit Connectivity ! [OK] ', stdout)
288+
self.assertIn('DE-FRA-1.Network Load Balancer NLB ! [OK] ', stdout)
289+
self.assertIn('DE-FRA-1.Object Storage SOS ! [OK] ', stdout)
290+
self.assertIn('DE-MUC-1 ! [OK] ', stdout)
291+
self.assertIn('DE-MUC-1.API ! [OK] ', stdout)
292+
self.assertIn('DE-MUC-1.Compute ! [OK] ', stdout)
293+
self.assertIn('DE-MUC-1.Managed Database service DBaaS ! [OK] ', stdout)
294+
self.assertIn('DE-MUC-1.Managed Kubernetes SKS ! [OK] ', stdout)
295+
self.assertIn('DE-MUC-1.Managed Private Networks ! [OK] ', stdout)
296+
self.assertIn('DE-MUC-1.Network Internet Transit Connectivity ! [OK] ', stdout)
297+
self.assertIn('DE-MUC-1.Network Load Balancer NLB ! [OK] ', stdout)
298+
self.assertIn('DE-MUC-1.Object Storage SOS ! [OK] ', stdout)
299+
self.assertIn('AT-VIE-1 ! [OK] ', stdout)
300+
self.assertIn('AT-VIE-1.API ! [OK] ', stdout)
301+
self.assertIn('AT-VIE-1.Block Storage ! [OK] ', stdout)
302+
self.assertIn('AT-VIE-1.Compute ! [OK] ', stdout)
303+
self.assertIn('AT-VIE-1.Managed Database service DBaaS ! [OK] ', stdout)
304+
self.assertIn('AT-VIE-1.Managed Kubernetes SKS ! [OK] ', stdout)
305+
self.assertIn('AT-VIE-1.Managed Private Networks ! [OK] ', stdout)
306+
self.assertIn('AT-VIE-1.Network Internet Transit Connectivity ! [OK] ', stdout)
307+
self.assertIn('AT-VIE-1.Network Load Balancer NLB ! [OK] ', stdout)
308+
self.assertIn('AT-VIE-1.Object Storage SOS ! [OK] ', stdout)
309+
self.assertIn('AT-VIE-2 ! [OK] ', stdout)
310+
self.assertIn('AT-VIE-2.API ! [OK] ', stdout)
311+
self.assertIn('AT-VIE-2.Block Storage ! [OK] ', stdout)
312+
self.assertIn('AT-VIE-2.Compute ! [OK] ', stdout)
313+
self.assertIn('AT-VIE-2.Managed Database service DBaaS ! [OK] ', stdout)
314+
self.assertIn('AT-VIE-2.Managed Kubernetes SKS ! [OK] ', stdout)
315+
self.assertIn('AT-VIE-2.Managed Private Networks ! [OK] ', stdout)
316+
self.assertIn('AT-VIE-2.Network Internet Transit Connectivity ! [OK] ', stdout)
317+
self.assertIn('AT-VIE-2.Network Load Balancer NLB ! [OK] ', stdout)
318+
self.assertIn('AT-VIE-2.Object Storage SOS ! [OK] ', stdout)
319+
self.assertIn('BG-SOF-1 ! [OK] ', stdout)
320+
self.assertIn('BG-SOF-1.API ! [OK] ', stdout)
321+
self.assertIn('BG-SOF-1.Block Storage ! [OK] ', stdout)
322+
self.assertIn('BG-SOF-1.Compute ! [OK] ', stdout)
323+
self.assertIn('BG-SOF-1.Managed Database service DBaaS ! [OK] ', stdout)
324+
self.assertIn('BG-SOF-1.Managed Kubernetes SKS ! [OK] ', stdout)
325+
self.assertIn('BG-SOF-1.Managed Private Networks ! [OK] ', stdout)
326+
self.assertIn('BG-SOF-1.Network Internet Transit Connectivity ! [OK] ', stdout)
327+
self.assertIn('BG-SOF-1.Network Load Balancer NLB ! [OK] ', stdout)
328+
self.assertIn('BG-SOF-1.Object Storage SOS ! [OK] ', stdout)
329+
self.assertIn('HR-ZAG-1 ! [OK] ', stdout)
330+
self.assertIn('HR-ZAG-1.API ! [OK] ', stdout)
331+
self.assertIn('HR-ZAG-1.Block Storage ! [OK] ', stdout)
332+
self.assertIn('HR-ZAG-1.Compute ! [OK] ', stdout)
333+
self.assertIn('HR-ZAG-1.Managed Database service DBaaS ! [OK] ', stdout)
334+
self.assertIn('HR-ZAG-1.Managed Kubernetes SKS ! [OK] ', stdout)
335+
self.assertIn('HR-ZAG-1.Managed Private Networks ! [OK] ', stdout)
336+
self.assertIn('HR-ZAG-1.Network Internet Transit Connectivity ! [OK] ', stdout)
337+
self.assertIn('HR-ZAG-1.Network Load Balancer NLB ! [OK] ', stdout)
338+
self.assertIn('HR-ZAG-1.Object Storage SOS ! [OK]', stdout)
339+
self.assertEqual(retc, STATE_WARN)
340+
252341

253342
if __name__ == '__main__':
254343
unittest.main()

0 commit comments

Comments
 (0)