mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2026-02-20 08:08:05 -05:00
@@ -54,6 +54,7 @@ def get_mem_usage_pct():
|
|||||||
mylog("verbose", [f"[health] Error calculating memory usage: {e}"])
|
mylog("verbose", [f"[health] Error calculating memory usage: {e}"])
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_load_avg_1m():
|
def get_load_avg_1m():
|
||||||
"""
|
"""
|
||||||
Get 1-minute load average.
|
Get 1-minute load average.
|
||||||
@@ -90,6 +91,7 @@ def get_storage_pct():
|
|||||||
mylog("verbose", [f"[health] Error calculating storage usage: {e}"])
|
mylog("verbose", [f"[health] Error calculating storage usage: {e}"])
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_cpu_temp():
|
def get_cpu_temp():
|
||||||
"""
|
"""
|
||||||
Get CPU temperature from hardware sensors if available.
|
Get CPU temperature from hardware sensors if available.
|
||||||
@@ -117,6 +119,42 @@ def get_cpu_temp():
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def get_mem_mb():
|
||||||
|
"""
|
||||||
|
Get total system memory in MB.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
int: Total memory in MB, or None on error.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
vm = psutil.virtual_memory()
|
||||||
|
total_mb = int(vm.total / (1024 * 1024))
|
||||||
|
return total_mb
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
mylog("verbose", [f"[health] Error getting memory size: {e}"])
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def get_storage_gb():
|
||||||
|
"""
|
||||||
|
Get total storage size of /data in GB.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
float: Total storage in GB, or None on error.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
stat = os.statvfs(dataPath)
|
||||||
|
total = stat.f_blocks * stat.f_frsize
|
||||||
|
|
||||||
|
gb = round(total / (1024 ** 3), 2)
|
||||||
|
return gb
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
mylog("verbose", [f"[health] Error getting storage size: {e}"])
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
# ===============================================================================
|
# ===============================================================================
|
||||||
# Aggregator
|
# Aggregator
|
||||||
# ===============================================================================
|
# ===============================================================================
|
||||||
@@ -134,4 +172,6 @@ def get_health_status():
|
|||||||
"load_1m": get_load_avg_1m(),
|
"load_1m": get_load_avg_1m(),
|
||||||
"storage_pct": get_storage_pct(),
|
"storage_pct": get_storage_pct(),
|
||||||
"cpu_temp": get_cpu_temp(),
|
"cpu_temp": get_cpu_temp(),
|
||||||
|
"storage_gb": get_storage_gb(),
|
||||||
|
"mem_mb": get_mem_mb(),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -667,7 +667,9 @@ class HealthCheckResponse(BaseResponse):
|
|||||||
"mem_usage_pct": 65,
|
"mem_usage_pct": 65,
|
||||||
"load_1m": 2.15,
|
"load_1m": 2.15,
|
||||||
"storage_pct": 42,
|
"storage_pct": 42,
|
||||||
"cpu_temp": 58
|
"cpu_temp": 58,
|
||||||
|
"storage_gb": 8,
|
||||||
|
"mem_mb" : 8192
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -677,6 +679,8 @@ class HealthCheckResponse(BaseResponse):
|
|||||||
load_1m: float = Field(..., description="1-minute load average")
|
load_1m: float = Field(..., description="1-minute load average")
|
||||||
storage_pct: Optional[int] = Field(None, ge=0, le=100, description="Disk usage percentage of /data mount (0-100, nullable if unavailable)")
|
storage_pct: Optional[int] = Field(None, ge=0, le=100, description="Disk usage percentage of /data mount (0-100, nullable if unavailable)")
|
||||||
cpu_temp: Optional[int] = Field(None, description="CPU temperature in Celsius (nullable if unavailable)")
|
cpu_temp: Optional[int] = Field(None, description="CPU temperature in Celsius (nullable if unavailable)")
|
||||||
|
storage_gb: Optional[int] = Field(..., description="Storage size in GB")
|
||||||
|
mem_mb: Optional[int] = Field(..., description="Installed memory size in MB")
|
||||||
|
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|||||||
@@ -82,6 +82,8 @@ def test_health_response_structure(client, api_token):
|
|||||||
assert "load_1m" in data
|
assert "load_1m" in data
|
||||||
assert "storage_pct" in data
|
assert "storage_pct" in data
|
||||||
assert "cpu_temp" in data
|
assert "cpu_temp" in data
|
||||||
|
assert "storage_gb" in data
|
||||||
|
assert "mem_mb" in data
|
||||||
|
|
||||||
|
|
||||||
def test_health_db_size_type(client, api_token):
|
def test_health_db_size_type(client, api_token):
|
||||||
@@ -204,6 +206,8 @@ def test_health_multiple_calls_consistency(client, api_token):
|
|||||||
assert "load_1m" in data
|
assert "load_1m" in data
|
||||||
assert "storage_pct" in data
|
assert "storage_pct" in data
|
||||||
assert "cpu_temp" in data
|
assert "cpu_temp" in data
|
||||||
|
assert "storage_gb" in data
|
||||||
|
assert "mem_mb" in data
|
||||||
|
|
||||||
|
|
||||||
# ========================================================================
|
# ========================================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user