summaryrefslogtreecommitdiff
path: root/python-status-exporter/modules/nginx_vod.py
blob: 1ce42ac8bcf2dd2de88c0fbb4e1d83fddbbf7d1d (plain)
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])