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']), }
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']), }