예제 #1
0
def geolocate_view(request):
    heka_client = get_heka_client()

    data, errors = preprocess_request(
        request,
        schema=GeoLocateSchema(),
        extra_checks=(geolocate_validator, ),
        response=JSONError,
        accept_empty=True,
    )

    session = request.db_slave_session
    result = None

    if data and data['wifiAccessPoints']:
        result = search_wifi_ap(session, data)
        if result is not None:
            heka_client.incr('geolocate.wifi_hit')
            heka_client.timer_send('geolocate.accuracy.wifi',
                                   result['accuracy'])
    elif data:
        result = search_cell_tower(session, data)
        if result is not None:
            heka_client.incr('geolocate.cell_hit')
            heka_client.timer_send('geolocate.accuracy.cell',
                                   result['accuracy'])

        if result is None:
            result = search_cell_tower_lac(session, data)
            if result is not None:
                heka_client.incr('geolocate.cell_lac_hit')
                heka_client.timer_send('geolocate.accuracy.cell_lac',
                                       result['accuracy'])

    if result is None and request.client_addr:
        result = search_geoip(request.registry.geoip_db,
                              request.client_addr)
        if result is not None:
            heka_client.incr('geolocate.geoip_hit')
            heka_client.timer_send('geolocate.accuracy.geoip',
                                   result['accuracy'])

    if result is None:
        heka_client.incr('geolocate.miss')
        result = HTTPNotFound()
        result.content_type = 'application/json'
        result.body = NOT_FOUND
        return result

    return {
        "location": {
            "lat": result['lat'],
            "lng": result['lon'],
        },
        "accuracy": float(result['accuracy']),
    }
예제 #2
0
파일: views.py 프로젝트: abhi12ravi/ichnaea
def geolocate_view(request):
    api_key = request.GET.get('key', None)
    heka_client = get_heka_client()

    if api_key is None:
        heka_client.incr('geolocate.no_api_key')

        result = HTTPBadRequest()
        result.content_type = 'application/json'
        result.body = NO_API_KEY
        return result

    heka_client.incr('geolocate.api_key.%s' % api_key.replace('.', '__'))

    data, errors = preprocess_request(
        request,
        schema=GeoLocateSchema(),
        extra_checks=(geolocate_validator, ),
        response=JSONError,
    )

    session = request.db_slave_session
    result = None

    if data['wifiAccessPoints']:
        result = search_wifi_ap(session, data)
        if result is not None:
            heka_client.incr('geolocate.wifi_hit')
    else:
        result = search_cell_tower(session, data)
        if result is not None:
            heka_client.incr('geolocate.cell_hit')

    if result is None and request.client_addr:
        result = search_geoip(request.registry.geoip_db,
                              request.client_addr)
        if result is not None:
            heka_client.incr('geolocate.geoip_hit')

    if result is None:
        heka_client.incr('geolocate.miss')
        result = HTTPNotFound()
        result.content_type = 'application/json'
        result.body = NOT_FOUND
        return result

    return {
        "location": {
            "lat": result['lat'],
            "lng": result['lon'],
        },
        "accuracy": float(result['accuracy']),
    }
예제 #3
0
def geolocate_view(request):
    api_key = request.GET.get('key', None)
    heka_client = get_heka_client()

    if api_key is None:
        heka_client.incr('geolocate.no_api_key')

        result = HTTPBadRequest()
        result.content_type = 'application/json'
        result.body = NO_API_KEY
        return result

    heka_client.incr('geolocate.api_key.%s' % api_key.replace('.', '__'))

    data, errors = preprocess_request(
        request,
        schema=GeoLocateSchema(),
        extra_checks=(geolocate_validator, ),
        response=JSONError,
    )

    session = request.db_slave_session
    result = None

    if data['wifiAccessPoints']:
        result = search_wifi_ap(session, data)
        if result is not None:
            heka_client.incr('geolocate.wifi_hit')
    else:
        result = search_cell_tower(session, data)
        if result is not None:
            heka_client.incr('geolocate.cell_hit')

    if result is None and request.client_addr:
        result = search_geoip(request.registry.geoip_db, request.client_addr)
        if result is not None:
            heka_client.incr('geolocate.geoip_hit')

    if result is None:
        heka_client.incr('geolocate.miss')
        result = HTTPNotFound()
        result.content_type = 'application/json'
        result.body = NOT_FOUND
        return result

    return {
        "location": {
            "lat": result['lat'],
            "lng": result['lon'],
        },
        "accuracy": float(result['accuracy']),
    }