mirror of https://github.com/Aidaho12/haproxy-wi
parent
7d4e504337
commit
6e4e2520e5
36
app/funct.py
36
app/funct.py
|
@ -383,6 +383,12 @@ def get_sections(config, **kwargs):
|
|||
line = line.split(';')[0]
|
||||
line = line.strip()
|
||||
return_config.append(line)
|
||||
elif kwargs.get('service') == 'keepalived':
|
||||
import re
|
||||
ip_pattern = re.compile('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
|
||||
find_ip = re.findall(ip_pattern,line)
|
||||
if find_ip:
|
||||
return_config.append(find_ip[0])
|
||||
else:
|
||||
if (
|
||||
line.startswith('listen') or
|
||||
|
@ -915,7 +921,7 @@ def show_haproxy_log(serv, rows=10, waf='0', grep=None, hour='00', minut='00', h
|
|||
else:
|
||||
local_path_logs = sql.get_setting('local_path_logs')
|
||||
commands = ["sudo cat %s| awk '$3>\"%s:00\" && $3<\"%s:00\"' |tail -%s %s %s" % (local_path_logs, date, date1, rows, grep_act, exgrep_act)]
|
||||
syslog_server = serv
|
||||
syslog_server = serv
|
||||
else:
|
||||
commands = ["sudo cat /var/log/%s/syslog.log | sed '/ %s:00/,/ %s:00/! d' |tail -%s %s %s %s" % (serv, date, date1, rows, grep_act, grep, exgrep_act)]
|
||||
syslog_server = sql.get_setting('syslog_server')
|
||||
|
@ -1261,22 +1267,22 @@ def check_service(serv, service_name):
|
|||
|
||||
def get_services_status():
|
||||
services = []
|
||||
services_name = {'checker_haproxy': 'Checker backends master service',
|
||||
'keep_alive': 'Auto start service',
|
||||
'metrics_haproxy': 'Metrics master service',
|
||||
'portscanner': 'Port scanner service',
|
||||
'smon': 'Simple monitoring network ports',
|
||||
services_name = {'roxy-wi-checker': 'Checker backends master service',
|
||||
'roxy-wi-keep_alive': 'Auto start service',
|
||||
'roxy-wi-metrics': 'Metrics master service',
|
||||
'roxy-wi-portscanner': 'Port scanner service',
|
||||
'roxy-wi-smon': 'Simple monitoring network ports',
|
||||
'prometheus': 'Prometheus service',
|
||||
'grafana-server': 'Grafana service',
|
||||
'fail2ban': 'Fail2ban service'}
|
||||
for s, v in services_name.items():
|
||||
cmd = "systemctl is-active %s" % s
|
||||
status, stderr = subprocess_execute(cmd)
|
||||
if s != 'keep_alive':
|
||||
if s != 'roxy-wi-keep_alive':
|
||||
service_name = s.split('_')[0]
|
||||
else:
|
||||
service_name = s
|
||||
cmd = "rpm --query haproxy-wi-" + service_name + "-* |awk -F\"" + service_name + "\" '{print $2}' |awk -F\".noa\" '{print $1}' |sed 's/-//1' |sed 's/-/./'"
|
||||
cmd = "rpm --query " + service_name + "-* |awk -F\"" + service_name + "\" '{print $2}' |awk -F\".noa\" '{print $1}' |sed 's/-//1' |sed 's/-/./'"
|
||||
service_ver, stderr = subprocess_execute(cmd)
|
||||
|
||||
try:
|
||||
|
@ -1285,3 +1291,17 @@ def get_services_status():
|
|||
services.append([s, status, v, ''])
|
||||
|
||||
return services
|
||||
|
||||
|
||||
def is_file_exists(serv: str, file: str):
|
||||
cmd = ['[ -f ' + file + ' ] && echo yes || echo no']
|
||||
|
||||
out = ssh_command(serv, cmd)
|
||||
return True if 'yes' in out else False
|
||||
|
||||
|
||||
def is_service_active(serv: str, service_name: str):
|
||||
cmd = ['systemctl is-active ' + service_name]
|
||||
|
||||
out = ssh_command(serv, cmd)
|
||||
return True if 'active' in out else False
|
||||
|
|
|
@ -392,8 +392,8 @@ if form.getvalue('action_hap') is not None and serv is not None:
|
|||
|
||||
commands = ["sudo systemctl %s %s" % (action, haproxy_service_name)]
|
||||
funct.ssh_command(serv, commands)
|
||||
funct.logging(serv, 'HAProxy was ' + action + 'ed', haproxywi=1, login=1)
|
||||
print("success: HAProxy was %s" % action)
|
||||
funct.logging(serv, 'HAProxy has been ' + action + 'ed', haproxywi=1, login=1)
|
||||
print("success: HAProxy has been %s" % action)
|
||||
else:
|
||||
print("error: Bad config, check please")
|
||||
|
||||
|
@ -402,8 +402,16 @@ if form.getvalue('action_nginx') is not None and serv is not None:
|
|||
|
||||
commands = ["sudo systemctl %s nginx" % action]
|
||||
funct.ssh_command(serv, commands)
|
||||
funct.logging(serv, 'Nginx was ' + action + 'ed', haproxywi=1, login=1)
|
||||
print("success: Nginx was %s" % action)
|
||||
funct.logging(serv, 'Nginx has been ' + action + 'ed', haproxywi=1, login=1)
|
||||
print("success: Nginx has been %s" % action)
|
||||
|
||||
if form.getvalue('action_keepalived') is not None and serv is not None:
|
||||
action = form.getvalue('action_keepalived')
|
||||
|
||||
commands = ["sudo systemctl %s keepalived" % action]
|
||||
funct.ssh_command(serv, commands)
|
||||
funct.logging(serv, 'Keepalived has been ' + action + 'ed', haproxywi=1, login=1)
|
||||
print("success: Keepalived has been %s" % action)
|
||||
|
||||
if form.getvalue('action_waf') is not None and serv is not None:
|
||||
serv = form.getvalue('serv')
|
||||
|
@ -429,16 +437,22 @@ if act == "overviewHapserverBackends":
|
|||
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
|
||||
template = env.get_template('haproxyservers_backends.html')
|
||||
service = form.getvalue('service')
|
||||
|
||||
if service == 'haproxy':
|
||||
configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir')
|
||||
format_file = 'cfg'
|
||||
elif service == 'nginx':
|
||||
configs_dir = funct.get_config_var('configs', 'nginx_save_configs_dir')
|
||||
format_file = 'conf'
|
||||
elif service == 'keepalived':
|
||||
configs_dir = funct.get_config_var('configs', 'kp_save_configs_dir')
|
||||
format_file = 'conf'
|
||||
|
||||
try:
|
||||
sections = funct.get_sections(configs_dir + funct.get_files(dir=configs_dir, format=format_file)[0], service=service)
|
||||
except Exception as e:
|
||||
funct.logging('localhost', str(e), haproxywi=1)
|
||||
|
||||
try:
|
||||
cfg = configs_dir + serv + "-" + funct.get_data('config') + '.' + format_file
|
||||
except Exception as e:
|
||||
|
@ -446,6 +460,8 @@ if act == "overviewHapserverBackends":
|
|||
try:
|
||||
if service == 'nginx':
|
||||
error = funct.get_config(serv, cfg, nginx=1)
|
||||
elif service == 'keepalived':
|
||||
error = funct.get_config(serv, cfg, keepalived=1)
|
||||
else:
|
||||
error = funct.get_config(serv, cfg)
|
||||
except Exception as e:
|
||||
|
@ -891,6 +907,8 @@ if act == "showCompareConfigs":
|
|||
|
||||
if form.getvalue('service') == 'nginx':
|
||||
return_files = funct.get_files(funct.get_config_var('configs', 'nginx_save_configs_dir'), 'conf')
|
||||
elif form.getvalue('service') == 'keepalived':
|
||||
return_files = funct.get_files(funct.get_config_var('configs', 'kp_save_configs_dir'), 'conf')
|
||||
else:
|
||||
return_files = funct.get_files()
|
||||
|
||||
|
@ -904,6 +922,8 @@ if serv is not None and form.getvalue('right') is not None:
|
|||
right = form.getvalue('right')
|
||||
if form.getvalue('service') == 'nginx':
|
||||
configs_dir = funct.get_config_var('configs', 'nginx_save_configs_dir')
|
||||
elif form.getvalue('service') == 'keepalived':
|
||||
configs_dir = funct.get_config_var('configs', 'kp_save_configs_dir')
|
||||
else:
|
||||
configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir')
|
||||
cmd = 'diff -pub %s%s %s%s' % (configs_dir, left, configs_dir, right)
|
||||
|
@ -923,11 +943,12 @@ if serv is not None and act == "configShow":
|
|||
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
|
||||
user_uuid = cookie.get('uuid')
|
||||
role_id = sql.get_user_role_by_uuid(user_uuid.value)
|
||||
service = form.getvalue('service')
|
||||
|
||||
if form.getvalue('service') == 'keepalived':
|
||||
if service == 'keepalived':
|
||||
configs_dir = funct.get_config_var('configs', 'kp_save_configs_dir')
|
||||
cfg = '.conf'
|
||||
elif form.getvalue('service') == 'nginx':
|
||||
elif service == 'nginx':
|
||||
configs_dir = funct.get_config_var('configs', 'nginx_save_configs_dir')
|
||||
cfg = '.conf'
|
||||
else:
|
||||
|
@ -936,8 +957,10 @@ if serv is not None and act == "configShow":
|
|||
|
||||
if form.getvalue('configver') is None:
|
||||
cfg = configs_dir + serv + "-" + funct.get_data('config') + cfg
|
||||
if form.getvalue('service') == 'nginx':
|
||||
if service == 'nginx':
|
||||
funct.get_config(serv, cfg, nginx=1)
|
||||
elif service == 'keepalived':
|
||||
funct.get_config(serv, cfg, keepalived=1)
|
||||
else:
|
||||
funct.get_config(serv, cfg)
|
||||
else:
|
||||
|
@ -959,7 +982,7 @@ if serv is not None and act == "configShow":
|
|||
serv=serv,
|
||||
configver=form.getvalue('configver'),
|
||||
role=role_id,
|
||||
service=form.getvalue('service'),
|
||||
service=service,
|
||||
is_serv_protected=is_serv_protected)
|
||||
print(template)
|
||||
|
||||
|
@ -1351,7 +1374,7 @@ if form.getvalue('installwaf'):
|
|||
|
||||
if form.getvalue('update_haproxy_wi'):
|
||||
service = form.getvalue('service')
|
||||
services = ['checker_haproxy', 'haproxy-wi', 'keep_alive', 'smon', 'metrics_haproxy']
|
||||
services = ['roxy-wi-checker', 'haproxy-wi', 'roxy-wi-keep_alive', 'roxy-wi-smon', 'roxy-wi-metrics']
|
||||
if service not in services:
|
||||
print('error: ' + service + ' is not part of Roxy-WI')
|
||||
sys.exit()
|
||||
|
|
|
@ -72,15 +72,15 @@ try:
|
|||
prometheus, stderr = funct.subprocess_execute(cmd)
|
||||
host = os.environ.get('HTTP_HOST', '')
|
||||
|
||||
cmd = "systemctl is-active metrics_haproxy"
|
||||
cmd = "systemctl is-active roxy-wi-metrics"
|
||||
metrics_master, stderr = funct.subprocess_execute(cmd)
|
||||
cmd = "systemctl is-active checker_haproxy"
|
||||
cmd = "systemctl is-active roxy-wi-checker"
|
||||
checker_master, stderr = funct.subprocess_execute(cmd)
|
||||
cmd = "systemctl is-active keep_alive"
|
||||
cmd = "systemctl is-active roxy-wi-keep_alive"
|
||||
keep_alive, stderr = funct.subprocess_execute(cmd)
|
||||
cmd = "systemctl is-active smon"
|
||||
cmd = "systemctl is-active roxy-wi-smon"
|
||||
smon, stderr = funct.subprocess_execute(cmd)
|
||||
cmd = "systemctl is-active portscanner"
|
||||
cmd = "systemctl is-active roxy-wi-portscanner"
|
||||
port_scanner, stderr = funct.subprocess_execute(cmd)
|
||||
|
||||
except Exception as e:
|
||||
|
|
|
@ -22,38 +22,38 @@
|
|||
</td>
|
||||
</tr>
|
||||
{% for s in services %}
|
||||
{% if s.0 == 'smon' or s.0 == 'checker_haproxy' or s.0 == 'keep_alive' or s.0 == 'metrics_haproxy' or s.0 == 'portscanner' %}
|
||||
{% if s.0 == 'roxy-wi-smon' or s.0 == 'roxy-wi-checker' or s.0 == 'roxy-wi-keep_alive' or s.0 == 'roxy-wi-metrics' or s.0 == 'roxy-wi-portscanner' %}
|
||||
<tr>
|
||||
{% set is_need_update = 0 %}
|
||||
{% if s.0 == 'smon' %}
|
||||
{% if s.0 == 'roxy-wi-smon' %}
|
||||
{% set service_name = 'SMON' %}
|
||||
{% set service_link = 'smon' %}
|
||||
{% set desc_link = 'https://haproxy-wi.org/services.py?service=smon' %}
|
||||
{% if s.3|float < smon_ver|float %}
|
||||
{% set is_need_update = 1 %}
|
||||
{% endif %}
|
||||
{% elif s.0 == 'checker_haproxy' %}
|
||||
{% elif s.0 == 'roxy-wi-checker' %}
|
||||
{% set service_name = 'Checker' %}
|
||||
{% set service_link = 'checker' %}
|
||||
{% set desc_link = 'https://haproxy-wi.org/services.py?service=checker' %}
|
||||
{% if s.3|float < checker_ver|float %}
|
||||
{% set is_need_update = 1 %}
|
||||
{% endif %}
|
||||
{% elif s.0 == 'keep_alive' %}
|
||||
{% elif s.0 == 'roxy-wi-keep_alive' %}
|
||||
{% set service_name = 'Auto start' %}
|
||||
{% set service_link = 'auto_start' %}
|
||||
{% set desc_link = 'https://haproxy-wi.org/services.py?service=auto_start' %}
|
||||
{% if s.3|float < keep_ver|float %}
|
||||
{% set is_need_update = 1 %}
|
||||
{% endif %}
|
||||
{% elif s.0 == 'metrics_haproxy' %}
|
||||
{% elif s.0 == 'roxy-wi-metrics' %}
|
||||
{% set service_name = 'Metrics' %}
|
||||
{% set service_link = 'metrics' %}
|
||||
{% set desc_link = 'https://haproxy-wi.org/services.py?service=metrics' %}
|
||||
{% if s.3|float < metrics_ver|float %}
|
||||
{% set is_need_update = 1 %}
|
||||
{% endif %}
|
||||
{% elif s.0 == 'portscanner' %}
|
||||
{% elif s.0 == 'roxy-wi-portscanner' %}
|
||||
{% set service_name = 'Port scanner' %}
|
||||
{% set service_link = 'portscanner' %}
|
||||
{% set desc_link = 'https://haproxy-wi.org/services.py?service={{service_link}}' %}
|
||||
|
@ -71,15 +71,15 @@
|
|||
</td>
|
||||
<td class="padding10">
|
||||
<b>
|
||||
{% if s.0 == 'smon' %}
|
||||
{% if s.0 == 'roxy-wi-smon' %}
|
||||
{{smon_ver}}
|
||||
{% elif s.0 == 'checker_haproxy' %}
|
||||
{% elif s.0 == 'roxy-wi-checker' %}
|
||||
{{checker_ver}}
|
||||
{% elif s.0 == 'keep_alive' %}
|
||||
{% elif s.0 == 'roxy-wi-keep_alive' %}
|
||||
{{keep_ver}}
|
||||
{% elif s.0 == 'metrics_haproxy' %}
|
||||
{% elif s.0 == 'roxy-wi-metrics' %}
|
||||
{{metrics_ver}}
|
||||
{% elif s.0 == 'portscanner' %}
|
||||
{% elif s.0 == 'roxy-wi-portscanner' %}
|
||||
{{portscanner_ver}}
|
||||
{% endif %}
|
||||
</b>
|
||||
|
|
|
@ -7,16 +7,16 @@
|
|||
<input name="prefix" class="prefix form-control" title="servers prefix" size="3" placeholder="web" style="display: none;">
|
||||
<input name="template-number" class="prefix form-control" title="servers num" value="3" type="number" style="width: 35px; display: none;">
|
||||
<input name="servers" required title="Backend IP" size=14 placeholder="xxx.xxx.xxx.xxx" class="form-control">:
|
||||
<input name="server_port" required title="Backend IP" size=3 placeholder="yyy" class="form-control add_server_number" type="number">
|
||||
<input name="server_port" required title="Backend port" size=3 placeholder="yyy" class="form-control add_server_number" type="number">
|
||||
<input name="server_maxconn" required title="Maxconn. Default 200" size=5 value="200" class="form-control add_server_number" type="number">
|
||||
<span class="send_proxy"></span>
|
||||
<br />
|
||||
<input name="servers" title="Backend port" size=14 placeholder="xxx.xxx.xxx.xxx" class="form-control second-server"><span class="second-server">:</span>
|
||||
<input name="servers" title="Backend IP" size=14 placeholder="xxx.xxx.xxx.xxx" class="form-control second-server"><span class="second-server">:</span>
|
||||
<input name="server_port" title="Backend port" size=3 placeholder="yyy" class="form-control second-server add_server_number" type="number">
|
||||
<input name="server_maxconn" title="Maxconn. Default 200" size=5 value="200" class="form-control add_server_number" type="number">
|
||||
<span class="send_proxy"></span>
|
||||
<br />
|
||||
<input name="servers" title="Backend port" size=14 placeholder="xxx.xxx.xxx.xxx" class="form-control second-server"><span class="second-server">:</span>
|
||||
<input name="servers" title="Backend IP" size=14 placeholder="xxx.xxx.xxx.xxx" class="form-control second-server"><span class="second-server">:</span>
|
||||
<input name="server_port" title="Backend port" size=3 placeholder="yyy" class="form-control second-server add_server_number" type="number">
|
||||
<input name="server_maxconn" required title="Maxconn. Default 200" size=5 value="200" class="form-control add_server_number" type="number">
|
||||
<span class="send_proxy"></span>
|
||||
|
|
|
@ -5,23 +5,23 @@
|
|||
<tr class="overviewHead">
|
||||
<th class="padding10 first-collumn">Hostname</th>
|
||||
<th class="ip-field" style="width: 5%">IP</th>
|
||||
<th class="checkbox-head" style="width: 5%"><span title="SSH port">Port</span></th>
|
||||
<th class="checkbox-head" style="width: 5%" class="help_cursor"><span title="SSH port">Port</span></th>
|
||||
{% if page != "servers.py" %}
|
||||
<th style="width: 10%">Group</th>
|
||||
{% endif %}
|
||||
<th class="checkbox-head" style="width: 5%">Enabled</th>
|
||||
<th style="width: 5%; padding-left: 5px;">
|
||||
<th style="width: 5%; padding-left: 5px;" class="help_cursor">
|
||||
<span title="Virtual IP, something like VRRP">Virt</span>
|
||||
</th>
|
||||
<th class="checkbox-head" style="width: 5%">HAProxy</th>
|
||||
<th style="width: 5%">Nginx</th>
|
||||
<th style="width: 10%;">
|
||||
<th style="width: 10%;" class="help_cursor">
|
||||
<span title="If the server has a firewall enabled, enable this option">Firewalld</span>
|
||||
</th>
|
||||
<th class="checkbox-head" style="width: 5%">
|
||||
<th class="checkbox-head" style="width: 5%" class="help_cursor">
|
||||
<span title="If protection is enabled, then the server is inaccessible for editing by everyone except the admin role">Protected</span>
|
||||
</th>
|
||||
<th style="width: 10%">
|
||||
<th style="width: 10%" class="help_cursor">
|
||||
<span title="Actions with the master config will automatically apply on the slave">Slave for</span>
|
||||
</th>
|
||||
<th class="cred-field">Credentials</th>
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
<table id="ssh_enable_table" class="overview">
|
||||
<tr class="overviewHead" style="width: 50%;">
|
||||
<td class="padding10 first-collumn" style="width: 15%;">
|
||||
<td class="padding10 first-collumn" style="width: 15%;" class="help_cursor">
|
||||
<span title="It's just name alias. This alias will be use in 'Servers' page for choose credentials">Name<span>
|
||||
</td>
|
||||
<td class="padding10 first-collumn" style="width: 25%;">
|
||||
<td class="padding10 first-collumn" style="width: 25%;" class="help_cursor">
|
||||
<span title="If it is enabled, the key will be used, if turned off - the password. Do not forget to download the keys to all servers or install the sudo without a password">SSH key</span>
|
||||
</td>
|
||||
{% if page != "servers.py" %}
|
||||
<td style="width: 25%;">Group</td>
|
||||
{% endif %}
|
||||
<td style="width: 100%;">
|
||||
<td style="width: 100%;" class="help_cursor">
|
||||
<span title="Enter SSH user name. If SSH key disabled, enter password for SSH user">Credentials</span>
|
||||
</td>
|
||||
<td></td>
|
||||
|
@ -63,7 +63,7 @@
|
|||
<table id="ssh_key">
|
||||
<tr class="overviewHead" style="width: 50%;">
|
||||
<td class="padding10 first-collumn" style="width: 25%;">Upload SSH Key</td>
|
||||
<td>
|
||||
<td class="help_cursor">
|
||||
<span title="Private key. Note: The public key must be pre-installed on all servers to which you plan to connect">Key</span>
|
||||
</td>
|
||||
<td></td>
|
||||
|
|
Loading…
Reference in New Issue