mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-07-20 03:16:14 +00:00
Merge pull request #661 from RockChinQ/perf/audit-v2
Feat: 优化 v2 审计 API 调用逻辑
This commit is contained in:
+2
-2
@@ -362,8 +362,8 @@ rate_limit_strategy = "drop"
|
|||||||
upgrade_dependencies = False
|
upgrade_dependencies = False
|
||||||
|
|
||||||
# 是否上报统计信息
|
# 是否上报统计信息
|
||||||
# 用于统计机器人的使用情况,不会收集任何用户信息
|
# 用于统计机器人的使用情况,数据不公开,不会收集任何敏感信息。
|
||||||
# 仅上报时间、字数使用量、绘图使用量,其他信息不会上报
|
# 仅实例识别UUID、上报时间、字数使用量、绘图使用量、插件使用情况、用户信息,其他信息不会上报
|
||||||
report_usage = True
|
report_usage = True
|
||||||
|
|
||||||
# 日志级别
|
# 日志级别
|
||||||
|
|||||||
@@ -37,27 +37,6 @@ class DataGatherer:
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def report_to_server(self, subservice_name: str, count: int):
|
|
||||||
"""向中央服务器报告使用量
|
|
||||||
|
|
||||||
只会报告此次请求的使用量,不会报告总量。
|
|
||||||
不包含除版本号、使用类型、使用量以外的任何信息,仅供开发者分析使用情况。
|
|
||||||
"""
|
|
||||||
|
|
||||||
def thread_func():
|
|
||||||
|
|
||||||
try:
|
|
||||||
config = context.get_config_manager().data
|
|
||||||
if not config['report_usage']:
|
|
||||||
return
|
|
||||||
res = requests.get("http://reports.rockchin.top:18989/usage?service_name=qchatgpt.{}&version={}&count={}&msg_source={}".format(subservice_name, self.version_str, count, config['msg_source_adapter']))
|
|
||||||
if res.status_code != 200 or res.text != "ok":
|
|
||||||
logging.warning("report to server failed, status_code: {}, text: {}".format(res.status_code, res.text))
|
|
||||||
except:
|
|
||||||
return
|
|
||||||
|
|
||||||
threading.Thread(target=thread_func).start()
|
|
||||||
|
|
||||||
def get_usage(self, key_md5):
|
def get_usage(self, key_md5):
|
||||||
return self.usage[key_md5] if key_md5 in self.usage else {}
|
return self.usage[key_md5] if key_md5 in self.usage else {}
|
||||||
|
|
||||||
@@ -79,8 +58,6 @@ class DataGatherer:
|
|||||||
self.usage[key_md5]["text"][model] += length
|
self.usage[key_md5]["text"][model] += length
|
||||||
self.dump_to_db()
|
self.dump_to_db()
|
||||||
|
|
||||||
self.report_to_server("text", length)
|
|
||||||
|
|
||||||
def report_image_model_usage(self, size):
|
def report_image_model_usage(self, size):
|
||||||
"""调用方报告图片模型请求图片使用量"""
|
"""调用方报告图片模型请求图片使用量"""
|
||||||
|
|
||||||
@@ -98,8 +75,6 @@ class DataGatherer:
|
|||||||
self.usage[key_md5]["image"][size] += 1
|
self.usage[key_md5]["image"][size] += 1
|
||||||
self.dump_to_db()
|
self.dump_to_db()
|
||||||
|
|
||||||
self.report_to_server("image", 1)
|
|
||||||
|
|
||||||
def get_text_length_of_key(self, key):
|
def get_text_length_of_key(self, key):
|
||||||
"""获取指定api-key (明文) 的文字总使用量(本地记录)"""
|
"""获取指定api-key (明文) 的文字总使用量(本地记录)"""
|
||||||
key_md5 = hashlib.md5(key.encode('utf-8')).hexdigest()
|
key_md5 = hashlib.md5(key.encode('utf-8')).hexdigest()
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from .. import apigroup
|
from .. import apigroup
|
||||||
|
from ... import context
|
||||||
|
|
||||||
|
|
||||||
class V2MainDataAPI(apigroup.APIGroup):
|
class V2MainDataAPI(apigroup.APIGroup):
|
||||||
@@ -9,6 +10,12 @@ class V2MainDataAPI(apigroup.APIGroup):
|
|||||||
def __init__(self, prefix: str):
|
def __init__(self, prefix: str):
|
||||||
super().__init__(prefix+"/main")
|
super().__init__(prefix+"/main")
|
||||||
|
|
||||||
|
def do(self, *args, **kwargs):
|
||||||
|
config = context.get_config_manager().data
|
||||||
|
if not config['report_usage']:
|
||||||
|
return None
|
||||||
|
return super().do(*args, **kwargs)
|
||||||
|
|
||||||
def post_update_record(
|
def post_update_record(
|
||||||
self,
|
self,
|
||||||
spent_seconds: int,
|
spent_seconds: int,
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from .. import apigroup
|
from .. import apigroup
|
||||||
|
from ... import context
|
||||||
|
|
||||||
|
|
||||||
class V2PluginDataAPI(apigroup.APIGroup):
|
class V2PluginDataAPI(apigroup.APIGroup):
|
||||||
@@ -9,6 +10,12 @@ class V2PluginDataAPI(apigroup.APIGroup):
|
|||||||
def __init__(self, prefix: str):
|
def __init__(self, prefix: str):
|
||||||
super().__init__(prefix+"/plugin")
|
super().__init__(prefix+"/plugin")
|
||||||
|
|
||||||
|
def do(self, *args, **kwargs):
|
||||||
|
config = context.get_config_manager().data
|
||||||
|
if not config['report_usage']:
|
||||||
|
return None
|
||||||
|
return super().do(*args, **kwargs)
|
||||||
|
|
||||||
def post_install_record(
|
def post_install_record(
|
||||||
self,
|
self,
|
||||||
plugin: dict
|
plugin: dict
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from .. import apigroup
|
from .. import apigroup
|
||||||
|
from ... import context
|
||||||
|
|
||||||
|
|
||||||
class V2UsageDataAPI(apigroup.APIGroup):
|
class V2UsageDataAPI(apigroup.APIGroup):
|
||||||
@@ -8,6 +9,12 @@ class V2UsageDataAPI(apigroup.APIGroup):
|
|||||||
|
|
||||||
def __init__(self, prefix: str):
|
def __init__(self, prefix: str):
|
||||||
super().__init__(prefix+"/usage")
|
super().__init__(prefix+"/usage")
|
||||||
|
|
||||||
|
def do(self, *args, **kwargs):
|
||||||
|
config = context.get_config_manager().data
|
||||||
|
if not config['report_usage']:
|
||||||
|
return None
|
||||||
|
return super().do(*args, **kwargs)
|
||||||
|
|
||||||
def post_query_record(
|
def post_query_record(
|
||||||
self,
|
self,
|
||||||
|
|||||||
Reference in New Issue
Block a user