You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

31 lines
756 B

  1. import datetime
  2. import json
  3. FIVE_MINUTES = datetime.timedelta(seconds = 300)
  4. def parse_datetime(s):
  5. assert s.endswith('Z')
  6. if '.' in s:
  7. s = s.split('.', 1)[0] + '+00:00'
  8. else:
  9. s = s[:-1] + '+00:00'
  10. return datetime.datetime.fromisoformat(s)
  11. async def process(request):
  12. now = datetime.datetime.now(datetime.timezone.utc)
  13. obj = json.loads(await request.text())
  14. assert obj['version'] == '1'
  15. alerts = []
  16. for a in obj['alerts']:
  17. startTime = parse_datetime(a['startsAt'])
  18. endTime = parse_datetime(a['endsAt'])
  19. if now - startTime < FIVE_MINUTES or now - endTime < FIVE_MINUTES:
  20. alerts.append(f'{a["labels"]["alertname"]} {a["status"]}')
  21. if alerts:
  22. return f'[{obj["status"]}] {", ".join(alerts)}'
  23. else:
  24. return f'[{obj["status"]}]'