使用 label 简化 request_counter

This commit is contained in:
suyiiyii 2024-12-12 13:08:27 +08:00
parent 073bd314fc
commit 80f924123d
Signed by: suyiiyii
GPG Key ID: 044704CB29B8AD85
2 changed files with 19 additions and 9 deletions

View File

@ -3,12 +3,13 @@ from starlette.responses import Response
from prometheus_client import CONTENT_TYPE_LATEST, Counter, generate_latest
# Request counter
request_counter = Counter("bison_request_counter", "The number of requests")
# Success counter
success_counter = Counter("bison_success_counter", "The number of successful requests")
request_counter = Counter(
"bison_request_counter", "The number of requests", ["site_name", "platform_name", "target", "success"]
)
# Sent counter
sent_counter = Counter("bison_sent_counter", "The number of sent messages")
sent_counter = Counter("bison_sent_counter", "The number of sent messages", ["site_name", "platform_name", "target"])
metrics_router = APIRouter(prefix="/api/metrics", tags=["metrics"])

View File

@ -6,7 +6,7 @@ from nonebot_plugin_apscheduler import scheduler
from nonebot_plugin_saa.utils.exceptions import NoBotFound
from nonebot_bison.utils import ClientManager
from nonebot_bison.metrics import sent_counter, request_counter, success_counter
from nonebot_bison.metrics import sent_counter, request_counter
from ..config import config
from ..send import send_msgs
@ -94,10 +94,10 @@ class Scheduler:
logger.trace(f"scheduler {self.name} fetching next target: [{schedulable.platform_name}]{schedulable.target}")
context = ProcessContext(self.client_mgr)
request_counter.inc()
success_flag = False
platform_obj = platform_manager[schedulable.platform_name](context)
try:
platform_obj = platform_manager[schedulable.platform_name](context)
if schedulable.use_batch:
batch_targets = self.batch_api_target_cache[schedulable.platform_name][schedulable.target]
sub_units = []
@ -110,6 +110,7 @@ class Scheduler:
schedulable.platform_name, schedulable.target
)
to_send = await platform_obj.do_fetch_new_post(SubUnit(schedulable.target, send_userinfo_list))
success_flag = True
except SkipRequestException as err:
logger.debug(f"skip request: {err}")
except Exception as err:
@ -118,10 +119,18 @@ class Scheduler:
logger.warning("API request record: " + record)
err.args += (records,)
raise
success_counter.inc()
request_counter.labels(
platform_name=schedulable.platform_name,
site_name=platform_obj.site.name,
target=schedulable.target,
success=success_flag,
).inc()
if not to_send:
return
sent_counter.inc()
sent_counter.labels(
platform_name=schedulable.platform_name, site_name=platform_obj.site.name, target=schedulable.target
).inc()
for user, send_list in to_send:
for send_post in send_list:
logger.info(f"send to {user}: {send_post}")