diff options
Diffstat (limited to 'ATRI/plugins/status/data_source.py')
-rw-r--r-- | ATRI/plugins/status/data_source.py | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/ATRI/plugins/status/data_source.py b/ATRI/plugins/status/data_source.py index 3595c0c..ddd3568 100644 --- a/ATRI/plugins/status/data_source.py +++ b/ATRI/plugins/status/data_source.py @@ -1,9 +1,9 @@ +import os 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 @@ -11,19 +11,20 @@ from ATRI.exceptions import GetStatusError _status_msg = """ > Status Overview -[CPU: {cpu}%] -[Memory: {mem}%] -[Disk usage: {disk}%] +[CPU: {p_cpu}% of {b_cpu}] +[Memory: {p_mem}% of {b_mem}] +[Disk usage: {p_disk}%] [Net sent: {inteSENT}MB] [Net recv: {inteRECV}MB] -[Runtime: {up_time}] +[Bot runtime: {bot_time}] +[Platform runtime: {boot_time}] {msg} """.strip() -class IsSurvive(Service): +class Status(Service): def __init__(self): Service.__init__(self, "状态", "检查自身状态", rule=is_in_service("状态")) @@ -32,21 +33,29 @@ class IsSurvive(Service): return "I'm fine." @staticmethod - def get_status(): - log.info("开始检查资源消耗...") + def get_status() -> tuple: 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 + inte_send = psutil.net_io_counters().bytes_sent / 1000000 # type: ignore + inte_recv = psutil.net_io_counters().bytes_recv / 1000000 # type: ignore + + process = psutil.Process(os.getpid()) + b_cpu = process.cpu_percent(interval=1) + b_mem = process.memory_percent(memtype="rss") now = time.time() boot = psutil.boot_time() - up_time = str( + b = process.create_time() + boot_time = str( datetime.utcfromtimestamp(now).replace(microsecond=0) - datetime.utcfromtimestamp(boot).replace(microsecond=0) ) + bot_time = str( + datetime.utcfromtimestamp(now).replace(microsecond=0) + - datetime.utcfromtimestamp(b).replace(microsecond=0) + ) except GetStatusError: raise GetStatusError("Failed to get status.") @@ -64,16 +73,18 @@ class IsSurvive(Service): msg = "咱感觉身体要被塞满了..." is_ok = False else: - log.info("资源占用正常") is_ok = True msg0 = _status_msg.format( - cpu=cpu, - mem=mem, - disk=disk, - inteSENT=inteSENT, - inteRECV=inteRECV, - up_time=up_time, + p_cpu=cpu, + p_mem=mem, + p_disk=disk, + b_cpu=f"{b_cpu}%", + b_mem="%.1f%%" % b_mem, + inteSENT=inte_send, + inteRECV=inte_recv, + bot_time=bot_time, + boot_time=boot_time, msg=msg, ) |