Пример #1
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,
    })
Пример #2
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,
    })
Пример #3
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,
        })
Пример #4
0
def migrate_four_to_five(request):

    from amon.apps.notifications.models import notifications_model
    from amon.apps.notifications.legacymodels import email_recepient_model
    from amon.apps.notifications.legacymodels import webhooks_model
    from amon.apps.alerts.models import alerts_model

    # Move emails
    all_emails = email_recepient_model.get_all()
    for e in all_emails:
        email_exists = notifications_model.collection.find_one({
            'email':
            e.get('email'),
            'provider_id':
            'email'
        })
        if email_exists == None:
            notifications_model.save(data={"email": e.get('email')},
                                     provider_id='email')

    # Move webhooks
    all_webhooks = webhooks_model.get_all()
    for e in all_webhooks:
        hook_exists = notifications_model.collection.find_one({
            'url':
            e.get('url'),
            'provider_id':
            'webhook'
        })
        if hook_exists == None:
            data = {
                'url': e.get('url'),
                'name': e.get('url'),
                'secret': e.get('secret')
            }
            notifications_model.save(data=data, provider_id='webhook')

    # Set default names
    all_notifications = notifications_model.get_all()
    for noti in all_notifications:
        if noti.get('provider_id') not in ['webhook', 'email']:
            name = noti.get('name', None)
            if name == None:
                notifications_model.update(data={'name': 'default'},
                                           id=noti.get('_id'))

    # Update all alerts
    alerts = alerts_model.get_all()
    for alert in alerts:
        new_notifications_list = []
        emails = alert.get('email_recepients', [])
        webhooks = alert.get('webhooks', [])
        old_notifications = alert.get('notifications', [])

        for email in emails:
            email_from_old_model = email_recepient_model.get_by_id(email)
            if email_from_old_model:
                new_email_location = notifications_model.collection.find_one({
                    'email':
                    email_from_old_model.get('email'),
                    'provider_id':
                    'email'
                })

                if new_email_location:
                    _id = "email:{0}".format(new_email_location.get('_id'))
                    new_notifications_list.append(_id)

        for hook in webhooks:
            hook_from_old_model = webhooks_model.get_by_id(hook)
            if hook_from_old_model:
                new_hook_location = notifications_model.collection.find_one({
                    'url':
                    hook_from_old_model.get('url'),
                    'provider_id':
                    'webhook'
                })

                if new_hook_location:
                    _id = "webhook:{0}".format(new_hook_location.get('_id'))
                    new_notifications_list.append(_id)

        for provider in old_notifications:

            new_notification = notifications_model.collection.find_one(
                {'provider_id': provider})
            if new_notification:
                _id = "{0}:{1}".format(provider, new_notification.get('_id'))
                new_notifications_list.append(_id)

        try:
            del alert['email_recepients']
            del alert['webhooks']
        except:
            pass

        alert['notifications'] = new_notifications_list
        alerts_model.update(alert, alert.get('_id'))

    messages.add_message(request, messages.INFO, 'Migration complete.')

    return redirect(reverse('servers'))