summaryrefslogtreecommitdiff
path: root/ATRI/plugins/status/data_source.py
diff options
context:
space:
mode:
Diffstat (limited to 'ATRI/plugins/status/data_source.py')
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,
)