def get_samples(request): ''' Get samples of every meter through ceilometer_api In a correctly constructed request, all arrays are treated as meters, while all independent values are treated as url parameters. Example: /api/meters/get-samples?limit=10&cpu_util[]=computer001&cpu_util[]=computer002 &cpu[]=computer001&skip=2 Resolved as: url_parameters = {'limit': 10, 'skip': 2} meters = {'cpu_util': ['computer001', 'computer002'], 'cpu':['computer001']} :param request: :return: ''' # TODO(pwwp): # Apply token management method instead of requesting one each time token_id = request.session['token'].id new_ceilometer_api = CeilometerApi(token_id) meters, kwargs = _request_GET_to_dict(request.GET) result = [] try: for meter_name, resource_ids in meters.iteritems(): for i in range(len(resource_ids)): resource_id = resource_ids[i] result.append({ 'meter_name': meter_name, 'resource_id': resource_id, 'data': new_ceilometer_api.get_samples(meter_name, resource_id=resource_id, **kwargs) }) return HttpResponse(json.dumps({'data': result}), content_type='application/json') except (err.ClientSideError, err.ServerSideError), e: return _report_error(e.message)