mirror of
https://github.com/suyiiyii/nonebot-bison.git
synced 2026-06-23 14:16:52 +08:00
✨ 初步添加 metrics
This commit is contained in:
@@ -12,6 +12,7 @@ from nonebot.adapters.onebot.v11.event import PrivateMessageEvent
|
||||
from .api import router as api_router
|
||||
from ..plugin_config import plugin_config
|
||||
from .token_manager import token_manager as tm
|
||||
from .api import metrics_router as metrics_router
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from nonebot.drivers.fastapi import Driver
|
||||
@@ -46,6 +47,7 @@ def init_fastapi(driver: "Driver"):
|
||||
description="nonebot-bison webui and api",
|
||||
)
|
||||
nonebot_app.include_router(api_router)
|
||||
nonebot_app.include_router(metrics_router)
|
||||
nonebot_app.mount("/", SinglePageApplication(directory=static_path), name="bison-frontend")
|
||||
|
||||
app = driver.server_app
|
||||
|
||||
@@ -3,11 +3,13 @@ from typing import cast
|
||||
import nonebot
|
||||
from fastapi import status
|
||||
from fastapi.routing import APIRouter
|
||||
from starlette.responses import Response
|
||||
from fastapi.param_functions import Depends
|
||||
from fastapi.exceptions import HTTPException
|
||||
from nonebot_plugin_saa import TargetQQGroup
|
||||
from nonebot_plugin_saa.auto_select_bot import get_bot
|
||||
from fastapi.security.oauth2 import OAuth2PasswordBearer
|
||||
from prometheus_client import CONTENT_TYPE_LATEST, generate_latest
|
||||
|
||||
from ..types import WeightConfig
|
||||
from ..apis import check_sub_target
|
||||
@@ -283,3 +285,11 @@ async def get_cookie_valid(site_name: str, content: str) -> StatusResp:
|
||||
return StatusResp(ok=True, msg="")
|
||||
else:
|
||||
return StatusResp(ok=False, msg="")
|
||||
|
||||
|
||||
metrics_router = APIRouter(prefix="/api/metrics", tags=["metrics"])
|
||||
|
||||
|
||||
@metrics_router.get("")
|
||||
async def metrics():
|
||||
return Response(media_type=CONTENT_TYPE_LATEST, content=generate_latest())
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
from prometheus_client import Counter
|
||||
|
||||
# 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")
|
||||
|
||||
# Sent counter
|
||||
sent_counter = Counter("bison_sent_counter", "The number of sent messages")
|
||||
@@ -6,6 +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 ..config import config
|
||||
from ..send import send_msgs
|
||||
@@ -93,6 +94,7 @@ class Scheduler:
|
||||
logger.trace(f"scheduler {self.name} fetching next target: [{schedulable.platform_name}]{schedulable.target}")
|
||||
|
||||
context = ProcessContext(self.client_mgr)
|
||||
request_counter.inc()
|
||||
|
||||
try:
|
||||
platform_obj = platform_manager[schedulable.platform_name](context)
|
||||
@@ -116,10 +118,10 @@ class Scheduler:
|
||||
logger.warning("API request record: " + record)
|
||||
err.args += (records,)
|
||||
raise
|
||||
|
||||
success_counter.inc()
|
||||
if not to_send:
|
||||
return
|
||||
|
||||
sent_counter.inc()
|
||||
for user, send_list in to_send:
|
||||
for send_post in send_list:
|
||||
logger.info(f"send to {user}: {send_post}")
|
||||
|
||||
Reference in New Issue
Block a user