def check(self, data, server): process_data_dict = data.get('data', None) rules = alerts_model.get_alerts(type='process', server=server) if len(rules) + len(process_data_dict) > 0: for rule in rules: process_id = rule['process'] self.check_rule_and_save(process_id=process_id, rule=rule, process_data_dict=process_data_dict, server_id=server['_id']) # Global alerts rules = alerts_model.get_alerts(type='process_global') if len(rules) + len(process_data_dict) > 0: all_processes = process_model.get_all_for_server(server['_id']) for rule in rules: valid_rule = self.check_tags(server=server, rule=rule) if valid_rule: process_name = rule.get('process') process_id = None # Check if this server has a process with this name for p in all_processes.clone(): if p.get('name') == process_name: process_id = p.get('_id') if process_id: self.check_rule_and_save(process_id=process_id, rule=rule, process_data_dict=process_data_dict, server_id=server['_id'])
def check(self, data, server): process_data_dict = data.get('data', None) rules = alerts_model.get_alerts(type='process', server=server) if len(rules) + len(process_data_dict) > 0: for rule in rules: process_id = rule['process'] self.check_rule_and_save(process_id=process_id, rule=rule, process_data_dict=process_data_dict, server_id=server['_id']) # Global alerts rules = alerts_model.get_alerts(type='process_global') if len(rules) + len(process_data_dict) > 0: all_processes = process_model.get_all_for_server(server['_id']) for rule in rules: valid_rule = self.check_tags(server=server, rule=rule) if valid_rule: process_name = rule.get('process') process_id = None # Check if this server has a process with this name for p in all_processes.clone(): if p.get('name') == process_name: process_id = p.get('_id') if process_id: self.check_rule_and_save( process_id=process_id, rule=rule, process_data_dict=process_data_dict, server_id=server['_id'])
def get_all_for_server_test(self): self._cleanup() for i in range(0, 10): process_model.insert({'name': i, 'server': self.server['_id']}) result = process_model.get_all_for_server(self.server['_id']) eq_(result.count(), 10)
def get_all_for_server_test(self): self._cleanup() for i in range(0, 10): process_model.insert({'name': i, 'server': self.server['_id']}) result = process_model.get_all_for_server(self.server['_id']) eq_(result.count(), 10)
def get_server_metrics(self, account_id=None, server_id=None): data = [] constants = ['cpu', 'memory', 'loadavg', 'network'] process_charts = ['cpu', 'memory'] processes = process_model.get_all_for_server(server_id) plugins = plugin_model.get_for_server(server_id=server_id) volumes = volumes_model.get_all_for_server(server_id=server_id) interfaces = interfaces_model.get_all_for_server(server_id=server_id) for v in volumes: name = "Disk.{0}".format(v['name']) _id = "server_id:{0}.check:disk.device_id:{1}".format( server_id, v['_id']) data.append([_id, name, 'System metrics']) for v in interfaces: name = "Adapter.{0}".format(v['name']) _id = "server_id:{0}.check:network.device_id:{1}".format( server_id, v['_id']) data.append([_id, name, 'System metrics']) for check in constants: name = "{0}".format(check.title()) _id = "server_id:{0}.check:{1}".format(server_id, check) data.append([_id, name, 'System metrics']) for p in processes: for check in process_charts: name = "{0}.{1}".format(p['name'], check) _id = "server_id:{0}.process_id:{1}.check:{2}".format( server_id, p['_id'], check) data.append([_id, name, 'Process Metrics']) for p in plugins: gauges = plugin_model.get_gauges_cursor(plugin=p) for g in gauges: name = "{0}.{1}".format(p.get('name'), g.get('name')) _id = "server_id:{0}.plugin_id:{1}.gauge_id:{2}.check:plugin".format( server_id, p['_id'], g['_id']) data.append([_id, name, 'Plugin Metrics']) data = sorted(data, key=itemgetter(1)) return data
def get_server_metrics(self, account_id=None, server_id=None): data = [] constants = ['cpu', 'memory', 'loadavg', 'network'] process_charts = ['cpu', 'memory'] processes = process_model.get_all_for_server(server_id) plugins = plugin_model.get_for_server(server_id=server_id) volumes = volumes_model.get_all_for_server(server_id=server_id) interfaces = interfaces_model.get_all_for_server(server_id=server_id) for v in volumes: name = "Disk.{0}".format(v['name']) _id = "server_id:{0}.check:disk.device_id:{1}".format(server_id, v['_id']) data.append([_id, name, 'System metrics']) for v in interfaces: name = "Adapter.{0}".format(v['name']) _id = "server_id:{0}.check:network.device_id:{1}".format(server_id, v['_id']) data.append([_id, name, 'System metrics']) for check in constants: name = "{0}".format(check.title()) _id = "server_id:{0}.check:{1}".format(server_id, check) data.append([_id, name, 'System metrics']) for p in processes: for check in process_charts: name = "{0}.{1}".format(p['name'], check) _id = "server_id:{0}.process_id:{1}.check:{2}".format(server_id, p['_id'], check) data.append([_id, name, 'Process Metrics']) for p in plugins: gauges = plugin_model.get_gauges_cursor(plugin=p) for g in gauges: name = "{0}.{1}".format(p.get('name'), g.get('name')) _id = "server_id:{0}.plugin_id:{1}.gauge_id:{2}.check:plugin".format(server_id, p['_id'], g['_id']) data.append([_id, name, 'Plugin Metrics']) data = sorted(data, key=itemgetter(1)) return data
def system_view(request, server_id): enddate = request.GET.get('enddate') charts = request.GET.get('charts', 'all') duration = request.GET.get('duration', 10800) duration = int(duration) server = server_model.get_by_id(server_id) tags = server_model.get_tags(server=server) if tags: server['tags'] = tags first_check_date = system_model.get_first_check_date(server) now_unix = datetime_to_unixtime(request.now) max_date = now_unix * 1000 if enddate: date_to = int(enddate) else: date_to = now_unix date_from = date_to - int(duration) data_url = reverse('ajax_get_data_after') data_url = "{0}?server_id={1}".format(data_url, server.get('_id')) charts_metadata = { 'cpu': { 'id': 'cpu', 'check': 'cpu', 'name': 'CPU', 'url': data_url, }, 'loadavg': { 'id': 'loadavg', 'check': 'loadavg', 'name': 'Load Average', 'url': data_url }, 'memory': { 'id': 'memory', 'check': 'memory', 'name': 'Memory', 'url': data_url, 'type': 'area' }, 'network': [{ 'id': 'network.inbound', 'check': 'network.inbound', 'name': 'Network - KB/s Received', 'url': data_url, 'unit': 'kb/s' }, { 'id': 'network.outbound', 'check': 'network.outbound', 'name': 'Network - KB/s Sent', 'url': data_url, 'unit': 'kb/s' }] } if charts == 'all': active_checks = ['cpu', 'memory', 'loadavg', 'disk', 'network'] else: active_checks = [charts] selected_charts = [] for check in active_checks: if check in ['network']: chart_meta = charts_metadata.get(check) for i in chart_meta: selected_charts.append(i) elif check != 'disk': chart_meta = charts_metadata.get(check) selected_charts.append(chart_meta) volumes = volumes_model.get_all_for_server(server_id) if 'disk' in active_checks: unit = get_disk_unit(server) for device in volumes.clone(): device_id, name = device.get('_id'), device.get('name') url = "{0}&device_id={1}".format(data_url, device_id) meta = { 'id': device_id, 'check': 'disk', 'name': name, 'url': url, 'unit': unit } last_update = device.get('last_update') if last_update > date_from: selected_charts.append(meta) all_plugins = plugin_model.get_for_server(server_id=server['_id'], last_check_after=date_from) all_processes = process_model.get_all_for_server( server_id, last_check_after=date_from) breadcrumb_url = reverse('server_system', kwargs={'server_id': server['_id']}) breadcrumb_url = "{0}?charts={1}".format(breadcrumb_url, charts) return render( request, 'system/view.html', { "enddate": enddate, "duration": duration, "all_processes": all_processes, "all_plugins": all_plugins, "now": now_unix, "charts": charts, "selected_charts": selected_charts, "date_from": date_from, "date_to": date_to, "first_check_date": first_check_date, "server": server, "max_date": max_date, "server_id": server_id, "breadcrumb_url": breadcrumb_url })
def get_server_metrics(self, server_id=None): data = [] system_alerts = ['CPU', 'Memory', 'Loadavg', 'Disk', 'Network/inbound', 'Network/outbound', 'Not Sending Data'] process_alerts = ['CPU', 'Memory', 'Down'] processes = process_model.get_all_for_server(server_id) plugin_gauges = plugin_model.get_gauge_keys_for_server(server_id) volumes = volumes_model.get_all_for_server(server_id) interfaces = interfaces_model.get_all_for_server(server_id) for metric in system_alerts: spaceless_metric = metric.replace(" ", "") _id = "server:{0}.metric:{1}.rule_type:system".format(server_id, spaceless_metric) data.append({'value': _id, 'name': metric, 'metric': metric}) if metric == 'Disk': for volume in volumes.clone(): name = "Disk.{0}".format(volume.get('name')) _id = "server:{0}.metric:Disk.rule_type:system.volume:{1}".format(server_id, volume.get('name')) data.append({'value': _id, 'name': name, 'metric': metric, }) if metric.startswith('Network'): for interface in interfaces.clone(): name = "{0}.{1}".format(metric, interface.get('name')) _id = "server:{0}.metric:{1}.rule_type:system.interface:{2}".format(server_id, metric, interface.get('name')) data.append({ 'value': _id, 'name': name, 'metric': metric, }) if processes: for p in processes: for metric in process_alerts: name = "{0}.{1}".format(p['name'], metric) rule_type = 'process' if metric != 'Down' else 'uptime' _id = "server:{0}.process:{1}.metric:{2}.rule_type:{3}".format(server_id, p['_id'], metric, rule_type) data.append({'value': _id, 'name': name, 'metric': metric}) if len(plugin_gauges) > 0: for g in plugin_gauges: plugin = g.get('plugin') gauge = g.get('gauge') key = g.get('key') name = "{0}.{1}.{2}".format(plugin['name'], gauge['name'], key) _id = "server:{0}.plugin:{1}.gauge:{2}.key:{3}.rule_type:plugin".format( server_id, plugin['_id'], gauge['_id'], key ) data.append({'value': _id, 'name': name}) return data
def system_view(request, server_id): enddate = request.GET.get('enddate') charts = request.GET.get('charts', 'all') duration = request.GET.get('duration', 10800) duration = int(duration) server = server_model.get_by_id(server_id) tags = server_model.get_tags(server=server) if tags: server['tags'] = tags first_check_date = system_model.get_first_check_date(server) now_unix = datetime_to_unixtime(request.now) max_date = now_unix * 1000 if enddate: date_to = int(enddate) else: date_to = now_unix date_from = date_to - int(duration) data_url = reverse('ajax_get_data_after') data_url = "{0}?server_id={1}".format(data_url, server.get('_id')) charts_metadata = { 'cpu': {'id': 'cpu', 'check': 'cpu', 'name': 'CPU', 'url': data_url, }, 'loadavg': {'id': 'loadavg', 'check': 'loadavg', 'name': 'Load Average','url': data_url}, 'memory': {'id': 'memory', 'check': 'memory', 'name': 'Memory', 'url': data_url, 'type': 'area'}, 'network': [ {'id': 'network.inbound', 'check': 'network.inbound', 'name': 'Network - KB/s Received', 'url': data_url, 'unit': 'kb/s'}, {'id': 'network.outbound', 'check': 'network.outbound', 'name': 'Network - KB/s Sent', 'url': data_url, 'unit': 'kb/s'} ] } if charts == 'all': active_checks = ['cpu', 'memory', 'loadavg', 'disk', 'network'] else: active_checks = [charts] selected_charts = [] for check in active_checks: if check in ['network']: chart_meta = charts_metadata.get(check) for i in chart_meta: selected_charts.append(i) elif check != 'disk': chart_meta = charts_metadata.get(check) selected_charts.append(chart_meta) volumes = volumes_model.get_all_for_server(server_id) if 'disk' in active_checks: unit = get_disk_unit(server) for device in volumes.clone(): device_id, name = device.get('_id'), device.get('name') url = "{0}&device_id={1}".format(data_url, device_id) meta = {'id': device_id, 'check': 'disk', 'name': name, 'url': url , 'unit': unit} last_update = device.get('last_update') if last_update > date_from: selected_charts.append(meta) all_plugins = plugin_model.get_for_server(server_id=server['_id'], last_check_after=date_from) all_processes = process_model.get_all_for_server(server_id, last_check_after=date_from) breadcrumb_url = reverse('server_system', kwargs={'server_id': server['_id']}) breadcrumb_url = "{0}?charts={1}".format(breadcrumb_url, charts) return render(request, 'system/view.html', { "enddate": enddate, "duration": duration, "all_processes": all_processes, "all_plugins": all_plugins, "now": now_unix, "charts":charts, "selected_charts" : selected_charts, "date_from" : date_from, "date_to" : date_to, "first_check_date" : first_check_date, "server" : server, "max_date" : max_date, "server_id": server_id, "breadcrumb_url": breadcrumb_url })