alert-autoconf
89 строк · 2.4 Кб
1#!/usr/bin/env python3
2
3import argparse
4import logging
5import requests
6import sys
7
8from alert_autoconf.config import read_from_file
9from json import JSONDecodeError
10
11LOG_LEVEL = "DEBUG"
12
13
14def parse_params() -> dict:
15parser = argparse.ArgumentParser(add_help=True)
16parser.add_argument(
17"-u",
18"--url",
19default="localhost",
20help="Graphite system render url",
21required=False,
22)
23parser.add_argument(
24"-c", "--config", help="Path to trigger description", required=True
25)
26parser.add_argument(
27"-l", "--log-level", default=LOG_LEVEL, help="Log level.", required=False
28)
29parser.add_argument(
30"-C", "--cluster",
31help="Cluster name. If specified, {cluster} will be replaced with this name.",
32required=False,
33)
34
35return parser.parse_args()
36
37
38def main():
39frmt = "[%(asctime)s] %(levelname)s:%(name)s:%(funcName)s:%(message)s"
40logging.basicConfig(
41level=logging.getLevelName(LOG_LEVEL),
42stream=sys.stdout,
43format=frmt,
44datefmt="%Y-%m-%d %H:%M:%S",
45)
46
47_logger = logging.getLogger("validate")
48
49params = parse_params()
50log_level = params.log_level.upper()
51
52if LOG_LEVEL != log_level:
53logging.getLogger().setLevel(logging.getLevelName(log_level))
54_logger.setLevel(logging.getLevelName(log_level))
55
56is_valid = True
57data = read_from_file(params.config, params.cluster)
58
59for trigger in data.triggers:
60for n, target in enumerate(trigger.targets):
61request_params = {
62"format": "json",
63"target": target,
64"from": "-1min",
65"noNullPoints": "true",
66"maxDataPoints": 1,
67}
68try:
69r = requests.get(params.url, params=request_params)
70r.json()
71_logger.info('Trigger: "%s", target: "%s" OK' % (trigger.name, n))
72except JSONDecodeError as e:
73is_valid = False
74_logger.error(
75'Trigger: "%s", target: "%s" ERROR: %s' % (trigger.name, n, r.text)
76)
77except Exception as e:
78is_valid = False
79_logger.error(
80'Trigger: "%s", target: "%s", exception: "%s"'
81% (trigger.name, n, e)
82)
83
84if not is_valid:
85sys.exit(1)
86
87
88if __name__ == "__main__":
89main()
90