Ejemplo n.º 1
0
def _update_total_meters_count(request, filters):
    '''
    Temporarily stores total_meters_count into session for speeding up queries
    Result expires after 1000 seconds or filter criteria has changed.
    :param request: Django request object
            criteria:
    :return: (int) total meters' count
    '''
    if 'limit' in filters:
        filters.pop('limit')
    if 'skip' in filters:
        filters.pop('skip')
    if 'total_meters_count' in request.session:
        refreshed_time = request.session['refreshed_time']
        delta = time.time() - refreshed_time
        if delta < 1000 and request.session['criteria_hash'] == filters:
            return
    request.session['refreshed_time'] = time.time()
    request.session['criteria_hash'] = filters

    # TODO: Error handling for hashing meter_list
    # Resend the request purged of limit and skip to get total record number
    token_id = request.session['token'].id
    new_ceilometer_api = CeilometerApi(token_id)

    try:
        meter_list = new_ceilometer_api.get_meters(**filters)
        request.session['total_meters_count'] = len(meter_list)
    except (err.ClientSideError, err.ServerSideError), e:
        request.session['total_meters_count'] = 0
        return _report_error(e.message)
Ejemplo n.º 2
0
def _update_total_meters_count(request, filters):
    '''
    Temporarily stores total_meters_count into session for speeding up queries
    Result expires after 1000 seconds or filter criteria has changed.
    :param request: Django request object
            criteria:
    :return: (int) total meters' count
    '''
    if 'limit' in filters:
        filters.pop('limit')
    if 'skip' in filters:
        filters.pop('skip')
    if 'total_meters_count' in request.session:
        refreshed_time = request.session['refreshed_time']
        delta = time.time() - refreshed_time
        if delta < 1000 and request.session['criteria_hash'] == filters:
            return
    request.session['refreshed_time'] = time.time()
    request.session['criteria_hash'] = filters

    # TODO: Error handling for hashing meter_list
    # Resend the request purged of limit and skip to get total record number
    token_id = request.session['token'].id
    new_ceilometer_api = CeilometerApi(token_id)

    try:
        meter_list = new_ceilometer_api.get_meters(**filters)
        request.session['total_meters_count'] = len(meter_list)
    except (err.ClientSideError, err.ServerSideError), e:
        request.session['total_meters_count'] = 0
        return _report_error(e.message)