Fix PortScanner and SMON for Docker, SMON checks for groups
pull/375/head
Aidaho 2024-01-06 11:42:32 +03:00
parent 036241556f
commit 781f3f8447
14 changed files with 178 additions and 199 deletions

View File

@ -267,8 +267,7 @@ def delete_group_settings(group_id):
def delete_group(group_id):
try:
group_for_delete = Groups.delete().where(Groups.group_id == group_id)
group_for_delete.execute()
Groups.delete().where(Groups.group_id == group_id).execute()
UserGroups.delete().where(UserGroups.user_group_id == group_id).execute()
except Exception as e:
out_error(e)
@ -440,7 +439,7 @@ def check_user_group(user_id, group_id):
def select_user_groups_with_names(user_id, **kwargs):
if kwargs.get("all") is not None:
query = (UserGroups.select(
UserGroups.user_group_id, UserGroups.user_id, Groups.name
UserGroups.user_group_id, UserGroups.user_id, Groups.name, Groups.description
).join(Groups, on=(UserGroups.user_group_id == Groups.group_id)))
elif kwargs.get("user_not_in_group") is not None:
query = (Groups.select(
@ -2629,14 +2628,9 @@ def select_smon(user_group):
return query_res
def select_smon_ping(user_group):
if user_group == 1:
query = SmonPingCheck.select()
else:
query = SmonPingCheck.select().where(SMON.user_group == user_group)
def select_smon_ping():
try:
query_res = query.execute()
query_res = SmonPingCheck.select().execute()
except Exception as e:
out_error(e)
else:
@ -2683,42 +2677,27 @@ def select_en_smon_dns() -> object:
return query_res
def select_smon_tcp(user_group):
if user_group == 1:
query = SmonTcpCheck.select()
else:
query = SmonTcpCheck.select().where(SMON.user_group == user_group)
def select_smon_tcp():
try:
query_res = query.execute()
query_res = SmonTcpCheck.select().execute()
except Exception as e:
out_error(e)
else:
return query_res
def select_smon_http(user_group):
if user_group == 1:
query = SmonHttpCheck.select()
else:
query = SmonHttpCheck.select().where(SMON.user_group == user_group)
def select_smon_http():
try:
query_res = query.execute()
query_res = SmonHttpCheck.select().execute()
except Exception as e:
out_error(e)
else:
return query_res
def select_smon_dns(user_group):
if user_group == 1:
query = SmonDnsCheck.select()
else:
query = SmonDnsCheck.select().where(SMON.user_group == user_group)
def select_smon_dns():
try:
query_res = query.execute()
query_res = SmonDnsCheck.select().execute()
except Exception as e:
out_error(e)
else:

View File

@ -121,13 +121,6 @@ def history_cur_status(dashboard_id: int, check_id: int) -> None:
return render_template('ajax/smon/cur_status.html', cur_status=cur_status, smon=smon)
def return_smon_status():
cmd = "systemctl is-active roxy-wi-smon"
smon_status, stderr = server_mod.subprocess_execute(cmd)
return smon_status, stderr
def check_uptime(smon_id: str) -> int:
count_checks = sql.get_smon_history_count_checks(smon_id)

View File

@ -8,7 +8,6 @@ import app.modules.common.common as common
import app.modules.roxywi.common as roxywi_common
import app.modules.tools.alerting as alerting
import app.modules.tools.checker as checker_mod
import app.modules.tools.smon as smon_mod
@bp.before_request
@ -63,17 +62,19 @@ def load_checker():
def checker_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('Checker', user_group)
alerts_history = sql.alerts_history('Checker', g.user_params['group_id'])
user_subscription = roxywi_common.return_user_subscription()
user_params = g.user_params
kwargs = {
'role': g.user_params['role'],
'user': g.user_params['user'],
'user_services': g.user_params['user_services'],
'token': g.user_params['token'],
'lang': g.user_params['lang'],
'smon': alerts_history,
'user_subscription': user_subscription,
}
return render_template(
'smon/checker_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']
)
return render_template('smon/checker_history.html', **kwargs)
@bp.route('/check/<channel_id>/<receiver_name>')

View File

@ -7,6 +7,7 @@ import app.modules.db.sql as sql
import app.modules.common.common as common
import app.modules.server.server as server_mod
import app.modules.roxywi.common as roxywi_common
import app.modules.tools.common as tools_common
@bp.before_request
@ -20,8 +21,9 @@ def before_request():
@get_user_params(virt=1)
def portscanner():
user_params = g.user_params
user_group = roxywi_common.get_user_group(id=1)
port_scanner_settings = sql.select_port_scanner_settings(user_group)
port_scanner_settings = sql.select_port_scanner_settings(user_params['group_id'])
port_scanner = tools_common.is_tool_active('roxy-wi-portscanner')
user_subscription = roxywi_common.return_user_subscription()
if not port_scanner_settings:
port_scanner_settings = ''
@ -33,30 +35,39 @@ def portscanner():
i = (s[2], count_ports_from_sql)
count_ports.append(i)
cmd = "systemctl is-active roxy-wi-portscanner"
port_scanner, port_scanner_stderr = server_mod.subprocess_execute(cmd)
user_subscription = roxywi_common.return_user_subscription()
kwargs = {
'role': user_params['role'],
'user': user_params['user'],
'servers': user_params['servers'],
'port_scanner_settings': port_scanner_settings,
'count_ports': count_ports,
'port_scanner': port_scanner,
'token': user_params['token'],
'lang': user_params['lang'],
'user_subscription': user_subscription
}
return render_template(
'portscanner.html', autorefresh=0, role=user_params['role'], user=user_params['user'], servers=user_params['servers'],
port_scanner_settings=port_scanner_settings, count_ports=count_ports, port_scanner=''.join(port_scanner),
port_scanner_stderr=port_scanner_stderr, user_services=user_params['user_services'], user_status=user_subscription['user_status'],
user_plan=user_subscription['user_plan'], token=user_params['token'], lang=user_params['lang']
)
return render_template('portscanner.html', **kwargs)
@bp.route('/history/<server_ip>')
@get_user_params()
def portscanner_history(server_ip):
user_params = g.user_params
history = sql.select_port_scanner_history(server_ip)
user_subscription = roxywi_common.return_user_subscription()
kwargs = {
'h2': 1,
'role': g.user_params['role'],
'user': g.user_params['user'],
'servers': g.user_params['servers'],
'user_services': g.user_params['user_services'],
'token': g.user_params['token'],
'lang': g.user_params['lang'],
'history': history,
'user_subscription': user_subscription
}
return render_template(
'include/port_scan_history.html', h2=1, autorefresh=0, role=user_params['role'], user=user_params['user'], history=history,
servers=user_params['servers'], user_services=user_params['user_services'], token=user_params['token'],
user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'], lang=user_params['lang']
)
return render_template('include/port_scan_history.html', **kwargs)
@bp.post('/settings')

View File

@ -11,6 +11,7 @@ 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
import app.modules.tools.common as tools_common
@bp.route('/dashboard')
@ -19,24 +20,29 @@ import app.modules.tools.smon as smon_mod
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()
smon = sql.smon_list(g.user_params['group_id'])
smon_status = tools_common.is_tool_active('roxy-wi-smon')
user_subscription = roxywi_common.return_user_subscription()
kwargs = {
'autorefresh': 1,
'role': g.user_params['role'],
'user': g.user_params['user'],
'user_services': g.user_params['user_services'],
'token': g.user_params['token'],
'lang': g.user_params['lang'],
'smon': smon,
'group': g.user_params['group_id'],
'smon_status': smon_status,
'user_subscription': 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']
)
return render_template('smon/dashboard.html', **kwargs)
@bp.route('/dashboard/<dashboard_id>/<check_id>')
@login_required
@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()
@ -63,13 +69,27 @@ def smon_dashboard(dashboard_id, check_id):
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
)
kwargs = {
'autorefresh': 1,
'role': g.user_params['role'],
'user': g.user_params['user'],
'user_services': g.user_params['user_services'],
'token': g.user_params['token'],
'lang': g.user_params['lang'],
'smon': smon,
'group': g.user_params['group_id'],
'user_subscription': user_subscription,
'check_interval': check_interval,
'uptime': uptime,
'avg_res_time': avg_res_time,
'smon_name': smon_name,
'cert_day_diff': cert_day_diff,
'check_id': check_id,
'dashboard_id': dashboard_id,
'last_resp_time': last_resp_time
}
return render_template('include/smon/smon_history.html', **kwargs)
@bp.route('/status-page', methods=['GET', 'POST', 'DELETE', 'PUT'])
@ -77,19 +97,23 @@ def smon_dashboard(dashboard_id, check_id):
@get_user_params()
def status_page():
if request.method == 'GET':
user_params = g.user_params
user_group = roxywi_common.get_user_group(id=1)
smon_list = sql.smon_list(user_group)
pages = sql.select_status_pages(user_group)
smon_status, stderr = smon_mod.return_smon_status()
smon_list = sql.smon_list(g.user_params['group_id'])
pages = sql.select_status_pages(g.user_params['group_id'])
smon_status = tools_common.is_tool_active('roxy-wi-smon')
user_subscription = roxywi_common.return_user_subscription()
kwargs = {
'role': g.user_params['role'],
'user': g.user_params['user'],
'user_services': g.user_params['user_services'],
'token': g.user_params['token'],
'lang': g.user_params['lang'],
'smon': smon_list,
'pages': pages,
'smon_status': smon_status,
'user_subscription': user_subscription
}
return render_template(
'smon/manage_status_page.html', role=user_params['role'], user=user_params['user'],
lang=user_params['lang'], pages=pages, smon_status=smon_status,
user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'], smon_error=stderr,
token=user_params['token'], user_services=user_params['user_services'], smon=smon_list,
)
return render_template('smon/manage_status_page.html', **kwargs)
elif request.method == 'POST':
name = common.checkAjaxInput(request.form.get('name'))
slug = common.checkAjaxInput(request.form.get('slug'))
@ -160,17 +184,21 @@ def smon_history_statuses_avg(page_id):
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)
smon = sql.alerts_history('SMON', g.user_params['group_id'])
smon_status = tools_common.is_tool_active('roxy-wi-smon')
user_subscription = roxywi_common.return_user_subscription()
user_params = g.user_params
kwargs = {
'role': g.user_params['role'],
'user': g.user_params['user'],
'user_services': g.user_params['user_services'],
'token': g.user_params['token'],
'lang': g.user_params['lang'],
'smon': smon,
'smon_status': smon_status,
'user_subscription': user_subscription
}
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']
)
return render_template('smon/history.html', **kwargs)
@bp.route('/history/host/<server_ip>')
@ -180,17 +208,21 @@ 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)
smon_status = tools_common.is_tool_active('roxy-wi-smon')
smon = sql.alerts_history('SMON', g.user_params['group_id'], host=needed_host)
user_subscription = roxywi_common.return_user_subscription()
user_params = g.user_params
kwargs = {
'role': g.user_params['role'],
'user': g.user_params['user'],
'user_services': g.user_params['user_services'],
'token': g.user_params['token'],
'lang': g.user_params['lang'],
'smon': smon,
'smon_status': smon_status,
'user_subscription': user_subscription
}
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']
)
return render_template('smon/history.html', **kwargs)
@bp.route('/history/metric/<int:dashboard_id>')
@ -214,26 +246,37 @@ def smon_history_cur_status(dashboard_id, check_id):
@login_required
@get_user_params()
def smon_admin():
user_group = roxywi_common.get_user_group(id=1)
smon_status, stderr = smon_mod.return_smon_status()
roxywi_auth.page_for_admin(level=3)
user_group = g.user_params['group_id']
smon_status = tools_common.is_tool_active('roxy-wi-smon')
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)
smon_checks = sql.select_smon(user_group)
smon_ping = sql.select_smon_ping()
smon_tcp = sql.select_smon_tcp()
smon_http = sql.select_smon_http()
smon_dns = sql.select_smon_dns()
user_subscription = roxywi_common.return_user_subscription()
user_params = g.user_params
kwargs = {
'role': g.user_params['role'],
'user': g.user_params['user'],
'user_services': g.user_params['user_services'],
'token': g.user_params['token'],
'lang': g.user_params['lang'],
'smon': smon_checks,
'smon_status': smon_status,
'user_subscription': user_subscription,
'telegrams': telegrams,
'slacks': slacks,
'pds': pds,
'smon_ping': smon_ping,
'smon_tcp:': smon_tcp,
'smon_http': smon_http,
'smon_dns': smon_dns
}
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
)
return render_template('smon/add.html', **kwargs)
@bp.post('/add')
@ -267,16 +310,15 @@ def smon_add():
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)
kwargs = {
'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
)
return render_template('ajax/smon/show_new_smon.html', **kwargs)
@bp.post('/update/<smon_id>')

View File

@ -49,7 +49,7 @@
{% endif %}
<span style="color: {{color}};"><b>{{t.1 |upper}}</b></span>
</td>
<td><a href="/app/smon.py?action=history&host={{t.2}}" title="{{lang.words.open|title()}} {{lang.words.history}} {{lang.words.for}} {{t.2}} {{lang.words.host}}">{{t.2}}</a></td>
<td><a href="/app/history/server/{{t.2}}" title="{{lang.words.open|title()}} {{lang.words.history}} {{lang.words.for}} {{t.2}} {{lang.words.host}}">{{t.2}}</a></td>
{% if action != "checker_history" %}
<td>{{t.3}}</td>
{% endif %}

View File

@ -27,7 +27,7 @@
} );
} );
</script>
{% if user_status == 0 %}
{% if user_subscription['user_status'] == 0 %}
{% include 'include/no_sub.html' %}
{% else %}
<table class="overview hover order-column display compact" id="scan_history">

View File

@ -4,7 +4,7 @@
{% block h2 %}{{ lang.menu_links.history.title }} {{ smon_name }}{% endblock %}
{% block content %}
{% set checking_types = {'1': 'TCP/UDP', '2': 'HTTP', '4': 'Ping', '5': 'DNS'} %}
{% if user_status == 0 or user_plan == 'user' %}
{% if user_subscription['user_status'] == 0 or user_subscription['user_plan'] == 'user' %}
{% include 'include/no_sub.html' %}
{% else %}
<link href="/inc/css/chart.min.css" rel="stylesheet">
@ -77,10 +77,10 @@
let metrics = new Promise(
(resolve, reject) => {
removeData();
getSmonHistoryCheckData('{{dashboard_id}}', '{{check_id}}');
getSmonHistoryCheckData('{{dashboard_id}}');
});
metrics.then();
show_statuses('{{dashboard_id}}', '{{check_id}}');
show_statuses('{{dashboard_id}}', '{{check_id}}', '#smon_history_statuses');
}
showSmonHistory();
</script>

View File

@ -18,10 +18,10 @@
padding-top: 5px !important;
}
</style>
{% if user_status == 0 %}
{% if user_subscription['user_status'] == 0 %}
{% include 'include/no_sub.html' %}
{% else %}
{% if port_scanner_stderr != '' %}
{% if 'is not installed' in port_scanner or 'ERROR' in port_scanner %}
<div style="text-align: center;">
<br />
<h3>{{lang.admin_page.desc.no_ansible}} Port scanner {{lang.words.service}}. {{lang.words.read|title()}} <a href="https://roxy-wi.org/services/portscanner"
@ -138,7 +138,7 @@
</div>
{% endfor %}
</div>
<div class="add-note addName alert-info" style="width: inherit; margin-right: 15px; margin-top: 45%">
<div class="add-note addName alert-info" style="width: inherit; margin-right: 15px; margin-top: 45%;clear: both;">
{{lang.words.read|title()}} {{lang.words.about}} Port scanner {{lang.words.service}} {{lang.words.in}} {{lang.words.this2}} <a href="https://roxy-wi.org/services/portscanner" title="The Port scanner service description" target="_blank">{{lang.words.article}}</a>
</div>
{% endif %}

View File

@ -7,17 +7,9 @@
<script src="/inc/users.js"></script>
<script src="/inc/fontawesome.min.js"></script>
<script src="/inc/jquery.timeago.js" type="text/javascript"></script>
{% if user_status == 0 %}
{% if user_subscription['user_status'] == 0 %}
{% include 'include/no_sub.html' %}
{% elif smon_error != '' %}
<div style="text-align: center;">
<br />
<h3>{{lang.smon_page.desc.not_installed}}</h3>.
<img src="{{ url_for('static', filename='images/no_servers.png')}}" alt="There is no server">
<h4>{{lang.words.read|title()}} <a href="https://roxy-wi.org/services/smon" title="Simple monitoring network ports with alerting via Telegram and WEB panel" target="_blank">{{lang.words.here}}</a>
{{lang.phrases.how_to_install}} SMON {{lang.words.service}}.</h4>
</div>
{% elif smon_status.0 == 'failed' or smon_status.0 == 'inactive' %}
{% elif smon_status in ('failed', 'inactive', 'ERROR') %}
<div style="text-align: center;">
<br />
<h3>{{lang.smon_page.desc.smon_is_not_run}}</h3>

View File

@ -2,23 +2,8 @@
{% block title %}{{ lang.menu_links.monitoring.checker_history }}{% endblock %}
{% block h2 %}{{ lang.menu_links.monitoring.checker_history }}{% endblock %}
{% block content %}
{% if user_status == 0 or user_plan == 'user' %}
{% if user_subscription['user_status'] == 0 or user_subscription['user_plan'] == 'user' %}
{% include 'include/no_sub.html' %}
{% elif smon_error != '' %}
<div style="text-align: center;">
<br />
<h3>{{lang.smon_page.desc.not_installed}}</h3>.
<img src="{{ url_for('static', filename='images/no_servers.png')}}" alt="There is no server">
<h4>{{lang.words.read|title()}} <a href="https://roxy-wi.org/services/smon" title="Simple monitoring network ports with alerting via Telegram and WEB panel" target="_blank">{{lang.words.here}}</a>
{{lang.phrases.how_to_install}} SMON {{lang.words.service}}.</h4>
</div>
{% elif smon_status.0 == 'failed' or smon_status.0 == 'inactive' %}
<div style="text-align: center;">
<br />
<h3>{{lang.smon_page.desc.smon_is_not_run}}</h3>
<img src="{{ url_for('static', filename='images/no_servers.png')}}" alt="There is no server">
<h4>{{lang.smon_page.desc.run_smon}} <a href="/app/users/services" title="Roxy-WI services" target="_blank">{{lang.words.here}}</a> {{lang.smon_page.desc.before_use}}</h4>
</div>
{% elif smon|length == 0 %}
<div style="text-align: center;">
<br />

View File

@ -6,17 +6,9 @@
<script src="/inc/users.js"></script>
<script src="/inc/fontawesome.min.js"></script>
<script src="/inc/jquery.timeago.js" type="text/javascript"></script>
{% if user_status == 0 %}
{% if user_subscription['user_status'] == 0 %}
{% include 'include/no_sub.html' %}
{% elif smon_error != '' %}
<div style="text-align: center;">
<br />
<h3>{{lang.smon_page.desc.not_installed}}</h3>.
<img src="{{ url_for('static', filename='images/no_servers.png')}}" alt="There is no server">
<h4>{{lang.words.read|title()}} <a href="https://roxy-wi.org/services/smon" title="Simple monitoring network ports with alerting via Telegram and WEB panel" target="_blank">{{lang.words.here}}</a>
{{lang.phrases.how_to_install}} SMON {{lang.words.service}}.</h4>
</div>
{% elif smon_status.0 == 'failed' or smon_status.0 == 'inactive' %}
{% elif smon_status in ('failed', 'inactive', 'ERROR') %}
<div style="text-align: center;">
<br />
<h3>{{lang.smon_page.desc.smon_is_not_run}}</h3>

View File

@ -2,17 +2,9 @@
{% block title %}{{ lang.menu_links.monitoring.smon.history }}{% endblock %}
{% block h2 %}{{ lang.menu_links.monitoring.smon.history }}{% endblock %}
{% block content %}
{% if user_status == 0 or user_plan == 'user' %}
{% if user_subscription['user_status'] == 0 or user_subscription['user_plan'] == 'user' %}
{% include 'include/no_sub.html' %}
{% elif smon_error != '' %}
<div style="text-align: center;">
<br />
<h3>{{lang.smon_page.desc.not_installed}}</h3>.
<img src="{{ url_for('static', filename='images/no_servers.png')}}" alt="There is no server">
<h4>{{lang.words.read|title()}} <a href="https://roxy-wi.org/services/smon" title="Simple monitoring network ports with alerting via Telegram and WEB panel" target="_blank">{{lang.words.here}}</a>
{{lang.phrases.how_to_install}} SMON {{lang.words.service}}.</h4>
</div>
{% elif smon_status.0 == 'failed' or smon_status.0 == 'inactive' %}
{% elif smon_status in ('failed', 'inactive', 'ERROR') %}
<div style="text-align: center;">
<br />
<h3>{{lang.smon_page.desc.smon_is_not_run}}</h3>

View File

@ -7,17 +7,9 @@
<link href="/inc/css/servers.css" rel="stylesheet"/>
<link href="/inc/css/smon.css" rel="stylesheet"/>
{% if user_status == 0 or user_plan != 'support' %}
{% if user_subscription['user_status'] == 0 or user_subscription['user_plan'] != 'support' %}
{% include 'include/no_sub.html' %}
{% elif smon_error != '' %}
<div style="text-align: center;">
<br />
<h3>{{lang.smon_page.desc.not_installed}}</h3>.
<img src="{{ url_for('static', filename='images/no_servers.png')}}" alt="There is no server">
<h4>{{lang.words.read|title()}} <a href="https://roxy-wi.org/services/smon" title="Simple monitoring network ports with alerting via Telegram and WEB panel" target="_blank">{{lang.words.here}}</a>
{{lang.phrases.how_to_install}} SMON {{lang.words.service}}.</h4>
</div>
{% elif smon_status.0 == 'failed' or smon_status.0 == 'inactive' %}
{% elif smon_status in ('failed', 'inactive', 'ERROR') %}
<div style="text-align: center;">
<br />
<h3>{{lang.smon_page.desc.smon_is_not_run}}</h3>