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)
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
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"]
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)