diff options
| author | Kyomotoi <kyomotoiowo@gmail.com> | 2021-07-08 22:09:00 +0800 | 
|---|---|---|
| committer | Kyomotoi <kyomotoiowo@gmail.com> | 2021-07-08 22:09:00 +0800 | 
| commit | be2747e4d4b820ca0f1f988d3b77a628da26fe7b (patch) | |
| tree | e1a59dd79ecd973a7d704568dcdc018f1f1b651a /ATRI/plugins/status | |
| parent | a4e1b9d1581d756ef79ad063d1c0bd6b2fd13c1d (diff) | |
| download | ATRI-be2747e4d4b820ca0f1f988d3b77a628da26fe7b.tar.gz ATRI-be2747e4d4b820ca0f1f988d3b77a628da26fe7b.tar.bz2 ATRI-be2747e4d4b820ca0f1f988d3b77a628da26fe7b.zip | |
🔖♻️🐛🔧🔥📝 更新版本:YHN-001-A03
🔖 更新版本至:YHN-001-A03
✨ 新增插件:
    - 涩图
    - 闲聊(文爱
♻️ 重构:
    - Service
    - 所有插件
🐛 修复部分小bug
🔧 暂时移除部分设置
🔥 删除:
    - 插件:nsfw、wife。日后加回
    - 插件 essential 中部分内容
📝 更新README
Diffstat (limited to 'ATRI/plugins/status')
| -rw-r--r-- | ATRI/plugins/status/__init__.py | 26 | ||||
| -rw-r--r-- | ATRI/plugins/status/data_source.py | 71 | 
2 files changed, 97 insertions, 0 deletions
| 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 | 
