From 6fc6f204079f80507d63eb57e23c5acca137f42f Mon Sep 17 00:00:00 2001 From: Sergey Krashevich Date: Wed, 3 May 2023 04:09:50 +0300 Subject: [PATCH] add cpu average --- frigate/util.py | 21 +++++++++++++++++++++ web/src/routes/System.jsx | 2 ++ 2 files changed, 23 insertions(+) diff --git a/frigate/util.py b/frigate/util.py index a3eb3a48c..51d619005 100755 --- a/frigate/util.py +++ b/frigate/util.py @@ -803,6 +803,26 @@ def get_cpu_stats() -> dict[str, dict]: pid = process.info["pid"] try: cpu_percent = process.info["cpu_percent"] + + with open(f"/proc/{pid}/stat", "r") as f: + stats = f.readline().split() + utime = int(stats[13]) + stime = int(stats[14]) + starttime = int(stats[21]) + + with open("/proc/uptime") as f: + system_uptime_sec = int(float(f.read().split()[0])) + + clk_tck = os.sysconf(os.sysconf_names["SC_CLK_TCK"]) + + process_utime_sec = utime // clk_tck + process_stime_sec = stime // clk_tck + process_starttime_sec = starttime // clk_tck + + process_elapsed_sec = system_uptime_sec - process_starttime_sec + process_usage_sec = process_utime_sec + process_stime_sec + cpu_average_usage = process_usage_sec * 100 // process_elapsed_sec + with open(f"/proc/{pid}/statm", "r") as f: mem_stats = f.readline().split() mem_res = int(mem_stats[1]) * os.sysconf("SC_PAGE_SIZE") / 1024 @@ -814,6 +834,7 @@ def get_cpu_stats() -> dict[str, dict]: usages[pid] = { "cpu": str(cpu_percent), + "cpu_average": str(round(cpu_average_usage, 2)), "mem": f"{mem_pct}", } except: diff --git a/web/src/routes/System.jsx b/web/src/routes/System.jsx index 7fa5adcb8..1ad295c17 100644 --- a/web/src/routes/System.jsx +++ b/web/src/routes/System.jsx @@ -359,12 +359,14 @@ export default function System() { CPU % + AvgCPU % Memory % {cpu_usages[processes[process]['pid']]?.['cpu'] || '- '}% + {cpu_usages[processes[process]['pid']]?.['cpu_average'] || '- '}% {cpu_usages[processes[process]['pid']]?.['mem'] || '- '}%