Example #1
0
def add_alert(request):
    all_servers = server_model.get_all()
    tags = tags_model.get_all()
    notifications = notifications_model.get_all_formated()

    if request.method == 'POST':
        form = HealthCheckAlertForm(request.POST, all_servers=all_servers)
        if form.is_valid():
            data = form.cleaned_data

            form_data = {
                "command": request.POST.get('command'),
                "param": request.POST.get('param'),
                "tags": request.POST.getlist('tags'),
                "notifications": request.POST.getlist('notifications'),
                "rule_type": "health_check",
            }

            data.update(form_data)
            alerts_model.save(data)
            return redirect(reverse('alerts'))
    else:
        form = HealthCheckAlertForm(all_servers=all_servers)

    return render(
        request, 'alerts/add_healthcheck.html', {
            "form": form,
            'tags': tags,
            'notifications': notifications,
            "all_servers": all_servers
        })
Example #2
0
    def __init__(self, *args, **kwargs):
        super(MuteForm, self).__init__(*args, **kwargs)
        all_servers = server_model.get_all()

        if all_servers:
            server_fields = [
                ('all', 'All'),
            ] + [(v['_id'], v['name']) for v in all_servers]
        else:
            server_fields = [
                ('all', 'All'),
            ]

        self.fields['server'] = forms.ChoiceField(choices=server_fields)
        self.fields['server'].widget.attrs.update({
            'server-dropdown': '',
            'data-size': 250
        })

        all_tags = tags_model.get_all()
        if all_tags:
            tags_fields = [
                (v['_id'],
                 "{0}:{1}".format(v.get('group', {}).get('name'), v['name']))
                for v in all_tags
            ]

            self.fields['tags'] = forms.MultipleChoiceField(
                choices=tags_fields, required=False)
            self.fields['tags'].widget.attrs.update({
                'select2-dropdown': '',
                'data-size': 400
            })
Example #3
0
File: alerts.py Project: 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,
    })
Example #4
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

    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,
    })
Example #5
0
    def get(self, request):
        tags = tags_model.get_all()
        filtered_tags = []
        for tag in tags:
            data = dict_from_cursor(data=tag, keys=['name', '_id'])
            group = tag.get('group')
            if group:
                data['group'] = dict_from_cursor(data=group, keys=['name', '_id'])
            
            filtered_tags.append(data)

        filtered_tags.sort(key=lambda e: e.get('group', {}).get('name', ''))

        status = settings.API_RESULTS['ok']

        return Response({'status': status, 'tags': filtered_tags})
Example #6
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,
        })
Example #7
0
File: tags.py Project: urandu/amon
    def get(self, request):
        tags = tags_model.get_all()
        filtered_tags = []
        for tag in tags:
            data = dict_from_cursor(data=tag, keys=['name', '_id'])
            group = tag.get('group')
            if group:
                data['group'] = dict_from_cursor(data=group,
                                                 keys=['name', '_id'])

            filtered_tags.append(data)

        filtered_tags.sort(key=lambda e: e.get('group', {}).get('name', ''))

        status = settings.API_RESULTS['ok']

        return Response({'status': status, 'tags': filtered_tags})
Example #8
0
File: forms.py Project: gisce/AMON
    def __init__(self, *args, **kwargs):
        super(MuteForm, self).__init__(*args, **kwargs)
        all_servers = server_model.get_all()
    
        if all_servers:
            server_fields = [('all','All'),]+[(v['_id'],v['name']) for v in all_servers]
        else:
            server_fields = [('all','All'),]

        self.fields['server'] = forms.ChoiceField(choices=server_fields)
        self.fields['server'].widget.attrs.update({'server-dropdown': '', 'data-size': 250 })


        all_tags = tags_model.get_all()
        if all_tags:
            tags_fields = [(v['_id'],"{0}:{1}".format(v.get('group', {}).get('name'), v['name']) ) for v in all_tags] 

            self.fields['tags'] = forms.MultipleChoiceField(choices=tags_fields, required=False)
            self.fields['tags'].widget.attrs.update({'select2-dropdown': '', 'data-size': 400})
Example #9
0
def add_alert(request):
    all_servers = server_model.get_all(account_id=request.account_id)
    tags = tags_model.get_all()
    notifications = notifications_model.get_all_formated()

    if request.method == 'POST':
        form = AlertForm(request.POST, all_servers=all_servers)
        if form.is_valid():
            data = form.cleaned_data
            metric = data.get('metric')

            metric_dict = dict(item.split(":") for item in metric.split("."))

            form_data = {
                "metric_type": request.POST.get('metric_type'),
                "tags": request.POST.getlist('tags'),
                "notifications": request.POST.getlist('notifications'),
                "rule_type": metric_dict.get('rule_type'),
                "account_id": request.account_id,
            }

            form_data = dict(
                list(form_data.items()) + list(metric_dict.items()))
            del data['metric']

            data.update(form_data)
            alerts_model.save(data)
            return redirect(reverse('alerts'))
    else:
        form = AlertForm(all_servers=all_servers)

    return render_to_response('alerts/add.html', {
        "common_metrics": settings.COMMON_METRICS,
        "form": form,
        'tags': tags,
        'notifications': notifications,
        "all_servers": all_servers
    },
                              context_instance=RequestContext(request))
Example #10
0
File: api.py Project: zeus911/amon
def ajax_get_tags(request):
    all_tags = tags_model.get_all()

    q = request.GET.get('q')

    result = []
    for tag in all_tags:
        append = True
        tag_dict = _tag_dict__repr__(tag=tag)

        if q:
            append = False
            text = tag_dict.get('text', "")
            lookup = text.find(q)
            if lookup != -1:
                append = True

        if append is True:
            result.append(tag_dict)

    result = sorted(result, key=itemgetter('group')) 

    return Response(result)
Example #11
0
File: alerts.py Project: gisce/AMON
def add_alert(request):
    all_servers = server_model.get_all(account_id=request.account_id)
    tags = tags_model.get_all()
    notifications = notifications_model.get_all_formated()

    if request.method == 'POST':
        form = AlertForm(request.POST, all_servers=all_servers)
        if form.is_valid():
            data = form.cleaned_data
            metric = data.get('metric')
            
            metric_dict = dict(item.split(":") for item in metric.split("."))

            form_data = {
                "metric_type": request.POST.get('metric_type'),
                "tags": request.POST.getlist('tags'),
                "notifications": request.POST.getlist('notifications'),
                "rule_type": metric_dict.get('rule_type'), 
                "account_id": request.account_id,
            }

            form_data = dict(list(form_data.items()) + list(metric_dict.items()))
            del data['metric']

            data.update(form_data)
            alerts_model.save(data)
            return redirect(reverse('alerts'))
    else:
        form = AlertForm(all_servers=all_servers)
    
    return render(request, 'alerts/add.html', {
        "common_metrics": settings.COMMON_METRICS,
        "form": form,
        'tags': tags,
        'notifications': notifications,
        "all_servers": all_servers
    })