summaryrefslogtreecommitdiffstats
path: root/python.d/retroshare.chart.py
blob: 8c0330ec625b91f0f9792971fcdc3b9aee56dfda (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# -*- coding: utf-8 -*-
# Description: RetroShare netdata python.d module
# Authors: sehraf

import json

from bases.FrameworkServices.UrlService import UrlService

# default module values (can be overridden per job in `config`)
# update_every = 2
priority = 60000
retries = 60

# charts order (can be overridden if you want less charts, or different order)
ORDER = ['bandwidth', 'peers', 'dht']

CHARTS = {
    'bandwidth': {
        'options': [None, 'RetroShare Bandwidth', 'kB/s', 'RetroShare', 'retroshare.bandwidth', 'area'],
        'lines': [
            ['bandwidth_up_kb',   'Upload'],
            ['bandwidth_down_kb', 'Download']
        ]},
    'peers': {
        'options': [None, 'RetroShare Peers', 'peers', 'RetroShare', 'retroshare.peers', 'line'],
        'lines': [
            ['peers_all',       'All friends'],
            ['peers_connected', 'Connected friends']
        ]},
    'dht': {
        'options': [None, 'Retroshare DHT', 'peers', 'RetroShare', 'retroshare.dht', 'line'],
        'lines': [
            ['dht_size_all', 'DHT nodes estimated'],
            ['dht_size_rs',  'RS nodes estimated']
        ]}
}


class Service(UrlService):
    def __init__(self, configuration=None, name=None):
        UrlService.__init__(self, configuration=configuration, name=name)
        self.baseurl = self.configuration.get('url', 'http://localhost:9090')
        self.order = ORDER
        self.definitions = CHARTS

    def _get_stats(self):
        """
        Format data received from http request
        :return: dict
        """
        try:
            raw = self._get_raw_data()
            parsed = json.loads(raw)
            if str(parsed['returncode']) != 'ok':
                return None
        except (TypeError, ValueError):
            return None

        return parsed['data'][0]

    def _get_data(self):
        """
        Get data from API
        :return: dict
        """
        self.url = self.baseurl + '/api/v2/stats'
        data = self._get_stats()
        if data is None:
            return None

        data['bandwidth_up_kb'] = data['bandwidth_up_kb'] * -1
        if data['dht_active'] is False:
            data['dht_size_all'] = None
            data['dht_size_rs'] = None

        return data