@cryptotaxi247 / netdata-1 / commits / 91e2049cf

add the ability connect to unix socket

Ilya committed Jan 11, 2017 at 15:09 UTC 91e2049cf6b2688fed625d66b76d7936ab4e2d56
1 file changed +41 -13
python.d/haproxy.chart.py
+41 -13
@@ -2,7 +2,7 @@
2 # Description: haproxy netdata python.d module
3 # Author: l2isbad
4
5 -from base import UrlService
5 +from base import UrlService, SocketService
6
7 # default module values (can be overridden per job in `config`)
8 # update_every = 2
@@ -51,16 +51,36 @@ CHARTS = {
51 }
52
53
54 -class Service(UrlService):
54 +class Service(UrlService, SocketService):
55 def __init__(self, configuration=None, name=None):
56 - UrlService.__init__(self, configuration=configuration, name=name)
57 - self.url = "http://127.0.0.1:7000/haproxy_stats;csv"
56 + SocketService.__init__(self, configuration=configuration, name=name)
57 + self.user = self.configuration.get('user')
58 + self.password = self.configuration.get('pass')
59 + self.request = 'show stat\n'
60 + self.poll_method = (UrlService, SocketService)
61 self.order = ORDER
62 self.order_front = [_ for _ in ORDER if _.startswith('f')]
63 self.order_back = [_ for _ in ORDER if _.startswith('b')]
64 self.definitions = CHARTS
65 self.charts = True
66
67 + def check(self):
68 + if self.configuration.get('url'):
69 + self.poll_method = self.poll_method[0]
70 + url = self.configuration.get('url')
71 + if not url.endswith(';csv'):
72 + self.error('Bad url(%s). Must be http://<ip.address>:<port>/<url>;csv' % url)
73 + return False
74 + elif self.configuration.get('socket'):
75 + self.poll_method = self.poll_method[1]
76 + else:
77 + self.error('No configuration is specified')
78 + return False
79 +
80 + if self.poll_method.check(self):
81 + self.info('Plugin was started succesfully. We are using %s.' % self.poll_method.__name__)
82 + return True
83 +
84 def create_charts(self, front_ends, back_ends):
85 for _ in range(len(front_ends)):
86 self.definitions['fbin']['lines'].append(['_'.join(['fbin', front_ends[_]['# pxname']]), front_ends[_]['# pxname'], 'incremental', 1, 1024])
@@ -80,12 +100,8 @@ class Service(UrlService):
100 Format data received from http request
101 :return: dict
102 """
83 - if self.url[-4:] != ';csv':
84 - self.url += ';csv'
85 - self.info('Url rewritten to %s' % self.url)
86 -
103 try:
88 - raw_data = self._get_raw_data().splitlines()
104 + raw_data = self.poll_method._get_raw_data(self).splitlines()
105 except Exception as e:
106 self.error(str(e))
107 return None
@@ -117,13 +133,25 @@ class Service(UrlService):
133 return to_netdata
134
135 def is_backend(backend):
120 - return backend['svname'] == 'BACKEND' and backend['# pxname'] != 'stats'
136 + try:
137 + return backend['svname'] == 'BACKEND' and backend['# pxname'] != 'stats'
138 + except Exception:
139 + return False
140
141 def is_frontend(frontend):
123 - return frontend['svname'] == 'FRONTEND' and frontend['# pxname'] != 'stats'
142 + try:
143 + return frontend['svname'] == 'FRONTEND' and frontend['# pxname'] != 'stats'
144 + except Exception:
145 + return False
146
147 def is_server(server):
126 - return not server['svname'].startswith(('FRONTEND', 'BACKEND'))
148 + try:
149 + return not server['svname'].startswith(('FRONTEND', 'BACKEND'))
150 + except Exception:
151 + return False
152
153 def is_server_down(server, back_ends, _):
129 - return server['# pxname'] == back_ends[_]['# pxname'] and server['status'] != 'UP'
154 + try:
155 + return server['# pxname'] == back_ends[_]['# pxname'] and server['status'] != 'UP'
156 + except Exception:
157 + return False