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 %