示例#1
0
    def get_data(self, data):
        """
        Get data points from rrd files.
        """

        rrdfile = '{}/{}/{}.rrd'.format(RRD_PATH, data['source'], data['type'])
        proc = Popen(
            [
                'rrdtool',
                'xport',
                '--json',
                '--start',
                data['start'],
                '--end',
                data['end'],
            ] + (['--step', str(data['step'])] if data.get('step') else []) + [
                'DEF:xxx={}:{}:{}'.format(rrdfile, data['dataset'],
                                          data['cf']),
                'XPORT:xxx',
            ],
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
        )
        data, err = proc.communicate()
        if proc.returncode != 0:
            raise ValueError('rrdtool failed: {}'.format(err))
        return json.loads(data)
示例#2
0
    async def get_data(self, data_list, stats):
        """
        Get data points from rrd files.
        """
        if not data_list:
            raise ValidationError('stats_list', 'This parameter cannot be empty')

        defs = []
        names_pair = []
        for i, data in enumerate(data_list):
            names_pair.append([data['source'], data['type']])
            rrdfile = '{}/{}/{}.rrd'.format(RRD_PATH, data['source'], data['type'])
            defs.extend([
                'DEF:xxx{}={}:{}:{}'.format(i, rrdfile, data['dataset'], data['cf']),
                'XPORT:xxx{}:{}/{}'.format(i, data['source'], data['type']),
            ])
        proc = await Popen(
            [
                '/usr/local/bin/rrdtool', 'xport', '--json',
                '--start', stats['start'], '--end', stats['end'],
            ] + (['--step', str(stats['step'])] if stats.get('step') else []) + defs,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
        )
        data, err = await proc.communicate()
        if proc.returncode != 0:
            raise ValueError('rrdtool failed: {}'.format(err.decode()))
        data = json.loads(data.decode())

        # Custom about property
        data['about'] = 'Data for ' + ','.join(['/'.join(i) for i in names_pair])
        return data
示例#3
0
 async def load_state(self):
     for replication in await self.middleware.call("datastore.query", "storage.replication"):
         state = ejson.loads(replication["repl_state"])
         if "last_snapshot" in state:
             self.last_snapshot[f"replication_task_{replication['id']}"] = state["last_snapshot"]
         if "state" in state:
             self.state[f"replication_task_{replication['id']}"] = state["state"]
示例#4
0
    async def get(self, key, default):
        try:
            return json.loads(
                (await self.middleware.call(
                    "datastore.query", "system.keyvalue", [["key", "=", key]], {"get": True}))["value"])
        except IndexError:
            if default is not None:
                return default

            raise KeyError(key)