aboutsummaryrefslogtreecommitdiff
path: root/contrib/modules/grafana.py
blob: feda3e812ef1589269339a15be85a432d3dea7df (about) (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import datetime
import json


FIVE_MINUTES = datetime.timedelta(seconds = 300)


def parse_datetime(s):
	assert s.endswith('Z')
	if '.' in s:
		s = s.split('.', 1)[0] + '+00:00'
	else:
		s = s[:-1] + '+00:00'
	return datetime.datetime.fromisoformat(s)


async def process(request):
	now = datetime.datetime.now(datetime.timezone.utc)
	obj = json.loads(await request.text())
	assert obj['version'] == '1'
	alerts = []
	for a in obj['alerts']:
		startTime = parse_datetime(a['startsAt'])
		endTime = parse_datetime(a['endsAt'])
		if now - startTime < FIVE_MINUTES or now - endTime < FIVE_MINUTES:
			alerts.append(f'{a["labels"]["alertname"]} {a["status"]}')
	if alerts:
		return f'[{obj["status"]}] {", ".join(alerts)}'
	else:
		return f'[{obj["status"]}]'