mirror of https://github.com/Aidaho12/haproxy-wi
251 lines
11 KiB
Python
251 lines
11 KiB
Python
from pytz import timezone
|
|
from flask import render_template, request, jsonify, g
|
|
from flask_login import login_required
|
|
from datetime import datetime
|
|
|
|
from app.routes.smon import bp
|
|
from middleware import get_user_params
|
|
import app.modules.db.sql as sql
|
|
import app.modules.common.common as common
|
|
import app.modules.roxywi.auth as roxywi_auth
|
|
import app.modules.roxywi.common as roxywi_common
|
|
import app.modules.tools.smon as smon_mod
|
|
|
|
|
|
@bp.before_request
|
|
@login_required
|
|
def before_request():
|
|
""" Protect all of the admin endpoints. """
|
|
pass
|
|
|
|
|
|
@bp.route('/dashboard')
|
|
@get_user_params()
|
|
def smon():
|
|
roxywi_common.check_user_group_for_flask()
|
|
|
|
user_params = g.user_params
|
|
user_group = roxywi_common.get_user_group(id=1)
|
|
smon = sql.smon_list(user_group)
|
|
smon_status, stderr = smon_mod.return_smon_status()
|
|
user_subscription = roxywi_common.return_user_subscription()
|
|
|
|
return render_template(
|
|
'smon/dashboard.html', autorefresh=1, role=user_params['role'], user=user_params['user'], group=user_group,
|
|
lang=user_params['lang'], smon_status=smon_status, smon_error=stderr, user_services=user_params['user_services'],
|
|
user_status=user_subscription['user_status'], smon=smon, user_plan=user_subscription['user_plan'], token=user_params['token']
|
|
)
|
|
|
|
|
|
@bp.route('/dashboard/<dashboard_id>/<check_id>')
|
|
@get_user_params()
|
|
def smon_dashboard(dashboard_id, check_id):
|
|
user_params = g.user_params
|
|
check_id = int(check_id)
|
|
roxywi_common.check_user_group_for_flask()
|
|
user_subscription = roxywi_common.return_user_subscription()
|
|
smon_name = sql.get_smon_service_name_by_id(dashboard_id)
|
|
check_interval = sql.get_setting('smon_check_interval')
|
|
smon = sql.select_one_smon(dashboard_id, check_id)
|
|
present = datetime.now(timezone('UTC'))
|
|
present = present.strftime('%b %d %H:%M:%S %Y %Z')
|
|
present = datetime.strptime(present, '%b %d %H:%M:%S %Y %Z')
|
|
cert_day_diff = 'N/A'
|
|
count_checks = sql.get_smon_history_count_checks(dashboard_id, check_id)
|
|
|
|
try:
|
|
uptime = round(count_checks['up'] * 100 / count_checks['total'], 2)
|
|
except Exception:
|
|
uptime = 0
|
|
try:
|
|
avg_res_time = round(sql.get_avg_resp_time(dashboard_id, check_id), 2)
|
|
except Exception:
|
|
avg_res_time = 0
|
|
try:
|
|
last_resp_time = round(sql.get_last_smon_res_time_by_check(dashboard_id, check_id), 2)
|
|
except Exception:
|
|
last_resp_time = 0
|
|
|
|
for s in smon:
|
|
if s.smon_id.ssl_expire_date is not None:
|
|
ssl_expire_date = datetime.strptime(s.smon_id.ssl_expire_date, '%Y-%m-%d %H:%M:%S')
|
|
cert_day_diff = (ssl_expire_date - present).days
|
|
|
|
return render_template(
|
|
'include/smon/smon_history.html', autorefresh=1, role=user_params['role'], user=user_params['user'], smon=smon,
|
|
lang=user_params['lang'], user_status=user_subscription['user_status'], check_interval=check_interval,
|
|
user_plan=user_subscription['user_plan'], token=user_params['token'], uptime=uptime, avg_res_time=avg_res_time,
|
|
user_services=user_params['user_services'], smon_name=smon_name, cert_day_diff=cert_day_diff, check_id=check_id,
|
|
dashboard_id=dashboard_id, last_resp_time=last_resp_time
|
|
)
|
|
|
|
|
|
@bp.route('/history')
|
|
@get_user_params()
|
|
def smon_history():
|
|
roxywi_common.check_user_group_for_flask()
|
|
|
|
user_group = roxywi_common.get_user_group(id=1)
|
|
smon_status, stderr = smon_mod.return_smon_status()
|
|
smon = sql.alerts_history('SMON', user_group)
|
|
user_subscription = roxywi_common.return_user_subscription()
|
|
user_params = g.user_params
|
|
|
|
return render_template(
|
|
'smon/history.html', autorefresh=0, role=user_params['role'], user=user_params['user'], smon=smon, lang=user_params['lang'],
|
|
user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'], token=user_params['token'],
|
|
smon_status=smon_status, smon_error=stderr, user_services=user_params['user_services']
|
|
)
|
|
|
|
|
|
@bp.route('/history/host/<server_ip>')
|
|
@get_user_params()
|
|
def smon_host_history(server_ip):
|
|
roxywi_common.check_user_group_for_flask()
|
|
|
|
needed_host = common.is_ip_or_dns(server_ip)
|
|
user_group = roxywi_common.get_user_group(id=1)
|
|
smon_status, stderr = smon_mod.return_smon_status()
|
|
smon = sql.alerts_history('SMON', user_group, host=needed_host)
|
|
user_subscription = roxywi_common.return_user_subscription()
|
|
user_params = g.user_params
|
|
|
|
return render_template(
|
|
'smon/history.html', autorefresh=0, role=user_params['role'], user=user_params['user'], smon=smon,
|
|
lang=user_params['lang'], user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'],
|
|
token=user_params['token'], smon_status=smon_status, smon_error=stderr, user_services=user_params['user_services']
|
|
)
|
|
|
|
|
|
@bp.route('/history/metric/<int:dashboard_id>/<int:check_id>')
|
|
def smon_history_metric(dashboard_id, check_id):
|
|
return jsonify(smon_mod.history_metrics(dashboard_id, check_id))
|
|
|
|
|
|
@bp.route('/history/statuses/<int:dashboard_id>/<int:check_id>')
|
|
def smon_history_statuses(dashboard_id, check_id):
|
|
return smon_mod.history_statuses(dashboard_id, check_id)
|
|
|
|
|
|
@bp.route('/history/cur_status/<int:dashboard_id>/<int:check_id>')
|
|
def smon_history_cur_status(dashboard_id, check_id):
|
|
return smon_mod.history_cur_status(dashboard_id, check_id)
|
|
|
|
|
|
@bp.route('/admin')
|
|
@get_user_params()
|
|
def smon_admin():
|
|
user_group = roxywi_common.get_user_group(id=1)
|
|
smon_status, stderr = smon_mod.return_smon_status()
|
|
telegrams = sql.get_user_telegram_by_group(user_group)
|
|
slacks = sql.get_user_slack_by_group(user_group)
|
|
pds = sql.get_user_pd_by_group(user_group)
|
|
smon = sql.select_smon(user_group)
|
|
smon_ping = sql.select_smon_ping(user_group)
|
|
smon_tcp = sql.select_smon_tcp(user_group)
|
|
smon_http = sql.select_smon_http(user_group)
|
|
smon_dns = sql.select_smon_dns(user_group)
|
|
roxywi_auth.page_for_admin(level=3)
|
|
user_subscription = roxywi_common.return_user_subscription()
|
|
user_params = g.user_params
|
|
|
|
return render_template(
|
|
'smon/add.html', autorefresh=0, role=user_params['role'], user=user_params['user'], smon=smon, lang=user_params['lang'],
|
|
user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'], token=user_params['token'],
|
|
smon_status=smon_status, smon_error=stderr, user_services=user_params['user_services'], telegrams=telegrams,
|
|
slacks=slacks, pds=pds, smon_ping=smon_ping, smon_tcp=smon_tcp, smon_http=smon_http, smon_dns=smon_dns
|
|
)
|
|
|
|
|
|
@bp.post('/add')
|
|
def smon_add():
|
|
user_group = roxywi_common.get_user_group(id=1)
|
|
name = common.checkAjaxInput(request.form.get('newsmonname'))
|
|
hostname = common.checkAjaxInput(request.form.get('newsmon'))
|
|
port = common.checkAjaxInput(request.form.get('newsmonport'))
|
|
enable = common.checkAjaxInput(request.form.get('newsmonenable'))
|
|
url = common.checkAjaxInput(request.form.get('newsmonurl'))
|
|
body = common.checkAjaxInput(request.form.get('newsmonbody'))
|
|
group = common.checkAjaxInput(request.form.get('newsmongroup'))
|
|
desc = common.checkAjaxInput(request.form.get('newsmondescription'))
|
|
telegram = common.checkAjaxInput(request.form.get('newsmontelegram'))
|
|
slack = common.checkAjaxInput(request.form.get('newsmonslack'))
|
|
pd = common.checkAjaxInput(request.form.get('newsmonpd'))
|
|
check_type = common.checkAjaxInput(request.form.get('newsmonchecktype'))
|
|
resolver = common.checkAjaxInput(request.form.get('newsmonresserver'))
|
|
record_type = common.checkAjaxInput(request.form.get('newsmondns_record_type'))
|
|
packet_size = common.checkAjaxInput(request.form.get('newsmonpacket_size'))
|
|
http_method = common.checkAjaxInput(request.form.get('newsmon_http_method'))
|
|
lang = roxywi_common.get_user_lang_for_flask()
|
|
|
|
try:
|
|
last_id = smon_mod.create_smon(
|
|
name, hostname, port, enable, url, body, group, desc, telegram, slack, pd, packet_size, check_type,
|
|
resolver, record_type, user_group, http_method
|
|
)
|
|
except Exception as e:
|
|
return str(e), 200
|
|
else:
|
|
if last_id:
|
|
smon = sql.select_smon_by_id(last_id)
|
|
pds = sql.get_user_pd_by_group(user_group)
|
|
slacks = sql.get_user_slack_by_group(user_group)
|
|
telegrams = sql.get_user_telegram_by_group(user_group)
|
|
smon_service = sql.select_smon_check_by_id(last_id, check_type)
|
|
|
|
return render_template(
|
|
'ajax/smon/show_new_smon.html', smon=smon, telegrams=telegrams, slacks=slacks, pds=pds, lang=lang,
|
|
check_type=check_type, smon_service=smon_service
|
|
)
|
|
|
|
|
|
@bp.post('/update/<smon_id>')
|
|
def smon_update(smon_id):
|
|
roxywi_common.check_user_group_for_flask()
|
|
name = common.checkAjaxInput(request.form.get('updateSmonName'))
|
|
ip = common.checkAjaxInput(request.form.get('updateSmonIp'))
|
|
port = common.checkAjaxInput(request.form.get('updateSmonPort'))
|
|
en = common.checkAjaxInput(request.form.get('updateSmonEn'))
|
|
url = common.checkAjaxInput(request.form.get('updateSmonUrl'))
|
|
body = common.checkAjaxInput(request.form.get('updateSmonBody'))
|
|
telegram = common.checkAjaxInput(request.form.get('updateSmonTelegram'))
|
|
slack = common.checkAjaxInput(request.form.get('updateSmonSlack'))
|
|
pd = common.checkAjaxInput(request.form.get('updateSmonPD'))
|
|
group = common.checkAjaxInput(request.form.get('updateSmonGroup'))
|
|
desc = common.checkAjaxInput(request.form.get('updateSmonDesc'))
|
|
check_type = common.checkAjaxInput(request.form.get('check_type'))
|
|
resolver = common.checkAjaxInput(request.form.get('updateSmonResServer'))
|
|
record_type = common.checkAjaxInput(request.form.get('updateSmonRecordType'))
|
|
packet_size = common.checkAjaxInput(request.form.get('updateSmonPacket_size'))
|
|
http_method = common.checkAjaxInput(request.form.get('updateSmon_http_method'))
|
|
|
|
if roxywi_common.check_user_group_for_flask():
|
|
try:
|
|
status = smon_mod.update_smon(
|
|
smon_id, name, ip, port, en, url, body, telegram, slack, pd, group, desc, check_type,
|
|
resolver, record_type, packet_size, http_method
|
|
)
|
|
except Exception as e:
|
|
return f'{e}', 200
|
|
else:
|
|
return status
|
|
|
|
|
|
@bp.route('/delete/<smon_id>')
|
|
def smon_delete(smon_id):
|
|
user_group = roxywi_common.get_user_group(id=1)
|
|
|
|
if roxywi_common.check_user_group_for_flask():
|
|
try:
|
|
status = smon_mod.delete_smon(smon_id, user_group)
|
|
except Exception as e:
|
|
return f'{e}', 200
|
|
else:
|
|
return status
|
|
|
|
|
|
@bp.post('/refresh')
|
|
def smon_show():
|
|
sort = common.checkAjaxInput(request.form.get('sort'))
|
|
return smon_mod.show_smon(sort)
|