From 013a9def25c8c9112acd420f9bf39c5af8075294 Mon Sep 17 00:00:00 2001 From: Rock Chin <1010553892@qq.com> Date: Wed, 4 Jan 2023 17:59:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=8A=E6=8A=A5=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E9=87=8F=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config-template.py | 5 +++++ pkg/audit/gatherer.py | 19 ++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/config-template.py b/config-template.py index b1025463..e2550136 100644 --- a/config-template.py +++ b/config-template.py @@ -115,6 +115,11 @@ retry_times = 3 # 默认值20分钟 session_expire_time = 60 * 20 +# 是否上报统计信息 +# 用于统计机器人的使用情况,不会收集任何用户信息 +# 仅上报时间、字数使用量、绘图使用量,其他信息不会上报 +report_usage = True + # 日志级别 logging_level = logging.INFO diff --git a/pkg/audit/gatherer.py b/pkg/audit/gatherer.py index 292f2c16..2eaaad76 100644 --- a/pkg/audit/gatherer.py +++ b/pkg/audit/gatherer.py @@ -1,8 +1,13 @@ import hashlib import json +import logging + +import requests import pkg.utils.context +version = "0.1.0" + class DataGatherer: """数据收集器""" @@ -19,6 +24,14 @@ class DataGatherer: def __init__(self): self.load_from_db() + def report_to_server(self, subservice_name: str, count: int): + config = pkg.utils.context.get_config() + if hasattr(config, "report_usage") and not config.report_usage: + return + res = requests.get("http://rockchin.top:18989/usage?service_name=qchatgpt.{}&version={}&count={}".format(subservice_name, version, count)) + if res.status_code != 200 or res.text != "ok": + logging.warning("report to server failed, status_code: {}, text: {}".format(res.status_code, res.text)) + def report_text_model_usage(self, model, text): key_md5 = pkg.utils.context.get_openai_manager().key_mgr.get_using_key_md5() @@ -31,10 +44,12 @@ class DataGatherer: if model not in self.usage[key_md5]["text"]: self.usage[key_md5]["text"][model] = 0 - length = ((len(text.encode('utf-8')) - len(text)) / 2 + len(text)) + length = int((len(text.encode('utf-8')) - len(text)) / 2 + len(text)) self.usage[key_md5]["text"][model] += length self.dump_to_db() + self.report_to_server("text", length) + def report_image_model_usage(self, size): key_md5 = pkg.utils.context.get_openai_manager().key_mgr.get_using_key_md5() @@ -50,6 +65,8 @@ class DataGatherer: self.usage[key_md5]["image"][size] += 1 self.dump_to_db() + self.report_to_server("image", 1) + def get_text_length_of_key(self, key): key_md5 = hashlib.md5(key.encode('utf-8')).hexdigest() if key_md5 not in self.usage: