commit 468a7c37b0cd98e5c8f52a1d45e02d78d3f23177 Author: bMorgan01 Date: Mon Aug 21 00:55:21 2023 -0600 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ba0430d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__/ \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..e93b1be --- /dev/null +++ b/main.py @@ -0,0 +1,102 @@ +import json +from flask import Flask, jsonify +import subprocess + +def remove_empty_lists(item): + if isinstance(item, list): + if len(item) == 1: + return remove_empty_lists(item[0]) + else: + return [remove_empty_lists(n) for n in item] + elif isinstance(item, dict): + return {k: remove_empty_lists(v) for k, v in item.items()} + else: + return item + +app = Flask(__name__) + +@app.route("/") +def hello(): + return "

API is active!

" + +@app.route("/api/status") +def status(): + return jsonify({"status": "active"}) + +@app.route("/api/cpu") +def cpu(): + sys_out = subprocess.run(["mpstat", "-P", "ALL", "-o", "JSON", "1", "1"], capture_output = True, text = True).stdout + cpu_out = subprocess.run(["cat", "/proc/cpuinfo"], capture_output = True, text = True).stdout + + cpu_dict = dict() + sub_dict = dict() + count = 0 + for line in cpu_out.strip().split("\n"): + line = line.strip() + if len(line) == 0: + cpu_dict[str(count)] = sub_dict + sub_dict = dict() + count += 1 + continue + + line = " ".join(line.split()) + + items = line.split(" : ") + + if len(items) < 2: + continue + + sub_dict[items[0]] = items[1] + cpu_dict[str(count)] = sub_dict + + out = remove_empty_lists(json.loads(sys_out)['sysstat']) + out.update({"cpus": cpu_dict}) + return jsonify(out) + +@app.route("/api/temps") +def temps(): + out = subprocess.run(["sensors", "-A", "-j"], capture_output = True, text = True).stdout + return jsonify(json.loads(out)) + +@app.route("/api/disks") +def disks(): + out = subprocess.run(["iostat", "-d", "-o", "JSON"], capture_output = True, text = True).stdout + return jsonify(remove_empty_lists(json.loads(out))) + +@app.route("/api/memory") +def memory(): + out = subprocess.run(["free"], capture_output = True, text = True).stdout + out = out.strip().split("\n") + + headers = out[0].split() + mem = out[1].split()[1:] + split = out[2].split()[1:] + + both_dict = dict() + mem_dict = dict() + for i in range(len(headers)): + mem_dict[headers[i]] = mem[i] + + swap_dict = dict() + for i in range(len(split)): + swap_dict[headers[i]] = split[i] + + return jsonify({"mem:": mem_dict, "swap": swap_dict}) + +@app.route("/api/network") +def network(): + wan_out = subprocess.run(["dig", "TXT", "+short", "o-o.myaddr.l.google.com", "@ns1.google.com"], capture_output = True, text = True).stdout.strip()[1:-1] + lan_out = subprocess.run(["ip", "addr"], capture_output = True, text = True).stdout.strip() + + lan_dict = dict() + interface = "" + for line in lan_out.split("\n"): + if line[0].isdigit(): + interface = line.split()[1][:-1] + lan_dict[interface] = dict() + elif "inet " in line: + lan_dict[interface]["inet"] = line.split()[1].split("/")[0] + elif "inet6" in line: + lan_dict[interface]["inet6"] = line.split()[1].split("/")[0] + + return jsonify({"wan": wan_out, "lan": lan_dict}) \ No newline at end of file