def generate_charts(self, result=None, keys=None, check=None, timezone='UTC'): keys_length = len(keys) data_lists = [] data_lists = [[] for i in range(keys_length)] for r in result: time = r.get('time') if r.get('time') else r.get('t') time = utc_unixtime_to_localtime(time, tz=timezone) for i in range(keys_length): data = r.get(check) if r.get(check) else r key = keys[i].key value = data.get( key) # Gets to the specific key -> cpu: {'steal': 4} value = self.format_float(value) data_lists[i].append({"x": time, "y": value}) series = [] for i in range(keys_length): data = [] if len(data_lists[i]) == 0 else data_lists[i] chart_colors = select_colors(i) metric_type = {'name': keys[i].name, 'data': data, 'unit': '%'} metric_type.update(chart_colors) series.append(metric_type) return series
def get_global_data_after(self, timestamp=None, key=None, enddate=None, check=None, timezone='UTC', filtered_servers=None): params = {"time": {"$gte": int(timestamp)}} if enddate: params['time']["$lte"] = int(enddate) keys = {} data_lists = {} for server in filtered_servers: server_id = str(server['_id']) keys[server_id] = server.get('name') data_lists[server_id] = [] server_ids_list = [x.get('_id') for x in filtered_servers] params['server_id'] = {"$in": server_ids_list} result = self.data_collection.find(params).sort('time', self.asc) for r in result: r_server_id = str(r['server_id']) time = r.get('time', 0) time = utc_unixtime_to_localtime(time, tz=timezone) key = 'used_percent' if check == 'memory' else key value = r.get(check, {}).get(key, 0) value = self.format_float(value) server_list = data_lists.get(r_server_id) server_list.append({"x": time, "y": value}) # Dont display empty lines y_axis_sum = sum([x.get('y', 0) for x in data_lists[r_server_id]]) if y_axis_sum == 0: data_lists[r_server_id] = [] series = [] for key, name in keys.items(): _index = list(keys.keys()).index(key) data = [] if len(data_lists[key]) == 0 else data_lists[key] chart_colors = select_colors(_index) metric_type = {'name': name, 'data': data} metric_type.update(chart_colors) if len(data) > 0: series.append(metric_type) return series
def get_global_data_after(self, timestamp=None, metric=None, filtered_servers=None, timezone='UTC'): gauge = metric.get('gauge') key = metric.get('key') plugin = metric.get('plugin') keys = {} data_lists = {} for server in filtered_servers: server_id = str(server['_id']) keys[server_id] = server.get('name') data_lists[server_id] = [] plugins = self.collection.find({'name': plugin}) for p in plugins: p_server_id = str(p.get('server_id')) server_list = data_lists.get(p_server_id) result = None gauge_cursor = self.get_gauge_by_name(plugin=p, name=gauge) if gauge_cursor != None: if key in gauge_cursor.get('keys'): result = self._get_gauge_data_after_query(timestamp, gauge=gauge_cursor) if result: for r in result: time = utc_unixtime_to_localtime(r['t'], tz=timezone) value = r.get(key, None) server_list.append({"x": time, "y": value}) series = [] for server, server_name in keys.items(): _index = keys.keys().index(server) data = [] if len(data_lists[server]) == 0 else data_lists[server] chart_colors = select_colors(_index) result = { 'name': server_name, 'data': data } result.update(chart_colors) if len(data) > 0: series.append(result) return series
def get_global_data_after(self, timestamp=None, enddate=None, key=None, timezone='UTC', check=None, filtered_servers=None): keys = {} data_lists = {} process_ids_list = [] series = [] server_ids_list = [x.get('_id') for x in filtered_servers] filter_proceses_params = { 'name': key, 'server': { "$in": server_ids_list } } all_processes = self.collection.find(filter_proceses_params) for process in all_processes: process_id = str(process['_id']) name = '' server = filter(lambda x: x['_id'] == process['server'], filtered_servers) if len(server) > 0: name = server[0].get('name') keys[process_id] = name data_lists[process_id] = [] process_ids_list.append(process_id) params = {"t": {"$gte": int(timestamp)}} if enddate: params['t']["$lte"] = int(enddate) params['server_id'] = {"$in": server_ids_list} result = self.data_collection.find(params).sort('t', self.asc) for r in result: time = r.get('time') if r.get('time') else r.get('t') time = utc_unixtime_to_localtime(time, tz=timezone) data = r.get('data', []) for d in data: process_id = str(d['p']) if process_id in process_ids_list: time = utc_unixtime_to_localtime(r['t'], tz=timezone) key = 'c' if check == 'cpu' else 'm' value = d.get(key) value = self.format_float(value) data_lists[process_id].append({"x": time, "y": value}) for key, name in keys.items(): _index = keys.keys().index(key) data = [] if len(data_lists[key]) == 0 else data_lists[key] chart_colors = select_colors(_index) metric_type = {'name': name, 'data': data} metric_type.update(chart_colors) if len(data) > 0: series.append(metric_type) return series
def get_global_device_data_after(self, timestamp=None, enddate=None, check=None, key=None, timezone="UTC", filtered_servers=None): params = {"t": {"$gte": int(timestamp)}} if enddate: params['t']["$lte"] = int(enddate) keys = {} series = [] data_lists = {} datamodel = volumes_model if check == 'disk' else interfaces_model devices = datamodel.get_all_for_servers_list(servers=filtered_servers) for device in devices: data_collection = datamodel.get_data_collection() params['device_id'] = device['_id'] result = data_collection.find(params).sort('t', self.asc) if result.clone().count() > 0: device_server_id = device['server_id'] device_server = None for server in filtered_servers: if server['_id'] == device_server_id: device_server = server # Server exists if device_server != None: _id = str(device['_id']) keys[_id] = u"{server}.{device}".format( server=device_server.get('name', ""), device=device.get('name')) data_lists[_id] = [] for r in result: time = utc_unixtime_to_localtime(r.get('t', 0), tz=timezone) value = r.get(key, 0) value = self.format_float(value) data_lists[_id].append({"x": time, "y": value}) # Dont display empty lines y_axis_sum = sum([x.get('y', 0) for x in data_lists[_id]]) if y_axis_sum == 0: data_lists[_id] = [] for _id, name in keys.items(): _index = list(keys.keys()).index(_id) data = [] if len(data_lists[_id]) == 0 else data_lists[_id] chart_colors = select_colors(_index) metric_type = { 'name': name, 'data': data, } metric_type.update(chart_colors) if len(data) > 0: series.append(metric_type) return series