def history_system(request, alert_id): alert = alerts_model.get_by_id(alert_id) server = server_model.get_by_id(alert['server']) page = request.GET.get('page', 1) page = int(page) skip = 0 if page > 1: skip = 100 * (page - 1) total = alerts_history_model.count_notifications(alert_id=alert['_id']) on_page = 100 if total > on_page: total_pages = total//on_page else: total_pages = 1 total_pages = range(total_pages) notifications = alerts_history_model.get_notifications_list(alert_id=alert['_id'], limit=100, skip=skip) return render(request, 'alerts/history.html', { 'notifications': notifications, 'alert': alert, 'server': server, "total_pages": total_pages, "page": page })
def history_system(request, alert_id): alert = alerts_model.get_by_id(alert_id) server = server_model.get_by_id(alert['server']) page = request.GET.get('page', 1) page = int(page) skip = 0 if page > 1: skip = 100 * (page - 1) total = alerts_history_model.count_notifications(alert_id=alert['_id']) on_page = 100 if total > on_page: total_pages = total/on_page else: total_pages = 1 total_pages = range(total_pages) notifications = alerts_history_model.get_notifications_list(alert_id=alert['_id'], limit=100, skip=skip) return render(request, 'alerts/history.html', { 'notifications': notifications, 'alert': alert, 'server': server, "total_pages": total_pages, "page": page })
def ajax_alert_triggers(request, alert_id=None): alert = alerts_model.get_by_id(alert_id) notifications = alerts_history_model.get_notifications_list(alert_id=alert['_id'], limit=5) return render(request, 'alerts/ajax_history.html', { "notifications": notifications, "rule": alert })
def ajax_alert_triggers(request, alert_id=None): alert = alerts_model.get_by_id(alert_id) notifications = alerts_history_model.get_notifications_list(alert_id=alert['_id'], limit=5) return render(request, 'alerts/ajax_history.html', { "notifications": notifications, "rule": alert })
def get(self, request, alert_id=None): alerts_model.mute(alert_id) alert = alerts_model.get_by_id(alert_id) muted = alert.get('mute') status = settings.API_RESULTS['ok'] return Response({'status': status, 'muted': muted})
def get(self, request, alert_id=None): alerts_model.mute(alert_id) alert = alerts_model.get_by_id(alert_id) muted = alert.get('mute') status = settings.API_RESULTS['ok'] return Response({'status': status, 'muted': muted})
def edit_alert(request, alert_id): all_servers = server_model.get_all(account_id=request.account_id) alert = alerts_model.get_by_id(alert_id, recipients_dict=False) tags = tags_model.get_all() server = alert.get('server', None) # If the alert is for specific server, it could be global notifications = notifications_model.get_all_formated() selected_metric = alerts_api_model.get_selected_metric(alert=alert) if request.method == 'POST': form = EditAlertForm(request.POST, all_servers=all_servers) if form.is_valid(): data = form.cleaned_data form_data = { "tags": request.POST.getlist('tags', None), "metric_value": data.get('metric_value'), "above_below": data.get('above_below'), "period": data.get('period'), "server": server, "metric_type": request.POST.get('metric_type'), "notifications": request.POST.getlist('notifications') } alerts_model.update(form_data, alert_id) return redirect(reverse('alerts')) else: form = EditAlertForm(all_servers=all_servers, initial={ 'metric_value': alert['metric_value'], 'period': alert['period'], 'server':server, "above_below": alert['above_below'], }) # TODO - Fix that angular bug sometime metric_types = '' metric = alert.get('metric') if metric: metric = metric.lower() metric_types = ["%"] if metric == 'cpu' else [] metric_types = ["%", "MB"] if metric == 'memory' else metric_types metric_types = ["%", "MB", "GB"] if metric == 'disk' else metric_types metric_types = ["KB/s"] if metric in ['network/inbound', 'network/outbound'] else metric_types return render(request, 'alerts/edit.html', { "server": server, 'tags': tags, "alert": alert, "form": form, "selected_metric": selected_metric, "notifications": notifications, "metric_types": metric_types, })
def edit_alert(request, alert_id): all_servers = server_model.get_all(account_id=request.account_id) alert = alerts_model.get_by_id(alert_id, recipients_dict=False) tags = tags_model.get_all() server = alert.get('server', None) # If the alert is for specific server, it could be global notifications = notifications_model.get_all_formated() selected_metric = alerts_api_model.get_selected_metric(alert=alert) if request.method == 'POST': form = EditAlertForm(request.POST, all_servers=all_servers) if form.is_valid(): data = form.cleaned_data form_data = { "tags": request.POST.getlist('tags', None), "metric_value": data.get('metric_value'), "above_below": data.get('above_below'), "period": data.get('period'), "server": server, "metric_type": request.POST.get('metric_type'), "notifications": request.POST.getlist('notifications') } alerts_model.update(form_data, alert_id) return redirect(reverse('alerts')) else: form = EditAlertForm(all_servers=all_servers, initial={ 'metric_value': alert['metric_value'], 'period': alert['period'], 'server':server, "above_below": alert['above_below'], }) # TODO - Fix that angular bug sometime metric_types = '' metric = alert.get('metric') if metric: metric = metric.lower() metric_types = ["%"] if metric == 'cpu' else [] metric_types = ["%", "MB"] if metric == 'memory' else metric_types metric_types = ["%", "MB", "GB"] if metric == 'disk' else metric_types metric_types = ["KB/s"] if metric in ['network/inbound', 'network/outbound'] else metric_types return render(request, 'alerts/edit.html', { "server": server, 'tags': tags, "alert": alert, "form": form, "selected_metric": selected_metric, "notifications": notifications, "metric_types": metric_types, })
def history_health_check(request, alert_id): data = {} alert = alerts_model.get_by_id(alert_id) notifications = alerts_history_model.get_notifications_list(alert_id=alert['_id'], limit=100) return render(request, 'alerts/history.html', { 'notifications': notifications, 'alert': alert, 'data': data })
def history_health_check(request, alert_id): data = {} alert = alerts_model.get_by_id(alert_id) notifications = alerts_history_model.get_notifications_list(alert_id=alert['_id'], limit=100) return render(request, 'alerts/history.html', { 'notifications': notifications, 'alert': alert, 'data': data })
def ajax_alert_triggers(request, alert_id=None): alert = alerts_model.get_by_id(alert_id) notifications = alerts_history_model.get_notifications_list( alert_id=alert['_id'], limit=5) return render_to_response('alerts/ajax_history.html', { "notifications": notifications, "rule": alert }, context_instance=RequestContext(request))
def history_health_check(request, alert_id): data = {} alert = alerts_model.get_by_id(alert_id) notifications = alerts_history_model.get_notifications_list( alert_id=alert['_id'], limit=100) return render_to_response('alerts/history.html', { 'notifications': notifications, 'alert': alert, 'data': data }, context_instance=RequestContext(request))
def edit_alert(request, alert_id): all_servers = server_model.get_all(account_id=request.account_id) alert = alerts_model.get_by_id(alert_id, recipients_dict=False) tags = tags_model.get_all() server = alert.get( 'server', None) # If the alert is for specific server, it could be global selected_command = " ".join( [alert.get("command", ""), alert.get('params', "")]) notifications = notifications_model.get_all_formated() if request.method == 'POST': form = EditHealthCheckAlertForm(request.POST, all_servers=all_servers) if form.is_valid(): data = form.cleaned_data form_data = { "tags": request.POST.getlist('tags', None), "status": data.get('status'), "period": data.get('period'), "server": server, "notifications": request.POST.getlist('notifications') } alerts_model.update(form_data, alert_id) return redirect(reverse('alerts')) else: form = EditHealthCheckAlertForm(all_servers=all_servers, initial={ 'period': alert['period'], 'server': server, "status": alert['status'], }) return render( request, 'alerts/edit_healthcheck.html', { "server": server, 'tags': tags, "alert": alert, "form": form, "selected_command": selected_command, "notifications": notifications, })
def delete_alert(request, alert_id): alert = alerts_model.get_by_id(alert_id) rule_type = alert.get('rule_type', None) if rule_type in ['process_global', 'plugin_global', 'global', 'health_check']: all_servers = server_model.get_all() if all_servers: for server in all_servers: server_id = server.get('_id') alerts_model.delete(server_id=server_id, alert_id=alert_id) else: alerts_model.delete(alert_id=alert_id) else: server_id = alert.get('server', None) alerts_model.delete(server_id=server_id, alert_id=alert_id) return redirect(reverse('alerts'))
def delete_alert(request, alert_id): alert = alerts_model.get_by_id(alert_id) rule_type = alert.get('rule_type', None) if rule_type in ['process_global', 'plugin_global', 'global', 'health_check']: all_servers = server_model.get_all() if all_servers: for server in all_servers: server_id = server.get('_id') alerts_model.delete(server_id=server_id, alert_id=alert_id) else: alerts_model.delete(alert_id=alert_id) else: server_id = alert.get('server', None) alerts_model.delete(server_id=server_id, alert_id=alert_id) return redirect(reverse('alerts'))
def generate_notifications(): notifications_list = [] unsent_alerts = alerts_history_model.get_unsent() for trigger in unsent_alerts.get('data'): result = AmonStruct() result.global_mute = False metadata = None timezone = 'UTC' try: alert = alerts_model.get_by_id(trigger['alert_id']) except: alert = None # Deleted alert here if alert: rule_type = alert.get('rule_type', 'system') metric_type = alert.get('metric', None) else: rule_type = 'alert-does-not-exist' if rule_type in ['global', 'process_global', 'plugin_global', 'process', 'system', 'plugin', 'uptime', 'health_check']: if rule_type in ['global', 'process_global', 'plugin_global', 'health_check']: server_id = trigger.get('server_id') else: server_id = alert.get('server') if server_id: server = server_model.get_by_id(server_id) result.server = server result.global_mute = alert_mute_servers_model.check_if_server_is_muted(server=server) if metric_type: metric_type = metric_type.lower() if metric_type in ['cpu', 'memory', 'loadavg']: trigger_period_from = trigger['from'] trigger_period_to = trigger['time'] metric_type = 'cpu' if metric_type == 'loadavg' else metric_type # Get CPU top consumers for Load average if server: metadata = process_model.get_top_consumers_for_period(date_from=trigger_period_from, date_to=trigger_period_to, server=server, metric_type=metric_type) # Overwrite rule_type for the new type if metric_type == 'notsendingdata': alert['rule_type'] = 'notsendingdata' if metric_type == 'disk': volume_id = trigger.get('volume') metadata = volumes_model.get_by_id(volume_id) if metric_type in ['network/inbound', 'network/outbound']: interface_id = trigger.get('interface') metadata = interfaces_model.get_by_id(interface_id) if rule_type == 'process_global': process_name = alert.get('process') result.process = process_model.get_by_name_and_server_id(server_id=server_id, name=process_name) if rule_type == 'plugin_global': gauge_name = alert.get('gauge') plugin_name = alert.get('plugin') result.plugin = plugin_model.get_by_name_and_server_id(server_id=server_id, name=plugin_name) result.gauge = plugin_model.get_gauge_by_name_and_plugin_id(plugin=result.plugin, name=gauge_name) # Process and Uptime alerts if rule_type == 'process' or rule_type == 'uptime': process_dict = alert.get('process') if process_dict: result.process = process_model.get_by_id(process_dict.get('_id')) if rule_type == 'plugin': result.plugin = alert.get('plugin') result.gauge = alert.get('gauge') if rule_type == 'health_check': health_check_result_id = trigger.get('health_checks_data_id') health_check_result = health_checks_results_model.get_by_id(health_check_result_id) if type(health_check_result) is dict: health_check_id = health_check_result.get('check_id') health_check = health_checks_model.get_by_id(health_check_id) result.healthcheck = health_check result.health_check_result = health_check_result if alert: result.alert = alert result.metadata = metadata result.timezone = timezone result.trigger = trigger result.mute = alert.get('mute', False) # Shortcut notifications_list.append(result) return notifications_list