feat: restore cron page, email in navbar, metrics pipeline v1.3.19
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
import os
|
||||
import urllib.request
|
||||
import urllib.error
|
||||
import json
|
||||
|
||||
COLLECTOR_URL = "http://metrics-collector.fission.svc.cluster.local:8091/metrics"
|
||||
|
||||
def main():
|
||||
payload = {
|
||||
"source": "fission-cron-metrics",
|
||||
"hostname": os.uname().nodename,
|
||||
"status": "ok",
|
||||
}
|
||||
|
||||
# CPU load
|
||||
try:
|
||||
load = os.getloadavg()
|
||||
payload["cpu_load_1m"] = load[0]
|
||||
payload["cpu_load_5m"] = load[1]
|
||||
payload["cpu_load_15m"] = load[2]
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Memory
|
||||
try:
|
||||
with open("/proc/meminfo") as f:
|
||||
meminfo = {}
|
||||
for line in f:
|
||||
k, v = line.split(":")
|
||||
meminfo[k.strip()] = int(v.split()[0])
|
||||
total = meminfo.get("MemTotal", 0) / 1024
|
||||
free = meminfo.get("MemFree", 0) / 1024
|
||||
avail = meminfo.get("MemAvailable", 0) / 1024
|
||||
used = total - free
|
||||
payload["memory_total_mb"] = round(total, 1)
|
||||
payload["memory_free_mb"] = round(free, 1)
|
||||
payload["memory_available_mb"] = round(avail, 1)
|
||||
payload["memory_used_mb"] = round(used, 1)
|
||||
payload["memory_percent"] = round(used / total * 100, 1) if total else 0
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Disk
|
||||
try:
|
||||
st = os.statvfs("/")
|
||||
total_gb = st.f_blocks * st.f_frsize / 1024**3
|
||||
free_gb = st.f_bfree * st.f_frsize / 1024**3
|
||||
used_gb = total_gb - free_gb
|
||||
payload["disk_total_gb"] = round(total_gb, 1)
|
||||
payload["disk_free_gb"] = round(free_gb, 1)
|
||||
payload["disk_used_gb"] = round(used_gb, 1)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Uptime
|
||||
try:
|
||||
with open("/proc/uptime") as f:
|
||||
payload["uptime_sec"] = float(f.read().split()[0])
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
data = json.dumps(payload).encode()
|
||||
req = urllib.request.Request(
|
||||
COLLECTOR_URL,
|
||||
data=data,
|
||||
headers={"Content-Type": "application/json"},
|
||||
method="POST",
|
||||
)
|
||||
try:
|
||||
with urllib.request.urlopen(req, timeout=5) as resp:
|
||||
return {"ok": True, "status": resp.status}
|
||||
except urllib.error.URLError as e:
|
||||
return {"ok": False, "error": str(e)}
|
||||
Reference in New Issue
Block a user