@cryptotaxi247 / netdata-1 / commits / ae2a4488e

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