#!/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])