diff --git a/app/add.py b/app/add.py
index 5d77ed14..81aeba53 100644
--- a/app/add.py
+++ b/app/add.py
@@ -41,8 +41,8 @@ if all(v is None for v in [
if not os.path.exists(black_dir):
os.makedirs(black_dir)
- white_lists = funct.get_files(dir=white_dir, format="lst")
- black_lists = funct.get_files(dir=black_dir, format="lst")
+ white_lists = funct.get_files(white_dir, "lst")
+ black_lists = funct.get_files(black_dir, "lst")
template = template.render(
title="Add: ", role=role, user=user, selects=servers, add=form.getvalue('add'), conf_add=form.getvalue('conf'),
diff --git a/app/config.py b/app/config.py
index 6bb4b188..f6215b1c 100644
--- a/app/config.py
+++ b/app/config.py
@@ -32,7 +32,7 @@ except Exception as e:
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"
+ title = f"{service_desc.service} config view page"
action = f"config.py?service={service_desc.slug}"
configs_dir = funct.get_config_var('configs', 'kp_save_configs_dir')
file_format = 'conf'
@@ -60,6 +60,8 @@ if serv is not None and form.getvalue('open') is not None and form.getvalue('new
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')
+ service_desc = sql.select_service(service)
+ title = f'{service_desc.service} config edit page'
if service == 'keepalived':
error = funct.get_config(serv, cfg, keepalived=1)
diff --git a/app/create_db.py b/app/create_db.py
index 765d9860..af07b24d 100644
--- a/app/create_db.py
+++ b/app/create_db.py
@@ -988,7 +988,7 @@ def update_db_v_6_1_4():
def update_ver():
- query = Version.update(version='6.1.4.0')
+ query = Version.update(version='6.1.5.0')
try:
query.execute()
except Exception:
diff --git a/app/db_model.py b/app/db_model.py
index a3dc6825..0305c2d4 100644
--- a/app/db_model.py
+++ b/app/db_model.py
@@ -561,6 +561,17 @@ class WafNginx(BaseModel):
constraints = [SQL('UNIQUE (server_id)')]
+class ServiceStatus(BaseModel):
+ server_id = ForeignKeyField(Server, on_delete='Cascade')
+ service_id = IntegerField()
+ service_check = CharField()
+ status = IntegerField(constraints=[SQL('DEFAULT 1')])
+
+ class Meta:
+ table_name = 'services_statuses'
+ constraints = [SQL('UNIQUE (server_id, service_id, service_check)')]
+
+
def create_tables():
with conn:
conn.create_tables([User, Server, Role, Telegram, Slack, UUID, Token, ApiToken, Groups, UserGroups, ConfigVersion,
@@ -568,4 +579,4 @@ def create_tables():
PortScannerSettings, PortScannerPorts, PortScannerHistory, ProvidersCreds, ServiceSetting,
ProvisionedServers, MetricsHttpStatus, SMON, WafRules, Alerts, GeoipCodes, NginxMetrics,
SystemInfo, Services, UserName, GitSetting, CheckerSetting, ApacheMetrics, ProvisionParam,
- WafNginx])
+ WafNginx, ServiceStatus])
diff --git a/app/funct.py b/app/funct.py
index 47bf8670..628ae19c 100644
--- a/app/funct.py
+++ b/app/funct.py
@@ -3,6 +3,8 @@ import cgi
import os
import sys
import re
+import json
+import http.cookies
def is_ip_or_dns(server_from_request: str) -> str:
@@ -58,7 +60,7 @@ def get_config_var(sec, var):
return config.get(sec, var)
except Exception:
print('Content-type: text/html\n')
- print('
Check the config file. Presence section %s and parameter %s
' % (sec, var))
+ print(f'
Check the config file. Presence section {sec} and parameter {var}
')
return
@@ -108,7 +110,6 @@ def get_data(log_type, **kwargs):
def get_user_group(**kwargs):
import sql
- import http.cookies
user_group = ''
try:
@@ -130,7 +131,6 @@ def get_user_group(**kwargs):
def logging(server_ip, action, **kwargs):
import sql
- import http.cookies
import distro
login = ''
@@ -288,7 +288,6 @@ def slack_send_mess(mess, **kwargs):
def check_login(**kwargs):
import sql
- import http.cookies
user_uuid = None
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
try:
@@ -325,7 +324,6 @@ def get_user_id(**kwargs):
if kwargs.get('login'):
return sql.get_user_id_by_username(kwargs.get('login'))
- import http.cookies
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
user_uuid = cookie.get('uuid')
@@ -337,7 +335,6 @@ def get_user_id(**kwargs):
def is_admin(**kwargs):
import sql
- import http.cookies
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
user_id = cookie.get('uuid')
try:
@@ -364,8 +361,7 @@ def page_for_admin(**kwargs):
if not is_admin(level=give_level):
print('')
- import sys
- sys.exit()
+ return
def return_ssh_keys_path(server_ip, **kwargs):
@@ -439,6 +435,7 @@ def ssh_connect(server_ip):
def get_config(server_ip, cfg, **kwargs):
import sql
+ config_path = ''
if kwargs.get("keepalived") or kwargs.get("service") == 'keepalived':
config_path = sql.get_setting('keepalived_config_path')
@@ -479,7 +476,6 @@ def get_config(server_ip, cfg, **kwargs):
def diff_config(oldcfg, cfg, **kwargs):
- import http.cookies
import sql
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
log_path = get_config_var('main', 'log_path')
@@ -628,7 +624,7 @@ def get_backends_from_config(server_ip, backends=''):
format_cfg = 'cfg'
try:
- cfg = configs_dir + get_files(dir=configs_dir, format=format_cfg)[0]
+ cfg = configs_dir + get_files(configs_dir, format_cfg)[0]
except Exception as e:
logging('localhost', str(e), haproxywi=1)
try:
@@ -987,9 +983,9 @@ def upload_and_restart(server_ip, cfg, **kwargs):
config_path = sql.get_setting('haproxy_config_path')
tmp_file = sql.get_setting('tmp_config_path') + "/" + get_data('config') + ".cfg"
- is_docker = sql.select_service_setting(server_id, service, 'dockerized')
+ is_dockerized = sql.select_service_setting(server_id, service, 'dockerized')
- if is_docker == '1':
+ if is_dockerized == '1':
service_cont_name = service + '_container_name'
container_name = sql.get_setting(service_cont_name)
reload_command = " && sudo docker kill -s HUP " + container_name
@@ -1035,7 +1031,7 @@ def upload_and_restart(server_ip, cfg, **kwargs):
else:
commands = [move_config + reload_or_restart_command]
elif service == "nginx":
- if is_docker == '1':
+ if is_dockerized == '1':
check_config = "sudo docker exec -it exec " + container_name + " nginx -t "
else:
check_config = "sudo nginx -t "
@@ -1049,7 +1045,7 @@ def upload_and_restart(server_ip, cfg, **kwargs):
if sql.return_firewall(server_ip):
commands[0] += open_port_firewalld(cfg, server_ip=server_ip, service='nginx')
elif service == "apache":
- if is_docker == '1':
+ if is_dockerized == '1':
check_config = "sudo docker exec -it exec " + container_name + " sudo apachectl configtest "
else:
check_config = "sudo apachectl configtest "
@@ -1069,7 +1065,7 @@ def upload_and_restart(server_ip, cfg, **kwargs):
else:
commands = [check_and_move + reload_or_restart_command]
else:
- if is_docker == '1':
+ if is_dockerized == '1':
check_config = "sudo docker exec -it " + container_name + " haproxy -c -f " + tmp_file
else:
check_config = "sudo " + service_name + " -c -f " + tmp_file
@@ -1224,10 +1220,10 @@ def open_port_firewalld(cfg, server_ip, **kwargs):
def check_haproxy_config(server_ip):
import sql
server_id = sql.select_server_id_by_ip(server_ip=server_ip)
- is_docker = sql.select_service_setting(server_id, 'haproxy', 'dockerized')
+ is_dockerized = sql.select_service_setting(server_id, 'haproxy', 'dockerized')
config_path = sql.get_setting('haproxy_config_path')
- if is_docker == '1':
+ if is_dockerized == '1':
container_name = sql.get_setting('haproxy_container_name')
commands = ["sudo docker exec -it " + container_name + " haproxy -q -c -f " + config_path]
else:
@@ -1301,7 +1297,10 @@ def show_finding_in_config(stdout: str, **kwargs) -> str:
return out
-def show_haproxy_log(serv, rows=10, waf='0', grep=None, hour='00', minut='00', hour1='24', minut1='00', service='haproxy', **kwargs):
+def show_haproxy_log(
+ serv, rows='10', waf='0', grep=None, hour='00',
+ minut='00', hour1='24', minut1='00', service='haproxy', **kwargs
+) -> str:
import sql
exgrep = form.getvalue('exgrep')
log_file = form.getvalue('file')
@@ -1379,7 +1378,7 @@ def show_haproxy_log(serv, rows=10, waf='0', grep=None, hour='00', minut='00', h
user_grep = ''
log_path = get_config_var('main', 'log_path')
- logs_files = get_files(log_path, format="log")
+ logs_files = get_files(log_path, "log")
for key, value in logs_files:
if int(serv) == key:
@@ -1403,7 +1402,7 @@ def roxy_wi_log(**kwargs):
log_path = get_config_var('main', 'log_path')
if kwargs.get('log_id'):
- selects = get_files(log_path, format="log")
+ selects = get_files(log_path, "log")
for key, value in selects:
log_file = kwargs.get('file') + ".log"
if log_file == value:
@@ -1495,7 +1494,6 @@ def subprocess_execute(cmd):
def show_backends(server_ip, **kwargs):
- import json
import sql
hap_sock_p = sql.get_setting('haproxy_sock_port')
cmd = 'echo "show backend" |nc %s %s' % (server_ip, hap_sock_p)
@@ -1520,22 +1518,22 @@ def show_backends(server_ip, **kwargs):
return ret
-def get_files(dir=get_config_var('configs', 'haproxy_save_configs_dir'), format='cfg'):
+def get_files(folder=get_config_var('configs', 'haproxy_save_configs_dir'), file_format='cfg'):
import glob
- if format == 'log':
+ if file_format == 'log':
file = []
else:
file = set()
return_files = set()
i = 0
- for files in sorted(glob.glob(os.path.join(dir, '*.' + format + '*'))):
- if format == 'log':
+ for files in sorted(glob.glob(os.path.join(folder, '*.' + file_format + '*'))):
+ if file_format == 'log':
file += [(i, files.split('/')[5])]
else:
file.add(files.split('/')[-1])
i += 1
files = file
- if format == 'cfg' or format == 'conf':
+ if file_format == 'cfg' or file_format == 'conf':
for file in files:
ip = file.split("-")
if serv == ip[0]:
@@ -1593,20 +1591,23 @@ def check_new_version(service):
if proxy is not None and proxy != '' and proxy != 'None':
proxy_dict = {"https": proxy, "http": proxy}
response = requests.get(f'https://roxy-wi.org/version/get/{service}', timeout=1, proxies=proxy_dict)
- requests.get(f'https://roxy-wi.org/version/send/{current_ver}', timeout=1, proxies=proxy_dict)
- response_status = requests.get(f'https://roxy-wi.org/user-name/{user_name}', timeout=1, proxies=proxy_dict)
+ if service == 'roxy-wi':
+ requests.get(f'https://roxy-wi.org/version/send/{current_ver}', timeout=1, proxies=proxy_dict)
+ response_status = requests.get(f'https://roxy-wi.org/user-name/{user_name}', timeout=1, proxies=proxy_dict)
else:
response = requests.get(f'https://roxy-wi.org/version/get/{service}', timeout=1)
- requests.get(f'https://roxy-wi.org/version/send/{current_ver}', timeout=1)
- response_status = requests.get(f'https://roxy-wi.org/user-name/{user_name}', timeout=1)
+ if service == 'roxy-wi':
+ requests.get(f'https://roxy-wi.org/version/send/{current_ver}', timeout=1)
+ response_status = requests.get(f'https://roxy-wi.org/user-name/{user_name}', timeout=1)
res = response.content.decode(encoding='UTF-8')
- try:
- status = response_status.content.decode(encoding='UTF-8')
- status = status.split(' ')
- sql.update_user_status(status[0], status[1].strip(), status[2].strip())
- except Exception:
- pass
+ if service == 'roxy-wi':
+ try:
+ status = response_status.content.decode(encoding='UTF-8')
+ status = status.split(' ')
+ sql.update_user_status(status[0], status[1].strip(), status[2].strip())
+ except Exception:
+ pass
except requests.exceptions.RequestException as e:
logging('localhost', ' ' + str(e), haproxywi=1)
@@ -1655,7 +1656,6 @@ def get_hash(value):
def get_users_params(**kwargs):
- import http.cookies
import sql
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
@@ -1667,6 +1667,11 @@ def get_users_params(**kwargs):
user_services = sql.select_user_services(user_id)
token = sql.get_token(user_uuid.value)
except Exception:
+ user = ''
+ role = ''
+ user_uuid = ''
+ user_services = ''
+ token = ''
print('')
if kwargs.get('virt') and kwargs.get('haproxy'):
@@ -1693,8 +1698,6 @@ def check_user_group(**kwargs):
user_uuid = kwargs.get('user_uuid')
user_id = sql.get_user_id_by_uuid(user_uuid)
else:
- import http.cookies
- import os
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
user_uuid = cookie.get('uuid')
group = cookie.get('group')
@@ -1825,7 +1828,6 @@ def is_service_active(server_ip: str, service_name: str):
def get_system_info(server_ip: str) -> bool:
- import json
import sql
server_ip = is_ip_or_dns(server_ip)
if server_ip == '':
@@ -2083,7 +2085,6 @@ def send_message_to_rabbit(message: str, **kwargs) -> None:
def is_restarted(server_ip, action):
import sql
- import http.cookies
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
user_uuid = cookie.get('uuid')
@@ -2094,7 +2095,7 @@ def is_restarted(server_ip, action):
sys.exit()
-def is_not_allowed_to_restart(server_id: int, service: str) -> bool:
+def is_not_allowed_to_restart(server_id: int, service: str) -> None:
import sql
is_restart = sql.select_service_setting(server_id, service, 'restart')
@@ -2159,11 +2160,11 @@ def send_email(email_to: str, subject: str, message: str) -> None:
msg['To'] = email_to
try:
- smtpObj = SMTP(mail_smtp_host, mail_smtp_port)
+ smtp_obj = SMTP(mail_smtp_host, mail_smtp_port)
if mail_ssl:
- smtpObj.starttls()
- smtpObj.login(mail_smtp_user, mail_smtp_password)
- smtpObj.send_message(msg)
+ smtp_obj.starttls()
+ smtp_obj.login(mail_smtp_user, mail_smtp_password)
+ smtp_obj.send_message(msg)
logging('localhost', 'An email has been sent to ' + email_to, haproxywi=1)
except Exception as e:
logging('localhost', 'error: unable to send email: ' + str(e), haproxywi=1)
@@ -2182,8 +2183,8 @@ def send_email_to_server_group(subject: str, mes: str, group_id: int) -> None:
def alert_routing(
- server_ip: str, service_id: int, group_id: int, level: str, mes: str, alert_type: str) -> None:
- import json
+ server_ip: str, service_id: int, group_id: int, level: str, mes: str, alert_type: str
+) -> None:
import sql
subject: str = level + ': ' + mes
diff --git a/app/hapservers.py b/app/hapservers.py
index 90778140..d7661bc0 100644
--- a/app/hapservers.py
+++ b/app/hapservers.py
@@ -20,10 +20,11 @@ serv = funct.is_ip_or_dns(form.getvalue('serv'))
service = funct.checkAjaxInput(form.getvalue('service'))
autorefresh = 0
servers_waf = ()
-title = "HAProxy servers overview"
+title = ''
cmd = "ps ax |grep -e 'keep_alive.py' |grep -v grep |wc -l"
keep_alive, stderr = funct.subprocess_execute(cmd)
is_restart = ''
+service_desc = ''
restart_settings = ''
if service in ('haproxy', 'nginx', 'keepalived', 'apache'):
@@ -177,6 +178,6 @@ 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,
docker_settings=docker_settings, user_status=user_status, user_plan=user_plan, servers_waf=servers_waf,
- restart_settings=restart_settings, token=token
+ restart_settings=restart_settings, service_desc=service_desc, token=token
)
print(template)
diff --git a/app/options.py b/app/options.py
index d1ce43ed..28807db1 100644
--- a/app/options.py
+++ b/app/options.py
@@ -2,6 +2,10 @@
# -*- coding: utf-8 -*-
import os
import sys
+import json
+import http.cookies
+
+from jinja2 import Environment, FileSystemLoader
import funct
import sql
@@ -249,8 +253,6 @@ if form.getvalue('table_serv_select') is not None:
print(funct.get_all_stick_table())
if form.getvalue('table_select') is not None:
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates'), autoescape=True,
extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do'], trim_blocks=True, lstrip_blocks=True)
table = form.getvalue('table_select')
@@ -302,8 +304,6 @@ if form.getvalue('list_serv_select') is not None:
print(output)
if form.getvalue('list_select_id') is not None:
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True,
extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do'], trim_blocks=True, lstrip_blocks=True)
template = env.get_template('ajax/list.html')
@@ -378,8 +378,6 @@ if form.getvalue('list_ip_for_add') is not None:
service='haproxy')
if form.getvalue('sessions_select') is not None:
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates'), autoescape=True,
extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do'], trim_blocks=True, lstrip_blocks=True)
serv = funct.checkAjaxInput(form.getvalue('sessions_select'))
@@ -592,8 +590,6 @@ if form.getvalue('action_service') is not None:
funct.logging('localhost', ' The service ' + serv + ' has been ' + action + 'ed', haproxywi=1, login=1)
if act == "overviewHapserverBackends":
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
template = env.get_template('haproxyservers_backends.html')
service = form.getvalue('service')
@@ -608,7 +604,7 @@ if act == "overviewHapserverBackends":
if service != 'nginx' and service != 'apache':
try:
- sections = funct.get_sections(configs_dir + funct.get_files(dir=configs_dir, format=format_file)[0], service=service)
+ sections = funct.get_sections(configs_dir + funct.get_files(configs_dir, format_file)[0], service=service)
except Exception as e:
funct.logging('localhost', str(e), haproxywi=1)
@@ -639,7 +635,7 @@ if form.getvalue('show_userlists'):
format_file = 'cfg'
try:
- sections = funct.get_userlists(configs_dir + funct.get_files(dir=configs_dir, format=format_file)[0])
+ sections = funct.get_userlists(configs_dir + funct.get_files(configs_dir, format_file)[0])
except Exception as e:
funct.logging('localhost', str(e), haproxywi=1)
try:
@@ -673,8 +669,6 @@ if act == "overviewHapservers":
if act == "overview":
import asyncio
- import http.cookies
- from jinja2 import Environment, FileSystemLoader
async def async_get_overview(serv1, serv2, user_uuid, server_id):
user_id = sql.get_user_id_by_uuid(user_uuid)
@@ -753,9 +747,6 @@ if act == "overview":
ioloop.close()
if act == "overviewwaf":
- import http.cookies
-
- from jinja2 import Environment, FileSystemLoader
env = Environment(
loader=FileSystemLoader('templates/ajax'), autoescape=True,
extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do']
@@ -846,8 +837,6 @@ if act == "overviewServers":
return server_status
async def get_runner_overviewServers(**kwargs):
- import http.cookies
- from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/ajax'),
extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do'])
template = env.get_template('overviewServers.html')
@@ -933,8 +922,6 @@ if serv is not None and act == "stats":
data = response.content
if form.getvalue('service') == 'nginx':
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('ajax/nginx_stats.html')
@@ -1226,8 +1213,6 @@ if form.getvalue('servaction') is not None:
funct.logging(serv, action)
if act == "showCompareConfigs":
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('ajax/show_compare_configs.html')
left = form.getvalue('left')
@@ -1247,8 +1232,6 @@ if act == "showCompareConfigs":
print(template)
if serv is not None and form.getvalue('right') is not None:
- from jinja2 import Environment, FileSystemLoader
-
left = funct.checkAjaxInput(form.getvalue('left'))
right = funct.checkAjaxInput(form.getvalue('right'))
@@ -1273,8 +1256,6 @@ if serv is not None and form.getvalue('right') is not None:
print(stderr)
if serv is not None and act == "configShow":
- import http.cookies
-
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)
@@ -1317,9 +1298,6 @@ if serv is not None and act == "configShow":
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')
-
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True, trim_blocks=True, lstrip_blocks=True,
extensions=["jinja2.ext.loopcontrols", "jinja2.ext.do"])
template = env.get_template('config_show.html')
@@ -1351,8 +1329,6 @@ if act == 'configShowFiles':
print(return_files)
sys.exit()
return_files += ' ' + sql.get_setting(service + '_config_path')
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('ajax/show_configs_files.html')
template = template.render(serv=serv, service=service, return_files=return_files,
@@ -1366,7 +1342,6 @@ if act == 'showRemoteLogFiles':
if 'error: ' in return_files:
print(return_files)
sys.exit()
- from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('ajax/show_log_files.html')
@@ -1408,8 +1383,8 @@ if form.getvalue('master'):
commands = [
"chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + " SSH_PORT=" + ssh_port + " router_id=" + router_id
+ " ETH=" + ETH + " IP=" + str(IP) + " MASTER=MASTER" + " ETH_SLAVE=" + ETH_SLAVE + " keepalived_path_logs=" + keepalived_path_logs
- + " RETURN_TO_MASTER=" + return_to_master + " SYN_FLOOD=" + syn_flood + " HOST=" + str(master)
- + " USER=" + str(ssh_user_name) + " PASS='" + str(ssh_user_password) + "' KEY=" + str(ssh_key_name)
+ + " RETURN_TO_MASTER=" + return_to_master + " SYN_FLOOD=" + syn_flood + " HOST=" + str(master) + " HAPROXY=" + haproxy
+ + " NGINX=" + nginx + " USER=" + str(ssh_user_name) + " PASS='" + str(ssh_user_password) + "' KEY=" + str(ssh_key_name)
]
output, error = funct.subprocess_execute(commands[0])
@@ -1433,6 +1408,8 @@ if form.getvalue('master_slave'):
ETH_SLAVE = form.getvalue('slave_interface')
IP = form.getvalue('vrrpip')
syn_flood = form.getvalue('syn_flood')
+ haproxy = form.getvalue('hap')
+ nginx = form.getvalue('nginx')
router_id = form.getvalue('router_id')
script = "install_keepalived.sh"
proxy = sql.get_setting('proxy')
@@ -1457,7 +1434,7 @@ if form.getvalue('master_slave'):
commands = [
"chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + " SSH_PORT=" + ssh_port + " router_id=" + router_id
+ " ETH=" + ETH + " IP=" + IP + " MASTER=BACKUP" + " ETH_SLAVE=" + ETH_SLAVE + " keepalived_path_logs=" + keepalived_path_logs
- + " HOST=" + str(slave) + " USER=" + str(ssh_user_name) + " PASS='" + str(ssh_user_password)
+ + " HAPROXY=" + HAPROXY + " NGINX=" + nginx + " HOST=" + str(slave) + " USER=" + str(ssh_user_name) + " PASS='" + str(ssh_user_password)
+ "' KEY=" + str(ssh_key_name)
]
@@ -1575,6 +1552,7 @@ if form.getvalue('master_slave_nginx'):
if form.getvalue('install_grafana'):
script = "install_grafana.sh"
proxy = sql.get_setting('proxy')
+ host = os.environ.get('HTTP_HOST', '')
os.system("cp scripts/%s ." % script)
@@ -1589,10 +1567,9 @@ if form.getvalue('install_grafana'):
if error:
funct.logging('localhost', error, haproxywi=1)
- import socket
print(
- 'success: Grafana and Prometheus servers were installed. You can find Grafana on http://' + socket.gethostname() + ':3000 ')
+ f'success: Grafana and Prometheus servers were installed. You can find Grafana on http://{host}:3000 ')
else:
for line in output:
if any(s in line for s in ("Traceback", "FAILED")):
@@ -1603,10 +1580,8 @@ if form.getvalue('install_grafana'):
print(output)
break
else:
- import socket
-
print(
- 'success: Grafana and Prometheus servers were installed. You can find Grafana on http://' + socket.gethostname() + ':3000 ')
+ f'success: Grafana and Prometheus servers were installed. You can find Grafana on http://{host}:3000 ')
os.system("rm -f %s" % script)
@@ -1778,8 +1753,6 @@ if form.getvalue('backup') or form.getvalue('deljob') or form.getvalue('backupup
else:
if not deljob and not update:
if sql.insert_backup_job(serv, rserver, rpath, backup_type, time, cred, description):
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
template = env.get_template('new_backup.html')
template = template.render(
@@ -1858,8 +1831,6 @@ if form.getvalue('git_backup'):
server_id=server_id, service_id=service_id, repo=repo, branch=branch,
period=period, cred=cred, description=description
):
- from jinja2 import Environment, FileSystemLoader
-
gits = sql.select_gits(server_id=server_id, service_id=service_id)
sshs = sql.select_ssh()
@@ -1914,7 +1885,6 @@ if form.getvalue('table_metrics'):
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')
@@ -1923,8 +1893,6 @@ if form.getvalue('table_metrics'):
print(template)
if form.getvalue('metrics_hapwi_ram'):
- import json
-
ip = form.getvalue('ip')
metrics = {'chartData': {}}
rams = ''
@@ -1956,8 +1924,6 @@ 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)
import psutil
cpus_list = psutil.cpu_times_percent(interval=1, percpu=False)
@@ -1979,8 +1945,6 @@ if form.getvalue('metrics_hapwi_cpu'):
metrics['chartData']['cpus'] = cpus
- import json
-
print(json.dumps(metrics))
if form.getvalue('new_metrics'):
@@ -2011,8 +1975,6 @@ if form.getvalue('new_metrics'):
metrics['chartData']['sess_rate'] = sess_rate
metrics['chartData']['server'] = hostname + ' (' + server + ')'
- import json
-
print(json.dumps(metrics))
if form.getvalue('new_http_metrics'):
@@ -2046,8 +2008,6 @@ if form.getvalue('new_http_metrics'):
metrics['chartData']['http_5xx'] = http_5xx
metrics['chartData']['server'] = hostname + ' (' + server + ')'
- import json
-
print(json.dumps(metrics))
if any((form.getvalue('new_nginx_metrics'), form.getvalue('new_apache_metrics'), form.getvalue('new_waf_metrics'))):
@@ -2080,8 +2040,6 @@ if any((form.getvalue('new_nginx_metrics'), form.getvalue('new_apache_metrics'),
metrics['chartData']['curr_con'] = curr_con
metrics['chartData']['server'] = hostname + ' (' + serv + ')'
- import json
-
print(json.dumps(metrics))
if form.getvalue('get_hap_v'):
@@ -2225,7 +2183,7 @@ if form.getvalue('bwlists_delete'):
if form.getvalue('get_lists'):
lib_path = funct.get_config_var('main', 'lib_path')
list_path = lib_path + "/" + sql.get_setting('lists_path') + "/" + form.getvalue('group') + "/" + form.getvalue('color')
- lists = funct.get_files(dir=list_path, format="lst")
+ lists = funct.get_files(list_path, "lst")
for l in lists:
print(l)
@@ -2296,8 +2254,6 @@ if form.getvalue('newuser') is not None:
if funct.check_user_group():
if funct.is_admin(level=role_id):
if sql.add_user(new_user, email, password, role, activeuser, group):
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('ajax/new_user.html')
@@ -2424,8 +2380,6 @@ if form.getvalue('newserver') is not None:
user_status, user_plan = 0, 0
funct.logging('localhost', 'Cannot get a user plan: ' + str(e), haproxywi=1)
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('ajax/new_server.html')
@@ -2504,8 +2458,6 @@ if form.getvalue('newgroup') is not None:
print(error_mess)
else:
if sql.add_group(newgroup, desc):
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/ajax/'), autoescape=True)
template = env.get_template('/new_group.html')
@@ -2550,8 +2502,6 @@ if form.getvalue('new_ssh'):
print(error_mess)
else:
if sql.insert_new_ssh(name, enable, group, username, password):
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
template = env.get_template('/new_ssh.html')
output_from_parsed_template = template.render(groups=sql.select_groups(), sshs=sql.select_ssh(name=name),
@@ -2621,13 +2571,14 @@ if form.getvalue('ssh_cert'):
key = paramiko.pkey.load_private_key(form.getvalue('ssh_cert'))
except Exception as e:
print('error: Cannot save SSH key file: ', str(e))
+ sys.exit()
lib_path = funct.get_config_var('main', 'lib_path')
full_dir = lib_path + '/keys/'
ssh_keys = name + '.pem'
try:
- split_name = name.split('_')[1]
+ check_split = name.split('_')[1]
split_name = True
except Exception:
split_name = False
@@ -2644,6 +2595,7 @@ if form.getvalue('ssh_cert'):
key.write_private_key_file(ssh_keys)
except Exception as e:
print('error: Cannot save SSH key file: ', str(e))
+ sys.exit()
else:
print('success: SSH key has been saved into: %s ' % ssh_keys)
@@ -2666,8 +2618,6 @@ if form.getvalue('newtelegram'):
print(error_mess)
else:
if sql.insert_new_telegram(token, channel, group):
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
template = env.get_template('/new_telegram.html')
output_from_parsed_template = template.render(groups=sql.select_groups(),
@@ -2686,8 +2636,6 @@ if form.getvalue('newslack'):
print(error_mess)
else:
if sql.insert_new_slack(token, channel, group):
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
template = env.get_template('/new_slack.html')
output_from_parsed_template = template.render(groups=sql.select_groups(),
@@ -2751,7 +2699,6 @@ if form.getvalue('getuserservices'):
services = sql.select_services()
for g in u_g:
groups.append(g.user_group_id)
- from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
template = env.get_template('/show_user_services.html')
@@ -2764,7 +2711,6 @@ if form.getvalue('getusergroups'):
u_g = sql.select_user_groups(user_id)
for g in u_g:
groups.append(g.user_group_id)
- from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
template = env.get_template('/show_user_groups.html')
@@ -2801,16 +2747,11 @@ if form.getvalue('changeUserCurrentGroupId') is not None:
print('error: Cannot change group')
if form.getvalue('getcurrentusergroup') is not None:
- import http.cookies
-
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
user_id = cookie.get('uuid')
group = cookie.get('group')
group_id = sql.get_user_id_by_uuid(user_id.value)
groups = sql.select_user_groups_with_names(group_id)
-
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
template = env.get_template('/show_user_current_group.html')
template = template.render(groups=groups, group=group.value, id=group_id)
@@ -2846,7 +2787,6 @@ if form.getvalue('newsmon') is not None:
last_id = sql.insert_smon(server, port, enable, http, uri, body, group, desc, telegram, slack, user_group)
if last_id:
- from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates'), autoescape=True)
template = env.get_template('ajax/show_new_smon.html')
template = template.render(
@@ -2868,9 +2808,6 @@ if form.getvalue('smondel') is not None:
if form.getvalue('showsmon') is not None:
user_group = funct.get_user_group(id=1)
sort = form.getvalue('sort')
-
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates'), autoescape=True)
template = env.get_template('ajax/smon_dashboard.html')
template = template.render(smon=sql.smon_list(user_group), sort=sort)
@@ -2916,17 +2853,14 @@ if form.getvalue('showBytes') is not None:
bit_in, stderr = funct.subprocess_execute(cmd)
bin_bout.append(bit_in[0])
cmd = "echo 'show stat' |nc {} {} |cut -d ',' -f 1-2,10|grep -E '[0-9]'|awk -F',' '{{sum+=$3;}}END{{print sum;}}'".format(serv, port)
- bout, stderr = funct.subprocess_execute(cmd)
+ bout, stderr1 = funct.subprocess_execute(cmd)
bin_bout.append(bout[0])
cmd = "echo 'show stat' |nc {} {} |cut -d ',' -f 1-2,5|grep -E '[0-9]'|awk -F',' '{{sum+=$3;}}END{{print sum;}}'".format(serv, port)
- cin, stderr = funct.subprocess_execute(cmd)
+ cin, stderr2 = funct.subprocess_execute(cmd)
bin_bout.append(cin[0])
cmd = "echo 'show stat' |nc {} {} |cut -d ',' -f 1-2,8|grep -E '[0-9]'|awk -F',' '{{sum+=$3;}}END{{print sum;}}'".format(serv, port)
- cout, stderr = funct.subprocess_execute(cmd)
+ cout, stderr3 = funct.subprocess_execute(cmd)
bin_bout.append(cout[0])
-
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates'), autoescape=True)
template = env.get_template('ajax/bin_bout.html')
template = template.render(bin_bout=bin_bout, serv=serv)
@@ -2951,8 +2885,6 @@ if form.getvalue('nginxConnections'):
if num == 2:
bin_bout.append(line.split(' ')[3])
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('ajax/bin_bout.html')
template = template.render(bin_bout=bin_bout, serv=serv, service='nginx')
@@ -3139,8 +3071,6 @@ if form.getvalue('scan_ports') is not None:
if stderr != '':
print(stderr)
else:
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates'), autoescape=True)
template = env.get_template('ajax/scan_ports.html')
template = template.render(ports=stdout, info=stdout1)
@@ -3165,9 +3095,6 @@ if form.getvalue('viewFirewallRules') is not None:
IN_public_allow = funct.ssh_command(serv, cmd1, raw=1)
output_chain = funct.ssh_command(serv, cmd2, raw=1)
-
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('ajax/firewall_rules.html')
template = template.render(input=input_chain2, IN_public_allow=IN_public_allow, output=output_chain)
@@ -3352,8 +3279,6 @@ if form.getvalue('portscanner_history_server_id'):
print('ok')
if form.getvalue('show_versions'):
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('ajax/check_version.html')
template = template.render(versions=funct.versions())
@@ -3392,10 +3317,6 @@ if any((form.getvalue('do_new_name'), form.getvalue('aws_new_name'), form.getval
is_add = True
if is_add:
- from jinja2 import Environment, FileSystemLoader
- import http.cookies
- import os
-
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)
@@ -3570,9 +3491,6 @@ if form.getvalue('doworkspace'):
region, size, privet_net, floating_ip, ssh_ids, ssh_name, workspace, oss, firewall, monitoring,
backup, provider, group, 'Creating'
):
-
- from jinja2 import Environment, FileSystemLoader
-
user, user_id, role, token, servers, user_services = funct.get_users_params()
new_server = sql.select_provisioned_servers(new=workspace, group=group, type='do')
params = sql.select_provisioning_params()
@@ -3666,9 +3584,6 @@ if form.getvalue('awsworkspace'):
region, size, public_ip, floating_ip, volume_size, ssh_name, workspace, oss, firewall,
provider, group, 'Creating', delete_on_termination, volume_type
):
-
- from jinja2 import Environment, FileSystemLoader
-
user, user_id, role, token, servers, user_services = funct.get_users_params()
new_server = sql.select_provisioned_servers(new=workspace, group=group, type='aws')
params = sql.select_provisioning_params()
@@ -3940,9 +3855,6 @@ if form.getvalue('gcoreworkspace'):
project, region, size, network_type, network_name, volume_size, ssh_name, workspace, oss, firewall,
provider, group, 'Creating', delete_on_termination, volume_type
):
-
- from jinja2 import Environment, FileSystemLoader
-
user, user_id, role, token, servers, user_services = funct.get_users_params()
new_server = sql.select_provisioned_servers(new=workspace, group=group, type='gcore')
params = sql.select_provisioning_params()
@@ -4003,8 +3915,6 @@ if form.getvalue('editAwsServer'):
params = sql.select_provisioning_params()
providers = sql.select_providers(int(user_group))
server = sql.select_gcore_server(server_id=server_id)
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(extensions=["jinja2.ext.do"], loader=FileSystemLoader('templates'))
template = env.get_template('ajax/provisioning/aws_edit_dialog.html')
template = template.render(server=server, providers=providers, params=params)
@@ -4017,8 +3927,6 @@ if form.getvalue('editGcoreServer'):
params = sql.select_provisioning_params()
providers = sql.select_providers(int(user_group))
server = sql.select_gcore_server(server_id=server_id)
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(extensions=["jinja2.ext.do"], loader=FileSystemLoader('templates'))
template = env.get_template('ajax/provisioning/gcore_edit_dialog.html')
template = template.render(server=server, providers=providers, params=params)
@@ -4031,8 +3939,6 @@ if form.getvalue('editDoServer'):
params = sql.select_provisioning_params()
providers = sql.select_providers(int(user_group))
server = sql.select_do_server(server_id=server_id)
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(extensions=["jinja2.ext.do"], loader=FileSystemLoader('templates'))
template = env.get_template('ajax/provisioning/do_edit_dialog.html')
template = template.render(server=server, providers=providers, params=params)
@@ -4071,7 +3977,6 @@ if form.getvalue('edit_aws_provider'):
funct.logging('localhost', 'Provider has been renamed. New name is ' + new_name, provisioning=1)
if form.getvalue('loadservices'):
- from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('ajax/load_services.html')
services = funct.get_services_status()
@@ -4080,7 +3985,6 @@ if form.getvalue('loadservices'):
print(template)
if form.getvalue('loadchecker'):
- from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates'), autoescape=True)
template = env.get_template('ajax/load_telegram.html')
services = funct.get_services_status()
@@ -4134,7 +4038,6 @@ if form.getvalue('loadchecker'):
print(template)
if form.getvalue('load_update_hapwi'):
- from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('ajax/load_updatehapwi.html')
@@ -4159,7 +4062,6 @@ if form.getvalue('load_update_hapwi'):
if form.getvalue('loadopenvpn'):
import distro
- from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('ajax/load_openvpn.html')
openvpn_configs = ''
@@ -4197,9 +4099,6 @@ if form.getvalue('check_slack'):
funct.slack_send_mess(mess, slack_channel_id=slack_id)
if form.getvalue('check_rabbitmq_alert'):
- import json
- import http.cookies
-
try:
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
user_group_id = cookie.get('group')
@@ -4216,7 +4115,6 @@ if form.getvalue('check_rabbitmq_alert'):
print(f'error: Cannot send a message {error}')
if form.getvalue('check_email_alert'):
- import http.cookies
subject = 'test message'
message = 'Test message from Roxy-WI'
@@ -4251,7 +4149,7 @@ if form.getvalue('getoption'):
for i in options:
a[v] = i.options
v = v + 1
- import json
+
print(json.dumps(a))
@@ -4262,8 +4160,6 @@ if form.getvalue('newtoption'):
print(error_mess)
else:
if sql.insert_new_option(option, group):
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
template = env.get_template('/new_option.html')
@@ -4299,7 +4195,7 @@ if form.getvalue('getsavedserver'):
a[v]['value'] = i.server
a[v]['desc'] = i.description
v = v + 1
- import json
+
print(json.dumps(a))
@@ -4311,8 +4207,6 @@ if form.getvalue('newsavedserver'):
print(error_mess)
else:
if sql.insert_new_savedserver(savedserver, description, group):
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
template = env.get_template('/new_saved_servers.html')
@@ -4335,8 +4229,6 @@ if form.getvalue('savedserverdel') is not None:
print("Ok")
if form.getvalue('show_users_ovw') is not None:
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
template = env.get_template('/show_users_ovw.html')
@@ -4356,8 +4248,6 @@ if form.getvalue('show_users_ovw') is not None:
if form.getvalue('serverSettings') is not None:
server_id = form.getvalue('serverSettings')
service = form.getvalue('serverSettingsService')
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('ajax/show_service_settings.html')
@@ -4459,9 +4349,7 @@ if act == 'showListOfVersion':
if service == 'haproxy':
files = funct.get_files()
else:
- files = funct.get_files(dir=configs_dir, format='conf')
-
- from jinja2 import Environment, FileSystemLoader
+ files = funct.get_files(configs_dir, 'conf')
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True,
extensions=["jinja2.ext.loopcontrols", "jinja2.ext.do"])
@@ -4487,7 +4375,6 @@ if act == 'getSystemInfo':
print('error: IP or DNS name is not valid')
sys.exit()
- from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True,
extensions=["jinja2.ext.loopcontrols", "jinja2.ext.do"])
env.globals['string_to_dict'] = funct.string_to_dict
@@ -4518,8 +4405,6 @@ if act == 'updateSystemInfo':
sql.delete_system_info(server_id)
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True,
extensions=["jinja2.ext.loopcontrols", "jinja2.ext.do"])
env.globals['string_to_dict'] = funct.string_to_dict
@@ -4550,7 +4435,9 @@ if act == 'findInConfigs':
print(return_find)
if act == 'check_service':
- import http.cookies
+ import socket
+ from contextlib import closing
+
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
user_uuid = cookie.get('uuid')
user_id = sql.get_user_id_by_uuid(user_uuid.value)
@@ -4571,9 +4458,6 @@ if act == 'check_service':
print('down')
if '2' in user_services:
if service == 'nginx':
- import socket
- from contextlib import closing
-
nginx_stats_port = sql.get_setting('nginx_stats_port')
with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock:
@@ -4588,9 +4472,6 @@ if act == 'check_service':
print('down')
if '4' in user_services:
if service == 'apache':
- import socket
- from contextlib import closing
-
apache_stats_port = sql.get_setting('apache_stats_port')
with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock:
@@ -4605,8 +4486,6 @@ if act == 'check_service':
print('down' + str(e))
if form.getvalue('show_sub_ovw'):
- from jinja2 import Environment, FileSystemLoader
-
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('ajax/show_sub_ovw.html')
template = template.render(sub=sql.select_user_all())
diff --git a/app/overview.py b/app/overview.py
index f0d8e8f7..3b6bed5b 100644
--- a/app/overview.py
+++ b/app/overview.py
@@ -1,6 +1,7 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
+import psutil
import funct
import sql
@@ -13,57 +14,50 @@ print('Content-type: text/html\n')
funct.check_login()
+grafana = 0
+metrics_worker = 0
+checker_worker = 0
+is_checker_worker = 0
+is_metrics_worker = 0
+servers_group = []
+host = os.environ.get('HTTP_HOST', '')
+
try:
user, user_id, role, token, servers, user_services = funct.get_users_params()
groups = sql.select_groups()
user_group = funct.get_user_group(id=1)
if (role == 2 or role == 3) and int(user_group) != 1:
- servers_for_grep = ''
- i = 1
- servers_len = len(servers)
-
for s in servers:
- if i != servers_len:
- servers_for_grep += s[2] + '\|'
- else:
- servers_for_grep += s[2]
+ servers_group.append(s[2])
- i += 1
+ is_checker_worker = len(sql.select_all_alerts(group=user_group))
+ is_metrics_worker = len(sql.select_servers_metrics_for_master(group=user_group))
- cmd = "ps ax |grep '[m]etrics_worker\|[m]etrics_waf_worker.py\|[m]etrics_nginx_worker.py'|grep '%s' |wc -l" % servers_for_grep
- metrics_worker, stderr = funct.subprocess_execute(cmd)
- cmd = "ps ax |grep '[c]hecker_worker\|[c]hecker_nginx\|[c]hecker_apache\|[c]hecker_keepalived'|grep -v grep |grep '%s' |wc -l" % servers_for_grep
- checker_worker, stderr = funct.subprocess_execute(cmd)
- i = 0
- for s in sql.select_all_alerts(group=user_group):
- i += 1
- is_checker_worker = i
- is_metrics_workers = sql.select_servers_metrics_for_master(group=user_group)
- i = 0
- for s in is_metrics_workers:
- i += 1
- is_metrics_worker = i
- grafana = ''
- prometheus = ''
- host = ''
- else:
- cmd = "ps ax |grep '[m]etrics_worker\|[m]etrics_waf_worker.py\|[m]etrics_nginx_worker.py' |wc -l"
- metrics_worker, stderr = funct.subprocess_execute(cmd)
- cmd = "ps ax |grep '[c]hecker_worker\|[c]hecker_nginx\|[c]hecker_apache\|[c]hecker_keepalived' |wc -l"
- checker_worker, stderr = funct.subprocess_execute(cmd)
- i = 0
- for s in sql.select_all_alerts():
- i += 1
- is_checker_worker = i
- is_metrics_workers = sql.select_servers_metrics_for_master()
- i = 0
- for s in is_metrics_workers:
- i += 1
- is_metrics_worker = i
- cmd = "ps ax |egrep [g]rafana|wc -l"
- grafana, stderr = funct.subprocess_execute(cmd)
- host = os.environ.get('HTTP_HOST', '')
+ for pids in psutil.pids():
+ if pids < 300:
+ continue
+ try:
+ pid = psutil.Process(pids)
+ cmdline_out = pid.cmdline()
+ if len(cmdline_out) > 2:
+ if 'checker_' in cmdline_out[1]:
+ if len(servers_group) > 0:
+ if cmdline_out[2] in servers_group:
+ checker_worker += 1
+ else:
+ checker_worker += 1
+ elif 'metrics_' in cmdline_out[1]:
+ if len(servers_group) > 0:
+ if cmdline_out[2] in servers_group:
+ metrics_worker += 1
+ else:
+ metrics_worker += 1
+ if len(servers_group) == 0:
+ if 'grafana' in cmdline_out[1]:
+ grafana += 1
+ except psutil.NoSuchProcess:
+ pass
cmd = "systemctl is-active roxy-wi-metrics"
metrics_master, stderr = funct.subprocess_execute(cmd)
@@ -78,41 +72,32 @@ try:
cmd = "systemctl is-active roxy-wi-socket"
socket, stderr = funct.subprocess_execute(cmd)
-except Exception:
+except Exception as e:
role = ''
user = ''
- users = ''
groups = ''
roles = ''
metrics_master = ''
- metrics_worker = ''
checker_master = ''
- checker_worker = ''
keep_alive = ''
smon = ''
- grafana = ''
socket = ''
- versions = ''
- haproxy_wi_log = ''
servers = ''
stderr = ''
- is_checker_worker = ''
- is_metrics_worker = ''
token = ''
-
+ print(str(e))
rendered_template = template.render(
h2=1, autorefresh=1, title="Overview", role=role, user=user, groups=groups, roles=sql.select_roles(),
- metrics_master=''.join(metrics_master), metrics_worker=''.join(metrics_worker), checker_master=''.join(checker_master),
- checker_worker=''.join(checker_worker), keep_alive=''.join(keep_alive), smon=''.join(smon),
- port_scanner=''.join(port_scanner), grafana=''.join(grafana), socket=''.join(socket),
- roxy_wi_log_id=funct.roxy_wi_log(log_id=1, file="roxy-wi-", with_date=1),
- metrics_log_id=funct.roxy_wi_log(log_id=1, file="metrics", with_date=1),
- checker_log_id=funct.roxy_wi_log(log_id=1, file="checker", with_date=1),
+ metrics_master=''.join(metrics_master), metrics_worker=metrics_worker, checker_master=''.join(checker_master),
+ checker_worker=checker_worker, keep_alive=''.join(keep_alive), smon=''.join(smon),
+ port_scanner=''.join(port_scanner), grafana=grafana, socket=''.join(socket),
+ roxy_wi_log_id=funct.roxy_wi_log(log_id=1, file="roxy-wi-"),
+ metrics_log_id=funct.roxy_wi_log(log_id=1, file="metrics"),
+ checker_log_id=funct.roxy_wi_log(log_id=1, file="checker"),
keep_alive_log_id=funct.roxy_wi_log(log_id=1, file="keep_alive"),
- socket_log_id=funct.roxy_wi_log(log_id=1, file="socket"),
- metrics_error_log_id=funct.roxy_wi_log(log_id=1, file="metrics-error"), error=stderr,
- haproxy_wi_log=funct.roxy_wi_log(), servers=servers, is_checker_worker=is_checker_worker,
+ socket_log_id=funct.roxy_wi_log(log_id=1, file="socket"), error=stderr,
+ roxy_wi_log=funct.roxy_wi_log(), servers=servers, is_checker_worker=is_checker_worker,
is_metrics_worker=is_metrics_worker, host=host, user_services=user_services, token=token
)
print(rendered_template)
diff --git a/app/scripts/ansible/roles/keepalived/handlers/main.yml b/app/scripts/ansible/roles/keepalived/handlers/main.yml
index cacb44d5..ae1aa8dc 100644
--- a/app/scripts/ansible/roles/keepalived/handlers/main.yml
+++ b/app/scripts/ansible/roles/keepalived/handlers/main.yml
@@ -1,6 +1,3 @@
---
-- name: restart keepalived
- service: name=keepalived state=restarted
-
- name: restart rsyslog
service: name=restart state=restarted
diff --git a/app/scripts/ansible/roles/keepalived/templates/keepalived.conf.j2 b/app/scripts/ansible/roles/keepalived/templates/keepalived.conf.j2
index 18564299..74520a6a 100644
--- a/app/scripts/ansible/roles/keepalived/templates/keepalived.conf.j2
+++ b/app/scripts/ansible/roles/keepalived/templates/keepalived.conf.j2
@@ -1,9 +1,14 @@
global_defs {
router_id LVS_DEVEL
}
+{%- if NGINX == '1' %}
+{% set check_service = 'nginx' %}
+{% else %}
+{% set check_service = 'haproxy' %}
+{% endif %}
#health-check for keepalive
-vrrp_script chk_haproxy {
- script "systemctl is-active --quiet haproxy"
+vrrp_script chk_service {
+ script "systemctl is-active --quiet {{ check_service }}"
interval 2
weight 3
}
@@ -16,7 +21,7 @@ vrrp_instance VI_1 {
#check if we are still running
track_script {
- chk_haproxy
+ chk_service
}
advert_int 1
diff --git a/app/scripts/install_keepalived.sh b/app/scripts/install_keepalived.sh
index 23bbf17a..29b90b1e 100644
--- a/app/scripts/install_keepalived.sh
+++ b/app/scripts/install_keepalived.sh
@@ -21,6 +21,8 @@ do
RETURN_TO_MASTER) RETURN_TO_MASTER=${VALUE} ;;
ADD_VRRP) ADD_VRRP=${VALUE} ;;
SSH_PORT) SSH_PORT=${VALUE} ;;
+ HAPROXY) HAPROXY=${VALUE} ;;
+ NGINX) NGINX=${VALUE} ;;
*)
esac
done
@@ -36,9 +38,9 @@ PWD=$PWD/scripts/ansible/
echo "$HOST ansible_port=$SSH_PORT" > $PWD/$HOST
if [[ $KEY == "" ]]; then
- ansible-playbook $PWD/roles/keepalived.yml -e "ansible_user=$USER ansible_ssh_pass='$PASS' variable_host=$HOST SYN_FLOOD=$SYN_FLOOD PROXY=$PROXY MASTER=$MASTER ETH=$ETH ETH_SLAVE=$ETH_SLAVE keepalived_path_logs=$keepalived_path_logs IP=$IP RESTART=$RESTART RETURN_TO_MASTER=$RETURN_TO_MASTER ADD_VRRP=$ADD_VRRP router_id=$router_id SSH_PORT=$SSH_PORT" -i $PWD/$HOST
+ ansible-playbook $PWD/roles/keepalived.yml -e "ansible_user=$USER ansible_ssh_pass='$PASS' variable_host=$HOST SYN_FLOOD=$SYN_FLOOD PROXY=$PROXY MASTER=$MASTER ETH=$ETH ETH_SLAVE=$ETH_SLAVE keepalived_path_logs=$keepalived_path_logs IP=$IP RESTART=$RESTART RETURN_TO_MASTER=$RETURN_TO_MASTER ADD_VRRP=$ADD_VRRP router_id=$router_id HAPROXY=$HAPROXY NGINX=$NGINX SSH_PORT=$SSH_PORT" -i $PWD/$HOST
else
- ansible-playbook $PWD/roles/keepalived.yml --key-file $KEY -e "ansible_user=$USER variable_host=$HOST SYN_FLOOD=$SYN_FLOOD PROXY=$PROXY MASTER=$MASTER ETH=$ETH ETH_SLAVE=$ETH_SLAVE keepalived_path_logs=$keepalived_path_logs IP=$IP RESTART=$RESTART RETURN_TO_MASTER=$RETURN_TO_MASTER ADD_VRRP=$ADD_VRRP router_id=$router_id SSH_PORT=$SSH_PORT" -i $PWD/$HOST
+ ansible-playbook $PWD/roles/keepalived.yml --key-file $KEY -e "ansible_user=$USER variable_host=$HOST SYN_FLOOD=$SYN_FLOOD PROXY=$PROXY MASTER=$MASTER ETH=$ETH ETH_SLAVE=$ETH_SLAVE keepalived_path_logs=$keepalived_path_logs IP=$IP RESTART=$RESTART RETURN_TO_MASTER=$RETURN_TO_MASTER ADD_VRRP=$ADD_VRRP router_id=$router_id HAPROXY=$HAPROXY NGINX=$NGINX SSH_PORT=$SSH_PORT" -i $PWD/$HOST
fi
if [ $? -gt 0 ]
diff --git a/app/sql.py b/app/sql.py
index 343217c5..0e98da5a 100755
--- a/app/sql.py
+++ b/app/sql.py
@@ -1554,7 +1554,7 @@ def insert_new_waf_rule(rule_name: str, rule_file: str, rule_description: str, s
out_error(e)
else:
return last_id
-
+
def delete_waf_server(server_id):
@@ -3765,3 +3765,27 @@ def select_service(slug: str) -> str:
return 'there is no service'
else:
return query_res
+
+
+def select_checker_service_status(server_id: int, service_id: int, service_check: str) -> int:
+ try:
+ service_check_status = ServiceStatus.get(
+ (ServiceStatus.server_id == server_id)
+ & (ServiceStatus.service_id == service_id)
+ & (ServiceStatus.service_check == service_check)
+ ).status
+ except Exception as e:
+ return out_error(e)
+ else:
+ return service_check_status
+
+
+def inset_or_update_service_status(
+ server_id: int, service_id: int, service_check: str, status: int
+) -> None:
+ try:
+ ServiceStatus.insert(
+ server_id=server_id, service_id=service_id, service_check=service_check, status=status
+ ).on_conflict('replace').execute()
+ except Exception as e:
+ out_error(e)
diff --git a/app/templates/ajax/config_show.html b/app/templates/ajax/config_show.html
index 9c464c56..77aeff1c 100644
--- a/app/templates/ajax/config_show.html
+++ b/app/templates/ajax/config_show.html
@@ -3,7 +3,7 @@
{% if role <= 3 %}
{% if not is_serv_protected or role <= 2 %}
- Edit
+ Edit
{% if service == 'haproxy' %}
Add
{% elif service == 'keepalived' %}
@@ -11,7 +11,7 @@
{% endif %}
{% endif %}
{% endif %}
- Expand all
+ Expand all
@@ -382,4 +382,26 @@
{% endif %}
Note: If you reconfigure Master server, Slave will be reconfigured automatically
- {% endif %}
\ No newline at end of file
+ {% endif %}
+
diff --git a/app/templates/ajax/table_metrics.html b/app/templates/ajax/table_metrics.html
index d7ced4c5..9273dd87 100644
--- a/app/templates/ajax/table_metrics.html
+++ b/app/templates/ajax/table_metrics.html
@@ -1,4 +1,5 @@
+ {% if service == 'haproxy' %}
Server
Average sessions
@@ -37,4 +38,30 @@
{{ state.13 }}
{% endfor %}
+ {% else %}
+
+
Server
+
Average connections
+
Peak connections
+
+
+
1 hour
+
24 hours
+
3 days
+
1 hour
+
24 hours
+
3 days
+
+ {% for state in table_stat %}
+
+
{{ state.1 }}
+
{{ state.2 }}
+
{{ state.3 }}
+
{{ state.4 }}
+
{{ state.5 }}
+
{{ state.6 }}
+
{{ state.7 }}
+
+ {% endfor %}
+ {% endif %}
\ No newline at end of file
diff --git a/app/templates/base.html b/app/templates/base.html
index fa02219f..18ae05ee 100644
--- a/app/templates/base.html
+++ b/app/templates/base.html
@@ -1,6 +1,6 @@
- {{title}} - Roxy-WI
+ {{title}}
@@ -49,6 +49,7 @@
+