def post_alarm(request): ''' Post new alarms through ceilometer API. Notice: This api is protected by csrf_protect. 'X-csrf-token' should be added to request headers . :param request: :return: (JSON) Result of posting new alarm. Return state: 'success' or 'error' ''' token_id = request.session['token'].id new_ceilometer_api = CeilometerApi(token_id) if request.method == 'POST': kwargs = sanitize_arguments(_request_GET_to_dict(request.POST, False), capabilities.ALARM_CAPABILITIES) 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 result = {} try: new_ceilometer_api.post_threshold_alarm(**kwargs) result['status'] = 'success' return HttpResponse(json.dumps(result), content_type='application/json') except (err.ClientSideError, err.ServerSideError), e: return _report_error(e.message)