NetdataRRDCached: libexec_netdata_python_d_rrdcached.chart.py

File libexec_netdata_python_d_rrdcached.chart.py, 2.4 KB (added by mirek@…, 4 years ago)
Line 
1# -*- coding: utf-8 -*-
2# Description: rrdcached netdata python.d module
3# Author: Mirek Laus (mirek@laus.cz)
4
5from bases.FrameworkServices.SocketService import SocketService
6
7ORDER = [
8 'Queue',
9 'Events',
10 'Tree',
11 'Journal'
12]
13
14CHARTS = {
15 'Queue': {
16 'options': [None, 'rrdcached queue length', 'items', 'queue', 'rrdcached.queue', 'line'],
17 'lines': [
18 ['QueueLength', 'queue length', 'absolute'],
19 ['UpdatesWritten', 'updates written', 'incremental'],
20 ['FlushesReceived', 'flushes received', 'incremental']
21 ]
22 },
23 'Events': {
24 'options': [None, 'rrdcached updates', 'events/s', 'events', 'rrdcached.events', 'line'],
25 'lines': [
26 ['UpdatesReceived', 'updates received', 'incremental'],
27 ['DataSetsWritten', 'datasets written', 'incremental']
28 ]
29 },
30 'Tree': {
31 'options': [None, 'rrdcached tree', 'items', 'tree', 'rrdcached.tree', 'line'],
32 'lines': [
33 ['TreeNodesNumber', 'nodes number', 'absolute'],
34 ['TreeDepth', 'tree depth', 'absolute']
35 ]
36 },
37 'Journal': {
38 'options': [None, 'rrdcached journal', 'size', 'journal', 'rrdcached.journal', 'line'],
39 'lines': [
40 ['JournalBytes', 'journal size', 'absolute', 1, 1024*1024*1024],
41 ['JournalRotate', 'journal rotate', 'absolute']
42 ]
43 }
44}
45
46
47class Service(SocketService):
48 def __init__(self, configuration=None, name=None):
49 SocketService.__init__(self, configuration=configuration, name=name)
50 self.order = ORDER
51 self.definitions = CHARTS
52 self.host = self.configuration.get('host', '127.0.0.1')
53 self.port = self.configuration.get('port', 42217)
54 self.unix_socket = self.configuration.get('socket')
55 self.request = 'STATS\r\n'
56
57 def _get_data(self):
58 """
59 Format data received from socket
60 :return: dict
61 """
62 try:
63 raw = self._get_raw_data()
64 except (ValueError, AttributeError):
65 return None
66
67 if raw is None:
68 self.debug('rrdcached returned no data')
69 return None
70
71 lines = raw.split('\n')
72 ret = dict()
73 for i, line in enumerate(lines):
74 try:
75 data = line.split(': ')[:2]
76 ret[str(data[0])] = int(data[1])
77 except (ValueError, IndexError) as e:
78 continue
79 return ret or None