Skip to content

Commit dee2f63

Browse files
committed
added disk space and cpu_usuage deets
1 parent 3761f18 commit dee2f63

File tree

2 files changed

+103
-13
lines changed

2 files changed

+103
-13
lines changed

service/helper.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
import os
2+
import time
3+
4+
5+
def kb_to_mb(kb_value):
6+
return kb_value / 1024
7+
8+
9+
def bytes_to_mb(value):
10+
return value / (1024**2)
11+
12+
13+
def mb_to_gb(mb_value):
14+
return mb_value / 1024
15+
16+
117
def get_memory_info():
218
mem_info = {}
319

@@ -11,3 +27,59 @@ def get_memory_info():
1127
mem_info[key] = value
1228

1329
return mem_info
30+
31+
32+
def get_disk_usage(path="/"):
33+
# Get the file system statistics for the specified path
34+
statvfs = os.statvfs(path)
35+
36+
# Calculate the disk space in bytes
37+
total_space = statvfs.f_frsize * statvfs.f_blocks # Total space
38+
free_space = statvfs.f_frsize * statvfs.f_bfree # Free space
39+
# Space available to non-superuser
40+
available_space = statvfs.f_frsize * statvfs.f_bavail
41+
# Used space
42+
used_space = total_space - free_space
43+
44+
# Convert bytes to MB
45+
total_space_mb = bytes_to_mb(total_space)
46+
free_space_mb = bytes_to_mb(free_space)
47+
used_space_mb = bytes_to_mb(used_space)
48+
49+
return {
50+
"total_space_mb": total_space_mb,
51+
"used_space_mb": used_space_mb,
52+
"free_space_mb": free_space_mb,
53+
}
54+
55+
56+
def get_cpu_usage():
57+
# Read the initial CPU stats
58+
with open("/proc/stat", "r") as f:
59+
first_line = f.readline()
60+
61+
# Extract CPU values from the first line
62+
cpu_times = list(
63+
map(int, first_line.split()[1:])
64+
) # Skip the first element (CPU label)
65+
total_time1 = sum(cpu_times) # Total time spent in all states
66+
67+
# Wait for a short period (1 second)
68+
time.sleep(1)
69+
70+
# Read the CPU stats again
71+
with open("/proc/stat", "r") as f:
72+
second_line = f.readline()
73+
74+
# Extract CPU values from the second line
75+
cpu_times = list(map(int, second_line.split()[1:]))
76+
total_time2 = sum(cpu_times)
77+
78+
# Calculate the differences
79+
total_diff = total_time2 - total_time1
80+
idle_diff = cpu_times[3] - cpu_times[3] # Idle time is usually the fourth value
81+
82+
# Calculate CPU usage percentage
83+
cpu_usage = 100 * (1 - (idle_diff / total_diff))
84+
85+
return cpu_usage

service/views.py

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from io import StringIO
2020
from datetime import datetime
2121
from collections import defaultdict
22-
from .helper import get_memory_info
22+
from .helper import get_memory_info, kb_to_mb, get_disk_usage, get_cpu_usage
2323

2424
APP_START_TIME = datetime.now()
2525

@@ -38,18 +38,36 @@ def health_check(request, *args, **kwargs):
3838

3939
memory_info = get_memory_info()
4040

41-
# Extract specific memory details (if available)
42-
total_memory = memory_info.get("MemTotal")
43-
free_memory = memory_info.get("MemFree")
44-
available_memory = memory_info.get("MemAvailable")
45-
cached_memory = memory_info.get("Cached")
46-
buffered_memory = memory_info.get("Buffers")
47-
48-
print(f"Total Memory: {total_memory}")
49-
print(f"Free Memory: {free_memory}")
50-
print(f"Available Memory: {available_memory}")
51-
print(f"Cached Memory: {cached_memory}")
52-
print(f"Buffered Memory: {buffered_memory}")
41+
# Extract specific memory details
42+
total_memory = kb_to_mb(memory_info.get("MemTotal"))
43+
free_memory = kb_to_mb(memory_info.get("MemFree"))
44+
available_memory = kb_to_mb(memory_info.get("MemAvailable"))
45+
46+
used_memory = total_memory - available_memory
47+
48+
used_memory_percentage = (used_memory / total_memory) * 100
49+
50+
data["free_memory"] = f"{free_memory:.2f} MB"
51+
data["total_memory"] = f"{total_memory:.2f} MB"
52+
data["memory_usage"] = f"{used_memory_percentage:.2f} %"
53+
54+
disk_usage = get_disk_usage("/")
55+
56+
total_disk_space_gb = disk_usage["total_space_mb"] / 1024
57+
disk_usage_percentage = (
58+
disk_usage["used_space_mb"] / disk_usage["total_space_mb"]
59+
) / 100
60+
61+
data["total_space_mb"] = f"{disk_usage['total_space_mb']:.2f} MB"
62+
data["used_space_mb"] = f"{disk_usage['used_space_mb']:.2f} MB"
63+
data["free_space_mb"] = f"{disk_usage['free_space_mb']:.2f} MB"
64+
data["disk_usage_percentage"] = (
65+
f"{disk_usage_percentage:.2f} % of {total_disk_space_gb:.2f}"
66+
)
67+
68+
cpu_usage = get_cpu_usage()
69+
70+
data["cpu_usuage"] = f"{cpu_usage:.2f}%"
5371

5472
# Check app status
5573
data["status"] = "OK"

0 commit comments

Comments
 (0)