Ver código fonte

服务增加阿里云日志

罗俊辉 11 meses atrás
pai
commit
410916487b

+ 64 - 0
applications/aliyunLog.py

@@ -0,0 +1,64 @@
+"""
+@author: luojunhui
+"""
+import time
+import json
+from aliyun.log import LogClient, PutLogsRequest, LogItem
+
+
+class AliyunArticleLog(object):
+    """
+    Aliyun 长文日志
+    """
+    def __init__(self, request_id, alg):
+        self.request_id = request_id
+        self.alg = alg
+
+    def log(self, code, mode="prod", msg=None, data=None):
+        """
+        :param mode: 生产环境:prod, 测试环境: dev
+        :param code: 状态码
+        :param msg: 消息
+        :param data: json
+        """
+        if data is None:
+            data = {}
+        accessKeyId = "LTAIP6x1l3DXfSxm"
+        accessKey = "KbTaM9ars4OX3PMS6Xm7rtxGr1FLon"
+        project = "changwen-alg"
+        log_store = "long_articles_algorithm"
+        endpoint = "cn-hangzhou.log.aliyuncs.com"
+
+        # 创建 LogClient 实例
+        client = LogClient(endpoint, accessKeyId, accessKey)
+        log_group = []
+        log_item = LogItem()
+        contents = [
+            (f"mode", str(mode)),
+            (f"code", str(code)),
+            (f"alg", str(self.alg)),
+            (f"msg", str(msg)),
+            (f"data", json.dumps(data, ensure_ascii=False) if data else ""),
+            (f"request_id", str(self.request_id)),
+            ("timestamp", str(int(time.time()))),
+        ]
+
+        log_item.set_contents(contents)
+        log_group.append(log_item)
+        # 写入日志
+        request = PutLogsRequest(
+            project=project,
+            logstore=log_store,
+            topic="",
+            source="",
+            logitems=log_group,
+            compress=False,
+        )
+        try:
+            client.put_logs(request)
+        except Exception as e:
+            print("日志失败")
+            print(e)
+
+
+

+ 3 - 2
applications/asyncMySQL.py

@@ -48,13 +48,14 @@ class AsyncMySQLClient(object):
                 result = await cursor.fetchall()
                 return result
 
-    async def async_insert(self, sql):
+    async def async_insert(self, sql, params):
         """
         insert and update method
+        :param params:
         :param sql:
         :return:
         """
         async with self.app.mysql_pool.acquire() as coon:
             async with coon.cursor() as cursor:
-                await cursor.execute(sql)
+                await cursor.execute(sql, params)
                 await coon.commit()

+ 55 - 9
routes/AccountArticleRank.py

@@ -2,7 +2,11 @@
 @author: luojunhui
 """
 import json
+import time
 
+from uuid import uuid4
+
+from applications.aliyunLog import AliyunArticleLog
 from applications.functions import ArticleRank
 from applications.functions import title_sim_v2_by_list
 from applications.functions import get_article_title_url_list
@@ -44,6 +48,8 @@ class AccountArticleRank(object):
         self.accountId = None
         self.params = params
         self.mysql_client = mysql_client
+        self.request_id = "alg-{}-{}".format(uuid4(), int(time.time()))
+        self.logger = AliyunArticleLog(request_id=self.request_id, alg="ArticleRank")
 
     async def check_params(self):
         """
@@ -57,8 +63,11 @@ class AccountArticleRank(object):
             self.strategy = self.params["strategy"]
             self.publishNum = self.params["publishNum"]
             self.publishArticleList = self.params["publishArticleList"]
-            # self.title_list = [i["title"] for i in self.publishArticleList]
-            # self.content_list = [i["content"] for i in self.publishArticleList]
+            self.logger.log(
+                code="1001",
+                msg="参数校验成功",
+                data=self.params
+            )
             return None
         except Exception as e:
             response = {
@@ -66,6 +75,11 @@ class AccountArticleRank(object):
                 "info": "params check failed, params : {} is not correct".format(e),
                 "code": 0,
             }
+            self.logger.log(
+                code="1002",
+                msg="参数校验失败--{}".format(e),
+                data=self.params
+            )
             return response
 
     async def basic_rank(self):
@@ -145,9 +159,17 @@ class AccountArticleRank(object):
             ranked_3 = sorted(ranked_3, key=lambda x:x['score'], reverse=True)
         else:
             ranked_3 = []
+        self.logger.log(
+            code="1004",
+            msg="去重排序完成",
+            data={
+                "rank1": ranked_1,
+                "rank2": ranked_2,
+                "rank3": ranked_3
+            }
+        )
         return ranked_1, ranked_2, ranked_3
 
-
     async def rank_v1(self):
         """
         Rank Version 1
@@ -155,8 +177,6 @@ class AccountArticleRank(object):
         """
         try:
             ranked_1, ranked_2, ranked_3 = await self.basic_rank()
-            # 还要全局去重
-
             try:
                 L = []
                 if ranked_1:
@@ -181,6 +201,11 @@ class AccountArticleRank(object):
                     "publishNum": self.publishNum,
                     "rank_list": L[:self.publishNum],
                 }
+                self.logger.log(
+                    code=1006,
+                    msg="rank successfully",
+                    data=result
+                )
                 response = {"status": "Rank Success", "data": result, "code": 1}
             except Exception as e:
                 result = {
@@ -191,8 +216,12 @@ class AccountArticleRank(object):
                     "publishNum": self.publishNum,
                     "rank_list": self.publishArticleList[: self.publishNum],
                 }
+                self.logger.log(
+                    code=1007,
+                    msg="rank failed because of {}".format(e),
+                    data=result
+                )
                 response = {"status": "Rank Fail", "data": result, "code": 1}
-
             return response
         except:
             result = {"code": 2, "info": "account is not exist"}
@@ -233,14 +262,34 @@ class AccountArticleRank(object):
         """
         match self.strategy:
             case "ArticleRankV1":
+                self.logger.log(
+                    code="1003",
+                    msg="命中排序策略1"
+                )
                 return await self.rank_v1()
             case "ArticleRankV2":
+                self.logger.log(
+                    code="1003",
+                    msg="命中排序策略2"
+                )
                 return await self.rank_v2()
             case "ArticleRankV3":
+                self.logger.log(
+                    code="1003",
+                    msg="命中排序策略3"
+                )
                 return await self.rank_v3()
             case "ArticleRankV4":
+                self.logger.log(
+                    code="1003",
+                    msg="命中排序策略4"
+                )
                 return await self.rank_v4()
             case "ArticleRankV5":
+                self.logger.log(
+                    code="1003",
+                    msg="命中排序策略5"
+                )
                 return await self.rank_v5()
 
     async def deal(self):
@@ -253,6 +302,3 @@ class AccountArticleRank(object):
             return error_params
         else:
             return await self.choose_strategy()
-            # except Exception as e:
-            #     result = {"code": 2, "info": "account is not exist"}
-            #     return result

+ 2 - 2
test/rank_dev.py

@@ -6,9 +6,9 @@ import json
 import requests
 
 
-# url = "http://61.48.133.26:6060/articleRank"
+url = "http://61.48.133.26:6060/articleRank"
 
-url = "http://localhost:6060/articleRank"
+# url = "http://localhost:6060/articleRank"
 
 body = {
     "accountId": "20231213070634699511719",