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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
#!/bin/env python2.6
import sys
import os
import inspect
sys.path.insert(0, os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) + "/client_python")
sys.path.insert(0, os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))))
import tools
import http.client
import xml.etree.ElementTree as XET
from prometheus_client import Summary, Gauge
SETTINGS = [tools.primary_ip(), 87, "/vod_status"]
def rec_xml_loop(xml, data, path=""):
children = xml.getchildren()
if len(children) < 1:
data[path + xml.tag] = xml.text
else:
for c in children:
if path == "":
rec_xml_loop(c, data, xml.tag)
else:
rec_xml_loop(c, data, path + "_" + xml.tag)
if path == "":
return data
def get_xml(host="127.0.0.1", port=SETTINGS[1], path=SETTINGS[2]):
vod_status_con = http.client.HTTPConnection(host, port, timeout=2)
vod_status_con.request("GET", path, None)
resp = vod_status_con.getresponse()
if resp.status == 200:
data = resp.read()
vod_status_con.close()
return data
else:
vod_status_con.close()
raise Exception("Unable to fetch info from http server {}:{}/{}".format(host, port, path))
def init_datapoints(data_dict, labels = ['host', 'port', 'path']):
from_xml_data = dict()
xml_obj = XET.fromstring(get_xml())
xml_data_dict = rec_xml_loop(xml_obj, from_xml_data)
for key in xml_data_dict:
try:
data_dict[key] = Gauge(key, key, labels)
except ValueError:
pass
def update_datapoints(data_dict, label_vals = SETTINGS):
from_xml_data = dict()
xml_obj = XET.fromstring(get_xml())
xml_data_dict = rec_xml_loop(xml_obj, from_xml_data)
for key in data_dict:
if key in xml_data_dict:
try:
float(xml_data_dict[key])
except ValueError:
pass
else:
data_dict[key].labels(*label_vals).set(xml_data_dict[key])
|