alert-autoconf

Форк
0
/
validate.py 
89 строк · 2.4 Кб
1
#!/usr/bin/env python3
2

3
import argparse
4
import logging
5
import requests
6
import sys
7

8
from alert_autoconf.config import read_from_file
9
from json import JSONDecodeError
10

11
LOG_LEVEL = "DEBUG"
12

13

14
def parse_params() -> dict:
15
    parser = argparse.ArgumentParser(add_help=True)
16
    parser.add_argument(
17
        "-u",
18
        "--url",
19
        default="localhost",
20
        help="Graphite system render url",
21
        required=False,
22
    )
23
    parser.add_argument(
24
        "-c", "--config", help="Path to trigger description", required=True
25
    )
26
    parser.add_argument(
27
        "-l", "--log-level", default=LOG_LEVEL, help="Log level.", required=False
28
    )
29
    parser.add_argument(
30
        "-C", "--cluster",
31
        help="Cluster name. If specified, {cluster} will be replaced with this name.",
32
        required=False,
33
    )
34

35
    return parser.parse_args()
36

37

38
def main():
39
    frmt = "[%(asctime)s] %(levelname)s:%(name)s:%(funcName)s:%(message)s"
40
    logging.basicConfig(
41
        level=logging.getLevelName(LOG_LEVEL),
42
        stream=sys.stdout,
43
        format=frmt,
44
        datefmt="%Y-%m-%d %H:%M:%S",
45
    )
46

47
    _logger = logging.getLogger("validate")
48

49
    params = parse_params()
50
    log_level = params.log_level.upper()
51

52
    if LOG_LEVEL != log_level:
53
        logging.getLogger().setLevel(logging.getLevelName(log_level))
54
        _logger.setLevel(logging.getLevelName(log_level))
55

56
    is_valid = True
57
    data = read_from_file(params.config, params.cluster)
58

59
    for trigger in data.triggers:
60
        for n, target in enumerate(trigger.targets):
61
            request_params = {
62
                "format": "json",
63
                "target": target,
64
                "from": "-1min",
65
                "noNullPoints": "true",
66
                "maxDataPoints": 1,
67
            }
68
            try:
69
                r = requests.get(params.url, params=request_params)
70
                r.json()
71
                _logger.info('Trigger: "%s", target: "%s" OK' % (trigger.name, n))
72
            except JSONDecodeError as e:
73
                is_valid = False
74
                _logger.error(
75
                    'Trigger: "%s", target: "%s" ERROR: %s' % (trigger.name, n, r.text)
76
                )
77
            except Exception as e:
78
                is_valid = False
79
                _logger.error(
80
                    'Trigger: "%s", target: "%s", exception: "%s"'
81
                    % (trigger.name, n, e)
82
                )
83

84
    if not is_valid:
85
        sys.exit(1)
86

87

88
if __name__ == "__main__":
89
    main()
90

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.