예제 #1
0
def search_view(request):
    data, errors = preprocess_request(
        request,
        schema=SearchSchema(),
        accept_empty=True,
    )

    data['geoip'] = request.client_addr
    session = request.db_slave_session
    result = PositionSearcher(
        {
            'geoip': request.registry.geoip_db,
            'session': session
        },
        api_key_log=getattr(request, 'api_key_log', False),
        api_key_name=getattr(request, 'api_key_name', None),
        api_name='search',
    ).search(data)

    if not result:
        return {'status': 'not_found'}

    return {
        'status': 'ok',
        'lat': result['lat'],
        'lon': result['lon'],
        'accuracy': result['accuracy'],
    }
예제 #2
0
def search_view(request):
    api_key = request.GET.get('key', None)
    heka_client = get_heka_client()

    if api_key is None:
        # TODO: change into a better error response
        heka_client.incr('search.no_api_key')
        return {'status': 'not_found'}

    heka_client.incr('search.api_key')

    data, errors = preprocess_request(
        request,
        schema=SearchSchema(),
        extra_checks=(check_cell_or_wifi, ),
    )

    session = request.db_slave_session
    result = None

    if data['wifi']:
        result = search_wifi(session, data)
        if result is not None:
            heka_client.incr('search.wifi_hit')
    if result is None:
        # no wifi result found, fall back to cell
        result = search_cell(session, data)
        if result is not None:
            heka_client.incr('search.cell_hit')
    if result is None and request.client_addr:
        # no cell or wifi, fall back again to geoip
        result = search_geoip(request.registry.geoip_db,
                              request.client_addr)
        if result is not None:
            heka_client.incr('search.geoip_hit')

    if result is None:
        heka_client.incr('search.miss')
        return {'status': 'not_found'}

    return {
        'status': 'ok',
        'lat': result['lat'],
        'lon': result['lon'],
        'accuracy': result['accuracy'],
    }
예제 #3
0
파일: views.py 프로젝트: graydon/ichnaea
def search_view(request):
    heka_client = get_heka_client()

    data, errors = preprocess_request(
        request,
        schema=SearchSchema(),
        extra_checks=(check_cell_or_wifi, ),
    )

    session = request.db_slave_session
    result = None

    if data['wifi']:
        result = search_wifi(session, data)
        if result is not None:
            heka_client.incr('search.wifi_hit')
    if result is None:
        # no wifi result found, fall back to cell
        result = search_cell(session, data)
        if result is not None:
            heka_client.incr('search.cell_hit')
    if result is None:
        # no direct cell result found, try cell LAC
        result = search_cell_lac(session, data)
        if result is not None:
            heka_client.incr('search.cell_lac_hit')
    if result is None and request.client_addr:
        # no cell or wifi, fall back again to geoip
        result = search_geoip(request.registry.geoip_db,
                              request.client_addr)
        if result is not None:
            heka_client.incr('search.geoip_hit')

    if result is None:
        heka_client.incr('search.miss')
        return {'status': 'not_found'}

    return {
        'status': 'ok',
        'lat': result['lat'],
        'lon': result['lon'],
        'accuracy': result['accuracy'],
    }
예제 #4
0
파일: views.py 프로젝트: walexi/ichnaea
def search_view(request):
    data, errors = preprocess_request(
        request,
        schema=SearchSchema(),
        accept_empty=True,
    )

    session = request.db_slave_session
    result = search_all_sources(
        session, 'search', data,
        client_addr=request.client_addr,
        geoip_db=request.registry.geoip_db,
        api_key_log=getattr(request, 'api_key_log', False),
        api_key_name=getattr(request, 'api_key_name', None))

    if not result:
        return {'status': 'not_found'}

    return {
        'status': 'ok',
        'lat': result['lat'],
        'lon': result['lon'],
        'accuracy': result['accuracy'],
    }
예제 #5
0
파일: tests.py 프로젝트: simudream/ichnaea
 def _make_schema(self):
     from ichnaea.service.search.schema import SearchSchema
     return SearchSchema()