zabbix-elasticsearch
62 строки · 1.7 Кб
1from urllib.parse import urlparse
2
3import json
4import argparse
5import requests
6
7
8class InspectIndex():
9""" Stub """
10
11def __init__(self):
12""" Stub """
13self.value = None
14
15def get_nested_attr(self, container, attr):
16# Function to traverse dictionaries and print when value is
17# not a dict (instead it's a str)
18
19if isinstance(attr, str):
20keys = attr.split('.')
21else:
22keys = attr
23
24for key in keys:
25value = container[key]
26if isinstance(value, dict):
27keys.pop(0)
28if keys:
29self.get_nested_attr(value, keys)
30elif value is not None:
31#TODO: Verify what is happening to value.
32self.value = value
33# return self.value
34else:
35return('Not Encountered Value')
36
37
38def get_index_metric(self, url, index, metric):
39"""
40Return specific metric for the especified index.
41"""
42address = url.scheme + '://' + url.netloc + '/%s/_stats' % index
43result = requests.get(address)
44
45assert result.status_code == 200
46
47state = result.json()
48
49self.get_nested_attr(state, metric)
50print(self.value)
51
52
53if __name__ == '__main__':
54parser = argparse.ArgumentParser()
55parser.add_argument('--url', type=urlparse, required=True)
56parser.add_argument('--index', type=str, required=True)
57parser.add_argument('--metric', type=str, required=True)
58
59args = parser.parse_args()
60
61index = InspectIndex()
62index.get_index_metric(args.url, args.index, args.metric)
63
64