StatusDisplay/main.py

94 lines
3.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from flask import Flask, render_template, jsonify
import requests
from concurrent.futures import ThreadPoolExecutor
import socket
import subprocess
import platform
app = Flask(__name__)
def check_status(site):
url = site['url']
if url.startswith('http'):
return check_http_status(site)
elif ':22' in url:
return check_ssh_status(site)
else:
return check_ping_status(site)
def check_http_status(site):
try:
response = requests.get(site['url'], timeout=5)
return {'url': site['url'], 'title': site['title'], 'status': response.status_code == 200}
except:
return {'url': site['url'], 'title': site['title'], 'status': False}
def check_ssh_status(site):
host = site['url'].split(':')[0]
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(2)
result = sock.connect_ex((host, 22))
status = result == 0
sock.close()
return {'url': site['url'], 'title': site['title'], 'status': status}
except:
return {'url': site['url'], 'title': site['title'], 'status': False}
def check_ping_status(site):
host = site['url'].split(':')[0]
param = '-n' if platform.system().lower() == 'windows' else '-c'
command = ['ping', param, '1', host]
try:
output = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
status = output.returncode == 0
return {'url': site['url'], 'title': site['title'], 'status': status}
except Exception as e:
return {'url': site['url'], 'title': site['title'], 'status': False}
#Add your URL´s here.
#For SSH-URL´s please don´t add the http:// and check the Port the SSH Server is running on
#For Normal URL´s please use http:// and the Port the Website runs on
websites = [
{'url': '1.1.1.1', 'title': 'WAN'},
{'url': '192.168.3.11:22', 'title': 'PVE Main'},
{'url': '192.168.3.12:22', 'title': 'PVE Small'},
{'url': 'http://192.168.3.10:80', 'title': 'WLED'},
{'url': 'http://192.168.2.6:8123', 'title': 'HomeAssistant'},
{'url': 'http://192.168.2.3:9999', 'title': 'Stash'},
{'url': 'http://192.168.2.4:3000', 'title': 'GitTea'},
{'url': 'http://192.168.2.8:81', 'title': 'Proxymanager'},
{'url': '192.168.3.14:22', 'title': 'Docker'},
{'url': 'http://192.168.3.17:5000', 'title': 'FoxNAS'},
{'url': '192.168.3.20:22', 'title': 'BackupNAS'},
{'url': 'http://192.168.3.21:8080', 'title': 'AMP'},
{'url': '192.168.100.16:22', 'title': 'VPN Tunnel'},
{'url': '192.168.3.30:22', 'title': 'Nextcloud'},
]
# Add the second Row of URL´s in the same Sceme
websites2 = [
{'url': '192.168.100.65', 'title': 'MacBook'},
{'url': '192.168.100.68', 'title': 'Desktop'},
{'url': '192.168.100.80', 'title': 'iPhone'},
{'url': '192.168.100.84', 'title': 'iPad'},
{'url': '192.168.100.2', 'title': 'MacBookPro 2017'},
]
@app.route('/')
def status_page():
return render_template('status.html', websites=websites, websites2=websites2)
@app.route('/update_status')
def update_status():
with ThreadPoolExecutor(max_workers=10) as executor:
results1 = list(executor.map(check_status, websites))
results2 = list(executor.map(check_status, websites2))
# Combine results from both lists
combined_results = results1 + results2
return jsonify(combined_results)
if __name__ == '__main__':
app.run(debug=True)