def _post_new_alarm(request):
    '''
    further process new alarm data, and post to ceilometer_api
    :param (Django request object) request
    :return: JSON
    '''
    alarm_data = BaseMethods.qdict_to_dict(request.POST)
    alarm_data.pop('next_step')
    alarm_data.pop('cur_step')

    if 'enabled' in alarm_data:
        alarm_data['enabled'] = False if alarm_data['enabled'] == 'False' else True
    if 'repeat_actions' in alarm_data:
        alarm_data['repeat_actions'] = False if alarm_data['repeat_actions'] == 'false' else True
    for action_type in ['alarm_actions', 'ok_actions', 'insufficient_data_actions']:
        if action_type in alarm_data:
            for i in range(0, len(alarm_data[action_type])):
                alarm_data[action_type][i] = \
                    'http://%s/notification/notify/?op=%s' % (settings.THIS_ADDR, alarm_data[action_type][i])
    kwargs = {}
    kwargs.update(alarm_data)
    q = [{}]
    try:
        q[0] = {}
        q[0]['value'] = kwargs.pop('resource_id')
        q[0]['field'] = 'resource_id'
        q[0]['op'] = 'eq'
    except NameError:
        q[0] = {}
    finally:
        kwargs['q'] = q

    token_id = request.session['token'].id
    return openstack_api.ceilometer_api.post_threshold_alarm(token_id, **kwargs)
def create_alarm(request):
    '''  Create new alarm through ceilometer alarm-create api  '''
    if request.method == 'GET':
        return render(
            request, 'alarms/create_alarm/create_threshold_alarm_basis.html', {
                'page_type': 'create_alarm',
                'title': 'Create-alarm',
                'threshold_step_html':
                'alarms/threshold_alarm_basis/_threshold_alarm_step_1.html',
                'step': '1',
                'alarm_data': {
                    'machine_type': 'vm',
                },
            })
    if request.method == 'POST':
        # Invalid inputs for step will be served with 404 page
        step = request.POST.get('next_step', '1')
        if step is None or step not in ['1', '2', '3', '4', 'post']:
            raise Http404('Invalid value of "step"')

        # alarm_data passes alarm data between alarm-create pages.
        alarm_data = BaseMethods.qdict_to_dict(request.POST)

        if step == 'post':
            return_data = _post_new_alarm(request)
            new_message = [], {}
            if return_data['status'] == 'success':
                messages.success(
                    request, return_data['data']['name'] + " has been created")
            else:
                messages.error(request, return_data['error_msg'])
            return HttpResponseRedirect('/monitor/alarms/')
        else:
            return render(
                request,
                'alarms/create_alarm/create_threshold_alarm_basis.html', {
                    'page_type':
                    'create_alarm',
                    'threshold_step_html':
                    'alarms/threshold_alarm_basis/_threshold_alarm_step_' +
                    step + '.html',
                    'step':
                    step,
                    'alarm_data':
                    alarm_data,
                })
    raise Http404('Unknown method')
def _post_new_alarm(request):
    '''
    further process new alarm data, and post to ceilometer_api
    :param (Django request object) request
    :return: JSON
    '''
    alarm_data = BaseMethods.qdict_to_dict(request.POST)
    alarm_data.pop('next_step')
    alarm_data.pop('cur_step')

    if 'enabled' in alarm_data:
        alarm_data[
            'enabled'] = False if alarm_data['enabled'] == 'False' else True
    if 'repeat_actions' in alarm_data:
        alarm_data['repeat_actions'] = False if alarm_data[
            'repeat_actions'] == 'false' else True
    for action_type in [
            'alarm_actions', 'ok_actions', 'insufficient_data_actions'
    ]:
        if action_type in alarm_data:
            for i in range(0, len(alarm_data[action_type])):
                alarm_data[action_type][i] = \
                    'http://%s/notification/notify/?op=%s' % (settings.THIS_ADDR, alarm_data[action_type][i])
    kwargs = {}
    kwargs.update(alarm_data)
    q = [{}]
    try:
        q[0] = {}
        q[0]['value'] = kwargs.pop('resource_id')
        q[0]['field'] = 'resource_id'
        q[0]['op'] = 'eq'
    except NameError:
        q[0] = {}
    finally:
        kwargs['q'] = q

    token_id = request.session['token'].id
    return openstack_api.ceilometer_api.post_threshold_alarm(
        token_id, **kwargs)
def create_alarm(request):
    '''  Create new alarm through ceilometer alarm-create api  '''
    if request.method == 'GET':
        return render(request, 'alarms/create_alarm/create_threshold_alarm_basis.html',
                      {
                          'page_type': 'create_alarm',
                          'title': 'Create-alarm',
                          'threshold_step_html': 'alarms/threshold_alarm_basis/_threshold_alarm_step_1.html',
                          'step': '1',
                          'alarm_data': {
                              'machine_type': 'vm',
                          },
                      })
    if request.method == 'POST':
        # Invalid inputs for step will be served with 404 page
        step = request.POST.get('next_step', '1')
        if step is None or step not in ['1', '2', '3', '4', 'post']:
            raise Http404('Invalid value of "step"')

        # alarm_data passes alarm data between alarm-create pages.
        alarm_data = BaseMethods.qdict_to_dict(request.POST)

        if step == 'post':
            return_data = _post_new_alarm(request)
            new_message = [], {}
            if return_data['status'] == 'success':
                messages.success(request, return_data['data']['name'] + " has been created")
            else:
                messages.error(request, return_data['error_msg'])
            return HttpResponseRedirect('/monitor/alarms/')
        else:
            return render(request, 'alarms/create_alarm/create_threshold_alarm_basis.html',
                          {
                              'page_type': 'create_alarm',
                              'threshold_step_html': 'alarms/threshold_alarm_basis/_threshold_alarm_step_' + step + '.html',
                              'step': step,
                              'alarm_data': alarm_data,
                          })
    raise Http404('Unknown method')
    if request.method == 'GET':
        return render(
            request, 'alarms/edit_alarm/edit_threshold_alarm_basis.html', {
                'page_type': 'edit_alarm',
                'title': 'Edit Alarm',
                'threshold_step_html':
                'alarms/threshold_alarm_basis/_threshold_alarm_step_2.html',
                'step': 2,
                'alarm_data': alarm_data
            })
    if request.method == 'POST':
        # Invalid inputs for step will be served with 404 page
        step = request.POST.get('next_step', '2')
        if step is None or step not in ['2', '3', '4', 'post']:
            raise Http404('Invalid value of "step"')
        edited_data = BaseMethods.qdict_to_dict(request.POST)
        edited_data.update(
            original_data)  # Overwrite keys that are not allowed to modify

        if step == 'post':
            return_data = _post_edited_alarm(token_id, edited_data, alarm_id)
            new_message = [], {}
            if return_data['status'] == 'success':
                messages.success(
                    request,
                    return_data['data']['name'] + " has been modified")
            else:
                messages.error(request, return_data['error_msg'])
            return HttpResponseRedirect('/monitor/alarms/')

        return render(
    if request.method == 'GET':
        return render(request, 'alarms/edit_alarm/edit_threshold_alarm_basis.html',
                      {
                          'page_type': 'edit_alarm',
                          'title': 'Edit Alarm',
                          'threshold_step_html': 'alarms/threshold_alarm_basis/_threshold_alarm_step_2.html',
                          'step': 2,
                          'alarm_data': alarm_data
                      })
    if request.method == 'POST':
        # Invalid inputs for step will be served with 404 page
        step = request.POST.get('next_step', '2')
        if step is None or step not in ['2', '3', '4', 'post']:
            raise Http404('Invalid value of "step"')
        edited_data = BaseMethods.qdict_to_dict(request.POST)
        edited_data.update(original_data)  # Overwrite keys that are not allowed to modify

        if step == 'post':
            return_data = _post_edited_alarm(token_id, edited_data, alarm_id)
            new_message = [], {}
            if return_data['status'] == 'success':
                messages.success(request, return_data['data']['name'] + " has been modified")
            else:
                messages.error(request, return_data['error_msg'])
            return HttpResponseRedirect('/monitor/alarms/')

        return render(request, 'alarms/edit_alarm/edit_threshold_alarm_basis.html',
                      {
                          'page_type': 'edit_alarm',
                          'threshold_step_html':