add RetroShare
sehraf committed
Sep 6, 2016 at 17:57 UTC
ae2a4488e7e861528c54d9d026d8dd55a8efe027
4 files changed
+146
conf.d/Makefile.am
+1
@@ -35,6 +35,7 @@ dist_pythonconfig_DATA = \
35
python.d/phpfpm.conf \
36
python.d/postfix.conf \
37
python.d/redis.conf \
38
+ python.d/retroshare.conf \
39
python.d/sensors.conf \
40
python.d/squid.conf \
41
python.d/tomcat.conf \
conf.d/python.d/retroshare.conf
new
+66
@@ -0,0 +1,66 @@
1
+# netdata python.d.plugin configuration for example
2
+#
3
+# This file is in YaML format. Generally the format is:
4
+#
5
+# name: value
6
+#
7
+# There are 2 sections:
8
+# - global variables
9
+# - one or more JOBS
10
+#
11
+# JOBS allow you to collect values from multiple sources.
12
+# Each source will have its own set of charts.
13
+#
14
+# JOB parameters have to be indented (using spaces only, example below).
15
+
16
+# ----------------------------------------------------------------------
17
+# Global Variables
18
+# These variables set the defaults for all JOBs, however each JOB
19
+# may define its own, overriding the defaults.
20
+
21
+# update_every sets the default data collection frequency.
22
+# If unset, the python.d.plugin default is used.
23
+# update_every: 1
24
+
25
+# priority controls the order of charts at the netdata dashboard.
26
+# Lower numbers move the charts towards the top of the page.
27
+# If unset, the default for python.d.plugin is used.
28
+# priority: 60000
29
+
30
+# retries sets the number of retries to be made in case of failures.
31
+# If unset, the default for python.d.plugin is used.
32
+# Attempts to restore the service are made once every update_every
33
+# and only if the module has collected values in the past.
34
+# retries: 5
35
+
36
+# ----------------------------------------------------------------------
37
+# JOBS (data collection sources)
38
+#
39
+# The default JOBS share the same *name*. JOBS with the same name
40
+# are mutually exclusive. Only one of them will be allowed running at
41
+# any time. This allows autodetection to try several alternatives and
42
+# pick the one that works.
43
+#
44
+# Any number of jobs is supported.
45
+#
46
+# All python.d.plugin JOBS (for all its modules) support a set of
47
+# predefined parameters. These are:
48
+#
49
+# job_name:
50
+# name: myname # the JOB's name as it will appear at the
51
+# # dashboard (by default is the job_name)
52
+# # JOBs sharing a name are mutually exclusive
53
+# update_every: 1 # the JOB's data collection frequency
54
+# priority: 60000 # the JOB's order on the dashboard
55
+# retries: 5 # the JOB's number of restoration attempts
56
+#
57
+# Additionally to the above, example also supports the following:
58
+#
59
+# - none
60
+#
61
+# ----------------------------------------------------------------------
62
+# AUTO-DETECTION JOBS
63
+# only one of them will run (they have the same name)
64
+
65
+local:
66
+ url: 'http://localhost:9090'
python.d/Makefile.am
+1
@@ -23,6 +23,7 @@ dist_python_SCRIPTS = \
23
phpfpm.chart.py \
24
postfix.chart.py \
25
redis.chart.py \
26
+ retroshare.chart.py \
27
sensors.chart.py \
28
squid.chart.py \
29
tomcat.chart.py \
python.d/retroshare.chart.py
new
+78
@@ -0,0 +1,78 @@
1
+# -*- coding: utf-8 -*-
2
+# Description: RetroShare netdata python.d module
3
+# Authors: sehraf
4
+
5
+from base import UrlService
6
+import json
7
+
8
+# default module values (can be overridden per job in `config`)
9
+# update_every = 2
10
+priority = 60000
11
+retries = 60
12
+
13
+# charts order (can be overridden if you want less charts, or different order)
14
+ORDER = ['bandwidth', 'peers', 'dht']
15
+
16
+CHARTS = {
17
+ 'bandwidth': {
18
+ 'options': [None, 'RetroShare Bandwidth', 'kB/s', 'RetroShare', 'retroshare.bandwidth', 'area'],
19
+ 'lines': [
20
+ ['bandwidth_up_kb', 'Upload'],
21
+ ['bandwidth_down_kb', 'Download']
22
+ ]},
23
+ 'peers': {
24
+ 'options': [None, 'RetroShare Peers', 'peers', 'RetroShare', 'retroshare.peers', 'line'],
25
+ 'lines': [
26
+ ['peers_all', 'All friends'],
27
+ ['peers_connected', 'Connected friends']
28
+ ]},
29
+ 'dht': {
30
+ 'options': [None, 'Retroshare DHT', 'peers', 'RetroShare', 'retroshare.dht', 'line'],
31
+ 'lines': [
32
+ ['dht_size_all', 'DHT nodes estimated'],
33
+ ['dht_size_rs', 'RS nodes estimated']
34
+ ]}
35
+}
36
+
37
+
38
+class Service(UrlService):
39
+ def __init__(self, configuration=None, name=None):
40
+ UrlService.__init__(self, configuration=configuration, name=name)
41
+ try:
42
+ self.baseurl = str(self.configuration['url'])
43
+ except (KeyError, TypeError):
44
+ self.baseurl = 'http://localhost:9090'
45
+ self.order = ORDER
46
+ self.definitions = CHARTS
47
+
48
+ def _get_stats(self):
49
+ """
50
+ Format data received from http request
51
+ :return: dict
52
+ """
53
+ try:
54
+ raw = self._get_raw_data()
55
+ parsed = json.loads(raw)
56
+ if str(parsed['returncode']) != 'ok':
57
+ return None
58
+ except:
59
+ return None
60
+
61
+ return parsed['data'][0]
62
+
63
+ def _get_data(self):
64
+ """
65
+ Get data from API
66
+ :return: dict
67
+ """
68
+ self.url = self.baseurl + '/api/v2/stats'
69
+ data = self._get_stats()
70
+ if data is None:
71
+ return None
72
+
73
+ data['bandwidth_up_kb'] = data['bandwidth_up_kb'] * -1
74
+ if data['dht_active'] is False:
75
+ data['dht_size_all'] = None
76
+ data['dht_size_rs'] = None
77
+
78
+ return data