diff --git a/app/config.py b/app/config.py
index e87e63b2..dfd03ca7 100644
--- a/app/config.py
+++ b/app/config.py
@@ -10,8 +10,8 @@ print('Content-type: text/html\n')
funct.check_login()
form = funct.form
-serv = form.getvalue('serv')
-service = form.getvalue('service')
+serv = funct.is_ip_or_dns(form.getvalue('serv'))
+service = funct.checkAjaxInput(form.getvalue('service'))
is_serv_protected = False
try:
config_file_name = form.getvalue('config_file_name').replace('92', '/')
@@ -22,40 +22,31 @@ cfg = ""
stderr = ""
error = ""
aftersave = ""
+is_restart = ''
try:
user, user_id, role, token, servers, user_services = funct.get_users_params()
except Exception as e:
print(str(e))
-if service == 'keepalived':
- if funct.check_login(service=3):
- title = "Working with Keepalived configuration files"
- action = "config.py?service=keepalived"
+if service in ('haproxy', 'nginx', 'keepalived', 'apache'):
+ service_desc = sql.select_service(service)
+ if funct.check_login(service=service_desc.service_id):
+ title = f"Working with {service_desc.service} configuration files"
+ action = f"config.py?service={service_desc.slug}"
configs_dir = funct.get_config_var('configs', 'kp_save_configs_dir')
file_format = 'conf'
- servers = sql.get_dick_permit(keepalived=1)
-elif service == 'nginx':
- if funct.check_login(service=2):
- title = "Working with NGINX configuration files"
- action = "config.py?service=nginx"
- configs_dir = funct.get_config_var('configs', 'nginx_save_configs_dir')
- file_format = 'conf'
- servers = sql.get_dick_permit(nginx=1)
-elif service == 'apache':
- if funct.check_login(service=4):
- title = "Working with Apache configuration files"
- action = "config.py?service=apache"
- configs_dir = funct.get_config_var('configs', 'apache_save_configs_dir')
- file_format = 'conf'
- servers = sql.get_dick_permit(apache=1)
+ servers = sql.get_dick_permit(serivce=service_desc.service)
+
+ if service in ('haproxy', 'nginx', 'apache'):
+ configs_dir = funct.get_config_var('configs', f'{service_desc.service}_save_configs_dir')
+ else:
+ configs_dir = funct.get_config_var('configs', 'kp_save_configs_dir')
+
+ if service == 'haproxy':
+ file_format = 'cfg'
else:
- if funct.check_login(service=1):
- title = "Working with HAProxy configuration files"
- action = "config.py"
- configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir')
- file_format = 'cfg'
- servers = sql.get_dick_permit(haproxy=1)
+ print('')
if serv is not None:
if service == 'nginx' or service == 'apache':
@@ -67,6 +58,8 @@ if serv is not None:
if serv is not None and form.getvalue('open') is not None and form.getvalue('new_config') is None:
funct.check_is_server_in_group(serv)
is_serv_protected = sql.is_serv_protected(serv)
+ server_id = sql.select_server_id_by_ip(serv)
+ is_restart = sql.select_service_setting(server_id, service, 'restart')
if service == 'keepalived':
error = funct.get_config(serv, cfg, keepalived=1)
@@ -142,7 +135,7 @@ if serv is not None and form.getvalue('config') is not None:
template = template.render(
h2=1, title=title, role=role, action=action, user=user, select_id="serv", serv=serv, aftersave=aftersave,
- config=config_read, cfg=cfg, selects=servers, stderr=stderr, error=error, service=service,
+ config=config_read, cfg=cfg, selects=servers, stderr=stderr, error=error, service=service, is_restart=is_restart,
user_services=user_services, config_file_name=config_file_name, is_serv_protected=is_serv_protected, token=token
)
print(template)
diff --git a/app/create_db.py b/app/create_db.py
index 2e28dcf9..e2376547 100644
--- a/app/create_db.py
+++ b/app/create_db.py
@@ -181,16 +181,21 @@ def default_values():
print(str(e))
data_source = [
- {'service_id': 1, 'service': 'HAProxy'},
- {'service_id': 2, 'service': 'NGINX'},
- {'service_id': 3, 'service': 'Keepalived'},
- {'service_id': 4, 'service': 'Apache'},
+ {'service_id': 1, 'service': 'HAProxy', 'slug': 'haproxy'},
+ {'service_id': 2, 'service': 'NGINX', 'slug': 'nginx'},
+ {'service_id': 3, 'service': 'Keepalived', 'slug': 'keepalived'},
+ {'service_id': 4, 'service': 'Apache', 'slug': 'apache'},
]
try:
Services.insert_many(data_source).on_conflict_ignore().execute()
- except Exception as e:
- print(str(e))
+ except Exception:
+ Services.drop_table()
+ Services.create_table()
+ try:
+ Services.insert_many(data_source).on_conflict_ignore().execute()
+ except Exception as e:
+ print(str(e))
data_source = [
{'param': 'aws', 'name': 'AWS', 'optgroup': 'aws', 'section': 'provider', 'provider': 'aws', 'image': '/inc/images/provisioning/providers/aws.svg'},
@@ -962,8 +967,25 @@ def update_db_v_6_1_3(**kwargs):
pass
+def update_db_v_6_1_4():
+ servers = Server.select()
+ services = Services.select()
+ for server in servers:
+ for service in services:
+ service_name = service.service.lower()
+ setting = 'restart'
+ if service_name == 'keepalived':
+ continue
+ try:
+ ServiceSetting.insert(
+ server_id=server.server_id, service=service_name, setting=setting, value=1
+ ).on_conflict_ignore().execute()
+ except Exception:
+ pass
+
+
def update_ver():
- query = Version.update(version='6.1.3.0')
+ query = Version.update(version='6.1.4.0')
try:
query.execute()
except Exception:
@@ -991,6 +1013,7 @@ def update_all():
update_db_v_6_0_1()
update_db_v_6_1_0()
update_db_v_6_1_3()
+ update_db_v_6_1_4()
update_ver()
@@ -1014,6 +1037,7 @@ def update_all_silent():
update_db_v_6_0(silent=1)
update_db_v_6_0_1(silent=1)
update_db_v_6_1_3(silent=1)
+ update_db_v_6_1_4()
update_ver()
diff --git a/app/db_model.py b/app/db_model.py
index f18354d8..a3dc6825 100644
--- a/app/db_model.py
+++ b/app/db_model.py
@@ -502,6 +502,7 @@ class SystemInfo(BaseModel):
class Services(BaseModel):
service_id = IntegerField(null=True)
service = CharField(null=True)
+ slug = CharField(null=True)
class Meta:
table_name = 'services'
diff --git a/app/funct.py b/app/funct.py
index 308d7c6e..47bf8670 100644
--- a/app/funct.py
+++ b/app/funct.py
@@ -753,6 +753,7 @@ def install_haproxy(server_ip, **kwargs):
if docker == '1':
server_id = sql.select_server_id_by_ip(server_ip)
sql.insert_or_update_service_setting(server_id, 'haproxy', 'dockerized', '1')
+ sql.insert_or_update_service_setting(server_id, 'haproxy', 'restart', '1')
os.system("rm -f %s" % script)
@@ -876,6 +877,7 @@ def install_nginx(server_ip, **kwargs):
if docker == '1':
server_id = sql.select_server_id_by_ip(server_ip)
sql.insert_or_update_service_setting(server_id, 'nginx', 'dockerized', '1')
+ sql.insert_or_update_service_setting(server_id, 'nginx', 'restart', '1')
os.system("rm -f %s" % script)
@@ -986,6 +988,7 @@ def upload_and_restart(server_ip, cfg, **kwargs):
tmp_file = sql.get_setting('tmp_config_path') + "/" + get_data('config') + ".cfg"
is_docker = sql.select_service_setting(server_id, service, 'dockerized')
+
if is_docker == '1':
service_cont_name = service + '_container_name'
container_name = sql.get_setting(service_cont_name)
@@ -1011,6 +1014,7 @@ def upload_and_restart(server_ip, cfg, **kwargs):
action = 'reload'
reload_or_restart_command = reload_command
else:
+ is_not_allowed_to_restart(server_id, service)
action = 'restart'
reload_or_restart_command = restart_command
@@ -2090,6 +2094,15 @@ def is_restarted(server_ip, action):
sys.exit()
+def is_not_allowed_to_restart(server_id: int, service: str) -> bool:
+ import sql
+ is_restart = sql.select_service_setting(server_id, service, 'restart')
+
+ if int(is_restart) == 1:
+ print('warning: this service is not allowed to be restarted')
+ sys.exit()
+
+
def return_user_status():
import sql
diff --git a/app/hapservers.py b/app/hapservers.py
index 730a05dc..271151cb 100644
--- a/app/hapservers.py
+++ b/app/hapservers.py
@@ -17,62 +17,32 @@ user, user_id, role, token, servers, user_services = funct.get_users_params()
form = funct.form
serv = funct.is_ip_or_dns(form.getvalue('serv'))
-service = form.getvalue('service')
+service = funct.checkAjaxInput(form.getvalue('service'))
autorefresh = 0
servers_waf = ()
title = "HAProxy servers overview"
cmd = "ps ax |grep -e 'keep_alive.py' |grep -v grep |wc -l"
keep_alive, stderr = funct.subprocess_execute(cmd)
+is_restart = ''
+restart_settings = ''
-if service == 'nginx':
- if funct.check_login(service=2):
- title = 'NGINX servers overview'
+if service in ('haproxy', 'nginx', 'keepalived', 'apache'):
+ service_desc = sql.select_service(service)
+ if funct.check_login(service=service_desc.service_id):
+ title = f'{service_desc.service} servers overview'
if serv:
if funct.check_is_server_in_group(serv):
servers = sql.select_servers(server=serv)
autorefresh = 1
server_id = sql.select_server_id_by_ip(serv)
- service_settings = sql.select_docker_service_settings(server_id, service)
+ docker_settings = sql.select_docker_service_settings(server_id, service_desc.service)
+ restart_settings = sql.select_restart_service_settings(server_id, service_desc.service)
else:
- servers = sql.get_dick_permit(virt=1, nginx=1)
- service_settings = sql.select_docker_services_settings(service)
-elif service == 'keepalived':
- if funct.check_login(service=3):
- title = 'Keepalived servers overview'
- if serv:
- if funct.check_is_server_in_group(serv):
- servers = sql.select_servers(server=serv)
- autorefresh = 1
- server_id = sql.select_server_id_by_ip(serv)
- service_settings = sql.select_docker_service_settings(server_id, service)
- else:
- servers = sql.get_dick_permit(virt=1, keepalived=1)
- service_settings = sql.select_docker_services_settings(service)
-elif service == 'apache':
- if funct.check_login(service=4):
- title = 'Apache servers overview'
- if serv:
- if funct.check_is_server_in_group(serv):
- servers = sql.select_servers(server=serv)
- autorefresh = 1
- server_id = sql.select_server_id_by_ip(serv)
- service_settings = sql.select_docker_service_settings(server_id, service)
- else:
- servers = sql.get_dick_permit(virt=1, apache=1)
- service_settings = sql.select_docker_services_settings(service)
+ servers = sql.get_dick_permit(virt=1, service=service_desc.slug)
+ docker_settings = sql.select_docker_services_settings(service_desc.service)
+ restart_settings = sql.select_restart_services_settings(service_desc.service)
else:
- if funct.check_login(service=1):
- service = 'haproxy'
- if serv:
- if funct.check_is_server_in_group(serv):
- servers = sql.select_servers(server=serv)
- autorefresh = 1
- server_id = sql.select_server_id_by_ip(serv)
- servers_waf = sql.select_waf_servers_metrics(user_id.value)
- service_settings = sql.select_docker_service_settings(server_id, service)
- else:
- servers = sql.get_dick_permit(virt=1, haproxy=1)
- service_settings = sql.select_docker_services_settings(service)
+ print('')
services_name = {'roxy-wi-checker': 'Master backends checker service',
'roxy-wi-keep_alive': 'Auto start service',
@@ -106,7 +76,7 @@ for s in servers:
cmd = [
"/usr/sbin/nginx -v 2>&1|awk '{print $3}' && systemctl status nginx |grep -e 'Active' |awk "
"'{print $2, $9$10$11$12$13}' && ps ax |grep nginx:|grep -v grep |wc -l"]
- for service_set in service_settings:
+ for service_set in docker_settings:
if service_set.server_id == s[0] and service_set.setting == 'dockerized' and service_set.value == '1':
container_name = sql.get_setting('nginx_container_name')
cmd = [
@@ -206,7 +176,7 @@ except Exception as e:
template = template.render(
h2=1, autorefresh=autorefresh, title=title, role=role, user=user, servers=servers_with_status1,
keep_alive=''.join(keep_alive), serv=serv, service=service, services=services, user_services=user_services,
- service_settings=service_settings, user_status=user_status, user_plan=user_plan, servers_waf=servers_waf,
- token=token
+ docker_settings=docker_settings, user_status=user_status, user_plan=user_plan, servers_waf=servers_waf,
+ restart_settings=restart_settings, token=token
)
print(template)
diff --git a/app/history.py b/app/history.py
index faa62c6f..1639dba1 100644
--- a/app/history.py
+++ b/app/history.py
@@ -21,47 +21,15 @@ serv = funct.is_ip_or_dns(form.getvalue('serv'))
service = form.getvalue('service')
user_id = form.getvalue('user_id')
-
-if service == 'nginx':
- if funct.check_login(service=2):
- title = 'Nginx service history'
- if serv:
- if funct.check_is_server_in_group(serv):
- server_id = sql.select_server_id_by_ip(serv)
- history = sql.select_action_history_by_server_id_and_service(
- server_id,
- service
- )
-elif service == 'keepalived':
- if funct.check_login(service=3):
- title = 'Keepalived service history'
- if serv:
- if funct.check_is_server_in_group(serv):
- server_id = sql.select_server_id_by_ip(serv)
- history = sql.select_action_history_by_server_id_and_service(
- server_id,
- service
- )
-elif service == 'apache':
- if funct.check_login(service=4):
- title = 'Apache service history'
- if serv:
- if funct.check_is_server_in_group(serv):
- server_id = sql.select_server_id_by_ip(serv)
- history = sql.select_action_history_by_server_id_and_service(
- server_id,
- service
- )
-elif service == 'haproxy':
- if funct.check_login(service=1):
- title = "HAProxy service history"
- if serv:
- if funct.check_is_server_in_group(serv):
- server_id = sql.select_server_id_by_ip(serv)
- history = sql.select_action_history_by_server_id_and_service(
- server_id,
- service
- )
+if service in ('haproxy', 'nginx', 'keepalived', 'apache'):
+ service_desc = sql.select_service(service)
+ if funct.check_login(service=service_desc.service_id):
+ title = f'{service_desc.service} service history'
+ server_id = sql.select_server_id_by_ip(serv)
+ history = sql.select_action_history_by_server_id_and_service(
+ server_id,
+ service_desc.service
+ )
elif service == 'server':
if serv:
title = serv + ' history'
diff --git a/app/logs.py b/app/logs.py
index 285efbf6..ae734ef3 100644
--- a/app/logs.py
+++ b/app/logs.py
@@ -26,7 +26,7 @@ hour1 = form.getvalue('hour1')
minut = form.getvalue('minut')
minut1 = form.getvalue('minut1')
waf = form.getvalue('waf')
-service = form.getvalue('service')
+service = funct.checkAjaxInput(form.getvalue('service'))
remote_file = form.getvalue('file')
print('Content-type: text/html\n')
@@ -37,22 +37,17 @@ try:
except Exception:
pass
-if service == 'nginx':
- if funct.check_login(service=2):
- title = "NGINX`s logs"
- servers = sql.get_dick_permit(nginx=1)
-elif service == 'apache':
- if funct.check_login(service=4):
- title = "Apache's logs"
- servers = sql.get_dick_permit(apache=1)
+if service in ('haproxy', 'nginx', 'keepalived', 'apache'):
+ service_desc = sql.select_service(service)
+ if funct.check_login(service=service_desc.service_id):
+ title = f"{service_desc.service}`s logs"
+ servers = sql.get_dick_permit(service=service_desc.slug)
elif waf == '1':
if funct.check_login(service=1):
title = "WAF logs"
servers = sql.get_dick_permit(haproxy=1)
else:
- if funct.check_login(service=1):
- title = "HAProxy`s logs"
- servers = sql.get_dick_permit(haproxy=1)
+ print('')
template = template.render(
h2=1, autorefresh=1, title=title, role=role, user=user, select_id="serv", selects=servers,
diff --git a/app/options.py b/app/options.py
index 55f88dca..0048d767 100644
--- a/app/options.py
+++ b/app/options.py
@@ -443,6 +443,10 @@ if form.getvalue('action_hap') is not None and serv is not None:
if funct.check_haproxy_config(serv):
server_id = sql.select_server_id_by_ip(server_ip=serv)
+
+ if action == 'restart':
+ funct.is_not_allowed_to_restart(server_id, 'haproxy')
+
is_docker = sql.select_service_setting(server_id, 'haproxy', 'dockerized')
if is_docker == '1':
@@ -471,7 +475,11 @@ if form.getvalue('action_nginx') is not None and serv is not None:
if funct.check_nginx_config(serv):
server_id = sql.select_server_id_by_ip(server_ip=serv)
+
+ if action == 'restart':
+ funct.is_not_allowed_to_restart(server_id, 'nginx')
is_docker = sql.select_service_setting(server_id, 'nginx', 'dockerized')
+
if is_docker == '1':
container_name = sql.get_setting('nginx_container_name')
commands = ["sudo docker %s %s" % (action, container_name)]
@@ -540,6 +548,10 @@ if form.getvalue('action_apache') is not None and serv is not None:
funct.is_restarted(serv, action)
server_id = sql.select_server_id_by_ip(serv)
+
+ if action == 'restart':
+ funct.is_not_allowed_to_restart(server_id, 'apache')
+
is_docker = sql.select_service_setting(server_id, 'apache', 'dockerized')
if is_docker == '1':
container_name = sql.get_setting('apache_container_name')
@@ -1207,7 +1219,7 @@ if form.getvalue('servaction') is not None:
if enable != "show":
funct.logging(serv, 'Has been ' + enable + 'ed ' + backend, login=1, keep_history=1, service='haproxy')
print(
- '
' % (enable, backend, serv, serv))
+ '
' % (enable, backend, serv, serv))
print(funct.ssh_command(serv, command, show_log="1"))
action = 'runtimeapi.py ' + enable + ' ' + backend
@@ -1894,33 +1906,45 @@ if form.getvalue('metrics_waf'):
sql.update_waf_metrics_enable(form.getvalue('metrics_waf'), form.getvalue('enable'))
if form.getvalue('table_metrics'):
+ service = form.getvalue('service')
+ if service in ('nginx', 'apache'):
+ metrics = sql.select_service_table_metrics(service)
+ else:
+ metrics = sql.select_table_metrics()
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
template = env.get_template('table_metrics.html')
- template = template.render(table_stat=sql.select_table_metrics())
+ template = template.render(table_stat=metrics, service=service)
print(template)
if form.getvalue('metrics_hapwi_ram'):
+ import json
+
ip = form.getvalue('ip')
metrics = {'chartData': {}}
rams = ''
if ip == '1':
- cmd = "free -m |grep Mem |awk '{print $2,$3,$4,$5,$6,$7}'"
- metric, error = funct.subprocess_execute(cmd)
+ import psutil
+
+ rams_list = psutil.virtual_memory()
+ rams += str(round(rams_list.total/1048576, 2)) + ' '
+ rams += str(round(rams_list.used/1048576, 2)) + ' '
+ rams += str(round(rams_list.free/1048576, 2)) + ' '
+ rams += str(round(rams_list.shared/1048576, 2)) + ' '
+ rams += str(round(rams_list.cached/1048576, 2)) + ' '
+ rams += str(round(rams_list.available/1048576, 2)) + ' '
else:
commands = ["free -m |grep Mem |awk '{print $2,$3,$4,$5,$6,$7}'"]
metric, error = funct.subprocess_execute(commands[0])
- for i in metric:
- rams = i
+ for i in metric:
+ rams = i
metrics['chartData']['rams'] = rams
- import json
-
print(json.dumps(metrics))
if form.getvalue('metrics_hapwi_cpu'):
@@ -1929,15 +1953,26 @@ if form.getvalue('metrics_hapwi_cpu'):
cpus = ''
if ip == '1':
- cmd = "top -b -n 1 |grep Cpu |awk -F':' '{print $2}'|awk -F' ' 'BEGIN{ORS=\" \";} { for (i=1;i<=NF;i+=2) print $i}'"
- metric, error = funct.subprocess_execute(cmd)
+ # cmd = "top -b -n 1 |grep Cpu |awk -F':' '{print $2}'|awk -F' ' 'BEGIN{ORS=\" \";} { for (i=1;i<=NF;i+=2) print $i}'"
+ # metric, error = funct.subprocess_execute(cmd)
+ import psutil
+
+ cpus_list = psutil.cpu_times_percent(interval=1, percpu=False)
+ cpus += str(cpus_list.user) + ' '
+ cpus += str(cpus_list.system) + ' '
+ cpus += str(cpus_list.nice) + ' '
+ cpus += str(cpus_list.idle) + ' '
+ cpus += str(cpus_list.iowait) + ' '
+ cpus += str(cpus_list.irq) + ' '
+ cpus += str(cpus_list.softirq) + ' '
+ cpus += str(cpus_list.steal) + ' '
else:
commands = [
"top -b -n 1 |grep Cpu |awk -F':' '{print $2}'|awk -F' ' 'BEGIN{ORS=\" \";} { for (i=1;i<=NF;i+=2) print $i}'"]
metric, error = funct.subprocess_execute(commands[0])
- for i in metric:
- cpus = i
+ for i in metric:
+ cpus = i
metrics['chartData']['cpus'] = cpus
@@ -4334,6 +4369,9 @@ if form.getvalue('serverSettingsSave') is not None:
haproxy_dockerized = form.getvalue('serverSettingshaproxy_dockerized')
nginx_dockerized = form.getvalue('serverSettingsnginx_dockerized')
apache_dockerized = form.getvalue('serverSettingsapache_dockerized')
+ haproxy_restart = form.getvalue('serverSettingsHaproxyrestart')
+ nginx_restart = form.getvalue('serverSettingsNginxrestart')
+ apache_restart = form.getvalue('serverSettingsApache_restart')
server_ip = sql.select_server_ip_by_id(server_id)
if service == 'haproxy':
@@ -4353,6 +4391,14 @@ if form.getvalue('serverSettingsSave') is not None:
else:
funct.logging(server_ip, 'Service has been flagged as a system service', haproxywi=1, login=1,
keep_history=1, service=service)
+ if sql.insert_or_update_service_setting(server_id, service, 'restart', haproxy_restart):
+ print('Ok')
+ if haproxy_restart == '1':
+ funct.logging(server_ip, 'Restart option is disabled for this service', haproxywi=1, login=1,
+ keep_history=1, service=service)
+ else:
+ funct.logging(server_ip, 'Restart option is disabled for this service', haproxywi=1, login=1,
+ keep_history=1, service=service)
if service == 'nginx':
if sql.insert_or_update_service_setting(server_id, service, 'dockerized', nginx_dockerized):
@@ -4363,6 +4409,14 @@ if form.getvalue('serverSettingsSave') is not None:
else:
funct.logging(server_ip, 'Service has been flagged as a system service', haproxywi=1, login=1,
keep_history=1, service=service)
+ if sql.insert_or_update_service_setting(server_id, service, 'restart', nginx_dockerized):
+ print('Ok')
+ if nginx_restart == '1':
+ funct.logging(server_ip, 'Restart option is disabled for this service', haproxywi=1, login=1,
+ keep_history=1, service=service)
+ else:
+ funct.logging(server_ip, 'Restart option is disabled for this service', haproxywi=1, login=1,
+ keep_history=1, service=service)
if service == 'apache':
if sql.insert_or_update_service_setting(server_id, service, 'dockerized', apache_dockerized):
@@ -4373,6 +4427,14 @@ if form.getvalue('serverSettingsSave') is not None:
else:
funct.logging(server_ip, 'Service has been flagged as a system service', haproxywi=1, login=1,
keep_history=1, service=service)
+ if sql.insert_or_update_service_setting(server_id, service, 'restart', nginx_dockerized):
+ print('Ok')
+ if apache_restart == '1':
+ funct.logging(server_ip, 'Restart option is disabled for this service', haproxywi=1, login=1,
+ keep_history=1, service=service)
+ else:
+ funct.logging(server_ip, 'Restart option is disabled for this service', haproxywi=1, login=1,
+ keep_history=1, service=service)
if act == 'showListOfVersion':
service = form.getvalue('service')
@@ -4380,27 +4442,21 @@ if act == 'showListOfVersion':
for_delver = form.getvalue('for_delver')
style = form.getvalue('style')
users = sql.select_users()
+ service_desc = sql.select_service(service)
- if service == 'keepalived':
- configs_dir = funct.get_config_var('configs', 'kp_save_configs_dir')
- files = funct.get_files(dir=configs_dir, format='conf')
- configs = sql.select_config_version(serv, service)
- action = 'versions.py?service=keepalived'
- elif service == 'nginx':
- configs_dir = funct.get_config_var('configs', 'nginx_save_configs_dir')
- files = funct.get_files(dir=configs_dir, format='conf')
- configs = sql.select_config_version(serv, service)
- action = 'versions.py?service=nginx'
- elif service == 'apache':
- configs_dir = funct.get_config_var('configs', 'apache_save_configs_dir')
- files = funct.get_files(dir=configs_dir, format='conf')
- configs = sql.select_config_version(serv, service)
- action = 'versions.py?service=apache'
- else:
- service = 'haproxy'
- files = funct.get_files()
- configs = sql.select_config_version(serv, service)
- action = "versions.py"
+ if service in ('haproxy', 'nginx', 'keepalived', 'apache'):
+ configs = sql.select_config_version(serv, service_desc.service)
+ action = f'versions.py?service={service_desc.slug}'
+
+ if service in ('haproxy', 'nginx', 'apache'):
+ configs_dir = funct.get_config_var('configs', f'{service_desc.service}_save_configs_dir')
+ else:
+ configs_dir = funct.get_config_var('configs', 'kp_save_configs_dir')
+
+ if service == 'haproxy':
+ files = funct.get_files()
+ else:
+ files = funct.get_files(dir=configs_dir, format='conf')
from jinja2 import Environment, FileSystemLoader
diff --git a/app/sql.py b/app/sql.py
index 61cfe3f6..343217c5 100755
--- a/app/sql.py
+++ b/app/sql.py
@@ -1947,6 +1947,131 @@ def select_table_metrics():
return cursor.fetchall()
+def select_service_table_metrics(service):
+ cursor = conn.cursor()
+ group_id = funct.get_user_group(id=1)
+
+ if service in ('nginx', 'apache'):
+ metrics_table = '{}_metrics'.format(service)
+
+ if funct.check_user_group():
+ if group_id == 1:
+ groups = ""
+ else:
+ groups = "and servers.groups = '{group}' ".format(group=group_id)
+ if mysql_enable == '1':
+ sql = """
+ select ip.ip, hostname, avg_cur_1h, avg_cur_24h, avg_cur_3d, max_con_1h, max_con_24h, max_con_3d from
+ (select servers.ip from servers where {metrics} = 1 ) as ip,
+
+ (select servers.ip, servers.hostname as hostname from servers left join {metrics} as metr on servers.ip = metr.serv where servers.{metrics} = 1 {groups}) as hostname,
+
+ (select servers.ip,round(avg(metr.conn), 1) as avg_cur_1h from servers
+ left join {metrics} as metr on metr.serv = servers.ip
+ where servers.{metrics} = 1 and
+ metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -1 HOUR)
+ group by servers.ip) as avg_cur_1h,
+
+ (select servers.ip,round(avg(metr.conn), 1) as avg_cur_24h from servers
+ left join {metrics} as metr on metr.serv = servers.ip
+ where servers.{metrics} = 1 and
+ metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -24 HOUR)
+ group by servers.ip) as avg_cur_24h,
+
+ (select servers.ip,round(avg(metr.conn), 1) as avg_cur_3d from servers
+ left join {metrics} as metr on metr.serv = servers.ip
+ where servers.{metrics} = 1 and
+ metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -3 DAY)
+ group by servers.ip ) as avg_cur_3d,
+
+ (select servers.ip,max(metr.conn) as max_con_1h from servers
+ left join {metrics} as metr on metr.serv = servers.ip
+ where servers.{metrics} = 1 and
+ metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -1 HOUR)
+ group by servers.ip) as max_con_1h,
+
+ (select servers.ip,max(metr.conn) as max_con_24h from servers
+ left join {metrics} as metr on metr.serv = servers.ip
+ where servers.{metrics} = 1 and
+ metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -24 HOUR)
+ group by servers.ip) as max_con_24h,
+
+ (select servers.ip,max(metr.conn) as max_con_3d from servers
+ left join {metrics} as metr on metr.serv = servers.ip
+ where servers.{metrics} = 1 and
+ metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -3 DAY)
+ group by servers.ip ) as max_con_3d
+
+ where ip.ip=hostname.ip
+ and ip.ip=avg_cur_1h.ip
+ and ip.ip=avg_cur_24h.ip
+ and ip.ip=avg_cur_3d.ip
+ and ip.ip=max_con_1h.ip
+ and ip.ip=max_con_24h.ip
+ and ip.ip=max_con_3d.ip
+
+ group by hostname.ip """.format(metrics=metrics_table, groups=groups)
+ else:
+ sql = """
+ select ip.ip, hostname, avg_cur_1h, avg_cur_24h, avg_cur_3d, max_con_1h, max_con_24h, max_con_3d from
+ (select servers.ip from servers where {metrics} = 1 ) as ip,
+
+ (select servers.ip, servers.hostname as hostname from servers left join {metrics} as metr on servers.ip = metr.serv where servers.{metrics} = 1 {groups}) as hostname,
+
+ (select servers.ip,round(avg(metr.conn), 1) as avg_cur_1h from servers
+ left join {metrics} as metr on metr.serv = servers.ip
+ where servers.{metrics} = 1 and
+ metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-1 hours', 'localtime')
+ group by servers.ip) as avg_cur_1h,
+
+ (select servers.ip,round(avg(metr.conn), 1) as avg_cur_24h from servers
+ left join {metrics} as metr on metr.serv = servers.ip
+ where servers.{metrics} = 1 and
+ metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-24 hours', 'localtime')
+ group by servers.ip) as avg_cur_24h,
+
+ (select servers.ip,round(avg(metr.conn), 1) as avg_cur_3d from servers
+ left join {metrics} as metr on metr.serv = servers.ip
+ where servers.{metrics} = 1 and
+ metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-3 days', 'localtime')
+ group by servers.ip ) as avg_cur_3d,
+
+ (select servers.ip,max(metr.conn) as max_con_1h from servers
+ left join {metrics} as metr on metr.serv = servers.ip
+ where servers.{metrics} = 1 and
+ metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-1 hours', 'localtime')
+ group by servers.ip) as max_con_1h,
+
+ (select servers.ip,max(metr.conn) as max_con_24h from servers
+ left join {metrics} as metr on metr.serv = servers.ip
+ where servers.{metrics} = 1 and
+ metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-24 hours', 'localtime')
+ group by servers.ip) as max_con_24h,
+
+ (select servers.ip,max(metr.conn) as max_con_3d from servers
+ left join {metrics} as metr on metr.serv = servers.ip
+ where servers.{metrics} = 1 and
+ metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-3 days', 'localtime')
+ group by servers.ip ) as max_con_3d
+
+ where ip.ip=hostname.ip
+ and ip.ip=avg_cur_1h.ip
+ and ip.ip=avg_cur_24h.ip
+ and ip.ip=avg_cur_3d.ip
+ and ip.ip=max_con_1h.ip
+ and ip.ip=max_con_24h.ip
+ and ip.ip=max_con_3d.ip
+
+ group by hostname.ip """.format(metrics=metrics_table, groups=groups)
+
+ try:
+ cursor.execute(sql)
+ except Exception as e:
+ out_error(e)
+ else:
+ return cursor.fetchall()
+
+
def get_setting(param, **kwargs):
try:
user_group = funct.get_user_group(id=1)
@@ -3159,6 +3284,33 @@ def select_docker_services_settings(service: str) -> str:
return query_res
+def select_restart_service_settings(server_id: int, service: str) -> str:
+ query = ServiceSetting.select().where(
+ (ServiceSetting.server_id == server_id)
+ & (ServiceSetting.service == service)
+ & (ServiceSetting.setting == 'restart')
+ )
+ try:
+ query_res = query.execute()
+ except Exception as e:
+ out_error(e)
+ else:
+ return query_res
+
+
+def select_restart_services_settings(service: str) -> str:
+ query = ServiceSetting.select().where(
+ (ServiceSetting.service == service)
+ & (ServiceSetting.setting == 'restart')
+ )
+ try:
+ query_res = query.execute()
+ except Exception as e:
+ out_error(e)
+ else:
+ return query_res
+
+
def select_service_setting(server_id: int, service: str, setting: str) -> str:
try:
result = ServiceSetting.get(
@@ -3603,3 +3755,13 @@ def select_provisioning_params():
return
else:
return query_res
+
+
+def select_service(slug: str) -> str:
+ try:
+ query_res = Services.get(Services.slug == slug)
+ except Exception as e:
+ out_error(e)
+ return 'there is no service'
+ else:
+ return query_res
diff --git a/app/viewsttats.py b/app/statsview.py
similarity index 67%
rename from app/viewsttats.py
rename to app/statsview.py
index 1085ab0e..8d1105fb 100644
--- a/app/viewsttats.py
+++ b/app/statsview.py
@@ -3,7 +3,7 @@ import funct
import sql
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
-template = env.get_template('viewstats.html')
+template = env.get_template('statsview.html')
form = funct.form
serv = form.getvalue('serv')
service = form.getvalue('service')
@@ -22,17 +22,13 @@ try:
except Exception:
pass
-if service == 'nginx':
- if funct.check_login(service=2):
- title = 'NGINX stats page'
- servers = sql.get_dick_permit(nginx=1)
-elif service == 'apache':
- if funct.check_login(service=4):
- title = 'Apache stats page'
- servers = sql.get_dick_permit(apache=1)
+if service in ('haproxy', 'nginx', 'apache'):
+ service_desc = sql.select_service(service)
+ if funct.check_login(service=service_desc.service_id):
+ title = f'{service_desc.service} stats page'
+ sql.get_dick_permit(service=service_desc.slug)
else:
- if funct.check_login(service=1):
- title = 'HAProxy stats page'
+ print('')
rendered_template = template.render(
h2=1, autorefresh=1, title=title, role=role, user=user, onclick="showStats()", select_id="serv",
diff --git a/app/templates/404.html b/app/templates/404.html
index 5251dab3..95fa95b8 100644
--- a/app/templates/404.html
+++ b/app/templates/404.html
@@ -29,16 +29,16 @@
-
-
-
-
+
+
+
+
-
+
diff --git a/app/templates/500.html b/app/templates/500.html
index f9067de8..f3a66315 100644
--- a/app/templates/500.html
+++ b/app/templates/500.html
@@ -29,16 +29,16 @@
-
-
-
-
+
+
+
+
-
+
diff --git a/app/templates/admin.html b/app/templates/admin.html
index 5987278c..578e75b8 100644
--- a/app/templates/admin.html
+++ b/app/templates/admin.html
@@ -183,5 +183,5 @@
{% endfor %}
});
-
+
{% endblock %}
diff --git a/app/templates/ajax/alerts_history.html b/app/templates/ajax/alerts_history.html
index 0718f0be..931ccec1 100644
--- a/app/templates/ajax/alerts_history.html
+++ b/app/templates/ajax/alerts_history.html
@@ -1,4 +1,4 @@
-
+
{% if action == "history" %}
{% set column_for_sort = 4 %}
diff --git a/app/templates/ajax/config_show.html b/app/templates/ajax/config_show.html
index 851b3f40..0ada30c3 100644
--- a/app/templates/ajax/config_show.html
+++ b/app/templates/ajax/config_show.html
@@ -234,7 +234,7 @@
{% endif %}
{%- set backend = line.split(' ') -%}
- Stats
+ Stats
{%- set backend = backend|join('_') -%}
{%- do section_name.update({i: backend}) -%}
@@ -251,7 +251,7 @@
{% endif %}
{% set backend = line.split(' ') %}
- Stats
+ Stats
{% set backend = backend|join('_') %}
{% do section_name.update({i: backend}) %}
@@ -268,7 +268,7 @@
{% endif %}
{% set backend = line.split(' ') %}
- Stats
+ Stats
{% continue %}
diff --git a/app/templates/ajax/overivewWaf.html b/app/templates/ajax/overivewWaf.html
index 8a8c2b80..cb0f18a1 100644
--- a/app/templates/ajax/overivewWaf.html
+++ b/app/templates/ajax/overivewWaf.html
@@ -74,7 +74,7 @@
{% if waf_service == 'haproxy' %}
- View
+ View
{% elif waf_service == 'nginx' %}
View
{% endif %}
diff --git a/app/templates/ajax/show_list_version.html b/app/templates/ajax/show_list_version.html
index 17ef30ed..aa3a3bc1 100644
--- a/app/templates/ajax/show_list_version.html
+++ b/app/templates/ajax/show_list_version.html
@@ -6,7 +6,7 @@
$('#table_version').on('page.dt')
.DataTable( {
"pageLength": 25,
- "order": [ 6, "desc" ],
+ "order": [ 5, "desc" ],
stateSave: true,
"columnDefs": [
{
diff --git a/app/templates/ajax/show_service_settings.html b/app/templates/ajax/show_service_settings.html
index 276a88ec..b6232051 100644
--- a/app/templates/ajax/show_service_settings.html
+++ b/app/templates/ajax/show_service_settings.html
@@ -3,7 +3,6 @@
{% if service == 'haproxy' %}
{% if settings %}
{% for s in settings %}
- {{s.dockerized}}
{% if s.haproxy_enterprise != '' and s.setting == 'haproxy_enterprise' %}
|
|
{% endif %}
+ {% if s.restart != '' and s.setting == 'restart' %}
+
+ Disable restart |
+
+ {% if s.value == '1' and s.setting == 'restart' %}
+ {{ checkbox('haproxy_restart', checked='checked', title='Restart option is disabled for this server') }}
+ {% elif s.setting == 'restart' %}
+ {{ checkbox('haproxy_restart', title='Only the reload button will be active') }}
+ {% endif %}
+ |
+
+ {% endif %}
{% endfor %}
{% else %}
@@ -46,6 +57,13 @@
{{ checkbox('haproxy_dockerized', title='This server will be used as Docker container') }}
+
+ Disable restart |
+
+ {{ checkbox('haproxy_restart', title='Only the reload button will be active') }}
+ |
+
{% endif %}
{% endif %}
{% if service == 'nginx' %}
@@ -64,6 +82,18 @@
{% endif %}
+ {% if s.restart != '' and s.setting == 'restart' %}
+
+ Disable restart |
+
+ {% if s.value == '1' and s.setting == 'restart' %}
+ {{ checkbox('nginx_restart', checked='checked', title='Restart option is disabled for this server') }}
+ {% elif s.setting == 'restart' %}
+ {{ checkbox('nginx_restart', title='Only the reload button will be active') }}
+ {% endif %}
+ |
+
+ {% endif %}
{% endfor %}
{% else %}
@@ -73,6 +103,12 @@
{{ checkbox('nginx_dockerized', title='This server will be used as Docker container') }}
+
+ Disable restart |
+
+ {{ checkbox('nginx_restart', title='Only the reload button will be active') }}
+ |
+
{% endif %}
{% endif %}
{% if service == 'apache' %}
@@ -91,6 +127,18 @@
{% endif %}
+ {% if s.restart != '' and s.setting == 'restart' %}
+
+ Disable restart |
+
+ {% if s.value == '1' and s.setting == 'restart' %}
+ {{ checkbox('apache_restart', checked='checked', title='Restart option is disabled for this server') }}
+ {% elif s.setting == 'restart' %}
+ {{ checkbox('apache_restart', title='Only the reload button will be active') }}
+ {% endif %}
+ |
+
+ {% endif %}
{% endfor %}
{% else %}
@@ -100,6 +148,12 @@
{{ checkbox('apache_dockerized', title='This server will be used as Docker container') }}
+
+ Disable restart |
+
+ {{ checkbox('apache_restart', title='Only the reload button will be active') }}
+ |
+
{% endif %}
{% endif %}
-
\ No newline at end of file
+
diff --git a/app/templates/base.html b/app/templates/base.html
index 686f06bb..fa02219f 100644
--- a/app/templates/base.html
+++ b/app/templates/base.html
@@ -30,20 +30,21 @@
-
-
-
-
-
+
+
+
+
+
-
+
+
-
+
@@ -65,15 +66,15 @@
@@ -157,7 +157,7 @@
- You can read how it works
here
+ You can read how it works
here
@@ -189,7 +189,7 @@
- You can read how it works
here
+ You can read how it works
here
@@ -221,7 +221,7 @@
- You can read how it works
here
+ You can read how it works
here
@@ -248,7 +248,7 @@
- You can read how it works
here
+ You can read how it works
here
{% endif %}
@@ -271,4 +271,4 @@ $( function() {
}
});
-{% endblock %}
\ No newline at end of file
+{% endblock %}
diff --git a/app/templates/sections.html b/app/templates/sections.html
index 04535715..9060c184 100644
--- a/app/templates/sections.html
+++ b/app/templates/sections.html
@@ -3,10 +3,28 @@
{% if is_serv_protected and role > 2 %}
{% else %}
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+