diff options
Diffstat (limited to '')
-rw-r--r-- | collectors/python.d.plugin/squid/Makefile.inc | 13 | ||||
-rw-r--r-- | collectors/python.d.plugin/squid/README.md | 38 | ||||
-rw-r--r-- | collectors/python.d.plugin/squid/squid.chart.py (renamed from python.d/squid.chart.py) | 75 | ||||
-rw-r--r-- | collectors/python.d.plugin/squid/squid.conf (renamed from conf.d/python.d/squid.conf) | 0 |
4 files changed, 91 insertions, 35 deletions
diff --git a/collectors/python.d.plugin/squid/Makefile.inc b/collectors/python.d.plugin/squid/Makefile.inc new file mode 100644 index 000000000..76ecff81e --- /dev/null +++ b/collectors/python.d.plugin/squid/Makefile.inc @@ -0,0 +1,13 @@ +# SPDX-License-Identifier: GPL-3.0-or-later + +# THIS IS NOT A COMPLETE Makefile +# IT IS INCLUDED BY ITS PARENT'S Makefile.am +# IT IS REQUIRED TO REFERENCE ALL FILES RELATIVE TO THE PARENT + +# install these files +dist_python_DATA += squid/squid.chart.py +dist_pythonconfig_DATA += squid/squid.conf + +# do not install these files, but include them in the distribution +dist_noinst_DATA += squid/README.md squid/Makefile.inc + diff --git a/collectors/python.d.plugin/squid/README.md b/collectors/python.d.plugin/squid/README.md new file mode 100644 index 000000000..9c9b62f27 --- /dev/null +++ b/collectors/python.d.plugin/squid/README.md @@ -0,0 +1,38 @@ +# squid + +This module will monitor one or more squid instances depending on configuration. + +It produces following charts: + +1. **Client Bandwidth** in kilobits/s + * in + * out + * hits + +2. **Client Requests** in requests/s + * requests + * hits + * errors + +3. **Server Bandwidth** in kilobits/s + * in + * out + +4. **Server Requests** in requests/s + * requests + * errors + +### configuration + +```yaml +priority : 50000 + +local: + request : 'cache_object://localhost:3128/counters' + host : 'localhost' + port : 3128 +``` + +Without any configuration module will try to autodetect where squid presents its `counters` data + +--- diff --git a/python.d/squid.chart.py b/collectors/python.d.plugin/squid/squid.chart.py index ba8f982ff..fd54168f0 100644 --- a/python.d/squid.chart.py +++ b/collectors/python.d.plugin/squid/squid.chart.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- # Description: squid netdata python.d module # Author: Pawel Krupa (paulfantom) +# SPDX-License-Identifier: GPL-3.0-or-later from bases.FrameworkServices.SocketService import SocketService @@ -15,31 +16,35 @@ ORDER = ['clients_net', 'clients_requests', 'servers_net', 'servers_requests'] CHARTS = { 'clients_net': { - 'options': [None, "Squid Client Bandwidth", "kilobits/s", "clients", "squid.clients_net", "area"], + 'options': [None, 'Squid Client Bandwidth', 'kilobits/s', 'clients', 'squid.clients_net', 'area'], 'lines': [ - ["client_http_kbytes_in", "in", "incremental", 8, 1], - ["client_http_kbytes_out", "out", "incremental", -8, 1], - ["client_http_hit_kbytes_out", "hits", "incremental", -8, 1] - ]}, + ['client_http_kbytes_in', 'in', 'incremental', 8, 1], + ['client_http_kbytes_out', 'out', 'incremental', -8, 1], + ['client_http_hit_kbytes_out', 'hits', 'incremental', -8, 1] + ] + }, 'clients_requests': { - 'options': [None, "Squid Client Requests", "requests/s", "clients", "squid.clients_requests", 'line'], + 'options': [None, 'Squid Client Requests', 'requests/s', 'clients', 'squid.clients_requests', 'line'], 'lines': [ - ["client_http_requests", "requests", "incremental"], - ["client_http_hits", "hits", "incremental"], - ["client_http_errors", "errors", "incremental", -1, 1] - ]}, + ['client_http_requests', 'requests', 'incremental'], + ['client_http_hits', 'hits', 'incremental'], + ['client_http_errors', 'errors', 'incremental', -1, 1] + ] + }, 'servers_net': { - 'options': [None, "Squid Server Bandwidth", "kilobits/s", "servers", "squid.servers_net", "area"], + 'options': [None, 'Squid Server Bandwidth', 'kilobits/s', 'servers', 'squid.servers_net', 'area'], 'lines': [ - ["server_all_kbytes_in", "in", "incremental", 8, 1], - ["server_all_kbytes_out", "out", "incremental", -8, 1] - ]}, + ['server_all_kbytes_in', 'in', 'incremental', 8, 1], + ['server_all_kbytes_out', 'out', 'incremental', -8, 1] + ] + }, 'servers_requests': { - 'options': [None, "Squid Server Requests", "requests/s", "servers", "squid.servers_requests", 'line'], + 'options': [None, 'Squid Server Requests', 'requests/s', 'servers', 'squid.servers_requests', 'line'], 'lines': [ - ["server_all_requests", "requests", "incremental"], - ["server_all_errors", "errors", "incremental", -1, 1] - ]} + ['server_all_requests', 'requests', 'incremental'], + ['server_all_errors', 'errors', 'incremental', -1, 1] + ] + } } @@ -47,8 +52,8 @@ class Service(SocketService): def __init__(self, configuration=None, name=None): SocketService.__init__(self, configuration=configuration, name=name) self._keep_alive = True - self.request = "" - self.host = "localhost" + self.request = '' + self.host = 'localhost' self.port = 3128 self.order = ORDER self.definitions = CHARTS @@ -62,43 +67,43 @@ class Service(SocketService): data = dict() try: - raw = "" + raw = '' for tmp in response.split('\r\n'): - if tmp.startswith("sample_time"): + if tmp.startswith('sample_time'): raw = tmp break if raw.startswith('<'): - self.error("invalid data received") + self.error('invalid data received') return None for row in raw.split('\n'): - if row.startswith(("client", "server.all")): - tmp = row.split("=") + if row.startswith(('client', 'server.all')): + tmp = row.split('=') data[tmp[0].replace('.', '_').strip(' ')] = int(tmp[1]) except (ValueError, AttributeError, TypeError): - self.error("invalid data received") + self.error('invalid data received') return None if not data: - self.error("no data received") + self.error('no data received') return None return data def _check_raw_data(self, data): header = data[:1024].lower() - if "connection: keep-alive" in header: + if 'connection: keep-alive' in header: self._keep_alive = True else: self._keep_alive = False - if data[-7:] == "\r\n0\r\n\r\n" and "transfer-encoding: chunked" in header: # HTTP/1.1 response - self.debug("received full response from squid") + if data[-7:] == '\r\n0\r\n\r\n' and 'transfer-encoding: chunked' in header: # HTTP/1.1 response + self.debug('received full response from squid') return True - self.debug("waiting more data from squid") + self.debug('waiting more data from squid') return False def check(self): @@ -109,10 +114,10 @@ class Service(SocketService): self._parse_config() # format request req = self.request.decode() - if not req.startswith("GET"): - req = "GET " + req - if not req.endswith(" HTTP/1.1\r\n\r\n"): - req += " HTTP/1.1\r\n\r\n" + if not req.startswith('GET'): + req = 'GET ' + req + if not req.endswith(' HTTP/1.1\r\n\r\n'): + req += ' HTTP/1.1\r\n\r\n' self.request = req.encode() if self._get_data() is not None: return True diff --git a/conf.d/python.d/squid.conf b/collectors/python.d.plugin/squid/squid.conf index 564187f00..564187f00 100644 --- a/conf.d/python.d/squid.conf +++ b/collectors/python.d.plugin/squid/squid.conf |