]> arthur.barton.de Git - netdata.git/blob - python.d/retroshare.chart.py
rename chart fields to avoid conflicts with backends; fixes #1962
[netdata.git] / python.d / retroshare.chart.py
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