|
|
@@ -0,0 +1,78 @@
|
|
|
+import time
|
|
|
+
|
|
|
+from app.core.database import DatabaseManager
|
|
|
+from app.core.observability import LogService
|
|
|
+
|
|
|
+
|
|
|
+class RankLogMonitorMapper:
|
|
|
+ def __init__(self, pool: DatabaseManager, log_service: LogService):
|
|
|
+ self.pool = pool
|
|
|
+ self.log_service = log_service
|
|
|
+
|
|
|
+ async def fetch_accounts(self):
|
|
|
+ query = """
|
|
|
+ SELECT DISTINCT gh_id FROM rank_content_score;
|
|
|
+ """
|
|
|
+ response = await self.pool.async_fetch(query=query)
|
|
|
+ return [
|
|
|
+ i.get("gh_id") for i in response
|
|
|
+ ]
|
|
|
+
|
|
|
+ async def fetch_articles(self, gh_id: str):
|
|
|
+ query = """
|
|
|
+ SELECT gh_id, account_name, content_pool_type, strategy, title, score, score_map, category
|
|
|
+ FROM rank_content_score
|
|
|
+ WHERE gh_id = %s
|
|
|
+ ;
|
|
|
+ """
|
|
|
+ return await self.pool.async_fetch(query=query, params=(gh_id,))
|
|
|
+
|
|
|
+
|
|
|
+ async def save_records(self, rank_date: str, records: list[dict]) -> int:
|
|
|
+ now_ts = int(time.time())
|
|
|
+ params = []
|
|
|
+ for row in records:
|
|
|
+ params.append(
|
|
|
+ (
|
|
|
+ rank_date,
|
|
|
+ row.get("account_name"),
|
|
|
+ row.get("gh_id"),
|
|
|
+ row.get("content_pool_type"),
|
|
|
+ row.get("strategy"),
|
|
|
+ row.get("title"),
|
|
|
+ row.get("score"),
|
|
|
+ row.get("category"),
|
|
|
+ row.get("account_user_category_score"),
|
|
|
+ row.get("category_score"),
|
|
|
+ row.get("flow_ctl_decrease_score"),
|
|
|
+ row.get("i2i_recommend_score"),
|
|
|
+ row.get("view_count_rate_score"),
|
|
|
+ row.get("his_fission_open_rate_score"),
|
|
|
+ row.get("crawler_days_decrease_score"),
|
|
|
+ row.get("similarity_score"),
|
|
|
+ row.get("source_log"),
|
|
|
+ now_ts,
|
|
|
+ now_ts,
|
|
|
+ )
|
|
|
+ )
|
|
|
+
|
|
|
+ if not params:
|
|
|
+ return 0
|
|
|
+ INSERT_LONG_ARTICLES_DAILY_RANK_SQL = """
|
|
|
+ INSERT INTO long_articles_daily_rank
|
|
|
+ (
|
|
|
+ rank_date, account_name, gh_id, content_pool_type, strategy, title, score, category,
|
|
|
+ account_user_category_score, category_score, flow_ctl_decrease_score, i2i_recommend_score,
|
|
|
+ view_count_rate_score, his_fission_open_rate_score, crawler_days_decrease_score, similarity_score,
|
|
|
+ source_log, create_timestamp, update_timestamp
|
|
|
+ )
|
|
|
+ VALUES
|
|
|
+ (
|
|
|
+ %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s
|
|
|
+ );
|
|
|
+ """
|
|
|
+ return await self.pool.async_save(
|
|
|
+ query=INSERT_LONG_ARTICLES_DAILY_RANK_SQL,
|
|
|
+ params=params,
|
|
|
+ batch=True,
|
|
|
+ )
|