From be2747e4d4b820ca0f1f988d3b77a628da26fe7b Mon Sep 17 00:00:00 2001 From: Kyomotoi Date: Thu, 8 Jul 2021 22:09:00 +0800 Subject: =?UTF-8?q?=F0=9F=94=96=E2=99=BB=EF=B8=8F=F0=9F=90=9B=F0=9F=94=A7?= =?UTF-8?q?=F0=9F=94=A5=F0=9F=93=9D=20=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=EF=BC=9AYHN-001-A03?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🔖 更新版本至:YHN-001-A03 ✨ 新增插件: - 涩图 - 闲聊(文爱 ♻️ 重构: - Service - 所有插件 🐛 修复部分小bug 🔧 暂时移除部分设置 🔥 删除: - 插件:nsfw、wife。日后加回 - 插件 essential 中部分内容 📝 更新README --- ATRI/plugins/status/__init__.py | 26 ++++++++++++++ ATRI/plugins/status/data_source.py | 71 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 ATRI/plugins/status/__init__.py create mode 100644 ATRI/plugins/status/data_source.py (limited to 'ATRI/plugins/status') diff --git a/ATRI/plugins/status/__init__.py b/ATRI/plugins/status/__init__.py new file mode 100644 index 0000000..8955cb1 --- /dev/null +++ b/ATRI/plugins/status/__init__.py @@ -0,0 +1,26 @@ +from nonebot.adapters.cqhttp import Bot, MessageEvent + +from ATRI.utils.apscheduler import scheduler +from .data_source import IsSurvive + + +ping = IsSurvive().on_command("/ping", "检测bot简单信息处理速度") + +@ping.handle() +async def _ping(bot: Bot, event: MessageEvent): + await ping.finish(IsSurvive.ping()) + + +status = IsSurvive().on_command("/status", "查看运行资源占用") + +@status.handle() +async def _status(bot: Bot, event: MessageEvent): + msg, _ = IsSurvive.get_status() + await status.finish(msg) + + +@scheduler.scheduled_job("interval", minutes=10, misfire_grace_time=15) +async def _status_checking(): + msg, stat = IsSurvive().get_status() + if not stat: + await status.finish(msg) diff --git a/ATRI/plugins/status/data_source.py b/ATRI/plugins/status/data_source.py new file mode 100644 index 0000000..c353313 --- /dev/null +++ b/ATRI/plugins/status/data_source.py @@ -0,0 +1,71 @@ +import time +import psutil +from datetime import datetime + +from ATRI.service import Service +from ATRI.log import logger as log +from ATRI.rule import is_in_service +from ATRI.exceptions import GetStatusError + + +__doc__ = """ +检查咱自身状态 +""" + + +class IsSurvive(Service): + + def __init__(self): + Service.__init__(self, "状态", __doc__, rule=is_in_service("状态")) + + @staticmethod + def ping() -> str: + return "I'm fine." + + @staticmethod + def get_status(): + log.info("开始检查资源消耗...") + try: + cpu = psutil.cpu_percent(interval=1) + mem = psutil.virtual_memory().percent + disk = psutil.disk_usage("/").percent + inteSENT = psutil.net_io_counters().bytes_sent / 1000000 # type: ignore + inteRECV = psutil.net_io_counters().bytes_recv / 1000000 # type: ignore + + now = time.time() + boot = psutil.boot_time() + up_time = str( + datetime.utcfromtimestamp(now).replace(microsecond=0) + - datetime.utcfromtimestamp(boot).replace(microsecond=0) + ) + except GetStatusError: + raise GetStatusError("Failed to get status.") + + msg = "アトリは、高性能ですから!" + if cpu > 90: # type: ignore + msg = "咱感觉有些头晕..." + is_ok = False + if mem > 90: + msg = "咱感觉有点头晕并且有点累..." + is_ok = False + elif mem > 90: + msg = "咱感觉有点累..." + is_ok = False + elif disk > 90: + msg = "咱感觉身体要被塞满了..." + is_ok = False + else: + log.info("资源占用正常") + is_ok = True + + msg0 = ( + "Self status:\n" + f"* CPU: {cpu}%\n" + f"* MEM: {mem}%\n" + f"* DISK: {disk}%\n" + f"* netSENT: {inteSENT}MB\n" + f"* netRECV: {inteRECV}MB\n" + f"* Runtime: {up_time}\n" + ) + msg + + return msg0, is_ok -- cgit v1.2.3