2020-01-22 23:17:09 +00:00
|
|
|
#!/usr/bin/python3
|
|
|
|
|
2020-01-22 18:29:15 +00:00
|
|
|
# thunix_api.py
|
|
|
|
import flask
|
|
|
|
|
|
|
|
from flask import Flask, request, jsonify
|
2020-01-22 19:28:44 +00:00
|
|
|
|
2020-01-25 02:17:43 +00:00
|
|
|
import psutil, datetime, time, socket
|
2020-01-22 19:28:44 +00:00
|
|
|
|
|
|
|
|
2020-01-22 18:29:15 +00:00
|
|
|
app = Flask(__name__)
|
|
|
|
|
2020-01-22 19:28:44 +00:00
|
|
|
|
2020-01-22 18:29:15 +00:00
|
|
|
# No endpoint selected
|
|
|
|
@app.route("/")
|
|
|
|
def home():
|
|
|
|
return "The Thunix API. Please see https://wiki.thunix.net/wiki/api for more information."
|
|
|
|
app.run()
|
|
|
|
|
2020-01-22 19:28:44 +00:00
|
|
|
|
2020-01-22 18:29:15 +00:00
|
|
|
# ip_info
|
|
|
|
@app.route("/ip_info")
|
|
|
|
def ip_info():
|
2020-01-25 02:17:43 +00:00
|
|
|
def get_ip_addresses(family):
|
|
|
|
for interface, snics in psutil.net_if_addrs().items():
|
|
|
|
for snic in snics:
|
|
|
|
if snic.family == family:
|
|
|
|
yield (interface, snic.address, snic.netmask)
|
|
|
|
|
|
|
|
ipv4s = list(get_ip_addresses(socket.AF_INET))
|
|
|
|
|
|
|
|
|
|
|
|
json_payload = "{\n\t\"Interfaces\":[\n"
|
|
|
|
i = 0
|
|
|
|
for i in range(len(ipv4s)) :
|
|
|
|
json_payload = json_payload + "\t\t{\n"
|
|
|
|
json_payload = json_payload + "\t\t\t\"Interface\":" + "\"" + ipv4s[i][0] + "\",\n"
|
|
|
|
json_payload = json_payload + "\t\t\t\"Address\":" + "\"" + ipv4s[i][1] + "\",\n"
|
|
|
|
json_payload = json_payload + "\t\t\t\"Netmask\":" + "\"" + ipv4s[i][2] + "\"\n"
|
|
|
|
json_payload = json_payload + "\t\t}"
|
|
|
|
i = i + 1
|
|
|
|
if (i < len(ipv4s)) :
|
|
|
|
json_payload = json_payload + ",\n"
|
|
|
|
else:
|
|
|
|
json_payload = json_payload + "\n"
|
|
|
|
json_payload = json_payload + "\t]\n"
|
|
|
|
json_payload = json_payload + "}\n"
|
|
|
|
|
|
|
|
return json_payload
|
2020-01-22 18:29:15 +00:00
|
|
|
app.run()
|
|
|
|
|
2020-01-22 19:28:44 +00:00
|
|
|
|
2020-01-22 18:29:15 +00:00
|
|
|
# uptime
|
|
|
|
@app.route("/uptime")
|
|
|
|
def uptime():
|
2020-01-22 23:17:09 +00:00
|
|
|
with open('/proc/uptime', 'r') as f:
|
|
|
|
secs = float(f.readline().split()[0])
|
|
|
|
day = secs // (24 * 3600)
|
|
|
|
secs = secs % (24 * 3600)
|
|
|
|
hour = secs // 3600
|
|
|
|
secs %= 3600
|
|
|
|
minutes = secs // 60
|
|
|
|
secs %= 60
|
|
|
|
seconds = secs
|
|
|
|
payload = [
|
|
|
|
{
|
|
|
|
"days": day,
|
|
|
|
"hours": hour,
|
|
|
|
"minutes": minutes,
|
|
|
|
"seconds": seconds
|
|
|
|
}
|
|
|
|
]
|
|
|
|
return jsonify(payload)
|
|
|
|
|
2020-01-22 18:29:15 +00:00
|
|
|
app.run()
|
|
|
|
|
2020-01-22 19:28:44 +00:00
|
|
|
|
2020-01-22 18:29:15 +00:00
|
|
|
# teapot
|
|
|
|
@app.route("/teapot")
|
|
|
|
def teapot():
|
2020-01-22 19:28:44 +00:00
|
|
|
teapots = [
|
|
|
|
{
|
|
|
|
"tea": "available",
|
|
|
|
"height": "short",
|
|
|
|
"width": "stout"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
return jsonify(teapots)
|
|
|
|
app.run()
|
|
|
|
|
2020-01-22 18:29:15 +00:00
|
|
|
|
|
|
|
# main loop
|
2020-01-22 19:28:44 +00:00
|
|
|
if __name__ == "__main__": # on running python app.py
|
|
|
|
app.run() # run the flask app
|
|
|
|
|