2019-09-22 15:46:26 +00:00
{% extends "base.html" %}
2022-04-15 09:49:00 +00:00
{% block content %}
2021-07-05 14:51:05 +00:00
{% from 'include/input_macros.html' import input, checkbox, select, copy_to_clipboard %}
2019-12-27 04:31:09 +00:00
< script src = "/inc/overview.js" > < / script >
2021-09-15 05:40:51 +00:00
< link href = "/inc/chart.min.css" rel = "stylesheet" >
< script src = "/inc/metrics.js" > < / script >
< script src = "/inc/chart.min.js" > < / script >
{% if servers|length == 0 %} {% include 'include/getstarted.html' %} {% endif %}
2019-10-25 07:18:57 +00:00
< style >
2021-01-02 16:36:43 +00:00
.ui-checkboxradio-label {
padding-bottom: 5px !important;
padding-top: 5px !important;
}
2019-12-27 04:31:09 +00:00
< / style >
2019-12-30 15:52:01 +00:00
< script >
var ip = []
var hostnamea = []
{% for s in servers %}
ip.push("{{s[2]}}")
2021-07-01 07:19:23 +00:00
var host = "{{s[2]}}"
2020-03-19 13:11:35 +00:00
host = host.replace(/\./g, '\\.');
hostnamea.push(host)
2019-12-30 15:52:01 +00:00
{% endfor %}
2020-06-01 16:13:28 +00:00
$( function() {
$( ".sortable" ).sortable({
revert: true,
placeholder: "ui-state-highlight"
});
$( ".sortable" ).disableSelection();
$( ".sortable" ).sortable({
stop: function(event, ui) {
var itemOrder = $('.sortable').sortable("toArray");
for (var i = 0; i < itemOrder.length ; i + + ) {
var pos = i;
var id = itemOrder[i].split('-')[2]
change_pos(pos, id);
}
}
});
2020-09-26 17:37:14 +00:00
{% for s in services %}
2021-01-06 04:33:33 +00:00
{% if s.1 == '* is not installed' or s.1 == '' %}
2020-09-26 17:37:14 +00:00
{% if s.0 == 'checker_haproxy' %}
$(':regex(id, alert)').checkboxradio('disable');
{% elif s.0 == 'keep_alive' %}
$(':regex(id, active-)').checkboxradio('disable');
{% elif s.0 == 'metrics_haproxy' %}
$(':regex(id, metrics-)').checkboxradio('disable');
{% endif %}
{% endif %}
{% endfor %}
2020-06-01 16:13:28 +00:00
});
2019-12-30 15:52:01 +00:00
< / script >
2021-09-15 05:40:51 +00:00
< div id = "up-pannel" { % if not serv % } class = "sortable" { % endif % } >
2019-09-22 18:16:39 +00:00
{% for s in servers %}
2020-02-02 14:23:00 +00:00
{% if serv %}
< script >
2021-02-27 18:21:07 +00:00
var server_ip = '{{s.2}}'
2020-02-02 14:23:00 +00:00
function showMetrics() {
2020-03-17 18:20:59 +00:00
{% if service == 'haproxy' %}
{% for s in servers %}
2021-02-27 18:21:07 +00:00
getChartData(server_ip)
2021-06-02 07:28:07 +00:00
getHttpChartData(server_ip)
2021-02-27 18:21:07 +00:00
getWafChartData(server_ip)
2020-03-17 18:20:59 +00:00
{% endfor %}
{% endif %}
2021-02-27 18:21:07 +00:00
showOverviewServer('{{s.1}}', server_ip, '{{s.0}}', '{{service}}');
2021-01-02 16:36:43 +00:00
{% if service == 'nginx' %}
2021-02-27 18:21:07 +00:00
showNginxConnections(server_ip)
2021-08-15 09:02:12 +00:00
getNginxChartData(server_ip)
2021-07-01 07:19:23 +00:00
{% elif service == 'haproxy' %}
2021-02-27 18:21:07 +00:00
showBytes(server_ip)
2021-01-02 16:36:43 +00:00
{% endif %}
2020-02-02 14:23:00 +00:00
}
showMetrics();
2020-11-02 17:01:08 +00:00
$( function() {
$("#time-range").on('selectmenuchange', function () {
removeData()
let metrics = new Promise(
(resolve, reject) => {
{% for s in servers %}
2021-02-27 18:21:07 +00:00
getChartData(server_ip)
2021-06-02 07:28:07 +00:00
getHttpChartData(server_ip)
2021-02-27 18:21:07 +00:00
getWafChartData(server_ip)
2020-11-02 17:01:08 +00:00
{% endfor %}
});
metrics.then();
});
});
2020-02-02 14:23:00 +00:00
< / script >
{% endif %}
2020-11-02 17:01:08 +00:00
{% if service == 'nginx' %}
2021-09-15 05:40:51 +00:00
{% set checker_desc = 'Checker monitors Nginx services. If Nginx service is down, Checker will alert via Telegram and/or Slack' %}
2021-01-04 07:24:40 +00:00
{% set is_auto_start_enabled = s.8.0.17 %}
{% set is_checker_enabled = s.8.0.19 %}
2021-08-15 09:02:12 +00:00
{% set is_metrics_enabled = s.8.0.21 %}
2021-09-15 05:40:51 +00:00
{% set action_service = 'nginx' %}
2022-01-17 21:13:35 +00:00
{% if s.5.0.1 == 'active' or s.5.0.1 == 'Up' %}
2021-07-01 07:19:23 +00:00
{% set additional_status_class = 'div-server-head-up' %}
{% else %}
{% set additional_status_class = 'div-server-head-down' %}
{% endif %}
{% elif service == 'keepalived' %}
2021-11-02 20:57:54 +00:00
{% set checker_desc = 'Checker monitors Keepalived services. If Keepalived service is down, Checker will alert via Telegram and/or Slack' %}
2021-10-18 14:13:18 +00:00
{% set is_auto_start_enabled = s.8.0.22 %}
2021-09-15 05:40:51 +00:00
{% set action_service = 'keepalived' %}
2021-11-02 20:57:54 +00:00
{% set is_checker_enabled = s.8.0.23 %}
2021-07-01 07:19:23 +00:00
{% if s.5.0.1 == 'active' %}
2020-11-02 17:01:08 +00:00
{% set additional_status_class = 'div-server-head-up' %}
{% else %}
{% set additional_status_class = 'div-server-head-down' %}
{% endif %}
2022-04-15 09:49:00 +00:00
{% elif service == 'apache' %}
{% set checker_desc = 'Checker monitors Apache services. If Apache service is down, Checker will alert via Telegram and/or Slack' %}
{% set is_auto_start_enabled = s.8.0.25 %}
{% set action_service = 'apache' %}
{% set is_checker_enabled = s.8.0.26 %}
{% set is_metrics_enabled = s.8.0.27 %}
{% if 'Apache' in s.4.0 %}
{% set additional_status_class = 'div-server-head-up' %}
{% else %}
{% set additional_status_class = 'div-server-head-down' %}
{% endif %}
2021-07-01 07:19:23 +00:00
{% elif service == 'haproxy' %}
2021-09-15 05:40:51 +00:00
{% set checker_desc = 'Checker monitors HAProxy services, its backends and maxconn. If some backend or HAProxy service is down, Checker will alert via Telegram and/or Slack' %}
2021-01-04 07:24:40 +00:00
{% set is_auto_start_enabled = s.8.0.12 %}
{% set is_checker_enabled = s.8.0.8 %}
2021-08-15 09:02:12 +00:00
{% set is_metrics_enabled = s.8.0.9 %}
2021-09-15 05:40:51 +00:00
{% set action_service = 'hap' %}
2020-11-02 17:01:08 +00:00
{% if s.5 != False %}
{% set additional_status_class = 'div-server-head-up' %}
{% else %}
{% set additional_status_class = 'div-server-head-down' %}
{% endif %}
{% endif %}
< div id = "div-server-{{s.0}}" class = "div-server-hapwi {{additional_status_class}}" { % if not serv % } style = "cursor: move;" { % endif % } >
2020-09-26 17:37:14 +00:00
< div class = "server-name" >
2020-04-21 21:07:54 +00:00
< input type = "hidden" id = "server-name-{{s.0}}" value = "{{s.1}}" / >
< input type = "hidden" id = "service" value = "{{service}}" / >
{% if not serv %}
2021-09-15 05:40:51 +00:00
< a href = "/app/hapservers.py?service={{service}}&serv={{s.2}}" title = "More about {{s.1}}" style = "color: #5d9ceb" > {{s.1}}< / a >
{% else %}
{{s.1}}
{% endif %}
2021-10-18 14:13:18 +00:00
{% if s.6|int() >= 1 %}
2021-05-02 03:58:22 +00:00
< span
2020-11-16 12:31:52 +00:00
{% if keep_alive|int() >= 1 %}
2021-09-15 05:40:51 +00:00
class="shield green" title="Autostart is enabled">
2020-11-16 12:31:52 +00:00
{% else %}
2021-09-15 05:40:51 +00:00
class="shield red" title="Autostart is enabled, but Keep alive service is not running">
2020-11-16 12:31:52 +00:00
{% endif %}
2021-05-02 03:58:22 +00:00
< / span >
{% endif %}
2021-06-02 07:28:07 +00:00
{% if s.8.0.20 == 1 %}
< span class = "lock" title = "This server is inaccessible for editing by everyone except the admin role" > < / span >
{% endif %}
2021-10-03 18:46:19 +00:00
{% for set in service_settings %}
{% if set.server_id == s.0 and set.setting == 'dockerized' and set.value == '1' %}
< span class = "box" title = "This server is dockerized" > < / span >
{% endif %}
{% endfor %}
2022-04-15 09:49:00 +00:00
{% if role < = 3 %}
2019-09-22 18:16:39 +00:00
< span class = "server-action" >
2020-06-10 06:34:56 +00:00
< a id = "start-{{ s.2 }}" class = "start" title = "Start {{service}} service" >
2020-02-08 16:29:46 +00:00
< span class = "service-start" onclick = "confirmAjaxAction('start', '{{action_service}}', '{{s.2}}')" > < / span >
2019-09-22 18:16:39 +00:00
< / a >
2020-06-10 06:34:56 +00:00
< a id = "reload-{{ s.2 }}" class = "reload" title = "Reload {{service}} service" >
2020-05-11 16:41:54 +00:00
< span class = "service-reload" onclick = "confirmAjaxAction('reload', '{{action_service}}', '{{s.2}}', '{{s.1}}')" > < / span >
2019-09-22 18:16:39 +00:00
< / a >
2020-06-10 06:34:56 +00:00
< a id = "restart-{{ s.2 }}" class = "restart" title = "Restart {{service}} service" >
2020-05-11 16:41:54 +00:00
< span class = "service-reload service-restart" onclick = "confirmAjaxAction('restart', '{{action_service}}', '{{s.2}}')" > < / span >
< / a >
< a id = "stop-{{ s.2 }}" class = "stop" title = "Stop {{service}} service" >
< span class = "service-stop" onclick = "confirmAjaxAction('stop', '{{action_service}}', '{{s.2}}')" > < / span >
2019-09-22 18:16:39 +00:00
< / a >
2021-10-17 05:57:51 +00:00
< a href = "history.py?service={{service}}&serv={{s.2}}" title = "View history for this service" class = "history" style = "margin: 0 5px 0 10px;" > < / a >
2022-04-15 09:49:00 +00:00
{% if service != 'keepalived' and service != 'apache' %}
2021-10-17 05:57:51 +00:00
< span class = "menu-bar" onclick = "serverSettings('{{s.0}}', '{{s.1}}')" title = "Edit settings for {{s.1}} service" > < / span >
2021-09-15 05:40:51 +00:00
{% endif %}
2019-09-22 18:16:39 +00:00
< / span >
{% endif %}
< / div >
2020-11-16 12:31:52 +00:00
< div class = "server-desc" >
2021-08-15 09:02:12 +00:00
{% if s.3 is none %}
No description
{% else %}
2019-09-22 18:16:39 +00:00
{{s.3}}
2021-08-15 09:02:12 +00:00
{% endif %}
2019-12-30 15:52:01 +00:00
< br / >
2021-07-01 07:19:23 +00:00
{% if service == 'nginx' or service == 'keepalived' %}
Version: {{s.5.0.0}} Process_num: {{s.5.0.3}}
2020-08-02 08:39:54 +00:00
< br / >
2022-01-17 21:13:35 +00:00
{% if s.5.0.1 == 'active' or s.5.0.1 == 'Up' %}
2021-08-08 13:02:00 +00:00
Started:
2021-07-01 07:19:23 +00:00
{% else %}
2021-08-08 13:02:00 +00:00
Stopped:
2021-07-01 07:19:23 +00:00
{% endif %}
{{s.5.0.2}}
2022-04-15 09:49:00 +00:00
{% elif service == 'apache' %}
{% if s.4.0 is defined %}
{{s.4.0.split(' ')[0].split('Server')[1]}} {{s.4.0.split(' ')[1]}} {{s.4.2}}
< br / >
{{s.4.1.split(' ')[0].split('Server')[1]}} {% for i in s.4.1.split(' ')[1:5] %} {{i}}{% endfor %}
{% else %}
Cannot get information about Apache
{% endif %}
2019-12-30 15:52:01 +00:00
{% else %}
2020-02-05 08:15:57 +00:00
{% if s.5.0 is defined %}
2021-02-27 18:21:07 +00:00
{{s.5.0.0}} {{s.5.0.1}}
< br / >
2021-01-04 07:24:40 +00:00
{{s.5.0.2}}
2020-02-05 08:15:57 +00:00
{% else %}
2022-04-15 09:49:00 +00:00
Cannot get information about HAProxy
{% endif %}
2021-02-27 18:21:07 +00:00
{% endif %}
2021-05-02 03:58:22 +00:00
< span title = "Date of last configuration edit" >
2019-12-27 04:31:09 +00:00
Last edit:
2021-07-01 07:19:23 +00:00
< span id = "edit_date_{{s.2}}" > < / span >
2022-04-15 09:49:00 +00:00
< / span >
2019-09-26 15:48:56 +00:00
< br / >
2021-07-05 14:51:05 +00:00
IP: {{ copy_to_clipboard(value=s.2, style='font-weight: bold') }}
2020-01-23 05:55:12 +00:00
{% if s.7.0.0 != None %}
2021-09-15 05:40:51 +00:00
Master for: < b > {{ copy_to_clipboard(value=s.7.0.1, style='font-weight: bold') }}< / b >
2020-01-23 05:55:12 +00:00
{% endif %}
2021-07-15 03:14:13 +00:00
{% if s.9.0 == '1' %}
2021-10-03 18:46:19 +00:00
VRRP: < b >
2021-07-15 03:14:13 +00:00
{% if s.9.1 == 'MASTER' or s.9.1 == 'BACKUP' or s.9.1 == 'INIT' or s.9.1 == 'FAULT' %}
{{s.9.1}}
{% else %}
< span title = "Cannot get Keepalived Status" class = "help_cursor" > Error< / span >
{% endif %}
< / b >
{% endif %}
2019-09-22 18:16:39 +00:00
< / div >
2020-11-16 12:31:52 +00:00
< div class = "server-act-links" id = "server-{{s.8.0.0|string()}}-{{service}}" >
2021-11-02 20:57:54 +00:00
{% if role < = 2 %}
2020-02-05 08:15:57 +00:00
{% set id = 'alert-' + s.8.0.0|string() %}
2021-01-04 07:24:40 +00:00
{% if is_checker_enabled == 1 %}
2020-11-13 05:15:27 +00:00
{{ checkbox(id, title=checker_desc, value='1', desc='Checker', checked='checked') }}
2020-02-05 08:15:57 +00:00
{% else %}
2020-11-13 05:15:27 +00:00
{{ checkbox(id, title=checker_desc, value='1', desc='Checker') }}
2020-02-05 08:15:57 +00:00
{% endif %}
2021-11-02 20:57:54 +00:00
{% endif %}
2022-04-15 09:49:00 +00:00
{% if role < = 2 and service != 'keepalived' and service != 'apache' %}
2020-02-05 08:15:57 +00:00
{% set id = 'metrics-' + s.8.0.0|string() %}
2021-08-15 09:02:12 +00:00
{% if is_metrics_enabled == 1 %}
2020-11-13 05:15:27 +00:00
{{ checkbox(id, title='Collecting metrics is enabled', value='1', desc='Metrics', checked='checked') }}
2020-02-05 08:15:57 +00:00
{% else %}
2020-11-13 05:15:27 +00:00
{{ checkbox(id, title='Enable collecting metrics', value='1', desc='Metrics') }}
2020-11-16 12:31:52 +00:00
{% endif %}
2021-10-18 14:13:18 +00:00
{% endif %}
2022-04-15 09:49:00 +00:00
{% if role < = 2 and service != 'apache' %}
2020-02-05 08:15:57 +00:00
{% set id = 'active-' + s.8.0.0|string() %}
2021-01-04 07:24:40 +00:00
{% if is_auto_start_enabled == 1 %}
2020-11-13 05:15:27 +00:00
{{ checkbox(id, title='Auto Start is enabled', value='1', desc='Auto Start', checked='checked') }}
2020-02-05 08:15:57 +00:00
{% else %}
{{ checkbox(id, title='Enable Auto Start', value='1', desc='Auto Start') }}
{% endif %}
2021-11-02 20:57:54 +00:00
{% endif %}
2020-11-16 12:31:52 +00:00
< / div >
2019-09-22 18:16:39 +00:00
< div class = "server-act-links" >
2022-04-15 09:49:00 +00:00
{% if service == 'nginx' or service == 'apache' %}
2022-01-16 13:50:53 +00:00
< a href = "/app/config.py?service={{service}}&serv={{s.2}}&showConfigFiles" class = "ui-button ui-widget ui-corner-all" title = "Open running configs" > Configs< / a >
{% else %}
2021-07-01 07:19:23 +00:00
< a href = "/app/config.py?service={{service}}&serv={{s.2}}&showConfig" class = "ui-button ui-widget ui-corner-all" title = "Open running config" > Config< / a >
2022-01-16 13:50:53 +00:00
{% endif %}
2021-08-15 09:02:12 +00:00
< a href = "/app/config.py?service={{service}}&serv={{s.2}}&showCompare" class = "ui-button ui-widget ui-corner-all" title = "Compare configs" > Compare< / a >
2022-04-15 09:49:00 +00:00
{% if service != 'nginx' and service != 'keepalived' and service != 'apache' %}
2020-03-17 18:20:59 +00:00
< a href = "/app/config.py?serv={{s.2}}&showMap" class = "ui-button ui-widget ui-corner-all" title = "Show map" > Map< / a >
2020-02-05 08:15:57 +00:00
{% endif %}
2022-04-15 09:49:00 +00:00
{% if service != 'keepalived' and service != 'apache' %}
2021-07-01 07:19:23 +00:00
< a href = "/app/viewsttats.py?service={{service}}&serv={{s.2}}" class = "ui-button ui-widget ui-corner-all" title = "View {{service}} statistics" > Stat< / a >
2022-04-15 09:49:00 +00:00
{% endif %}
{% if service != 'keepalived' %}
2021-07-01 07:19:23 +00:00
< a href = "/app/logs.py?service={{service}}&serv={{s.2}}&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00" class = "ui-button ui-widget ui-corner-all" title = "View {{service}} log" > Log< / a >
{% endif %}
2021-01-02 16:36:43 +00:00
{% if role < = 2 %}
2021-07-01 07:19:23 +00:00
< a href = "/app/versions.py?service={{service}}&serv={{s.2}}&open=open" class = "ui-button ui-widget ui-corner-all" title = "View/Rollback to previous config" > Versions< / a >
2021-01-02 16:36:43 +00:00
{% endif %}
2019-09-22 18:16:39 +00:00
< / div >
< / div >
2019-11-11 21:59:09 +00:00
{% if serv %}
2021-01-02 16:36:43 +00:00
< div id = "bin_bout" > < / div >
2020-04-21 21:07:54 +00:00
< div id = "ajax-server-{{s.0}}" class = "ajax-server" > < / div >
2020-08-02 08:39:54 +00:00
< div class = "div-server div-backends" >
< div class = "server-name backends" >
2020-04-21 21:07:54 +00:00
{% if service == 'haproxy' %}
Backends:
2021-07-01 07:19:23 +00:00
{% elif service == 'keepalived' %}
VRRP addresses:
2020-04-21 21:07:54 +00:00
{% else %}
Virtual hosts:
{% endif %}
2020-08-02 08:39:54 +00:00
< / div >
2021-07-01 07:19:23 +00:00
< div style = "margin-top: 10px;" id = "top-{{s.2}}" > < / div >
2019-11-11 21:59:09 +00:00
< / div >
{% endif %}
2019-09-22 18:16:39 +00:00
{% endfor %}
2019-09-22 15:46:26 +00:00
< / div >
2021-08-15 09:02:12 +00:00
{% if serv %}
2022-04-15 09:49:00 +00:00
{% if service == 'haproxy' or service == 'nginx' %}
2021-10-29 07:59:09 +00:00
< div style = "clear: both; width: 97%;" >
2020-11-02 17:01:08 +00:00
< div style = "padding-left: 25px;float: left;margin-top: -15px;" >
< b > Time range:< / b >
< select title = "Choose time range" id = "time-range" >
< option value = "30" > 30 minutes< / option >
< option value = "60" > 1 hour< / option >
< option value = "180" > 3 hours< / option >
< option value = "360" > 6 hours< / option >
< option value = "720" > 12 hours< / option >
< / select >
< / div >
< div id = "refresh" style = "text-align: right;margin-right: 3%;" title = "Refresh metrics" onclick = "showMetrics()" >
< span class = "service-reload" > < / span >
< / div >
2019-10-25 07:18:57 +00:00
< / div >
2022-04-15 09:49:00 +00:00
{% endif %}
2019-10-25 07:18:57 +00:00
{% for s in servers %}
2021-08-15 09:02:12 +00:00
{% if service == 'haproxy' %}
2021-10-29 07:59:09 +00:00
< div id = "server_metrics_div" class = "chart-container_overview" >
2019-10-25 07:18:57 +00:00
< canvas id = "{{s.2}}" role = "img" > < / canvas >
< / div >
2021-10-29 07:59:09 +00:00
< div class = "chart-container_overview http_metrics_div" >
2021-06-02 07:28:07 +00:00
< canvas id = "http_{{s.2}}" role = "img" > < / canvas >
< / div >
2021-10-29 07:59:09 +00:00
< div id = "waf_metrics_div" class = "chart-container_overview" >
2019-10-25 07:18:57 +00:00
< canvas id = "s_{{s.2}}" role = "img" > < / canvas >
< / div >
2021-08-15 09:02:12 +00:00
{% endif %}
< div id = "nginx_metrics_div" class = "chart-container" style = "display: block; width: 90%; height: 300px;" >
< canvas id = "nginx_{{s.2}}" role = "img" > < / canvas >
< / div >
2019-10-25 07:18:57 +00:00
{% endfor %}
{% endif %}
2019-09-22 15:46:26 +00:00
< div id = "dialog-confirm" style = "display: none;" >
< p > < span class = "ui-icon ui-icon-alert" style = "float:left; margin:3px 12px 20px 0;" > < / span > Are you sure?< / p >
< / div >
2021-09-15 05:40:51 +00:00
< div id = "dialog-settings-service" style = "display: none;" > < / div >
2019-12-27 04:31:09 +00:00
< script >
2020-04-21 21:07:54 +00:00
{% if serv %}
overviewHapserverBackends(ip, hostnamea, '{{service}}');
2019-12-27 04:31:09 +00:00
{% endif %}
2020-02-05 08:15:57 +00:00
showHapservers(ip, hostnamea, '{{service}}');
2019-12-27 04:31:09 +00:00
< / script >
2020-04-21 21:07:54 +00:00
{% endblock %}