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)
def get_alarms(request): ''' Fetch alarms for a query. Filter options supported by Ceilometer includes: name: alarm name, user: user_id, project: project_id, meter: meter_name enabled, state, alarm_id, alarm_type Additional filter enabled by editing pymongo_base: resource: resource_id :param request: :return: ''' arrays, filters = _request_GET_to_dict(request.GET) filters = sanitize_arguments(filters, capabilities.ALARM_LIST_CAPABILITIES) token_id = request.session['token'].id new_ceilometer_api = CeilometerApi(token_id) try: result = {} result['status'] = 'success' result['data'] = new_ceilometer_api.get_alarms(**filters) result['recordsTotal'] = len(result['data']) result['recordsFiltered'] = len(result['data']) print 'success' return HttpResponse(json.dumps(result), content_type='application/json') except (err.ClientSideError, err.ServerSideError), e: print 'fail' return _report_error(e.message)
def get_alarms(request): ''' Fetch alarms for a query. Filter options supported by Ceilometer includes: name: alarm name, user: user_id, project: project_id, meter: meter_name enabled, state, alarm_id, alarm_type Additional filter enabled by editing pymongo_base: resource: resource_id :param request: :return: ''' arrays, filters = _request_GET_to_dict(request.GET) filters = sanitize_arguments(filters, capabilities.ALARM_LIST_CAPABILITIES) token_id = request.session['token'].id new_ceilometer_api = CeilometerApi(token_id) try: result = {} result['status'] = 'success' result['data'] = new_ceilometer_api.get_alarms(**filters) result['recordsTotal'] = len(result['data']) result['recordsFiltered'] = len(result['data']) print 'success' return HttpResponse(json.dumps(result), content_type='application/json') except (err.ClientSideError, err.ServerSideError), e: print 'fail' return _report_error(e.message)
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)
def get_resources(request): ''' Get resource list through Ceilometer API :param request: Django request object :return: ''' arrays, filters = _request_GET_to_dict(request.GET) filters = sanitize_arguments(filters, capabilities.RESOURCE_LIST_CAPABILITIES) token_id = request.session['token'].id new_ceilometer_api = CeilometerApi(token_id) try: result = ceilometer_api.get_resources(token_id, **filters) return HttpResponse(json.dumps(result), content_type='application/json') except (err.ClientSideError, err.ServerSideError), e: return _report_error(e.message)
def get_resources(request): ''' Get resource list through Ceilometer API :param request: Django request object :return: ''' arrays, filters = _request_GET_to_dict(request.GET) filters = sanitize_arguments(filters, capabilities.RESOURCE_LIST_CAPABILITIES) token_id = request.session['token'].id new_ceilometer_api = CeilometerApi(token_id) try: result = ceilometer_api.get_resources(token_id, **filters) return HttpResponse(json.dumps(result), content_type='application/json') except (err.ClientSideError, err.ServerSideError), e: return _report_error(e.message)
# argument 'q' is designed for supporting complex query, which have not # been implement on the back-end side. Thus, we unpack 'q' into # simple query form. # Example: q: {'resource_id': 'computer001'} # Output: filter['resource_id'] = 'computer001' try: if 'q' in args: for query_item in args['q']: filters[query_item['field']] = query_item['value'] except KeyError, e: # Currently malformated query objects(q) are ignored. pass #return _report_error('KeyError', e) filters = sanitize_arguments(filters, capabilities.METER_LIST_CAPABILITIES) result = {} try: result['data'] = new_ceilometer_api.get_meters(**filters) except (err.ClientSideError, err.ServerSideError), e: return _report_error(e.message) _update_total_meters_count(request, filters) result['recordsTotal'] = request.session['total_meters_count'] result['recordsFiltered'] = request.session['total_meters_count'] return HttpResponse(json.dumps(result), content_type='application/json') @decorators.login_required def get_predict_meters(request):
# argument 'q' is designed for supporting complex query, which have not # been implement on the back-end side. Thus, we unpack 'q' into # simple query form. # Example: q: {'resource_id': 'computer001'} # Output: filter['resource_id'] = 'computer001' try: if 'q' in args: for query_item in args['q']: filters[query_item['field']] = query_item['value'] except KeyError, e: # Currently malformated query objects(q) are ignored. pass #return _report_error('KeyError', e) filters = sanitize_arguments(filters, capabilities.METER_LIST_CAPABILITIES) result = {} try: result['data'] = new_ceilometer_api.get_meters(**filters) except (err.ClientSideError, err.ServerSideError), e: return _report_error(e.message) _update_total_meters_count(request, filters) result['recordsTotal'] = request.session['total_meters_count'] result['recordsFiltered'] = request.session['total_meters_count'] return HttpResponse(json.dumps(result), content_type='application/json') @decorators.login_required def get_predict_meters(request):