@@ -130,10 +130,13 @@ def get_db_path(*, check: bool = True) -> Path:
130130 return db
131131
132132
133+ # NOTE:
134+ # - this logging might appear multiple times in the logs for the same db/mtime because server uses multiple threads
135+ # - lru cache isn't ideal perhaps because there is no cleanup happening? but hasn't caused any issues so far
133136@lru_cache (1 )
134137# PathWithMtime aids lru_cache in reloading the sqlalchemy binder
135138def _get_stuff (db_path : PathWithMtime ) -> DbStuff :
136- get_logger ().debug ('Reloading DB: %s' , db_path )
139+ get_logger ().debug (f'reloading db: { db_path } ' )
137140 return get_db_stuff (db_path = db_path .path )
138141
139142
@@ -169,12 +172,11 @@ def search_common(url: str, where: Where) -> VisitsResponse:
169172 logger = get_logger ()
170173 config = EnvConfig .get ()
171174
172- logger .info ('url: %s' , url )
173175 original_url = url and url .strip ()
174176 url = canonify (original_url )
175177 if not url : # Don't eliminate a "#tag" query.
176178 url = original_url
177- logger .info ( 'normalised url: %s' , url )
179+ logger .debug ( f 'normalised url { original_url !r } to { url !r } ' )
178180
179181 engine , table = get_stuff ()
180182
@@ -192,7 +194,7 @@ def search_common(url: str, where: Where) -> VisitsResponse:
192194 # return result
193195 raise
194196
195- logger .debug ('got %d visits from db' , len ( visits ) )
197+ logger .debug (f 'got { len ( visits ) } visits from db, responding' )
196198
197199 vlist : list [DbVisit ] = []
198200 for vis in visits :
@@ -202,7 +204,6 @@ def search_common(url: str, where: Where) -> VisitsResponse:
202204 vis = vis ._replace (dt = dt )
203205 vlist .append (vis )
204206
205- logger .debug ('responding with %d visits' , len (vlist ))
206207 # TODO respond with normalised result, then frontent could choose how to present children/siblings/whatever?
207208 return VisitsResponse (
208209 original_url = original_url ,
@@ -215,32 +216,34 @@ def search_common(url: str, where: Where) -> VisitsResponse:
215216# perhasp should switch to get for most endpoint
216217@app .get ('/status' , response_model = Json ) # fmt: skip
217218@app .post ('/status' , response_model = Json ) # fmt: skip
218- def status () -> Json :
219+ def status (fastapi_request : fastapi . Request ) -> Json :
219220 '''
220221 Ideally, status will always respond, regardless the internal state of the backend?
221222 '''
222- logger = get_logger ()
223+ get_logger (). debug ( f' { fastapi_request . url . path } ' )
223224
224225 db = get_db_path (check = False )
225- try :
226- assert db . exists (), db
226+ db_exists : bool = db . exists ()
227+ if db_exists :
227228 db_path = str (db )
228- except Exception as e :
229- logger .exception (e )
230- db_path = f'ERROR: db not found/unreadable (expected path { db } ). You probably forgot to run indexer first. See https://github.com/karlicoss/promnesia/blob/master/doc/TROUBLESHOOTING.org'
229+ else :
230+ db_path = f'ERROR: db not found/unreadable (expected path { db } ). You likely forgot to run indexer first. See https://github.com/karlicoss/promnesia/blob/master/doc/TROUBLESHOOTING.org.'
231231
232232 stats : Json
233- try :
234- stats = db_stats (db )
235- except Exception as e :
236- logger .exception (e )
237- stats = {'ERROR' : str (e )}
233+ if db_exists :
234+ try :
235+ stats = db_stats (db )
236+ except Exception as e :
237+ stats = {'ERROR' : str (e )}
238+ else :
239+ stats = {'ERROR' : 'db file does not exist' }
238240
239241 version : str | None
240242 try :
241243 version = get_version ()
242244 except Exception as e :
243- logger .exception (e )
245+ # this shouldn't really fail at all, so fine to log exception always
246+ get_logger ().exception (e )
244247 version = None
245248
246249 return {
@@ -257,11 +260,10 @@ class VisitsRequest:
257260
258261@app .get ('/visits' , response_model = VisitsResponse ) # fmt: skip
259262@app .post ('/visits' , response_model = VisitsResponse ) # fmt: skip
260- def visits (request : VisitsRequest ) -> VisitsResponse :
261- url = request .url
262- get_logger ().info ('/visited %s' , url )
263+ def visits (request : VisitsRequest , fastapi_request : fastapi .Request ) -> VisitsResponse :
264+ get_logger ().debug (f'{ fastapi_request .url .path } { request } ' )
263265 return search_common (
264- url = url ,
266+ url = request . url ,
265267 # odd, doesn't work just with: x or (y and z)
266268 where = lambda table , url : or_ (
267269 # exact match
@@ -279,21 +281,18 @@ class SearchRequest:
279281
280282@app .get ('/search' , response_model = VisitsResponse ) # fmt: skip
281283@app .post ('/search' , response_model = VisitsResponse ) # fmt: skip
282- def search (request : SearchRequest ) -> VisitsResponse :
283- url = request .url
284- get_logger ().info ('/search %s' , url )
285- # fmt: off
284+ def search (request : SearchRequest , fastapi_request : fastapi .Request ) -> VisitsResponse :
285+ get_logger ().debug (f'{ fastapi_request .url .path } { request } ' )
286286 return search_common (
287- url = url ,
287+ url = request . url ,
288288 where = lambda table , url : or_ (
289289 # todo hmm. think about it, not sure if I need proper indexer for fuzzy search etc?
290290 table .c .norm_url .contains (url , autoescape = True ),
291291 table .c .orig_url .contains (url , autoescape = True ),
292292 table .c .context .contains (url , autoescape = True ),
293293 table .c .locator_title .contains (url , autoescape = True ),
294294 ),
295- )
296- # fmt: on
295+ ) # fmt: skip
297296
298297
299298@dataclass
@@ -303,10 +302,9 @@ class SearchAroundRequest:
303302
304303@app .get ('/search_around' , response_model = VisitsResponse ) # fmt: skip
305304@app .post ('/search_around' , response_model = VisitsResponse ) # fmt: skip
306- def search_around (request : SearchAroundRequest ) -> VisitsResponse :
307- timestamp = request .timestamp
308- get_logger ().info ('/search_around %s' , timestamp )
309- utc_timestamp = timestamp # old 'timestamp' name is legacy
305+ def search_around (request : SearchAroundRequest , fastapi_request : fastapi .Request ) -> VisitsResponse :
306+ get_logger ().debug (f'{ fastapi_request .url .path } { request } ' )
307+ utc_timestamp = request .timestamp # old 'timestamp' name is legacy
310308
311309 # TODO meh. use count/pagination instead?
312310 delta_back = timedelta (hours = 3 ).total_seconds ()
@@ -366,14 +364,12 @@ class VisitedRequest:
366364
367365@app .get ('/visited' , response_model = VisitedResponse ) # fmt: skip
368366@app .post ('/visited' , response_model = VisitedResponse ) # fmt: skip
369- def visited (request : VisitedRequest ) -> VisitedResponse :
370- # TODO instead switch logging to fastapi
367+ def visited (request : VisitedRequest , fastapi_request : fastapi .Request ) -> VisitedResponse :
368+ get_logger ().debug (f'{ fastapi_request .url .path } { request } ' )
369+
371370 urls = request .urls
372371 client_version = request .client_version
373372
374- logger = get_logger ()
375- logger .info ('/visited %s %s' , urls , client_version )
376-
377373 _version = as_version (client_version ) # todo use it?
378374
379375 nurls = [canonify (u ) for u in urls ]
0 commit comments