示例#1
0
文件: alerts.py 项目: urandu/amon
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
    })
示例#2
0
文件: alerts.py 项目: gisce/AMON
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
    })
示例#3
0
文件: alerts.py 项目: gisce/AMON
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
    })
示例#4
0
文件: alerts.py 项目: urandu/amon
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
    })
示例#5
0
文件: alerts.py 项目: HomemBravo/amon
    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})
示例#6
0
    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})
示例#7
0
文件: alerts.py 项目: gisce/AMON
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,
    })
示例#8
0
文件: alerts.py 项目: urandu/amon
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,
    })
示例#9
0
文件: alerts.py 项目: gisce/AMON
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
    })
示例#10
0
文件: alerts.py 项目: urandu/amon
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
    })
示例#11
0
文件: alerts.py 项目: perplext/amon
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))
示例#12
0
文件: alerts.py 项目: perplext/amon
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))
示例#13
0
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,
        })
示例#14
0
文件: alerts.py 项目: gisce/AMON
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'))
示例#15
0
文件: alerts.py 项目: urandu/amon
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'))
示例#16
0
文件: generator.py 项目: zeus911/amon
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