From c0ef176bfd1b5712ff1fbfe900feeb83a01a7550 Mon Sep 17 00:00:00 2001 From: ZhymabekRoman Date: Fri, 23 Feb 2024 10:49:43 +0600 Subject: [PATCH] Trying to fix some strange DB bug --- core/medium_parser/cache_db.py | 12 +++++++----- core/medium_parser/core.py | 5 +++++ server/middlewares/logger.py | 4 ++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/core/medium_parser/cache_db.py b/core/medium_parser/cache_db.py index 79931df..d698d09 100644 --- a/core/medium_parser/cache_db.py +++ b/core/medium_parser/cache_db.py @@ -1,6 +1,7 @@ from typing import Union import sqlite3 import json +from loguru import logger from warnings import warn try: import sqlite_zstd @@ -9,7 +10,7 @@ except ImportError: sqlite_zstd = None class CacheResponse: - __slots__ = ('data') + __slots__ = ('data',) def __init__(self, data: str): self.data = data @@ -28,8 +29,8 @@ class SQLiteCacheBackend: self.connection = sqlite3.connect(database) self.connection.enable_load_extension(True) # Enable loading of extensions self.connection.execute("PRAGMA foreign_keys = ON") # Need for working with foreign keys in db - self.connection.execute("PRAGMA journal_mode=WAL") - self.connection.execute("PRAGMA auto_vacuum=full") + self.connection.execute("PRAGMA journal_mode=WAL") # Need to properly work with ZSTD compression + self.connection.execute("PRAGMA auto_vacuum=full") # Same as above thing self.cursor = self.connection.cursor() if sqlite_zstd is not None: @@ -45,8 +46,8 @@ class SQLiteCacheBackend: def random(self, size: int): with self.connection: - return self.cursor.execute("SELECT * FROM cache ORDER BY RANDOM() LIMIT :0", {'0': size}).fetchall() - + return self.cursor.execute("SELECT * FROM cache ORDER BY RANDOM() LIMIT ?", (size,)).fetchall() + def enable_zstd(self): if sqlite_zstd is None: raise ValueError("Can't use zstd compression. Please install 'sqlite_zstd' package") @@ -68,6 +69,7 @@ class SQLiteCacheBackend: with self.connection: cache = self.cursor.execute("SELECT value FROM cache WHERE key = :0", {'0': key}).fetchone() if cache: + logger.debug("Value found in DB, returning it") return CacheResponse(cache[0]) def push(self, key: str, value: str) -> None: diff --git a/core/medium_parser/core.py b/core/medium_parser/core.py index f09eebb..0508663 100644 --- a/core/medium_parser/core.py +++ b/core/medium_parser/core.py @@ -72,6 +72,7 @@ class MediumParser: if post_data: logger.debug("post query was found on cache") return post_data.json() + logger.debug(f"No data found in cache by {self.post_id}") return None async def get_post_data_from_api(self): @@ -84,8 +85,12 @@ class MediumParser: return None async def query(self, use_cache: bool = True, retry: int = 3): + logger.debug(f"Medium QUERY: {use_cache=}, {retry=}") post_data = await self.get_post_data_from_cache() if use_cache else None + if not post_data: + logger.debug("Getting value from cache failed, using API") + attempt = 0 while not post_data and attempt < retry: try: diff --git a/server/middlewares/logger.py b/server/middlewares/logger.py index 88fbc70..1a68ce4 100644 --- a/server/middlewares/logger.py +++ b/server/middlewares/logger.py @@ -34,7 +34,7 @@ class LoggerMiddleware(BaseHTTPMiddleware): transponder_code_correlation.set(transponder_code) url_correlation.set(request.url) with logger.contextualize(id=generated_id): - logger.trace(f"Current ID '{generated_id}' transponder code is '{transponder_code}'") + logger.debug(f"Current ID '{generated_id}' transponder code is '{transponder_code}'") logger.trace(request.__dict__) await request.body() @@ -64,7 +64,7 @@ class LoggerMiddleware(BaseHTTPMiddleware): except Exception as ex: exception_class = type(ex) logger.exception(ex) - send_message(f"Error while processing url: {url_correlation.get()}, transponder_code: {transponder_code_correlation.get()}, error: {ex}. exception: {exception_class.__name__}. {home_page_process.get(transponder_code_correlation.get(), '')}") + send_message(f"Error while processing url: {url_correlation.get()}, transponder_id: {generated_id}, transponder_code: {transponder_code_correlation.get()}, error: {ex}. exception: {exception_class.__name__}. {home_page_process.get(transponder_code_correlation.get(), '')}") response = await generate_error() logger.trace(response.__dict__)