diff --git a/app/funct.py b/app/funct.py index 7f1a58d0..703713b1 100644 --- a/app/funct.py +++ b/app/funct.py @@ -66,6 +66,7 @@ def get_user_group(**kwargs): return user_group + def logging(serv, action, **kwargs): import sql import http.cookies @@ -203,7 +204,7 @@ def page_for_admin(**kwargs): def return_ssh_keys_path(serv, **kwargs): import sql - fullpath = get_config_var('main', 'fullpath') + full_path = get_config_var('main', 'fullpath') ssh_enable = '' ssh_user_name = '' ssh_user_password = '' @@ -213,13 +214,13 @@ def return_ssh_keys_path(serv, **kwargs): ssh_enable = sshs[2] ssh_user_name = sshs[3] ssh_user_password = sshs[4] - ssh_key_name = fullpath+'/keys/%s.pem' % sshs[1] + ssh_key_name = full_path+'/keys/%s.pem' % sshs[1] else: for sshs in sql.select_ssh(serv=serv): ssh_enable = sshs[3] ssh_user_name = sshs[4] ssh_user_password = sshs[5] - ssh_key_name = fullpath+'/keys/%s.pem' % sshs[2] + ssh_key_name = full_path+'/keys/%s.pem' % sshs[2] return ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name @@ -241,9 +242,9 @@ def ssh_connect(serv, **kwargs): try: if ssh_enable == 1: k = paramiko.RSAKey.from_private_key_file(ssh_key_name) - ssh.connect(hostname = serv, port = ssh_port, username = ssh_user_name, pkey = k, timeout=11) + ssh.connect(hostname=serv, port=ssh_port, username=ssh_user_name, pkey=k, timeout=11) else: - ssh.connect(hostname = serv, port = ssh_port, username = ssh_user_name, password = ssh_user_password, timeout=11) + ssh.connect(hostname=serv, port=ssh_port, username=ssh_user_name, password=ssh_user_password, timeout=11) return ssh except paramiko.AuthenticationException: return 'error: Authentication failed, please verify your credentials' @@ -303,7 +304,7 @@ def diff_config(oldcfg, cfg): user_group = get_user_group() diff = "" date = get_data('date_in_log') - cmd="/bin/diff -ub %s %s" % (oldcfg, cfg) + cmd = "/bin/diff -ub %s %s" % (oldcfg, cfg) try: user_uuid = cookie.get('uuid') @@ -325,7 +326,6 @@ def diff_config(oldcfg, cfg): def get_sections(config, **kwargs): - record = False return_config = list() with open(config, 'r') as f: for line in f: @@ -389,9 +389,9 @@ def get_section_from_config(config, section): return_config += line if end_line == "": - f = open (config,"r" ) - lineList = f.readlines() - end_line = len(lineList) + f = open(config, "r") + line_list = f.readlines() + end_line = len(line_list) return start_line, end_line, return_config @@ -423,7 +423,6 @@ def rewrite_section(start_line, end_line, config, section): def get_backends_from_config(serv, backends='', **kwargs): configs_dir = get_config_var('configs', 'haproxy_save_configs_dir') format = 'cfg' - record = False try: cfg = configs_dir+get_files(dir=configs_dir, format=format)[0] @@ -450,23 +449,23 @@ def get_backends_from_config(serv, backends='', **kwargs): def get_all_stick_table(): import sql - haproxy_sock_port = sql.get_setting('haproxy_sock_port') - cmd='echo "show table"|nc %s %s |awk \'{print $3}\' | tr -d \'\n\' | tr -d \'[:space:]\'' % (serv, haproxy_sock_port) + hap_sock_p = sql.get_setting('hap_sock_p') + cmd = 'echo "show table"|nc %s %s |awk \'{print $3}\' | tr -d \'\n\' | tr -d \'[:space:]\'' % (serv, hap_sock_p) output, stderr = subprocess_execute(cmd) return output[0] def get_stick_table(table): import sql - haproxy_sock_port = sql.get_setting('haproxy_sock_port') - cmd='echo "show table %s"|nc %s %s |awk -F"#" \'{print $2}\' |head -1 | tr -d \'\n\'' % (table, serv, haproxy_sock_port) + hap_sock_p = sql.get_setting('hap_sock_p') + cmd = 'echo "show table %s"|nc %s %s |awk -F"#" \'{print $2}\' |head -1 | tr -d \'\n\'' % (table, serv, hap_sock_p) output, stderr = subprocess_execute(cmd) tables_head = [] for i in output[0].split(','): i = i.split(':')[1] tables_head.append(i) - cmd='echo "show table %s"|nc %s %s |grep -v "#"' % (table, serv, haproxy_sock_port) + cmd = 'echo "show table %s"|nc %s %s |grep -v "#"' % (table, serv, hap_sock_p) output, stderr = subprocess_execute(cmd) return tables_head, output @@ -475,7 +474,7 @@ def get_stick_table(table): def install_haproxy(serv, **kwargs): import sql script = "install_haproxy.sh" - haproxy_sock_port = sql.get_setting('haproxy_sock_port') + hap_sock_p = sql.get_setting('hap_sock_p') stats_port = sql.get_setting('stats_port') server_state_file = sql.get_setting('server_state_file') stats_user = sql.get_setting('stats_user') @@ -503,11 +502,11 @@ def install_haproxy(serv, **kwargs): syn_flood_protect = '1' if kwargs.get('syn_flood') == "1" else '' - commands = [ "chmod +x "+script +" && ./"+script +" PROXY=" + proxy_serv+ - " SOCK_PORT="+haproxy_sock_port+" STAT_PORT="+stats_port+" STAT_FILE="+server_state_file+ - " SSH_PORT="+ssh_port+ - " STATS_USER="+stats_user+" STATS_PASS="+stats_password+" HAPVER="+hapver +" SYN_FLOOD="+syn_flood_protect+" HOST="+serv+ - " USER="+ssh_user_name+" PASS="+ssh_user_password+" KEY="+ssh_key_name ] + commands = ["chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + + " SOCK_PORT=" + hap_sock_p + " STAT_PORT=" + stats_port + " STAT_FILE="+server_state_file + + " SSH_PORT=" + ssh_port + " STATS_USER=" + stats_user + + " STATS_PASS=" + stats_password + " HAPVER=" + hapver + " SYN_FLOOD=" + syn_flood_protect + + " HOST=" + serv + " USER=" + ssh_user_name + " PASS=" + ssh_user_password + " KEY=" + ssh_key_name] output, error = subprocess_execute(commands[0]) @@ -547,8 +546,8 @@ def waf_install(serv, **kwargs): else: proxy_serv = '' - commands = [ "sudo chmod +x "+tmp_config_path+script+" && " +tmp_config_path+script +" PROXY=" + proxy_serv+ - " HAPROXY_PATH="+haproxy_dir +" VERSION="+ver ] + commands = ["sudo chmod +x " + tmp_config_path+script + " && " + tmp_config_path+script + " PROXY=" + proxy_serv + + " HAPROXY_PATH=" + haproxy_dir + " VERSION=" + ver] error = str(upload(serv, tmp_config_path, script)) if error: @@ -589,10 +588,10 @@ def install_nginx(serv): syn_flood_protect = '1' if form.getvalue('syn_flood') == "1" else '' - commands = [ "chmod +x "+script +" && ./"+script +" PROXY=" + proxy_serv+" STATS_USER="+stats_user+" STATS_PASS="+stats_password+ - " SSH_PORT="+ssh_port+ - " CONFIG_PATH="+config_path+" STAT_PORT="+stats_port+" STAT_PAGE="+stats_page+" SYN_FLOOD="+syn_flood_protect+" HOST="+serv+ - " USER="+ssh_user_name+" PASS="+ssh_user_password+" KEY="+ssh_key_name ] + commands = ["chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + " STATS_USER=" + stats_user + + " STATS_PASS=" + stats_password + " SSH_PORT="+ ssh_port + " CONFIG_PATH=" + config_path + + " STAT_PORT=" + stats_port +" STAT_PAGE=" + stats_page+" SYN_FLOOD=" + syn_flood_protect + + " HOST="+ serv + " USER=" + ssh_user_name + " PASS=" + ssh_user_password + " KEY=" + ssh_key_name] output, error = subprocess_execute(commands[0]) @@ -628,9 +627,9 @@ def update_haproxy_wi(service): def check_haproxy_version(serv): import sql - haproxy_sock_port = sql.get_setting('haproxy_sock_port') + hap_sock_p = sql.get_setting('hap_sock_p') ver = "" - cmd="echo 'show info' |nc %s %s |grep Version |awk '{print $2}'" % (serv, haproxy_sock_port) + cmd = "echo 'show info' |nc %s %s |grep Version |awk '{print $2}'" % (serv, hap_sock_p) output, stderr = subprocess_execute(cmd) for line in output: ver = line @@ -697,16 +696,16 @@ def upload_and_restart(serv, cfg, **kwargs): if kwargs.get("keepalived") == 1: if kwargs.get("just_save") == "save": - commands = [ "sudo mv -f " + tmp_file + " /etc/keepalived/keepalived.conf" ] + commands = ["sudo mv -f " + tmp_file + " /etc/keepalived/keepalived.conf"] else: - commands = [ "sudo mv -f " + tmp_file + " /etc/keepalived/keepalived.conf && sudo systemctl restart keepalived" ] + commands = ["sudo mv -f " + tmp_file + " /etc/keepalived/keepalived.conf && sudo systemctl restart keepalived"] elif kwargs.get("nginx"): if kwargs.get("just_save") == "save": - commands = [ "sudo mv -f " + tmp_file + " " + config_path + " && sudo nginx -t -q"] + commands = ["sudo mv -f " + tmp_file + " " + config_path + " && sudo nginx -t -q"] elif kwargs.get("just_save") == "reload": - commands = [ "sudo mv -f " + tmp_file + " " + config_path + " && sudo nginx -t -q && sudo systemctl reload nginx" ] + commands = ["sudo mv -f " + tmp_file + " " + config_path + " && sudo nginx -t -q && sudo systemctl reload nginx"] else: - commands = [ "sudo mv -f " + tmp_file + " " + config_path + " && sudo nginx -t -q && sudo systemctl restart nginx" ] + commands = ["sudo mv -f " + tmp_file + " " + config_path + " && sudo nginx -t -q && sudo systemctl restart nginx"] if sql.get_setting('firewall_enable') == "1": commands[0] += open_port_firewalld(cfg, serv=serv, service='nginx') else: @@ -718,13 +717,13 @@ def upload_and_restart(serv, cfg, **kwargs): haproxy_service_name = "haproxy" if kwargs.get("just_save") == "test": - commands = [ "sudo "+haproxy_service_name+" -q -c -f " + tmp_file + " && sudo rm -f " + tmp_file ] + commands = ["sudo "+haproxy_service_name+" -q -c -f " + tmp_file + " && sudo rm -f " + tmp_file] elif kwargs.get("just_save") == "save": - commands = [ "sudo "+haproxy_service_name+" -q -c -f " + tmp_file + " && sudo mv -f " + tmp_file + " " + config_path ] + commands = ["sudo "+haproxy_service_name+" -q -c -f " + tmp_file + " && sudo mv -f " + tmp_file + " " + config_path] elif kwargs.get("just_save") == "reload": - commands = [ "sudo "+haproxy_service_name+" -q -c -f " + tmp_file + " && sudo mv -f " + tmp_file + " " + config_path + " && sudo systemctl reload "+haproxy_service_name+"" ] + commands = ["sudo "+haproxy_service_name+" -q -c -f " + tmp_file + " && sudo mv -f " + tmp_file + " " + config_path + " && sudo systemctl reload "+haproxy_service_name+""] else: - commands = [ "sudo "+haproxy_service_name+" -q -c -f " + tmp_file + " && sudo mv -f " + tmp_file + " " + config_path + " && sudo systemctl restart "+haproxy_service_name+"" ] + commands = ["sudo "+haproxy_service_name+" -q -c -f " + tmp_file + " && sudo mv -f " + tmp_file + " " + config_path + " && sudo systemctl restart "+haproxy_service_name+""] if sql.get_setting('firewall_enable') == "1": commands[0] += open_port_firewalld(cfg, serv=serv) error += str(upload(serv, tmp_file, cfg, dir='fullpath')) @@ -741,9 +740,9 @@ def upload_and_restart(serv, cfg, **kwargs): def master_slave_upload_and_restart(serv, cfg, just_save, **kwargs): import sql - MASTERS = sql.is_master(serv) + masters = sql.is_master(serv) error = "" - for master in MASTERS: + for master in masters: if master[0] != None: error += upload_and_restart(master[0], cfg, just_save=just_save, nginx=kwargs.get('nginx')) @@ -793,16 +792,16 @@ def open_port_firewalld(cfg, serv, **kwargs): pass firewalld_commands += 'sudo firewall-cmd --reload -q' - logging(serv, ' Next ports have been opened: '+ports+ ' has opened ') + logging(serv, ' Next ports have been opened: ' + ports + ' has opened ') return firewalld_commands def check_haproxy_config(serv): import sql - commands = [ "haproxy -q -c -f %s" % sql.get_setting('haproxy_config_path') ] + commands = ["haproxy -q -c -f %s" % sql.get_setting('haproxy_config_path')] ssh = ssh_connect(serv) for command in commands: - stdin , stdout, stderr = ssh.exec_command(command, get_pty=True) + stdin, stdout, stderr = ssh.exec_command(command, get_pty=True) if not stderr.read(): return True else: @@ -822,7 +821,7 @@ def show_log(stdout, **kwargs): if kwargs.get("html") != 0: i = i + 1 if kwargs.get('grep'): - line = line.replace(grep, ''+grep+''); + line = line.replace(grep, ''+grep+'') line_class = "line3" if i % 2 == 0 else "line" out += '
' + line + '
' else: @@ -838,12 +837,12 @@ def show_haproxy_log(serv, rows=10, waf='0', grep=None, hour='00', minut='00', h date1 = hour1+':'+minut1 if grep is not None: - grep_act = '|egrep "%s"' % grep + grep_act = '|egrep "%s"' % grep else: grep_act = '' if exgrep is not None: - exgrep_act = '|egrep -v "%s"' % exgrep + exgrep_act = '|egrep -v "%s"' % exgrep else: exgrep_act = '' @@ -852,18 +851,18 @@ def show_haproxy_log(serv, rows=10, waf='0', grep=None, hour='00', minut='00', h if syslog_server_enable is None or syslog_server_enable == "0": if service == 'nginx': local_path_logs = sql.get_setting('nginx_path_error_logs') - commands = [ "sudo cat %s| awk '$2>\"%s:00\" && $2<\"%s:00\"' |tail -%s %s %s" % (local_path_logs, date, date1, rows, grep_act, exgrep_act) ] + commands = ["sudo cat %s| awk '$2>\"%s:00\" && $2<\"%s:00\"' |tail -%s %s %s" % (local_path_logs, date, date1, rows, grep_act, exgrep_act)] else: local_path_logs = sql.get_setting('local_path_logs') - commands = [ "sudo cat %s| awk '$3>\"%s:00\" && $3<\"%s:00\"' |tail -%s %s %s" % (local_path_logs, date, date1, rows, grep_act, exgrep_act) ] + commands = ["sudo cat %s| awk '$3>\"%s:00\" && $3<\"%s:00\"' |tail -%s %s %s" % (local_path_logs, date, date1, rows, grep_act, exgrep_act)] syslog_server = serv else: - commands = [ "sudo cat /var/log/%s/syslog.log | sed '/ %s:00/,/ %s:00/! d' |tail -%s %s %s %s" % (serv, date, date1, rows, grep_act, grep, exgrep_act) ] + commands = ["sudo cat /var/log/%s/syslog.log | sed '/ %s:00/,/ %s:00/! d' |tail -%s %s %s %s" % (serv, date, date1, rows, grep_act, grep, exgrep_act)] syslog_server = sql.get_setting('syslog_server') if waf == "1": local_path_logs = '/var/log/modsec_audit.log' - commands = [ "sudo cat %s |tail -%s %s %s" % (local_path_logs, rows, grep_act, exgrep_act) ] + commands = ["sudo cat %s |tail -%s %s %s" % (local_path_logs, rows, grep_act, exgrep_act)] if kwargs.get('html') == 0: a = ssh_command(syslog_server, commands) @@ -874,11 +873,11 @@ def show_haproxy_log(serv, rows=10, waf='0', grep=None, hour='00', minut='00', h apache_log_path = sql.get_setting('apache_log_path') if serv == 'haproxy-wi.access.log': - cmd="cat %s| awk -F\"/|:\" '$3>\"%s:00\" && $3<\"%s:00\"' |tail -%s %s %s" % (apache_log_path+"/"+serv, date, date1, rows, grep_act, exgrep_act) + cmd = "cat %s| awk -F\"/|:\" '$3>\"%s:00\" && $3<\"%s:00\"' |tail -%s %s %s" % (apache_log_path+"/"+serv, date, date1, rows, grep_act, exgrep_act) elif serv == 'haproxy-wi.error.log': - cmd="cat %s| awk '$4>\"%s:00\" && $4<\"%s:00\"' |tail -%s %s %s" % (apache_log_path+"/"+serv, date, date1, rows, grep_act, exgrep_act) + cmd = "cat %s| awk '$4>\"%s:00\" && $4<\"%s:00\"' |tail -%s %s %s" % (apache_log_path+"/"+serv, date, date1, rows, grep_act, exgrep_act) elif serv == 'fail2ban.log': - cmd="cat %s| awk -F\"/|:\" '$3>\"%s:00\" && $3<\"%s:00\"' |tail -%s %s %s" % ("/var/log/"+serv, date, date1, rows, grep_act, exgrep_act) + cmd = "cat %s| awk -F\"/|:\" '$3>\"%s:00\" && $3<\"%s:00\"' |tail -%s %s %s" % ("/var/log/"+serv, date, date1, rows, grep_act, exgrep_act) output, stderr = subprocess_execute(cmd) @@ -903,9 +902,9 @@ def show_haproxy_log(serv, rows=10, waf='0', grep=None, hour='00', minut='00', h sys.exit() if serv == 'backup.log': - cmd="cat %s| awk '$2>\"%s:00\" && $2<\"%s:00\"' %s %s %s |tail -%s" % (log_path + serv, date, date1, user_grep, grep_act, exgrep_act, rows) + cmd = "cat %s| awk '$2>\"%s:00\" && $2<\"%s:00\"' %s %s %s |tail -%s" % (log_path + serv, date, date1, user_grep, grep_act, exgrep_act, rows) else: - cmd="cat %s| awk '$3>\"%s:00\" && $3<\"%s:00\"' %s %s %s |tail -%s" % (log_path + serv, date, date1, user_grep, grep_act, exgrep_act, rows) + cmd = "cat %s| awk '$3>\"%s:00\" && $3<\"%s:00\"' %s %s %s |tail -%s" % (log_path + serv, date, date1, user_grep, grep_act, exgrep_act, rows) output, stderr = subprocess_execute(cmd) @@ -958,7 +957,7 @@ def server_status(stdout): def ssh_command(serv, commands, **kwargs): ssh = ssh_connect(serv) - + for command in commands: try: stdin, stdout, stderr = ssh.exec_command(command, get_pty=True) @@ -1007,8 +1006,8 @@ def subprocess_execute(cmd): def show_backends(serv, **kwargs): import json import sql - haproxy_sock_port = sql.get_setting('haproxy_sock_port') - cmd='echo "show backend" |nc %s %s' % (serv, haproxy_sock_port) + hap_sock_p = sql.get_setting('hap_sock_p') + cmd = 'echo "show backend" |nc %s %s' % (serv, hap_sock_p) output, stderr = subprocess_execute(cmd) if stderr: logging('localhost', ' '+stderr, haproxywi=1) @@ -1017,7 +1016,7 @@ def show_backends(serv, **kwargs): else: ret = "" for line in output: - if "#" in line or "stats" in line or "MASTER" in line: + if "#" in line or "stats" in line or "MASTER" in line: continue if len(line) > 1: back = json.dumps(line).split("\"") @@ -1077,7 +1076,7 @@ def check_new_version(**kwargs): try: if proxy is not None and proxy != '' and proxy != 'None': - proxyDict = { "https" : proxy, "http" : proxy } + proxyDict = {"https": proxy, "http": proxy} response = requests.get('https://haproxy-wi.org/update.py?last_ver'+last_ver+'=1', timeout=1, proxies=proxyDict) requests.get('https://haproxy-wi.org/update.py?ver_send='+current_ver, timeout=1, proxies=proxyDict) else: @@ -1148,7 +1147,7 @@ def get_users_params(**kwargs): cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) user_id = cookie.get('uuid') user = sql.get_user_name_by_uuid(user_id.value) - role = sql.get_user_role_by_uuid(user_id.value) + role = sql.get_user_role_by_uuid(user_id.value) token = sql.get_token(user_id.value) if kwargs.get('virt'): servers = sql.get_dick_permit(virt=1) @@ -1176,7 +1175,6 @@ def check_user_group(**kwargs): logging('localhost', ' has tried to actions in not his group ', haproxywi=1, login=1) print('Atata!') sys.exit() - return False def check_is_server_in_group(serv): @@ -1190,10 +1188,9 @@ def check_is_server_in_group(serv): logging('localhost', ' has tried to actions in not his group server ', haproxywi=1, login=1) print('Atata!') sys.exit() - return False def check_service(serv, service_name): - commands = [ "systemctl status "+service_name+" |grep Active |awk '{print $1}'" ] + commands = ["systemctl status "+service_name+" |grep Active |awk '{print $1}'"] return ssh_command(serv, commands) diff --git a/app/hapservers.py b/app/hapservers.py index 411e527e..4aa977ac 100644 --- a/app/hapservers.py +++ b/app/hapservers.py @@ -1,93 +1,111 @@ #!/usr/bin/env python3 -import funct, sql + +import funct +import sql from jinja2 import Environment, FileSystemLoader + env = Environment(loader=FileSystemLoader('templates/'), autoescape=True) template = env.get_template('hapservers.html') - + print('Content-type: text/html\n') funct.check_login() try: - user, user_id, role, token, servers = funct.get_users_params() - users = sql.select_users() - groups = sql.select_groups() + user, user_id, role, token, servers = funct.get_users_params() + users = sql.select_users() + groups = sql.select_groups() + services = [] except: - pass - + pass + form = funct.form serv = form.getvalue('serv') service = form.getvalue('service') autorefresh = 0 if service == 'nginx': - title = "Nginx servers overview" - keep_alive = '' - stderr = '' - servers = sql.get_dick_permit(virt=1, nginx=1) - service = 'nginx' - if serv: - if funct.check_is_server_in_group(serv): - servers = sql.select_servers(server=serv) - autorefresh = 1 + title = "Nginx servers overview" + keep_alive = '' + stderr = '' + servers = sql.get_dick_permit(virt=1, nginx=1) + service = 'nginx' + if serv: + if funct.check_is_server_in_group(serv): + servers = sql.select_servers(server=serv) + autorefresh = 1 else: - title = "HAProxy servers overview" - cmd = "ps ax |grep -e 'keep_alive.py' |grep -v grep |wc -l" - keep_alive, stderr = funct.subprocess_execute(cmd) - service = 'haproxy' - if serv: - if funct.check_is_server_in_group(serv): - servers = sql.select_servers(server=serv) - autorefresh = 1 - else: - servers = sql.get_dick_permit(virt=1, haproxy=1) - + title = "HAProxy servers overview" + cmd = "ps ax |grep -e 'keep_alive.py' |grep -v grep |wc -l" + keep_alive, stderr = funct.subprocess_execute(cmd) + service = 'haproxy' + if serv: + if funct.check_is_server_in_group(serv): + servers = sql.select_servers(server=serv) + autorefresh = 1 + else: + servers = sql.get_dick_permit(virt=1, haproxy=1) + + services_name = {'checker_haproxy': 'Master backends checker service', + 'keep_alive': 'Auto start service', + 'metrics_haproxy': 'Master metrics service'} + for s, v in services_name.items(): + if s != 'keep_alive': + service_name = s.split('_')[0] + else: + service_name = s + cmd = "rpm --query haproxy-wi-" + service_name + "-* |awk -F\"" + service_name +"\" '{print $2}' |awk -F\".noa\" '{print $1}' |sed 's/-//1' |sed 's/-/./'" + service_ver, stderr = funct.subprocess_execute(cmd) + + services.append([s, service_ver[0]]) + haproxy_sock_port = sql.get_setting('haproxy_sock_port') servers_with_status1 = [] out1 = '' for s in servers: - servers_with_status = list() - servers_with_status.append(s[0]) - servers_with_status.append(s[1]) - servers_with_status.append(s[2]) - servers_with_status.append(s[11]) - if service == 'nginx': - cmd = [ "/usr/sbin/nginx -v && systemctl status nginx |grep -e 'Active' |awk '{print $2, $9$10$11$12$13}' && ps ax |grep nginx:|grep -v grep |wc -l" ] - out = funct.ssh_command(s[2], cmd) - h = () - out1 = [] - for k in out.split(): - out1.append(k) - h = (out1, ) - servers_with_status.append(h) - servers_with_status.append(h) - else: - cmd = 'echo "show info" |nc %s %s -w 1 |grep -e "Ver\|Uptime:\|Process_num"' % (s[2], haproxy_sock_port) - out = funct.subprocess_execute(cmd) - for k in out: - if "Ncat:" not in k: - out1 = out - else: - out1 = False - servers_with_status.append(out1) + servers_with_status = list() + servers_with_status.append(s[0]) + servers_with_status.append(s[1]) + servers_with_status.append(s[2]) + servers_with_status.append(s[11]) + if service == 'nginx': + cmd = [ + "/usr/sbin/nginx -v && systemctl status nginx |grep -e 'Active' |awk '{print $2, $9$10$11$12$13}' && ps ax |grep nginx:|grep -v grep |wc -l"] + out = funct.ssh_command(s[2], cmd) + h = () + out1 = [] + for k in out.split(): + out1.append(k) + h = (out1,) + servers_with_status.append(h) + servers_with_status.append(h) + else: + cmd = 'echo "show info" |nc %s %s -w 1 |grep -e "Ver\|Uptime:\|Process_num"' % (s[2], haproxy_sock_port) + out = funct.subprocess_execute(cmd) + for k in out: + if "Ncat:" not in k: + out1 = out + else: + out1 = False + servers_with_status.append(out1) - servers_with_status.append(s[12]) - servers_with_status.append(sql.is_master(s[2])) - servers_with_status.append(sql.select_servers(server=s[2])) - - servers_with_status1.append(servers_with_status) - + servers_with_status.append(s[12]) + servers_with_status.append(sql.is_master(s[2])) + servers_with_status.append(sql.select_servers(server=s[2])) -template = template.render(h2 = 1, - autorefresh = autorefresh, - title = title, - role = role, - user = user, - users = users, - groups = groups, - servers = servers_with_status1, - versions = funct.versions(), - keep_alive = ''.join(keep_alive), - serv = serv, - service = service, - token = token) -print(template) + servers_with_status1.append(servers_with_status) + +template = template.render(h2=1, + autorefresh=autorefresh, + title=title, + role=role, + user=user, + users=users, + groups=groups, + servers=servers_with_status1, + versions=funct.versions(), + keep_alive=''.join(keep_alive), + serv=serv, + service=service, + services=services, + token=token) +print(template) diff --git a/app/metrics.py b/app/metrics.py index f2b9198b..81d74ecd 100644 --- a/app/metrics.py +++ b/app/metrics.py @@ -11,15 +11,23 @@ funct.check_login() try: user, user_id, role, token, servers = funct.get_users_params() + cmd = "rpm --query haproxy-wi-metrics-* |awk -F\"metrics_haproxy\" '{print $2}' |awk -F\".noa\" '{print $1}' |sed 's/-//1' |sed 's/-/./'" + service_ver, stderr = funct.subprocess_execute(cmd) + + if service_ver[0] == '* is not installed': + servers = '' + else: + servers = sql.select_servers_metrics(user_id.value) except: pass -template = template.render(h2 = 1, title = "Metrics", - autorefresh = 1, - role = role, - user = user, - servers = sql.select_servers_metrics(user_id.value), - versions = funct.versions(), - token = token) -print(template) \ No newline at end of file +template = template.render(h2=1, title="Metrics", + autorefresh=1, + role=role, + user=user, + servers=servers, + versions=funct.versions(), + services=service_ver[0], + token=token) +print(template) diff --git a/app/options.py b/app/options.py index 0b98b4da..ed37499b 100644 --- a/app/options.py +++ b/app/options.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- + import os import sys import funct @@ -9,2176 +10,2143 @@ form = funct.form serv = form.getvalue("serv") act = form.getvalue("act") - -if form.getvalue('new_metrics') or form.getvalue('new_waf_metrics') or form.getvalue('metrics_hapwi_ram') or form.getvalue('metrics_hapwi_cpu'): - print('Content-type: application/json\n') +if (form.getvalue('new_metrics') or + form.getvalue('new_waf_metrics') or + form.getvalue('metrics_hapwi_ram') or + form.getvalue('metrics_hapwi_cpu')): + print('Content-type: application/json\n') else: - print('Content-type: text/html\n') - + print('Content-type: text/html\n') if act == "checkrestart": - servers = sql.get_dick_permit(ip=serv) - for server in servers: - if server != "": - print("ok") - sys.exit() - sys.exit() - + servers = sql.get_dick_permit(ip=serv) + for server in servers: + if server != "": + print("ok") + sys.exit() + sys.exit() if form.getvalue('alert_consumer') is None: - if not sql.check_token_exists(form.getvalue("token")): - print('error: Your token has been expired') - sys.exit() - + if not sql.check_token_exists(form.getvalue("token")): + print('error: Your token has been expired') + sys.exit() if form.getvalue('getcerts') is not None and serv is not None: - cert_path = sql.get_setting('cert_path') - commands = ["ls -1t "+cert_path+" |grep -E 'pem|crt|key'"] - try: - funct.ssh_command(serv, commands, ip="1") - except Exception as e: - print('error: Cannot connect to the server: ' + str(e)) - + cert_path = sql.get_setting('cert_path') + commands = ["ls -1t " + cert_path + " |grep -E 'pem|crt|key'"] + try: + funct.ssh_command(serv, commands, ip="1") + except Exception as e: + print('error: Cannot connect to the server: ' + str(e)) if form.getvalue('checkSshConnect') is not None and serv is not None: - print(funct.ssh_command(serv, ["ls -1t"])) - + print(funct.ssh_command(serv, ["ls -1t"])) if form.getvalue('getcert') is not None and serv is not None: - id = form.getvalue('getcert') - cert_path = sql.get_setting('cert_path') - commands = ["cat "+cert_path+"/"+id] - try: - funct.ssh_command(serv, commands, ip="1") - except: - print('error: Can not connect to the server') - + id = form.getvalue('getcert') + cert_path = sql.get_setting('cert_path') + commands = ["cat " + cert_path + "/" + id] + try: + funct.ssh_command(serv, commands, ip="1") + except: + print('error: Can not connect to the server') if serv and form.getvalue('ssl_cert'): - cert_local_dir = os.path.dirname(os.getcwd())+"/"+sql.get_setting('ssl_local_path') - cert_path = sql.get_setting('cert_path') + cert_local_dir = os.path.dirname(os.getcwd()) + "/" + sql.get_setting('ssl_local_path') + cert_path = sql.get_setting('cert_path') - if not os.path.exists(cert_local_dir): - os.makedirs(cert_local_dir) + if not os.path.exists(cert_local_dir): + os.makedirs(cert_local_dir) - if form.getvalue('ssl_name') is None: - print('error: Please enter desired name') - else: - name = form.getvalue('ssl_name') + if form.getvalue('ssl_name') is None: + print('error: Please enter desired name') + else: + name = form.getvalue('ssl_name') - try: - with open(name, "w") as ssl_cert: - ssl_cert.write(form.getvalue('ssl_cert')) - except IOError as e : - print('error: Can\'t save ssl keys file. Check ssh keys path in config '+e.args[0]) + try: + with open(name, "w") as ssl_cert: + ssl_cert.write(form.getvalue('ssl_cert')) + except IOError as e: + print('error: Can\'t save ssl keys file. Check ssh keys path in config ' + e.args[0]) - MASTERS = sql.is_master(serv) - for master in MASTERS: - if master[0] != None: - funct.upload(master[0], cert_path, name) - try: - error = funct.upload(serv, cert_path, name) - if error == '': - print('success: SSL file has been uploaded to %s into: %s%s' % (serv, cert_path, '/'+name)) - except Exception as e: - funct.logging('localhost', e.args[0], haproxywi=1) - try: - os.system("mv %s %s" % (name, cert_local_dir)) - except OSError as e: - funct.logging('localhost', e.args[0], haproxywi=1) - - funct.logging(serv, "add.py#ssl uploaded a new SSL cert %s" % name, haproxywi=1, login=1) + MASTERS = sql.is_master(serv) + for master in MASTERS: + if master[0] != None: + funct.upload(master[0], cert_path, name) + try: + error = funct.upload(serv, cert_path, name) + if error == '': + print('success: SSL file has been uploaded to %s into: %s%s' % (serv, cert_path, '/' + name)) + except Exception as e: + funct.logging('localhost', e.args[0], haproxywi=1) + try: + os.system("mv %s %s" % (name, cert_local_dir)) + except OSError as e: + funct.logging('localhost', e.args[0], haproxywi=1) + funct.logging(serv, "add.py#ssl uploaded a new SSL cert %s" % name, haproxywi=1, login=1) if form.getvalue('backend') is not None: - funct.show_backends(serv) - + funct.show_backends(serv) if form.getvalue('ip_select') is not None: - funct.show_backends(serv) - + funct.show_backends(serv) if form.getvalue('ipbackend') is not None and form.getvalue('backend_server') is None: - haproxy_sock_port = sql.get_setting('haproxy_sock_port') - backend = form.getvalue('ipbackend') - cmd='echo "show servers state"|nc %s %s |grep "%s" |awk \'{print $4}\'' % (serv, haproxy_sock_port, backend) - output, stderr = funct.subprocess_execute(cmd) - for i in output: - if i == ' ': - continue - i = i.strip() - print(i+'
') - + haproxy_sock_port = sql.get_setting('haproxy_sock_port') + backend = form.getvalue('ipbackend') + cmd = 'echo "show servers state"|nc %s %s |grep "%s" |awk \'{print $4}\'' % (serv, haproxy_sock_port, backend) + output, stderr = funct.subprocess_execute(cmd) + for i in output: + if i == ' ': + continue + i = i.strip() + print(i + '
') if form.getvalue('ipbackend') is not None and form.getvalue('backend_server') is not None: - haproxy_sock_port = sql.get_setting('haproxy_sock_port') - backend = form.getvalue('ipbackend') - backend_server = form.getvalue('backend_server') - cmd='echo "show servers state"|nc %s %s |grep "%s" |grep "%s" |awk \'{print $5":"$19}\' |head -1' % (serv, haproxy_sock_port, backend, backend_server) - output, stderr = funct.subprocess_execute(cmd) - print(output[0]) - + haproxy_sock_port = sql.get_setting('haproxy_sock_port') + backend = form.getvalue('ipbackend') + backend_server = form.getvalue('backend_server') + cmd = 'echo "show servers state"|nc %s %s |grep "%s" |grep "%s" |awk \'{print $5":"$19}\' |head -1' % ( + serv, haproxy_sock_port, backend, backend_server) + output, stderr = funct.subprocess_execute(cmd) + print(output[0]) if form.getvalue('backend_ip') is not None: - backend_backend = form.getvalue('backend_backend') - backend_server = form.getvalue('backend_server') - backend_ip = form.getvalue('backend_ip') - backend_port = form.getvalue('backend_port') - if form.getvalue('backend_ip') is None: - print('error: Backend IP must be IP and not 0') - sys.exit() + backend_backend = form.getvalue('backend_backend') + backend_server = form.getvalue('backend_server') + backend_ip = form.getvalue('backend_ip') + backend_port = form.getvalue('backend_port') + if form.getvalue('backend_ip') is None: + print('error: Backend IP must be IP and not 0') + sys.exit() - if form.getvalue('backend_port') is None: - print('error: Backend port must be integer and not 0') - sys.exit() + if form.getvalue('backend_port') is None: + print('error: Backend port must be integer and not 0') + sys.exit() - haproxy_sock_port = sql.get_setting('haproxy_sock_port') + haproxy_sock_port = sql.get_setting('haproxy_sock_port') - MASTERS = sql.is_master(serv) - for master in MASTERS: - if master[0] is not None: - cmd='echo "set server %s/%s addr %s port %s check-port %s" |nc %s %s' % (backend_backend, backend_server, backend_ip, backend_port, backend_port, master[0], haproxy_sock_port) - output, stderr = funct.subprocess_execute(cmd) - print(output[0]) + MASTERS = sql.is_master(serv) + for master in MASTERS: + if master[0] is not None: + cmd = 'echo "set server %s/%s addr %s port %s check-port %s" |nc %s %s' % ( + backend_backend, backend_server, backend_ip, backend_port, backend_port, master[0], haproxy_sock_port) + output, stderr = funct.subprocess_execute(cmd) + print(output[0]) - cmd='echo "set server %s/%s addr %s port %s check-port %s" |nc %s %s' % (backend_backend, backend_server, backend_ip, backend_port, backend_port, serv, haproxy_sock_port) - output, stderr = funct.subprocess_execute(cmd) - - if stderr != '': - print('error: '+stderr[0]) - else: - print(output[0]) - configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir') - cfg = configs_dir + serv + "-" + funct.get_data('config') + ".cfg" - - error = funct.get_config(serv, cfg) - cmd = 'string=`grep %s %s -n -A25 |grep "server %s" |head -1|awk -F"-" \'{print $1}\'` && sed -Ei "$( echo $string)s/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5]):[0-9]+/%s:%s/g" %s' % (backend_backend, cfg, backend_server, backend_ip, backend_port, cfg) - output, stderr = funct.subprocess_execute(cmd) - stderr = funct.master_slave_upload_and_restart(serv, cfg, just_save='save') + cmd = 'echo "set server %s/%s addr %s port %s check-port %s" |nc %s %s' % ( + backend_backend, backend_server, backend_ip, backend_port, backend_port, serv, haproxy_sock_port) + output, stderr = funct.subprocess_execute(cmd) + if stderr != '': + print('error: ' + stderr[0]) + else: + print(output[0]) + configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir') + cfg = configs_dir + serv + "-" + funct.get_data('config') + ".cfg" + error = funct.get_config(serv, cfg) + cmd = 'string=`grep %s %s -n -A25 |grep "server %s" |head -1|awk -F"-" \'{print $1}\'` && sed -Ei "$( echo $string)s/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5]):[0-9]+/%s:%s/g" %s' % ( + backend_backend, cfg, backend_server, backend_ip, backend_port, cfg) + output, stderr = funct.subprocess_execute(cmd) + stderr = funct.master_slave_upload_and_restart(serv, cfg, just_save='save') if form.getvalue('maxconn_select') is not None: - serv = form.getvalue('maxconn_select') - funct.get_backends_from_config(serv, backends='frontend') - + serv = form.getvalue('maxconn_select') + funct.get_backends_from_config(serv, backends='frontend') if form.getvalue('maxconn_frontend') is not None: - frontend = form.getvalue('maxconn_frontend') - maxconn = form.getvalue('maxconn_int') - if form.getvalue('maxconn_int') is None: - print('error: Maxconn must be integer and not 0') - sys.exit() + frontend = form.getvalue('maxconn_frontend') + maxconn = form.getvalue('maxconn_int') + if form.getvalue('maxconn_int') is None: + print('error: Maxconn must be integer and not 0') + sys.exit() - haproxy_sock_port = sql.get_setting('haproxy_sock_port') + haproxy_sock_port = sql.get_setting('haproxy_sock_port') - MASTERS = sql.is_master(serv) - for master in MASTERS: - if master[0] != None: - if frontend == 'global': - cmd='echo "set maxconn %s %s" |nc %s %s' % (frontend, maxconn, master[0], haproxy_sock_port) - else: - cmd='echo "set maxconn frontend %s %s" |nc %s %s' % (frontend, maxconn, master[0], haproxy_sock_port) - output, stderr = funct.subprocess_execute(cmd) + MASTERS = sql.is_master(serv) + for master in MASTERS: + if master[0] != None: + if frontend == 'global': + cmd = 'echo "set maxconn %s %s" |nc %s %s' % (frontend, maxconn, master[0], haproxy_sock_port) + else: + cmd = 'echo "set maxconn frontend %s %s" |nc %s %s' % (frontend, maxconn, master[0], haproxy_sock_port) + output, stderr = funct.subprocess_execute(cmd) - if frontend == 'global': - cmd='echo "set maxconn %s %s" |nc %s %s' % (frontend, maxconn, serv, haproxy_sock_port) - else: - cmd='echo "set maxconn frontend %s %s" |nc %s %s' % (frontend, maxconn, serv, haproxy_sock_port) - output, stderr = funct.subprocess_execute(cmd) + if frontend == 'global': + cmd = 'echo "set maxconn %s %s" |nc %s %s' % (frontend, maxconn, serv, haproxy_sock_port) + else: + cmd = 'echo "set maxconn frontend %s %s" |nc %s %s' % (frontend, maxconn, serv, haproxy_sock_port) + output, stderr = funct.subprocess_execute(cmd) - if stderr != '': - print(stderr[0]) - elif output[0] == '': - configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir') - cfg = configs_dir + serv + "-" + funct.get_data('config') + ".cfg" - - error = funct.get_config(serv, cfg) - cmd = 'string=`grep %s %s -n -A5 |grep maxcon -n |awk -F":" \'{print $2}\'|awk -F"-" \'{print $1}\'` && sed -Ei "$( echo $string)s/[0-9]+/%s/g" %s' % (frontend, cfg, maxconn, cfg) - output, stderr = funct.subprocess_execute(cmd) - stderr = funct.master_slave_upload_and_restart(serv, cfg, just_save='save') - print('success: Maxconn for %s has been set to %s ' % (frontend, maxconn)) - else: - print('error: '+output[0]) + if stderr != '': + print(stderr[0]) + elif output[0] == '': + configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir') + cfg = configs_dir + serv + "-" + funct.get_data('config') + ".cfg" + error = funct.get_config(serv, cfg) + cmd = 'string=`grep %s %s -n -A5 |grep maxcon -n |awk -F":" \'{print $2}\'|awk -F"-" \'{print $1}\'` && sed -Ei "$( echo $string)s/[0-9]+/%s/g" %s' % ( + frontend, cfg, maxconn, cfg) + output, stderr = funct.subprocess_execute(cmd) + stderr = funct.master_slave_upload_and_restart(serv, cfg, just_save='save') + print('success: Maxconn for %s has been set to %s ' % (frontend, maxconn)) + else: + print('error: ' + output[0]) if form.getvalue('table_serv_select') is not None: - print(funct.get_all_stick_table()) - + print(funct.get_all_stick_table()) if form.getvalue('table_select') is not None: - from jinja2 import Environment, FileSystemLoader - env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True,extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do'], trim_blocks=True, lstrip_blocks=True) - table = form.getvalue('table_select') + from jinja2 import Environment, FileSystemLoader - if table == 'All': - template = env.get_template('/stick_tables.html') - tables = funct.get_all_stick_table() - table = [] - for t in tables.split(','): - if t != '': - id = [] - tables_head = [] + env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True, + extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do'], trim_blocks=True, lstrip_blocks=True) + table = form.getvalue('table_select') - tables_head1, table1 = funct.get_stick_table(t) - id.append(tables_head1) - id.append(table1) - table.append(id) + if table == 'All': + template = env.get_template('/stick_tables.html') + tables = funct.get_all_stick_table() + table = [] + for t in tables.split(','): + if t != '': + id = [] + tables_head = [] + tables_head1, table1 = funct.get_stick_table(t) + id.append(tables_head1) + id.append(table1) + table.append(id) - template = template.render(table=table) - else: - template = env.get_template('/stick_table.html') - tables_head, table = funct.get_stick_table(table) - template = template.render(tables_head=tables_head, table=table) - - print(template) + template = template.render(table=table) + else: + template = env.get_template('/stick_table.html') + tables_head, table = funct.get_stick_table(table) + template = template.render(tables_head=tables_head, table=table) + print(template) if form.getvalue('ip_for_delete') is not None: - haproxy_sock_port = sql.get_setting('haproxy_sock_port') - ip = form.getvalue('ip_for_delete') - table = form.getvalue('table_for_delete') - - cmd='echo "clear table %s key %s" |nc %s %s' % (table, ip, serv, haproxy_sock_port) - output, stderr = funct.subprocess_execute(cmd) - if stderr[0] != '': - print('error: ' + stderr[0]) + haproxy_sock_port = sql.get_setting('haproxy_sock_port') + ip = form.getvalue('ip_for_delete') + table = form.getvalue('table_for_delete') + cmd = 'echo "clear table %s key %s" |nc %s %s' % (table, ip, serv, haproxy_sock_port) + output, stderr = funct.subprocess_execute(cmd) + if stderr[0] != '': + print('error: ' + stderr[0]) if form.getvalue('table_for_clear') is not None: - haproxy_sock_port = sql.get_setting('haproxy_sock_port') - table = form.getvalue('table_for_clear') - - cmd='echo "clear table %s " |nc %s %s' % (table, serv, haproxy_sock_port) - output, stderr = funct.subprocess_execute(cmd) - if stderr[0] != '': - print('error: ' + stderr[0]) + haproxy_sock_port = sql.get_setting('haproxy_sock_port') + table = form.getvalue('table_for_clear') + cmd = 'echo "clear table %s " |nc %s %s' % (table, serv, haproxy_sock_port) + output, stderr = funct.subprocess_execute(cmd) + if stderr[0] != '': + print('error: ' + stderr[0]) if form.getvalue('list_serv_select') is not None: - haproxy_sock_port = sql.get_setting('haproxy_sock_port') - cmd='echo "show acl"|nc %s %s |grep "loaded from" |awk \'{print $1,$2}\'' % (serv, haproxy_sock_port) - output, stderr = funct.subprocess_execute(cmd) - print(output) - + haproxy_sock_port = sql.get_setting('haproxy_sock_port') + cmd = 'echo "show acl"|nc %s %s |grep "loaded from" |awk \'{print $1,$2}\'' % (serv, haproxy_sock_port) + output, stderr = funct.subprocess_execute(cmd) + 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') - list_id = form.getvalue('list_select_id') - list_name = form.getvalue('list_select_name') + from jinja2 import Environment, FileSystemLoader - haproxy_sock_port = sql.get_setting('haproxy_sock_port') - cmd='echo "show acl #%s"|nc %s %s' % (list_id, serv, haproxy_sock_port) - output, stderr = funct.subprocess_execute(cmd) + 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') + list_id = form.getvalue('list_select_id') + list_name = form.getvalue('list_select_name') - template = template.render(list=output, list_id=list_id, list_name=list_name) - print(template) + haproxy_sock_port = sql.get_setting('haproxy_sock_port') + cmd = 'echo "show acl #%s"|nc %s %s' % (list_id, serv, haproxy_sock_port) + output, stderr = funct.subprocess_execute(cmd) + template = template.render(list=output, list_id=list_id, list_name=list_name) + print(template) if form.getvalue('list_id_for_delete') is not None: - haproxy_sock_port = sql.get_setting('haproxy_sock_port') - lists_path = sql.get_setting('lists_path') - fullpath = funct.get_config_var('main', 'fullpath') - ip_id = form.getvalue('list_ip_id_for_delete') - ip = form.getvalue('list_ip_for_delete') - list_id = form.getvalue('list_id_for_delete') - list_name = form.getvalue('list_name') - user_group = funct.get_user_group(id=1) + haproxy_sock_port = sql.get_setting('haproxy_sock_port') + lists_path = sql.get_setting('lists_path') + fullpath = funct.get_config_var('main', 'fullpath') + ip_id = form.getvalue('list_ip_id_for_delete') + ip = form.getvalue('list_ip_for_delete') + list_id = form.getvalue('list_id_for_delete') + list_name = form.getvalue('list_name') + user_group = funct.get_user_group(id=1) - cmd = "sed -i 's!%s$!!' %s/%s/%s/%s" % (ip, fullpath, lists_path, user_group, list_name) - cmd1 = "sed -i '/^$/d' %s/%s/%s/%s" % (fullpath, lists_path, user_group, list_name) - output, stderr = funct.subprocess_execute(cmd) - output1, stderr1 = funct.subprocess_execute(cmd1) - if output: - print('error: ' + str(output)) - if stderr: - print('error: ' + str(stderr)) - if output1: - print('error: ' + str(output1)) - if stderr1: - print('error: ' + str(stderr1)) - - - cmd='echo "del acl #%s #%s" |nc %s %s' % (list_id, ip_id, serv, haproxy_sock_port) - output, stderr = funct.subprocess_execute(cmd) - if output[0] != '': - print('error: ' + output[0]) - if stderr[0] != '': - print('error: ' + stderr[0]) + cmd = "sed -i 's!%s$!!' %s/%s/%s/%s" % (ip, fullpath, lists_path, user_group, list_name) + cmd1 = "sed -i '/^$/d' %s/%s/%s/%s" % (fullpath, lists_path, user_group, list_name) + output, stderr = funct.subprocess_execute(cmd) + output1, stderr1 = funct.subprocess_execute(cmd1) + if output: + print('error: ' + str(output)) + if stderr: + print('error: ' + str(stderr)) + if output1: + print('error: ' + str(output1)) + if stderr1: + print('error: ' + str(stderr1)) + cmd = 'echo "del acl #%s #%s" |nc %s %s' % (list_id, ip_id, serv, haproxy_sock_port) + output, stderr = funct.subprocess_execute(cmd) + if output[0] != '': + print('error: ' + output[0]) + if stderr[0] != '': + print('error: ' + stderr[0]) if form.getvalue('list_ip_for_add') is not None: - haproxy_sock_port = sql.get_setting('haproxy_sock_port') - lists_path = sql.get_setting('lists_path') - fullpath = funct.get_config_var('main', 'fullpath') - ip = form.getvalue('list_ip_for_add') - list_id = form.getvalue('list_id_for_add') - list_name = form.getvalue('list_name') - user_group = funct.get_user_group(id=1) + haproxy_sock_port = sql.get_setting('haproxy_sock_port') + lists_path = sql.get_setting('lists_path') + fullpath = funct.get_config_var('main', 'fullpath') + ip = form.getvalue('list_ip_for_add') + list_id = form.getvalue('list_id_for_add') + list_name = form.getvalue('list_name') + user_group = funct.get_user_group(id=1) - cmd = 'echo "%s" >> %s/%s/%s/%s' % (ip, fullpath, lists_path, user_group, list_name) - output, stderr = funct.subprocess_execute(cmd) - if output: - print('error: ' + str(output)) - if stderr: - print('error: ' + str(stderr)) - - cmd = 'echo "add acl #%s %s" |nc %s %s' % (list_id, ip, serv, haproxy_sock_port) - output, stderr = funct.subprocess_execute(cmd) - if output[0]: - print('error: ' + output[0]) - if stderr: - print('error: ' + stderr[0]) + cmd = 'echo "%s" >> %s/%s/%s/%s' % (ip, fullpath, lists_path, user_group, list_name) + output, stderr = funct.subprocess_execute(cmd) + if output: + print('error: ' + str(output)) + if stderr: + print('error: ' + str(stderr)) + cmd = 'echo "add acl #%s %s" |nc %s %s' % (list_id, ip, serv, haproxy_sock_port) + output, stderr = funct.subprocess_execute(cmd) + if output[0]: + print('error: ' + output[0]) + if stderr: + print('error: ' + stderr[0]) if form.getvalue('sessions_select') is not None: - from jinja2 import Environment, FileSystemLoader - env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True,extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do'], trim_blocks=True, lstrip_blocks=True) - serv = form.getvalue('sessions_select') - haproxy_sock_port = sql.get_setting('haproxy_sock_port') + from jinja2 import Environment, FileSystemLoader - cmd = 'echo "show sess" |nc %s %s' % (serv, haproxy_sock_port) - output, stderr = funct.subprocess_execute(cmd) + env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True, + extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do'], trim_blocks=True, lstrip_blocks=True) + serv = form.getvalue('sessions_select') + haproxy_sock_port = sql.get_setting('haproxy_sock_port') - template = env.get_template('/sessions_table.html') - template = template.render(sessions=output) + cmd = 'echo "show sess" |nc %s %s' % (serv, haproxy_sock_port) + output, stderr = funct.subprocess_execute(cmd) - print(template) + template = env.get_template('/sessions_table.html') + template = template.render(sessions=output) + print(template) if form.getvalue('sessions_select_show') is not None: - serv = form.getvalue('sessions_select_show') - sess_id = form.getvalue('sessions_select_id') - haproxy_sock_port = sql.get_setting('haproxy_sock_port') + serv = form.getvalue('sessions_select_show') + sess_id = form.getvalue('sessions_select_id') + haproxy_sock_port = sql.get_setting('haproxy_sock_port') - cmd = 'echo "show sess %s" |nc %s %s' % (sess_id, serv, haproxy_sock_port) - output, stderr = funct.subprocess_execute(cmd) + cmd = 'echo "show sess %s" |nc %s %s' % (sess_id, serv, haproxy_sock_port) + output, stderr = funct.subprocess_execute(cmd) - output, stderr = funct.subprocess_execute(cmd) - - if stderr: - print('error: ' + stderr[0]) - else: - for o in output: - print(o+'
') + output, stderr = funct.subprocess_execute(cmd) + if stderr: + print('error: ' + stderr[0]) + else: + for o in output: + print(o + '
') if form.getvalue('session_delete_id') is not None: - haproxy_sock_port = sql.get_setting('haproxy_sock_port') - sess_id = form.getvalue('session_delete_id') - - cmd='echo "shutdown session %s" |nc %s %s' % (sess_id, serv, haproxy_sock_port) - output, stderr = funct.subprocess_execute(cmd) - if output[0] != '': - print('error: ' + output[0]) - if stderr[0] != '': - print('error: ' + stderr[0]) + haproxy_sock_port = sql.get_setting('haproxy_sock_port') + sess_id = form.getvalue('session_delete_id') + cmd = 'echo "shutdown session %s" |nc %s %s' % (sess_id, serv, haproxy_sock_port) + output, stderr = funct.subprocess_execute(cmd) + if output[0] != '': + print('error: ' + output[0]) + if stderr[0] != '': + print('error: ' + stderr[0]) if form.getvalue("change_pos") is not None: - pos = form.getvalue('change_pos') - sql.update_server_pos(pos, serv) - + pos = form.getvalue('change_pos') + sql.update_server_pos(pos, serv) if form.getvalue('ip') is not None and serv is not None: - commands = [ "sudo ip a |grep inet |egrep -v '::1' |awk '{ print $2 }' |awk -F'/' '{ print $1 }'" ] - funct.ssh_command(serv, commands, ip="1") - + commands = ["sudo ip a |grep inet |egrep -v '::1' |awk '{ print $2 }' |awk -F'/' '{ print $1 }'"] + funct.ssh_command(serv, commands, ip="1") if form.getvalue('showif'): - commands = ["sudo ip link|grep 'UP' |grep -v 'lo'| awk '{print $2}' |awk -F':' '{print $1}'"] - funct.ssh_command(serv, commands, ip="1") - + commands = ["sudo ip link|grep 'UP' |grep -v 'lo'| awk '{print $2}' |awk -F':' '{print $1}'"] + funct.ssh_command(serv, commands, ip="1") if form.getvalue('action_hap') is not None and serv is not None: - action = form.getvalue('action_hap') + action = form.getvalue('action_hap') - if funct.check_haproxy_config(serv): - haproxy_enterprise = sql.get_setting('haproxy_enterprise') - if haproxy_enterprise == '1': - haproxy_service_name = "hapee-2.0-lb" - else: - haproxy_service_name = "haproxy" - - commands = ["sudo systemctl %s %s" % (action, haproxy_service_name)] - funct.ssh_command(serv, commands) - funct.logging(serv, 'HAProxy was '+action+'ed', haproxywi=1, login=1) - print("success: HAProxy was %s" % action) - else: - print("error: Bad config, check please") + if funct.check_haproxy_config(serv): + haproxy_enterprise = sql.get_setting('haproxy_enterprise') + if haproxy_enterprise == '1': + haproxy_service_name = "hapee-2.0-lb" + else: + haproxy_service_name = "haproxy" + commands = ["sudo systemctl %s %s" % (action, haproxy_service_name)] + funct.ssh_command(serv, commands) + funct.logging(serv, 'HAProxy was ' + action + 'ed', haproxywi=1, login=1) + print("success: HAProxy was %s" % action) + else: + print("error: Bad config, check please") if form.getvalue('action_nginx') is not None and serv is not None: - action = form.getvalue('action_nginx') - - if funct.check_haproxy_config(serv): - commands = [ "sudo systemctl %s nginx" % action ] - funct.ssh_command(serv, commands) - funct.logging(serv, 'Nginx was '+action+'ed', haproxywi=1, login=1) - print("success: Nginx was %s" % action) - else: - print("error: Bad config, check please") + action = form.getvalue('action_nginx') + if funct.check_haproxy_config(serv): + commands = ["sudo systemctl %s nginx" % action] + funct.ssh_command(serv, commands) + funct.logging(serv, 'Nginx was ' + action + 'ed', haproxywi=1, login=1) + print("success: Nginx was %s" % action) + else: + print("error: Bad config, check please") if form.getvalue('action_waf') is not None and serv is not None: - serv = form.getvalue('serv') - action = form.getvalue('action_waf') - funct.logging(serv, 'WAF service was '+action+'ed', haproxywi=1, login=1) - commands = [ "sudo systemctl %s waf" % action ] - funct.ssh_command(serv, commands) - + serv = form.getvalue('serv') + action = form.getvalue('action_waf') + funct.logging(serv, 'WAF service was ' + action + 'ed', haproxywi=1, login=1) + commands = ["sudo systemctl %s waf" % action] + funct.ssh_command(serv, commands) if form.getvalue('action_service') is not None: - action = form.getvalue('action_service') - if action == 'stop': - cmd="sudo systemctl disable %s --now" % serv - elif action == "start": - cmd="sudo systemctl enable %s --now" % serv - elif action == "restart": - cmd="sudo systemctl restart %s --now" % serv - output, stderr = funct.subprocess_execute(cmd) - funct.logging('localhost', ' The service '+serv+ 'was '+action+'ed', haproxywi=1, login=1) - + action = form.getvalue('action_service') + if action == 'stop': + cmd = "sudo systemctl disable %s --now" % serv + elif action == "start": + cmd = "sudo systemctl enable %s --now" % serv + elif action == "restart": + cmd = "sudo systemctl restart %s --now" % serv + output, stderr = funct.subprocess_execute(cmd) + funct.logging('localhost', ' The service ' + serv + 'was ' + 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') - if service == 'haproxy': - configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir') - format = 'cfg' - elif service == 'nginx': - configs_dir = funct.get_config_var('configs', 'nginx_save_configs_dir') - format = 'conf' - try: - sections = funct.get_sections(configs_dir+funct.get_files(dir=configs_dir, format=format)[0], service=service) - except Exception as e: - funct.logging('localhost', str(e), haproxywi=1) - try: - cfg = configs_dir + serv + "-" + funct.get_data('config') + '.'+format - except: - funct.logging('localhost', ' Cannot generate cfg path', haproxywi=1) - try: - if service == 'nginx': - error = funct.get_config(serv, cfg, nginx=1) - else: - error = funct.get_config(serv, cfg) - except: - funct.logging('localhost', ' Cannot download config', haproxywi=1) - try: - sections = funct.get_sections(cfg, service=service) - except: - funct.logging('localhost', ' Cannot get sections from config file', haproxywi=1) - sections = 'Cannot get backends' + from jinja2 import Environment, FileSystemLoader - template = template.render(backends=sections, serv=serv, service=service) - print(template) + env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True) + template = env.get_template('haproxyservers_backends.html') + service = form.getvalue('service') + if service == 'haproxy': + configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir') + format = 'cfg' + elif service == 'nginx': + configs_dir = funct.get_config_var('configs', 'nginx_save_configs_dir') + format = 'conf' + try: + sections = funct.get_sections(configs_dir + funct.get_files(dir=configs_dir, format=format)[0], service=service) + except Exception as e: + funct.logging('localhost', str(e), haproxywi=1) + try: + cfg = configs_dir + serv + "-" + funct.get_data('config') + '.' + format + except: + funct.logging('localhost', ' Cannot generate cfg path', haproxywi=1) + try: + if service == 'nginx': + error = funct.get_config(serv, cfg, nginx=1) + else: + error = funct.get_config(serv, cfg) + except: + funct.logging('localhost', ' Cannot download config', haproxywi=1) + try: + sections = funct.get_sections(cfg, service=service) + except: + funct.logging('localhost', ' Cannot get sections from config file', haproxywi=1) + sections = 'Cannot get backends' + template = template.render(backends=sections, serv=serv, service=service) + print(template) if act == "overviewHapservers": - if form.getvalue('service') == 'nginx': - config_path = sql.get_setting('nginx_config_path') - else: - config_path = sql.get_setting('haproxy_config_path') - commands = [ "ls -l %s |awk '{ print $6\" \"$7\" \"$8}'" % config_path ] - try: - print(funct.ssh_command(serv, commands)) - except: - print('error: Cannot get last date') - + if form.getvalue('service') == 'nginx': + config_path = sql.get_setting('nginx_config_path') + else: + config_path = sql.get_setting('haproxy_config_path') + commands = ["ls -l %s |awk '{ print $6\" \"$7\" \"$8}'" % config_path] + try: + print(funct.ssh_command(serv, commands)) + except: + print('error: Cannot get last date') if act == "overview": - import asyncio - async def async_get_overview(serv1, serv2): - server_status = () - commands2 = [ "ps ax |grep waf/bin/modsecurity |grep -v grep |wc -l" ] - cmd = 'echo "show info" |nc %s %s -w 1|grep -e "Process_num"' % (serv2, sql.get_setting('haproxy_sock_port')) - keepalived = sql.select_keealived(serv2) - if keepalived == 1: - command = [ "ps ax |grep keepalived|grep -v grep|wc -l" ] - keepalived_process = funct.ssh_command(serv2, command) - else: - keepalived_process = '' - nginx = sql.select_nginx(serv2) - if nginx == 1: - command = [ "ps ax |grep nginx:|grep -v grep|wc -l" ] - nginx_process = funct.ssh_command(serv2, command) - else: - nginx_process = '' - server_status = (serv1, - serv2, - funct.server_status(funct.subprocess_execute(cmd)), - sql.select_servers(server=serv2, keep_alive=1), - funct.ssh_command(serv2, commands2), - sql.select_waf_servers(serv2), - keepalived, - keepalived_process, - nginx, - nginx_process) - return server_status + import asyncio - async def get_runner_overview(): - import http.cookies - from jinja2 import Environment, FileSystemLoader - env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True,extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do']) - - servers = [] - template = env.get_template('overview.html') - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - futures = [async_get_overview(server[1], server[2]) for server in sql.select_servers(server=serv)] - for i, future in enumerate(asyncio.as_completed(futures)): - result = await future - servers.append(result) - servers_sorted = sorted(servers, key=funct.get_key) - template = template.render(service_status=servers_sorted, role=sql.get_user_role_by_uuid(user_id.value)) - print(template) + async def async_get_overview(serv1, serv2): + server_status = () + commands2 = ["ps ax |grep waf/bin/modsecurity |grep -v grep |wc -l"] + cmd = 'echo "show info" |nc %s %s -w 1|grep -e "Process_num"' % (serv2, sql.get_setting('haproxy_sock_port')) + keepalived = sql.select_keealived(serv2) + if keepalived == 1: + command = ["ps ax |grep keepalived|grep -v grep|wc -l"] + keepalived_process = funct.ssh_command(serv2, command) + else: + keepalived_process = '' + nginx = sql.select_nginx(serv2) + if nginx == 1: + command = ["ps ax |grep nginx:|grep -v grep|wc -l"] + nginx_process = funct.ssh_command(serv2, command) + else: + nginx_process = '' + server_status = (serv1, + serv2, + funct.server_status(funct.subprocess_execute(cmd)), + sql.select_servers(server=serv2, keep_alive=1), + funct.ssh_command(serv2, commands2), + sql.select_waf_servers(serv2), + keepalived, + keepalived_process, + nginx, + nginx_process) + return server_status - ioloop = asyncio.get_event_loop() - ioloop.run_until_complete(get_runner_overview()) - ioloop.close() + async def get_runner_overview(): + import http.cookies + from jinja2 import Environment, FileSystemLoader + env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True, + extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do']) + servers = [] + template = env.get_template('overview.html') + cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) + user_id = cookie.get('uuid') + futures = [async_get_overview(server[1], server[2]) for server in sql.select_servers(server=serv)] + for i, future in enumerate(asyncio.as_completed(futures)): + result = await future + servers.append(result) + servers_sorted = sorted(servers, key=funct.get_key) + template = template.render(service_status=servers_sorted, role=sql.get_user_role_by_uuid(user_id.value)) + print(template) + + + ioloop = asyncio.get_event_loop() + ioloop.run_until_complete(get_runner_overview()) + ioloop.close() if act == "overviewwaf": - import asyncio - async def async_get_overviewWaf(serv1, serv2): - haproxy_dir = sql.get_setting('haproxy_dir') - server_status = () - commands = [ "ps ax |grep waf/bin/modsecurity |grep -v grep |wc -l" ] - commands1 = [ "cat %s/waf/modsecurity.conf |grep SecRuleEngine |grep -v '#' |awk '{print $2}'" % haproxy_dir ] - - server_status = (serv1,serv2, - funct.ssh_command(serv2, commands), - funct.ssh_command(serv2, commands1).strip(), - sql.select_waf_metrics_enable_server(serv2)) - return server_status + import asyncio - async def get_runner_overviewWaf(): - import http.cookies - from jinja2 import Environment, FileSystemLoader - env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True,extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do']) - template = env.get_template('overivewWaf.html') + async def async_get_overviewWaf(serv1, serv2): + haproxy_dir = sql.get_setting('haproxy_dir') + server_status = () + commands = ["ps ax |grep waf/bin/modsecurity |grep -v grep |wc -l"] + commands1 = ["cat %s/waf/modsecurity.conf |grep SecRuleEngine |grep -v '#' |awk '{print $2}'" % haproxy_dir] - servers = [] - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - futures = [async_get_overviewWaf(server[1], server[2]) for server in sql.select_servers(server=serv)] - for i, future in enumerate(asyncio.as_completed(futures)): - result = await future - servers.append(result) - servers_sorted = sorted(servers, key=funct.get_key) - template = template.render(service_status=servers_sorted, role=sql.get_user_role_by_uuid(user_id.value)) - print(template) + server_status = (serv1, serv2, + funct.ssh_command(serv2, commands), + funct.ssh_command(serv2, commands1).strip(), + sql.select_waf_metrics_enable_server(serv2)) + return server_status - ioloop = asyncio.get_event_loop() - ioloop.run_until_complete(get_runner_overviewWaf()) - ioloop.close() + async def get_runner_overviewWaf(): + import http.cookies + from jinja2 import Environment, FileSystemLoader + env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True, + extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do']) + template = env.get_template('overivewWaf.html') + + servers = [] + cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) + user_id = cookie.get('uuid') + futures = [async_get_overviewWaf(server[1], server[2]) for server in sql.select_servers(server=serv)] + for i, future in enumerate(asyncio.as_completed(futures)): + result = await future + servers.append(result) + servers_sorted = sorted(servers, key=funct.get_key) + template = template.render(service_status=servers_sorted, role=sql.get_user_role_by_uuid(user_id.value)) + print(template) + + + ioloop = asyncio.get_event_loop() + ioloop.run_until_complete(get_runner_overviewWaf()) + ioloop.close() if act == "overviewServers": - import asyncio - async def async_get_overviewServers(serv1, serv2, service): - server_status = () + import asyncio - if service == 'haproxy': - cmd = 'echo "show info" |nc %s %s -w 1|grep -e "Ver\|CurrConns\|Maxco\|MB\|Uptime:"' % (serv2, sql.get_setting('haproxy_sock_port')) - out = funct.subprocess_execute(cmd) - out1 = "" - for k in out: - if "Ncat:" not in k: - for r in k: - out1 += r - out1 += "
" - else: - out1 = "Can\'t connect to HAproxy" - else: - out1 = '' + async def async_get_overviewServers(serv1, serv2, service): + server_status = () - server_status = (serv1,serv2, out1) - return server_status + if service == 'haproxy': + cmd = 'echo "show info" |nc %s %s -w 1|grep -e "Ver\|CurrConns\|Maxco\|MB\|Uptime:"' % ( + serv2, sql.get_setting('haproxy_sock_port')) + out = funct.subprocess_execute(cmd) + out1 = "" - 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') + for k in out: + if "Ncat:" not in k: + for r in k: + out1 += r + out1 += "
" + else: + out1 = "Can\'t connect to HAproxy" + else: + out1 = '' - servers = [] - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - role = sql.get_user_role_by_uuid(user_id.value) - futures = [async_get_overviewServers(kwargs.get('server1'), kwargs.get('server2'), kwargs.get('service'))] + server_status = (serv1, serv2, out1) + return server_status - for i, future in enumerate(asyncio.as_completed(futures)): - result = await future - servers.append(result) - servers_sorted = sorted(servers, key=funct.get_key) - template = template.render(service_status=servers_sorted, role=role, id=kwargs.get('id'), service_page=service) - print(template) - id = form.getvalue('id') - name = form.getvalue('name') - service = form.getvalue('service') - ioloop = asyncio.get_event_loop() - ioloop.run_until_complete(get_runner_overviewServers(server1=name, server2=serv, id=id, service=service)) - ioloop.close() + 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') + servers = [] + cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) + user_id = cookie.get('uuid') + role = sql.get_user_role_by_uuid(user_id.value) + futures = [async_get_overviewServers(kwargs.get('server1'), kwargs.get('server2'), kwargs.get('service'))] + + for i, future in enumerate(asyncio.as_completed(futures)): + result = await future + servers.append(result) + servers_sorted = sorted(servers, key=funct.get_key) + template = template.render(service_status=servers_sorted, role=role, id=kwargs.get('id'), service_page=service) + print(template) + + + id = form.getvalue('id') + name = form.getvalue('name') + service = form.getvalue('service') + ioloop = asyncio.get_event_loop() + ioloop.run_until_complete(get_runner_overviewServers(server1=name, server2=serv, id=id, service=service)) + ioloop.close() if form.getvalue('action'): - import requests + import requests - haproxy_user = sql.get_setting('stats_user') - haproxy_pass = sql.get_setting('stats_password') - stats_port = sql.get_setting('stats_port') - stats_page = sql.get_setting('stats_page') + haproxy_user = sql.get_setting('stats_user') + haproxy_pass = sql.get_setting('stats_password') + stats_port = sql.get_setting('stats_port') + stats_page = sql.get_setting('stats_page') - postdata = { - 'action' : form.getvalue('action'), - 's' : form.getvalue('s'), - 'b' : form.getvalue('b') - } + postdata = { + 'action': form.getvalue('action'), + 's': form.getvalue('s'), + 'b': form.getvalue('b') + } - headers = { - 'User-Agent' : 'Mozilla/5.0 (Windows NT 5.1; rv:20.0) Gecko/20100101 Firefox/20.0', - 'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', - 'Accept-Language' : 'en-US,en;q=0.5', - 'Accept-Encoding' : 'gzip, deflate' - } - - q = requests.post('http://'+serv+':'+stats_port+'/'+stats_page, headers=headers, data=postdata, auth=(haproxy_user, haproxy_pass)) + headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 5.1; rv:20.0) Gecko/20100101 Firefox/20.0', + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', + 'Accept-Language': 'en-US,en;q=0.5', + 'Accept-Encoding': 'gzip, deflate' + } + q = requests.post('http://' + serv + ':' + stats_port + '/' + stats_page, + headers=headers, + data=postdata, + auth=(haproxy_user, haproxy_pass)) if serv is not None and act == "stats": - import requests + import requests - if form.getvalue('service') == 'nginx': - haproxy_user = sql.get_setting('nginx_stats_user') - haproxy_pass = sql.get_setting('nginx_stats_password') - stats_port = sql.get_setting('nginx_stats_port') - stats_page = sql.get_setting('nginx_stats_page') - else: - haproxy_user = sql.get_setting('stats_user') - haproxy_pass = sql.get_setting('stats_password') - stats_port = sql.get_setting('stats_port') - stats_page = sql.get_setting('stats_page') - try: - response = requests.get('http://%s:%s/%s' % (serv, stats_port, stats_page), auth=(haproxy_user, haproxy_pass)) - except requests.exceptions.ConnectTimeout: - print('error: Oops. Connection timeout occured!') - except requests.exceptions.ReadTimeout: - print('error: Oops. Read timeout occured') - except requests.exceptions.HTTPError as errh: - print ("error: Http Error:",errh) - except requests.exceptions.ConnectionError as errc: - print ('error: Error Connecting: %s' % errc) - except requests.exceptions.Timeout as errt: - print ("error: Timeout Error:",errt) - except requests.exceptions.RequestException as err: - print ("error: OOps: Something Else",err) + if form.getvalue('service') == 'nginx': + haproxy_user = sql.get_setting('nginx_stats_user') + haproxy_pass = sql.get_setting('nginx_stats_password') + stats_port = sql.get_setting('nginx_stats_port') + stats_page = sql.get_setting('nginx_stats_page') + else: + haproxy_user = sql.get_setting('stats_user') + haproxy_pass = sql.get_setting('stats_password') + stats_port = sql.get_setting('stats_port') + stats_page = sql.get_setting('stats_page') + try: + response = requests.get('http://%s:%s/%s' % (serv, stats_port, stats_page), auth=(haproxy_user, haproxy_pass)) + except requests.exceptions.ConnectTimeout: + print('error: Oops. Connection timeout occured!') + except requests.exceptions.ReadTimeout: + print('error: Oops. Read timeout occured') + except requests.exceptions.HTTPError as errh: + print("error: Http Error:", errh) + except requests.exceptions.ConnectionError as errc: + print('error: Error Connecting: %s' % errc) + except requests.exceptions.Timeout as errt: + print("error: Timeout Error:", errt) + except requests.exceptions.RequestException as err: + print("error: OOps: Something Else", err) - 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') + data = response.content + if form.getvalue('service') == 'nginx': + from jinja2 import Environment, FileSystemLoader - servers_with_status = list() - h = () - out1 = [] - for k in data.decode('utf-8').split(): - out1.append(k) - h = (out1, ) - servers_with_status.append(h) + env = Environment(loader=FileSystemLoader('templates/'), autoescape=True) + template = env.get_template('ajax/nginx_stats.html') - template = template.render(out=servers_with_status) - print(template) - else: - print(data.decode('utf-8')) + servers_with_status = list() + h = () + out1 = [] + for k in data.decode('utf-8').split(): + out1.append(k) + h = (out1,) + servers_with_status.append(h) + template = template.render(out=servers_with_status) + print(template) + else: + print(data.decode('utf-8')) if serv is not None and form.getvalue('rows') is not None: - rows = form.getvalue('rows') - waf = form.getvalue('waf') - grep = form.getvalue('grep') - hour = form.getvalue('hour') - minut = form.getvalue('minut') - hour1 = form.getvalue('hour1') - minut1 = form.getvalue('minut1') - service = form.getvalue('service') - out = funct.show_haproxy_log(serv, rows=rows, waf=waf, grep=grep, hour=hour, minut=minut, hour1=hour1, minut1=minut1, service=service) - print(out) - + rows = form.getvalue('rows') + waf = form.getvalue('waf') + grep = form.getvalue('grep') + hour = form.getvalue('hour') + minut = form.getvalue('minut') + hour1 = form.getvalue('hour1') + minut1 = form.getvalue('minut1') + service = form.getvalue('service') + out = funct.show_haproxy_log(serv, rows=rows, waf=waf, grep=grep, hour=hour, minut=minut, hour1=hour1, + minut1=minut1, service=service) + print(out) if serv is not None and form.getvalue('rows1') is not None: - rows = form.getvalue('rows1') - grep = form.getvalue('grep') - hour = form.getvalue('hour') - minut = form.getvalue('minut') - hour1 = form.getvalue('hour1') - minut1 = form.getvalue('minut1') - out = funct.show_haproxy_log(serv, rows=rows, waf='0', grep=grep, hour=hour, minut=minut, hour1=hour1, minut1=minut1, service='apache') - print(out) - + rows = form.getvalue('rows1') + grep = form.getvalue('grep') + hour = form.getvalue('hour') + minut = form.getvalue('minut') + hour1 = form.getvalue('hour1') + minut1 = form.getvalue('minut1') + out = funct.show_haproxy_log(serv, rows=rows, waf='0', grep=grep, hour=hour, minut=minut, hour1=hour1, + minut1=minut1, service='apache') + print(out) if form.getvalue('viewlogs') is not None: - viewlog = form.getvalue('viewlogs') - rows = form.getvalue('rows') - grep = form.getvalue('grep') - hour = form.getvalue('hour') - minut = form.getvalue('minut') - hour1 = form.getvalue('hour1') - minut1 = form.getvalue('minut1') - if funct.check_user_group(): - out = funct.show_haproxy_log(serv=viewlog, rows=rows, waf='0', grep=grep, hour=hour, minut=minut, hour1=hour1, minut1=minut1, service='internal') - print(out) - + viewlog = form.getvalue('viewlogs') + rows = form.getvalue('rows') + grep = form.getvalue('grep') + hour = form.getvalue('hour') + minut = form.getvalue('minut') + hour1 = form.getvalue('hour1') + minut1 = form.getvalue('minut1') + if funct.check_user_group(): + out = funct.show_haproxy_log(serv=viewlog, rows=rows, waf='0', grep=grep, hour=hour, minut=minut, hour1=hour1, + minut1=minut1, service='internal') + print(out) if serv is not None and act == "showMap": - import networkx as nx - import matplotlib - matplotlib.use('Agg') - import matplotlib.pyplot as plt + import networkx as nx + import matplotlib - stats_port= sql.get_setting('stats_port') - haproxy_config_path = sql.get_setting('haproxy_config_path') - hap_configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir') - date = funct.get_data('config') - cfg = hap_configs_dir + serv + "-" + date + ".cfg" + matplotlib.use('Agg') + import matplotlib.pyplot as plt - print('
') - print("

Map from %s


" % serv) + stats_port = sql.get_setting('stats_port') + haproxy_config_path = sql.get_setting('haproxy_config_path') + hap_configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir') + date = funct.get_data('config') + cfg = hap_configs_dir + serv + "-" + date + ".cfg" - G = nx.DiGraph() + print('
') + print("

Map from %s


" % serv) - error = funct.get_config(serv, cfg) - if error: - print(error) - try: - conf = open(cfg, "r") - except IOError: - print('error: Can\'t read import config file') + G = nx.DiGraph() - node = "" - line_new2 = [1,""] - i,k = 800, 800 - j, m = 0, 0 - for line in conf: - if line.startswith('listen') or line.startswith('frontend'): - if "stats" not in line: - node = line - i = i - 750 - if line.find("backend") == 0: - node = line - i = i - 700 - G.add_node(node,pos=(k,i),label_pos=(k,i+100)) + error = funct.get_config(serv, cfg) + if error: + print(error) + try: + conf = open(cfg, "r") + except IOError: + print('error: Can\'t read import config file') - if "bind" in line or (line.startswith('listen') and ":" in line) or (line.startswith('frontend') and ":" in line): - try: - bind = line.split(":") - if stats_port not in bind[1]: - bind[1] = bind[1].strip(' ') - bind = bind[1].split("crt") - node = node.strip(' \t\n\r') - node = node + ":" + bind[0] - G.add_node(node,pos=(k,i),label_pos=(k,i+100)) - except: - pass + node = "" + line_new2 = [1, ""] + i, k = 800, 800 + j, m = 0, 0 + for line in conf: + if line.startswith('listen') or line.startswith('frontend'): + if "stats" not in line: + node = line + i = i - 750 + if line.find("backend") == 0: + node = line + i = i - 700 + G.add_node(node, pos=(k, i), label_pos=(k, i + 100)) - if "server " in line or "use_backend" in line or "default_backend" in line and "stats" not in line and "#" not in line: - if "timeout" not in line and "default-server" not in line and "#" not in line and "stats" not in line: - i = i - 1050 - j = j + 1 - if "check" in line: - line_new = line.split("check") - else: - line_new = line.split("if ") - if "server" in line: - line_new1 = line_new[0].split("server") - line_new[0] = line_new1[1] - line_new2 = line_new[0].split(":") - line_new[0] = line_new2[0] + if "bind" in line or (line.startswith('listen') and ":" in line) or ( + line.startswith('frontend') and ":" in line): + try: + bind = line.split(":") + if stats_port not in bind[1]: + bind[1] = bind[1].strip(' ') + bind = bind[1].split("crt") + node = node.strip(' \t\n\r') + node = node + ":" + bind[0] + G.add_node(node, pos=(k, i), label_pos=(k, i + 100)) + except: + pass - line_new[0] = line_new[0].strip(' \t\n\r') - line_new2[1] = line_new2[1].strip(' \t\n\r') + if "server " in line or "use_backend" in line or "default_backend" in line and "stats" not in line and "#" not in line: + if "timeout" not in line and "default-server" not in line and "#" not in line and "stats" not in line: + i = i - 1050 + j = j + 1 + if "check" in line: + line_new = line.split("check") + else: + line_new = line.split("if ") + if "server" in line: + line_new1 = line_new[0].split("server") + line_new[0] = line_new1[1] + line_new2 = line_new[0].split(":") + line_new[0] = line_new2[0] - if j % 2 == 0: - G.add_node(line_new[0],pos=(k+230,i-335),label_pos=(k+225,i-180)) - else: - G.add_node(line_new[0],pos=(k-230,i-0),label_pos=(k-225,i+180)) + line_new[0] = line_new[0].strip(' \t\n\r') + line_new2[1] = line_new2[1].strip(' \t\n\r') - if line_new2[1] != "": - G.add_edge(node, line_new[0], port=line_new2[1]) - else: - G.add_edge(node,line_new[0]) + if j % 2 == 0: + G.add_node(line_new[0], pos=(k + 230, i - 335), label_pos=(k + 225, i - 180)) + else: + G.add_node(line_new[0], pos=(k - 230, i - 0), label_pos=(k - 225, i + 180)) - os.system("/bin/rm -f " + cfg) + if line_new2[1] != "": + G.add_edge(node, line_new[0], port=line_new2[1]) + else: + G.add_edge(node, line_new[0]) - pos=nx.get_node_attributes(G,'pos') - pos_label=nx.get_node_attributes(G,'label_pos') - edge_labels = nx.get_edge_attributes(G,'port') + os.system("/bin/rm -f " + cfg) - try: - plt.figure(10,figsize=(10,15)) - nx.draw(G, pos, with_labels=False, font_weight='bold', width=3, alpha=0.1,linewidths=5) - nx.draw_networkx_nodes(G,pos, node_color="skyblue", node_size=100, alpha=0.8, node_shape="p") - nx.draw_networkx_labels(G,pos=pos_label, alpha=1, font_color="green", font_size=10) - nx.draw_networkx_edges(G,pos, width=0.5,alpha=0.5, edge_color="#5D9CEB",arrows=False) - nx.draw_networkx_edge_labels(G, pos,label_pos=0.5,font_color="blue", labels=edge_labels, font_size=8) + pos = nx.get_node_attributes(G, 'pos') + pos_label = nx.get_node_attributes(G, 'label_pos') + edge_labels = nx.get_edge_attributes(G, 'port') - plt.savefig("map.png") - plt.show() - except Exception as e: - print(str(e)) + try: + plt.figure(10, figsize=(10, 15)) + nx.draw(G, pos, with_labels=False, font_weight='bold', width=3, alpha=0.1, linewidths=5) + nx.draw_networkx_nodes(G, pos, node_color="skyblue", node_size=100, alpha=0.8, node_shape="p") + nx.draw_networkx_labels(G, pos=pos_label, alpha=1, font_color="green", font_size=10) + nx.draw_networkx_edges(G, pos, width=0.5, alpha=0.5, edge_color="#5D9CEB", arrows=False) + nx.draw_networkx_edge_labels(G, pos, label_pos=0.5, font_color="blue", labels=edge_labels, font_size=8) - cmd = "rm -f "+os.path.dirname(os.getcwd())+"/map*.png && mv map.png "+os.path.dirname(os.getcwd())+"/map"+date+".png" - output, stderr = funct.subprocess_execute(cmd) - print(stderr) + plt.savefig("map.png") + plt.show() + except Exception as e: + print(str(e)) - print('map' % date) + cmd = "rm -f " + os.path.dirname(os.getcwd()) + "/map*.png && mv map.png " + os.path.dirname( + os.getcwd()) + "/map" + date + ".png" + output, stderr = funct.subprocess_execute(cmd) + print(stderr) + print('map' % date) if form.getvalue('servaction') is not None: - server_state_file = sql.get_setting('server_state_file') - haproxy_sock = sql.get_setting('haproxy_sock') - enable = form.getvalue('servaction') - backend = form.getvalue('servbackend') - cmd='echo "%s %s" |sudo socat stdio %s' % (enable, backend, haproxy_sock) + server_state_file = sql.get_setting('server_state_file') + haproxy_sock = sql.get_setting('haproxy_sock') + enable = form.getvalue('servaction') + backend = form.getvalue('servbackend') + cmd = 'echo "%s %s" |sudo socat stdio %s' % (enable, backend, haproxy_sock) - if form.getvalue('save') == "on": - save_command = 'echo "show servers state" | sudo socat %s stdio > %s' % (haproxy_sock, server_state_file) - command = [ cmd + ';' + save_command ] - else: - command = [ cmd ] + if form.getvalue('save') == "on": + save_command = 'echo "show servers state" | sudo socat %s stdio > %s' % (haproxy_sock, server_state_file) + command = [cmd + ';' + save_command] + else: + command = [cmd] - if enable != "show": - print('

You %s %s on HAproxy %s. Look it or Edit something else


' % (enable, backend, serv, serv)) - - print(funct.ssh_command(serv, command, show_log="1")) - action = 'runtimeapi.py ' + enable + ' ' + backend - funct.logging(serv, action) + if enable != "show": + print( + '

You %s %s on HAproxy %s. Look it or Edit something else


' % ( + enable, backend, serv, serv)) + print(funct.ssh_command(serv, command, show_log="1")) + action = 'runtimeapi.py ' + enable + ' ' + backend + 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') - right = form.getvalue('right') + from jinja2 import Environment, FileSystemLoader - if form.getvalue('service') == 'nginx': - return_files=funct.get_files(funct.get_config_var('configs', 'nginx_save_configs_dir'), 'conf') - else: - return_files=funct.get_files() + env = Environment(loader=FileSystemLoader('templates/'), autoescape=True) + template = env.get_template('ajax/show_compare_configs.html') + left = form.getvalue('left') + right = form.getvalue('right') - template = template.render(serv=serv, right=right, left=left, return_files=return_files) - print(template) + if form.getvalue('service') == 'nginx': + return_files = funct.get_files(funct.get_config_var('configs', 'nginx_save_configs_dir'), 'conf') + else: + return_files = funct.get_files() + template = template.render(serv=serv, right=right, left=left, return_files=return_files) + print(template) if serv is not None and form.getvalue('right') is not None: - from jinja2 import Environment, FileSystemLoader - left = form.getvalue('left') - right = form.getvalue('right') - if form.getvalue('service') == 'nginx': - configs_dir = funct.get_config_var('configs', 'nginx_save_configs_dir') - else: - configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir') - cmd='diff -ub %s%s %s%s' % (configs_dir, left, configs_dir, right) - env = Environment(loader=FileSystemLoader('templates/'), autoescape=True, extensions=["jinja2.ext.loopcontrols", "jinja2.ext.do"]) - template = env.get_template('ajax/compare.html') + from jinja2 import Environment, FileSystemLoader - output, stderr = funct.subprocess_execute(cmd) - template = template.render(stdout=output) + left = form.getvalue('left') + right = form.getvalue('right') + if form.getvalue('service') == 'nginx': + configs_dir = funct.get_config_var('configs', 'nginx_save_configs_dir') + else: + configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir') + cmd = 'diff -ub %s%s %s%s' % (configs_dir, left, configs_dir, right) + env = Environment(loader=FileSystemLoader('templates/'), autoescape=True, + extensions=["jinja2.ext.loopcontrols", "jinja2.ext.do"]) + template = env.get_template('ajax/compare.html') - print(template) - print(stderr) + output, stderr = funct.subprocess_execute(cmd) + template = template.render(stdout=output) + print(template) + print(stderr) if serv is not None and act == "configShow": - if form.getvalue('service') == 'keepalived': - configs_dir = funct.get_config_var('configs', 'kp_save_configs_dir') - cfg = '.conf' - elif form.getvalue('service') == 'nginx': - configs_dir = funct.get_config_var('configs', 'nginx_save_configs_dir') - cfg = '.conf' - else: - configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir') - cfg = '.cfg' + if form.getvalue('service') == 'keepalived': + configs_dir = funct.get_config_var('configs', 'kp_save_configs_dir') + cfg = '.conf' + elif form.getvalue('service') == 'nginx': + configs_dir = funct.get_config_var('configs', 'nginx_save_configs_dir') + cfg = '.conf' + else: + configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir') + cfg = '.cfg' - if form.getvalue('configver') is None: - cfg = configs_dir + serv + "-" + funct.get_data('config') + cfg - if form.getvalue('service') == 'nginx': - funct.get_config(serv, cfg, nginx=1) - else: - funct.get_config(serv, cfg) - else: - cfg = configs_dir + form.getvalue('configver') - try: - conf = open(cfg, "r") - except IOError: - print('
Can\'t read config file
') + if form.getvalue('configver') is None: + cfg = configs_dir + serv + "-" + funct.get_data('config') + cfg + if form.getvalue('service') == 'nginx': + funct.get_config(serv, cfg, nginx=1) + else: + funct.get_config(serv, cfg) + else: + cfg = configs_dir + form.getvalue('configver') + try: + conf = open(cfg, "r") + except IOError: + print('
Can\'t read config file
') - 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') + from jinja2 import Environment, FileSystemLoader - template = template.render(conf=conf, - serv=serv, - configver=form.getvalue('configver'), - role=funct.is_admin(level=3), - service=form.getvalue('service')) - print(template) + 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') - if form.getvalue('configver') is None: - os.system("/bin/rm -f " + cfg) + template = template.render(conf=conf, + serv=serv, + configver=form.getvalue('configver'), + role=funct.is_admin(level=3), + service=form.getvalue('service')) + print(template) + if form.getvalue('configver') is None: + os.system("/bin/rm -f " + cfg) if form.getvalue('master'): - master = form.getvalue('master') - slave = form.getvalue('slave') - ETH = form.getvalue('interface') - IP = form.getvalue('vrrpip') - syn_flood = form.getvalue('syn_flood') - script = "install_keepalived.sh" - fullpath = funct.get_config_var('main', 'fullpath') - proxy = sql.get_setting('proxy') - ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(master) + master = form.getvalue('master') + slave = form.getvalue('slave') + ETH = form.getvalue('interface') + IP = form.getvalue('vrrpip') + syn_flood = form.getvalue('syn_flood') + script = "install_keepalived.sh" + fullpath = funct.get_config_var('main', 'fullpath') + proxy = sql.get_setting('proxy') + ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(master) - if ssh_enable == 0: - ssh_key_name = '' + if ssh_enable == 0: + ssh_key_name = '' - servers = sql.select_servers(server=master) - for server in servers: - ssh_port = str(server[10]) + servers = sql.select_servers(server=master) + for server in servers: + ssh_port = str(server[10]) - if proxy is not None and proxy != '' and proxy != 'None': - proxy_serv = proxy - else: - proxy_serv = '' + if proxy is not None and proxy != '' and proxy != 'None': + proxy_serv = proxy + else: + proxy_serv = '' - os.system("cp scripts/%s ." % script) + os.system("cp scripts/%s ." % script) - if form.getvalue('hap') == "1": - funct.install_haproxy(master) - funct.install_haproxy(slave) + if form.getvalue('hap') == "1": + funct.install_haproxy(master) + funct.install_haproxy(slave) - if form.getvalue('nginx') == "1": - funct.install_nginx(master) - funct.install_nginx(slave) + if form.getvalue('nginx') == "1": + funct.install_nginx(master) + funct.install_nginx(slave) - commands = [ "chmod +x "+script +" && ./"+script +" PROXY=" + proxy_serv+" SSH_PORT="+ssh_port+ - " ETH="+ETH+" IP="+str(IP)+" MASTER=MASTER"+" SYN_FLOOD="+syn_flood+" HOST="+str(master)+ - " USER="+str(ssh_user_name)+" PASS="+str(ssh_user_password)+" KEY="+str(ssh_key_name) ] + commands = ["chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + " SSH_PORT=" + ssh_port + + " ETH=" + ETH + " IP=" + str(IP) + " MASTER=MASTER" + " SYN_FLOOD=" + syn_flood + " HOST=" + str( + master) + + " USER=" + str(ssh_user_name) + " PASS=" + str(ssh_user_password) + " KEY=" + str(ssh_key_name)] - output, error = funct.subprocess_execute(commands[0]) + output, error = funct.subprocess_execute(commands[0]) - if error: - funct.logging('localhost', error, haproxywi=1) - print('error: '+error) - else: - for l in output: - if "msg" in l or "FAILED" in l: - try: - l = l.split(':')[1] - l = l.split('"')[1] - print(l+"
") - break - except: - print(output) - break - else: - print('success: Master Keepalived was installed
') + if error: + funct.logging('localhost', error, haproxywi=1) + print('error: ' + error) + else: + for l in output: + if "msg" in l or "FAILED" in l: + try: + l = l.split(':')[1] + l = l.split('"')[1] + print(l + "
") + break + except: + print(output) + break + else: + print('success: Master Keepalived was installed
') - ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(slave) + ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(slave) - if ssh_enable == 0: - ssh_key_name = '' + if ssh_enable == 0: + ssh_key_name = '' - servers = sql.select_servers(server=slave) - for server in servers: - ssh_port = str(server[10]) + servers = sql.select_servers(server=slave) + for server in servers: + ssh_port = str(server[10]) - commands = [ "chmod +x "+script +" && ./"+script +" PROXY=" +proxy_serv+" SSH_PORT="+ssh_port+ - " ETH="+ETH+" IP="+IP+" MASTER=BACKUP"+" HOST="+str(slave)+ - " USER="+str(ssh_user_name)+" PASS="+str(ssh_user_password)+" KEY="+str(ssh_key_name) ] + commands = ["chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + " SSH_PORT=" + ssh_port + + " ETH=" + ETH + " IP=" + IP + " MASTER=BACKUP" + " HOST=" + str(slave) + + " USER=" + str(ssh_user_name) + " PASS=" + str(ssh_user_password) + " KEY=" + str(ssh_key_name)] - output, error = funct.subprocess_execute(commands[0]) + output, error = funct.subprocess_execute(commands[0]) - if error: - funct.logging('localhost', error, haproxywi=1) - print('error: '+error) - else: - for l in output: - if "msg" in l or "FAILED" in l: - try: - l = l.split(':')[1] - l = l.split('"')[1] - print(l+"
") - break - except: - print(output) - break - else: - print('success: Slave Keepalived was installed
') - - os.system("rm -f %s" % script) - sql.update_server_master(master, slave) - sql.update_keepalived(master) - sql.update_keepalived(slave) + if error: + funct.logging('localhost', error, haproxywi=1) + print('error: ' + error) + else: + for l in output: + if "msg" in l or "FAILED" in l: + try: + l = l.split(':')[1] + l = l.split('"')[1] + print(l + "
") + break + except: + print(output) + break + else: + print('success: Slave Keepalived was installed
') + os.system("rm -f %s" % script) + sql.update_server_master(master, slave) + sql.update_keepalived(master) + sql.update_keepalived(slave) if form.getvalue('masteradd'): - master = form.getvalue('masteradd') - slave = form.getvalue('slaveadd') - ETH = form.getvalue('interfaceadd') - IP = form.getvalue('vrrpipadd') - kp = form.getvalue('kp') - script = "install_keepalived.sh" - proxy = sql.get_setting('proxy') - ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(master) + master = form.getvalue('masteradd') + slave = form.getvalue('slaveadd') + ETH = form.getvalue('interfaceadd') + IP = form.getvalue('vrrpipadd') + kp = form.getvalue('kp') + script = "install_keepalived.sh" + proxy = sql.get_setting('proxy') + ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(master) - if ssh_enable == 0: - ssh_key_name = '' + if ssh_enable == 0: + ssh_key_name = '' - if proxy is not None and proxy != '' and proxy != 'None': - proxy_serv = proxy - else: - proxy_serv = '' + if proxy is not None and proxy != '' and proxy != 'None': + proxy_serv = proxy + else: + proxy_serv = '' - os.system("cp scripts/%s ." % script) + os.system("cp scripts/%s ." % script) - servers = sql.select_servers(server=master) - for server in servers: - ssh_port = str(server[10]) + servers = sql.select_servers(server=master) + for server in servers: + ssh_port = str(server[10]) - commands = [ "chmod +x "+script +" && ./"+script +" PROXY=" + proxy_serv+ - " SSH_PORT="+ssh_port+ - " ETH="+ETH+" IP="+str(IP)+" MASTER=MASTER"+" RESTART="+kp+" ADD_VRRP=1 HOST="+str(master)+ - " USER="+str(ssh_user_name)+" PASS="+str(ssh_user_password)+" KEY="+str(ssh_key_name) ] + commands = ["chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + + " SSH_PORT=" + ssh_port + " ETH=" + ETH + + " IP=" + str(IP) + " MASTER=MASTER" + " RESTART=" + kp + " ADD_VRRP=1 HOST=" + str(master) + + " USER=" + str(ssh_user_name) + " PASS=" + str(ssh_user_password) + " KEY=" + str(ssh_key_name)] - output, error = funct.subprocess_execute(commands[0]) + output, error = funct.subprocess_execute(commands[0]) - if error: - funct.logging('localhost', error, haproxywi=1) - print('error: '+error) - else: - for l in output: - if "msg" in l or "FAILED" in l: - try: - l = l.split(':')[1] - l = l.split('"')[1] - print(l+"
") - break - except: - print(output) - break - else: - print('success: Master VRRP address was added
') + if error: + funct.logging('localhost', error, haproxywi=1) + print('error: ' + error) + else: + for l in output: + if "msg" in l or "FAILED" in l: + try: + l = l.split(':')[1] + l = l.split('"')[1] + print(l + "
") + break + except: + print(output) + break + else: + print('success: Master VRRP address was added
') + ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(slave) - ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(slave) + if ssh_enable == 0: + ssh_key_name = '' - if ssh_enable == 0: - ssh_key_name = '' + servers = sql.select_servers(server=slave) + for server in servers: + ssh_port = str(server[10]) - servers = sql.select_servers(server=slave) - for server in servers: - ssh_port = str(server[10]) + commands = ["chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + + " SSH_PORT=" + ssh_port + " ETH=" + ETH + + " IP=" + str(IP) + " MASTER=BACKUP" + " RESTART=" + kp + " ADD_VRRP=1 HOST=" + str(slave) + + " USER=" + str(ssh_user_name) + " PASS=" + str(ssh_user_password) + " KEY=" + str(ssh_key_name)] - commands = ["chmod +x "+script +" && ./"+script +" PROXY=" + proxy_serv+ - " SSH_PORT="+ssh_port+ - " ETH="+ETH+" IP="+str(IP)+" MASTER=BACKUP"+" RESTART="+kp+" ADD_VRRP=1 HOST="+str(slave)+ - " USER="+str(ssh_user_name)+" PASS="+str(ssh_user_password)+" KEY="+str(ssh_key_name)] + output, error = funct.subprocess_execute(commands[0]) - output, error = funct.subprocess_execute(commands[0]) - - if error: - funct.logging('localhost', error, haproxywi=1) - print('error: '+error) - else: - for l in output: - if "msg" in l or "FAILED" in l: - try: - l = l.split(':')[1] - l = l.split('"')[1] - print(l+"
") - break - except: - print(output) - break - else: - print('success: Slave VRRP address was added
') - - os.system("rm -f %s" % script) + if error: + funct.logging('localhost', error, haproxywi=1) + print('error: ' + error) + else: + for l in output: + if "msg" in l or "FAILED" in l: + try: + l = l.split(':')[1] + l = l.split('"')[1] + print(l + "
") + break + except: + print(output) + break + else: + print('success: Slave VRRP address was added
') + os.system("rm -f %s" % script) if form.getvalue('install_grafana'): - script = "install_grafana.sh" - proxy = sql.get_setting('proxy') + script = "install_grafana.sh" + proxy = sql.get_setting('proxy') - os.system("cp scripts/%s ." % script) + os.system("cp scripts/%s ." % script) - if proxy is not None and proxy != '' and proxy != 'None': - proxy_serv = proxy - else: - proxy_serv = '' + if proxy is not None and proxy != '' and proxy != 'None': + proxy_serv = proxy + else: + proxy_serv = '' - commands = [ "chmod +x "+script +" && ./"+script +" PROXY=" + proxy_serv ] + commands = ["chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv] - output, error = funct.subprocess_execute(commands[0]) + output, error = funct.subprocess_execute(commands[0]) - 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
') - else: - for l in output: - if "FAILED" in l: - try: - l = l.split(':')[1] - l = l.split('"')[1] - print(l+"
") - break - except: - print(output) - break - else: - import socket - print('success: Grafana and Prometheus servers were installed. You can find Grafana on http://'+socket.gethostname()+':3000
') + if error: + funct.logging('localhost', error, haproxywi=1) + import socket - os.system("rm -f %s" % script) + print( + 'success: Grafana and Prometheus servers were installed. You can find Grafana on http://' + socket.gethostname() + ':3000
') + else: + for l in output: + if "FAILED" in l: + try: + l = l.split(':')[1] + l = l.split('"')[1] + print(l + "
") + break + except: + print(output) + break + else: + import socket + print( + 'success: Grafana and Prometheus servers were installed. You can find Grafana on http://' + socket.gethostname() + ':3000
') + + os.system("rm -f %s" % script) if form.getvalue('haproxy_exp_install'): - serv = form.getvalue('haproxy_exp_install') - script = "install_haproxy_exporter.sh" - stats_port = sql.get_setting('stats_port') - server_state_file = sql.get_setting('server_state_file') - stats_user = sql.get_setting('stats_user') - stats_password = sql.get_setting('stats_password') - stat_page = sql.get_setting('stats_page') - proxy = sql.get_setting('proxy') - ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(serv) + serv = form.getvalue('haproxy_exp_install') + script = "install_haproxy_exporter.sh" + stats_port = sql.get_setting('stats_port') + server_state_file = sql.get_setting('server_state_file') + stats_user = sql.get_setting('stats_user') + stats_password = sql.get_setting('stats_password') + stat_page = sql.get_setting('stats_page') + proxy = sql.get_setting('proxy') + ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(serv) - if ssh_enable == 0: - ssh_key_name = '' + if ssh_enable == 0: + ssh_key_name = '' - servers = sql.select_servers(server=serv) - for server in servers: - ssh_port = str(server[10]) + servers = sql.select_servers(server=serv) + for server in servers: + ssh_port = str(server[10]) - os.system("cp scripts/%s ." % script) + os.system("cp scripts/%s ." % script) - if proxy is not None and proxy != '' and proxy != 'None': - proxy_serv = proxy - else: - proxy_serv = '' + if proxy is not None and proxy != '' and proxy != 'None': + proxy_serv = proxy + else: + proxy_serv = '' - commands = ["chmod +x "+script +" && ./"+script +" PROXY=" + proxy_serv+ - " STAT_PORT="+stats_port+" STAT_FILE="+server_state_file+ - " SSH_PORT="+ssh_port+" STAT_PAGE="+stat_page+ - " STATS_USER="+stats_user+" STATS_PASS="+stats_password+" HOST="+serv+ - " USER="+ssh_user_name+" PASS="+ssh_user_password+" KEY="+ssh_key_name] + commands = ["chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + + " STAT_PORT=" + stats_port + " STAT_FILE=" + server_state_file + + " SSH_PORT=" + ssh_port + " STAT_PAGE=" + stat_page + + " STATS_USER=" + stats_user + " STATS_PASS=" + stats_password + " HOST=" + serv + + " USER=" + ssh_user_name + " PASS=" + ssh_user_password + " KEY=" + ssh_key_name] - output, error = funct.subprocess_execute(commands[0]) + output, error = funct.subprocess_execute(commands[0]) - if error: - funct.logging('localhost', error, haproxywi=1) - print('error: '+error) - else: - for l in output: - if "msg" in l or "FAILED" in l: - try: - l = l.split(':')[1] - l = l.split('"')[1] - print(l+"
") - break - except: - print(output) - break - else: - print('success: HAProxy exporter was installed
') - - os.system("rm -f %s" % script) + if error: + funct.logging('localhost', error, haproxywi=1) + print('error: ' + error) + else: + for l in output: + if "msg" in l or "FAILED" in l: + try: + l = l.split(':')[1] + l = l.split('"')[1] + print(l + "
") + break + except: + print(output) + break + else: + print('success: HAProxy exporter was installed
') + os.system("rm -f %s" % script) if form.getvalue('nginx_exp_install'): - serv = form.getvalue('nginx_exp_install') - script = "install_nginx_exporter.sh" - stats_user = sql.get_setting('nginx_stats_user') - stats_password = sql.get_setting('nginx_stats_password') - stats_port = sql.get_setting('nginx_stats_port') - stats_page = sql.get_setting('nginx_stats_page') - proxy = sql.get_setting('proxy') - ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(serv) + serv = form.getvalue('nginx_exp_install') + script = "install_nginx_exporter.sh" + stats_user = sql.get_setting('nginx_stats_user') + stats_password = sql.get_setting('nginx_stats_password') + stats_port = sql.get_setting('nginx_stats_port') + stats_page = sql.get_setting('nginx_stats_page') + proxy = sql.get_setting('proxy') + ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(serv) - if ssh_enable == 0: - ssh_key_name = '' + if ssh_enable == 0: + ssh_key_name = '' - servers = sql.select_servers(server=serv) - for server in servers: - ssh_port = str(server[10]) + servers = sql.select_servers(server=serv) + for server in servers: + ssh_port = str(server[10]) - os.system("cp scripts/%s ." % script) + os.system("cp scripts/%s ." % script) - if proxy is not None and proxy != '' and proxy != 'None': - proxy_serv = proxy - else: - proxy_serv = '' + if proxy is not None and proxy != '' and proxy != 'None': + proxy_serv = proxy + else: + proxy_serv = '' - commands = [ "chmod +x "+script +" && ./"+script +" PROXY=" + proxy_serv+ - " STAT_PORT="+stats_port+" SSH_PORT="+ssh_port+" STAT_PAGE="+stats_page+ - " STATS_USER="+stats_user+" STATS_PASS="+stats_password+" HOST="+serv+ - " USER="+ssh_user_name+" PASS="+ssh_user_password+" KEY="+ssh_key_name ] + commands = ["chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + + " STAT_PORT=" + stats_port + " SSH_PORT=" + ssh_port + " STAT_PAGE=" + stats_page + + " STATS_USER=" + stats_user + " STATS_PASS=" + stats_password + " HOST=" + serv + + " USER=" + ssh_user_name + " PASS=" + ssh_user_password + " KEY=" + ssh_key_name] - output, error = funct.subprocess_execute(commands[0]) + output, error = funct.subprocess_execute(commands[0]) - if error: - funct.logging('localhost', error, haproxywi=1) - print('error: '+error) - else: - for l in output: - if "msg" in l or "FAILED" in l: - try: - l = l.split(':')[1] - l = l.split('"')[1] - print(l+"
") - break - except: - print(output) - break - else: - print('success: Nginx exporter was installed
') - - os.system("rm -f %s" % script) + if error: + funct.logging('localhost', error, haproxywi=1) + print('error: ' + error) + else: + for l in output: + if "msg" in l or "FAILED" in l: + try: + l = l.split(':')[1] + l = l.split('"')[1] + print(l + "
") + break + except: + print(output) + break + else: + print('success: Nginx exporter was installed
') + os.system("rm -f %s" % script) if form.getvalue('backup') or form.getvalue('deljob') or form.getvalue('backupupdate'): - serv = form.getvalue('server') - rpath = form.getvalue('rpath') - time = form.getvalue('time') - type = form.getvalue('type') - rserver = form.getvalue('rserver') - cred = form.getvalue('cred') - deljob = form.getvalue('deljob') - update = form.getvalue('backupupdate') - description = form.getvalue('description') - script = "backup.sh" - ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path('localhost', id=int(cred)) + serv = form.getvalue('server') + rpath = form.getvalue('rpath') + time = form.getvalue('time') + type = form.getvalue('type') + rserver = form.getvalue('rserver') + cred = form.getvalue('cred') + deljob = form.getvalue('deljob') + update = form.getvalue('backupupdate') + description = form.getvalue('description') + script = "backup.sh" + ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path('localhost', id=int(cred)) - if deljob: - time = '' - rpath = '' - type = '' - elif update: - deljob = '' - else: - deljob = '' - if sql.check_exists_backup(serv): - print('warning: Backup job for %s already exists' % serv) - sys.exit() + if deljob: + time = '' + rpath = '' + type = '' + elif update: + deljob = '' + else: + deljob = '' + if sql.check_exists_backup(serv): + print('warning: Backup job for %s already exists' % serv) + sys.exit() - servers = sql.select_servers(server=serv) - for server in servers: - ssh_port = str(server[10]) + servers = sql.select_servers(server=serv) + for server in servers: + ssh_port = str(server[10]) - os.system("cp scripts/%s ." % script) + os.system("cp scripts/%s ." % script) - commands = ["chmod +x "+script +" && ./"+script +" HOST="+rserver+" SERVER="+serv+" TYPE="+type+ - " SSH_PORT="+ssh_port+ - " TIME="+time+" RPATH="+rpath+" DELJOB="+deljob+" USER="+str(ssh_user_name)+" KEY="+str(ssh_key_name)] + commands = ["chmod +x " + script + " && ./" + script + " HOST=" + rserver + " SERVER=" + serv + " TYPE=" + type + + " SSH_PORT=" + ssh_port + " TIME=" + time + + " RPATH=" + rpath + " DELJOB=" + deljob + " USER=" + str(ssh_user_name) + " KEY=" + str(ssh_key_name)] - output, error = funct.subprocess_execute(commands[0]) + output, error = funct.subprocess_execute(commands[0]) - if error: - funct.logging('backup', error, haproxywi=1) - print('error: '+error) - else: - for l in output: - if "msg" in l or "FAILED" in l: - try: - l = l.split(':')[1] - l = l.split('"')[1] - print('error: '+l+"
") - break - except: - print('error: ' + output) - break - else: - if not deljob and not update: - if sql.insert_backup_job(serv, rserver, rpath, type, time, cred, description): - #import http.cookies - from jinja2 import Environment, FileSystemLoader - env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True) - template = env.get_template('new_backup.html') - template = template.render(backups=sql.select_backups(server=serv, rserver=rserver), sshs=sql.select_ssh()) - print(template) - print('success: Backup job has created') - funct.logging('backup ', ' has created a new backup job for server '+serv , haproxywi=1, login=1) - else: - print('error: Cannot add job into DB') - elif deljob: - sql.delete_backups(deljob) - print('Ok') - funct.logging('backup ', ' has deleted a backup job for server '+serv, haproxywi=1, login=1) - elif update: - sql.update_backup(serv, rserver, rpath, type, time, cred, description, update) - print('Ok') - funct.logging('backup ', ' has updated a backup job for server '+serv, haproxywi=1, login=1) + if error: + funct.logging('backup', error, haproxywi=1) + print('error: ' + error) + else: + for l in output: + if "msg" in l or "FAILED" in l: + try: + l = l.split(':')[1] + l = l.split('"')[1] + print('error: ' + l + "
") + break + except: + print('error: ' + output) + break + else: + if not deljob and not update: + if sql.insert_backup_job(serv, rserver, rpath, 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(backups=sql.select_backups(server=serv, rserver=rserver), + sshs=sql.select_ssh()) + print(template) + print('success: Backup job has created') + funct.logging('backup ', ' has created a new backup job for server ' + serv, haproxywi=1, login=1) + else: + print('error: Cannot add job into DB') + elif deljob: + sql.delete_backups(deljob) + print('Ok') + funct.logging('backup ', ' has deleted a backup job for server ' + serv, haproxywi=1, login=1) + elif update: + sql.update_backup(serv, rserver, rpath, type, time, cred, description, update) + print('Ok') + funct.logging('backup ', ' has updated a backup job for server ' + serv, haproxywi=1, login=1) if form.getvalue('install_nginx'): - funct.install_nginx(form.getvalue('install_nginx')) - + funct.install_nginx(form.getvalue('install_nginx')) if form.getvalue('haproxyaddserv'): - funct.install_haproxy(form.getvalue('haproxyaddserv'), syn_flood=form.getvalue('syn_flood'), hapver=form.getvalue('hapver')) - + funct.install_haproxy(form.getvalue('haproxyaddserv'), syn_flood=form.getvalue('syn_flood'), + hapver=form.getvalue('hapver')) if form.getvalue('installwaf'): - funct.waf_install(form.getvalue('installwaf')) - + funct.waf_install(form.getvalue('installwaf')) if form.getvalue('update_haproxy_wi'): - service = form.getvalue('service') - services = ['checker_haproxy', 'haproxy-wi', 'keep_alive', 'smon', 'metrics_haproxy'] - if service not in services: - print('error: '+service+' is not part of HAProxy-WI') - sys.exit() - funct.update_haproxy_wi(service) - + service = form.getvalue('service') + services = ['checker_haproxy', 'haproxy-wi', 'keep_alive', 'smon', 'metrics_haproxy'] + if service not in services: + print('error: ' + service + ' is not part of HAProxy-WI') + sys.exit() + funct.update_haproxy_wi(service) if form.getvalue('metrics_waf'): - sql.update_waf_metrics_enable(form.getvalue('metrics_waf'), form.getvalue('enable')) - + sql.update_waf_metrics_enable(form.getvalue('metrics_waf'), form.getvalue('enable')) if form.getvalue('table_metrics'): - import http.cookies - from jinja2 import Environment, FileSystemLoader - env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True) - template = env.get_template('table_metrics.html') + import http.cookies + from jinja2 import Environment, FileSystemLoader - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - table_stat = sql.select_table_metrics(user_id.value) + env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True) + template = env.get_template('table_metrics.html') - template = template.render(table_stat=sql.select_table_metrics(user_id.value)) - print(template) + cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) + user_id = cookie.get('uuid') + table_stat = sql.select_table_metrics(user_id.value) + template = template.render(table_stat=sql.select_table_metrics(user_id.value)) + print(template) if form.getvalue('metrics_hapwi_ram'): - ip = form.getvalue('ip') - metrics = {} - metrics['chartData'] = {} - rams = '' + ip = form.getvalue('ip') + metrics = {'chartData': {}} + rams = '' - if ip == '1': - cmd = "free -m |grep Mem |awk '{print $3,$4,$5,$6,$7}'" - metric, error = funct.subprocess_execute(cmd) - else: - commands = ["free -m |grep Mem |awk '{print $3,$4,$5,$6,$7}'"] - metric, error = funct.subprocess_execute(commands[0]) + if ip == '1': + cmd = "free -m |grep Mem |awk '{print $3,$4,$5,$6,$7}'" + metric, error = funct.subprocess_execute(cmd) + else: + commands = ["free -m |grep Mem |awk '{print $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 + metrics['chartData']['rams'] = rams - import json - print(json.dumps(metrics)) + import json + print(json.dumps(metrics)) if form.getvalue('metrics_hapwi_cpu'): - ip = form.getvalue('ip') - metrics = {} - metrics['chartData'] = {} - cpus = '' + ip = form.getvalue('ip') + metrics = {'chartData': {}} + 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) - 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]) + 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) + 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 + metrics['chartData']['cpus'] = cpus - import json - print(json.dumps(metrics)) + import json + print(json.dumps(metrics)) if form.getvalue('new_metrics'): - serv = form.getvalue('server') - metric = sql.select_metrics(serv) - metrics = {} - metrics['chartData'] = {} - metrics['chartData']['labels'] = {} - labels = '' - curr_con = '' - curr_ssl_con = '' - sess_rate = '' + serv = form.getvalue('server') + metric = sql.select_metrics(serv) + metrics = {'chartData': {}} + metrics['chartData']['labels'] = {} + labels = '' + curr_con = '' + curr_ssl_con = '' + sess_rate = '' - for i in metric: - label = str(i[5]) - label = label.split(' ')[1] - labels += label+',' - curr_con += str(i[1])+',' - curr_ssl_con += str(i[2])+',' - sess_rate += str(i[3])+',' - server = str(i[0]) + for i in metric: + label = str(i[5]) + label = label.split(' ')[1] + labels += label + ',' + curr_con += str(i[1]) + ',' + curr_ssl_con += str(i[2]) + ',' + sess_rate += str(i[3]) + ',' + server = str(i[0]) - metrics['chartData']['labels'] = labels - metrics['chartData']['curr_con'] = curr_con - metrics['chartData']['curr_ssl_con'] = curr_ssl_con - metrics['chartData']['sess_rate'] = sess_rate - metrics['chartData']['server'] = server + metrics['chartData']['labels'] = labels + metrics['chartData']['curr_con'] = curr_con + metrics['chartData']['curr_ssl_con'] = curr_ssl_con + metrics['chartData']['sess_rate'] = sess_rate + metrics['chartData']['server'] = server - import json - print(json.dumps(metrics)) + import json + print(json.dumps(metrics)) if form.getvalue('new_waf_metrics'): - serv = form.getvalue('server') - metric = sql.select_waf_metrics(serv) - metrics = {} - metrics['chartData'] = {} - metrics['chartData']['labels'] = {} - labels = '' - curr_con = '' + serv = form.getvalue('server') + metric = sql.select_waf_metrics(serv) + metrics = {'chartData': {}} + metrics['chartData']['labels'] = {} + labels = '' + curr_con = '' - for i in metric: - label = str(i[2]) - label = label.split(' ')[1] - labels += label+',' - curr_con += str(i[1])+',' + for i in metric: + label = str(i[2]) + label = label.split(' ')[1] + labels += label + ',' + curr_con += str(i[1]) + ',' - metrics['chartData']['labels'] = labels - metrics['chartData']['curr_con'] = curr_con - metrics['chartData']['server'] = serv + metrics['chartData']['labels'] = labels + metrics['chartData']['curr_con'] = curr_con + metrics['chartData']['server'] = serv - import json - print(json.dumps(metrics)) + import json + print(json.dumps(metrics)) if form.getvalue('get_hap_v'): - output = funct.check_haproxy_version(serv) - print(output) - + output = funct.check_haproxy_version(serv) + print(output) if form.getvalue('get_nginx_v'): - cmd = ['/usr/sbin/nginx -v'] - print(funct.ssh_command(serv, cmd)) - + cmd = ['/usr/sbin/nginx -v'] + print(funct.ssh_command(serv, cmd)) if form.getvalue('get_exporter_v'): - print(funct.check_service(serv, form.getvalue('get_exporter_v'))) - + print(funct.check_service(serv, form.getvalue('get_exporter_v'))) if form.getvalue('bwlists'): - list = os.path.dirname(os.getcwd())+"/"+sql.get_setting('lists_path')+"/"+form.getvalue('group')+"/"+form.getvalue('color')+"/"+form.getvalue('bwlists') - try: - file = open(list, "r") - file_read = file.read() - file.close - print(file_read) - except IOError: - print('error: Cat\'n read '+form.getvalue('color')+' list , ') - + list = os.path.dirname(os.getcwd()) + "/" + sql.get_setting('lists_path') + "/" + form.getvalue( + 'group') + "/" + form.getvalue('color') + "/" + form.getvalue('bwlists') + try: + file = open(list, "r") + file_read = file.read() + file.close + print(file_read) + except IOError: + print('error: Cat\'n read ' + form.getvalue('color') + ' list , ') if form.getvalue('bwlists_create'): - color = form.getvalue('color') - list_name = form.getvalue('bwlists_create').split('.')[0] - list_name += '.lst' - list = os.path.dirname(os.getcwd())+"/"+sql.get_setting('lists_path')+"/"+form.getvalue('group')+"/"+color+"/"+list_name - try: - open(list, 'a').close() - print(color) - try: - funct.logging(server[1], 'has created '+color+' list '+list_name, haproxywi=1, login=1) - except: - pass - except IOError as e: - print('error: Cat\'n create new '+color+' list. %s , ' % e) - + color = form.getvalue('color') + list_name = form.getvalue('bwlists_create').split('.')[0] + list_name += '.lst' + list = os.path.dirname(os.getcwd()) + "/" + sql.get_setting('lists_path') + "/" + form.getvalue( + 'group') + "/" + color + "/" + list_name + try: + open(list, 'a').close() + print(color) + try: + funct.logging(server[1], 'has created ' + color + ' list ' + list_name, haproxywi=1, login=1) + except: + pass + except IOError as e: + print('error: Cat\'n create new ' + color + ' list. %s , ' % e) if form.getvalue('bwlists_save'): - color = form.getvalue('color') - bwlists_save = form.getvalue('bwlists_save') - list = os.path.dirname(os.getcwd())+"/"+sql.get_setting('lists_path')+"/"+form.getvalue('group')+"/"+color+"/"+bwlists_save - try: - with open(list, "w") as file: - file.write(form.getvalue('bwlists_content')) - except IOError as e: - print('error: Cat\'n save '+color+' list. %s , ' % e) + color = form.getvalue('color') + bwlists_save = form.getvalue('bwlists_save') + list = os.path.dirname(os.getcwd()) + "/" + sql.get_setting('lists_path') + "/" + form.getvalue( + 'group') + "/" + color + "/" + bwlists_save + try: + with open(list, "w") as file: + file.write(form.getvalue('bwlists_content')) + except IOError as e: + print('error: Cat\'n save ' + color + ' list. %s , ' % e) - path = sql.get_setting('haproxy_dir')+"/"+color - servers = [] + path = sql.get_setting('haproxy_dir') + "/" + color + servers = [] - if serv != 'all': - servers.append(serv) + if serv != 'all': + servers.append(serv) - MASTERS = sql.is_master(serv) - for master in MASTERS: - if master[0] != None: - servers.append(master[0]) - else: - server = sql.get_dick_permit() - for s in server: - servers.append(s[2]) + MASTERS = sql.is_master(serv) + for master in MASTERS: + if master[0] != None: + servers.append(master[0]) + else: + server = sql.get_dick_permit() + for s in server: + servers.append(s[2]) - for serv in servers: - funct.ssh_command(serv, ["sudo mkdir "+path]) - funct.ssh_command(serv, ["sudo chown $(whoami) "+path]) - error = funct.upload(serv, path+"/"+bwlists_save, list, dir='fullpath') - if error: - print('error: Upload fail: %s , ' % error) - else: - print('success: Edited '+color+' list was uploaded to '+serv+' , ') - try: - funct.logging(serv, 'has edited '+color+' list '+bwlists_save, haproxywi=1, login=1) - except: - pass + for serv in servers: + funct.ssh_command(serv, ["sudo mkdir " + path]) + funct.ssh_command(serv, ["sudo chown $(whoami) " + path]) + error = funct.upload(serv, path + "/" + bwlists_save, list, dir='fullpath') + if error: + print('error: Upload fail: %s , ' % error) + else: + print('success: Edited ' + color + ' list was uploaded to ' + serv + ' , ') + try: + funct.logging(serv, 'has edited ' + color + ' list ' + bwlists_save, haproxywi=1, login=1) + except: + pass - haproxy_enterprise = sql.get_setting('haproxy_enterprise') - if haproxy_enterprise == '1': - haproxy_service_name = "hapee-2.0-lb" - else: - haproxy_service_name = "haproxy" - - if form.getvalue('bwlists_restart') == 'restart': - funct.ssh_command(serv, ["sudo systemctl restart "+haproxy_service_name]) - elif form.getvalue('bwlists_restart') == 'reload': - funct.ssh_command(serv, ["sudo systemctl reload "+haproxy_service_name]) + haproxy_enterprise = sql.get_setting('haproxy_enterprise') + if haproxy_enterprise == '1': + haproxy_service_name = "hapee-2.0-lb" + else: + haproxy_service_name = "haproxy" + if form.getvalue('bwlists_restart') == 'restart': + funct.ssh_command(serv, ["sudo systemctl restart " + haproxy_service_name]) + elif form.getvalue('bwlists_restart') == 'reload': + funct.ssh_command(serv, ["sudo systemctl reload " + haproxy_service_name]) if form.getvalue('get_lists'): - list = os.path.dirname(os.getcwd())+"/"+sql.get_setting('lists_path')+"/"+form.getvalue('group')+"/"+form.getvalue('color') - lists = funct.get_files(dir=list, format="lst") - for list in lists: - print(list) - + list = os.path.dirname(os.getcwd()) + "/" + sql.get_setting('lists_path') + "/" + form.getvalue( + 'group') + "/" + form.getvalue('color') + lists = funct.get_files(dir=list, format="lst") + for list in lists: + print(list) if form.getvalue('get_ldap_email'): - username = form.getvalue('get_ldap_email') - import ldap + username = form.getvalue('get_ldap_email') + import ldap - server = sql.get_setting('ldap_server') - port = sql.get_setting('ldap_port') - user = sql.get_setting('ldap_user') - password = sql.get_setting('ldap_password') - ldap_base = sql.get_setting('ldap_base') - domain = sql.get_setting('ldap_domain') - ldap_search_field = sql.get_setting('ldap_search_field') - ldap_class_search = sql.get_setting('ldap_class_search') - ldap_user_attribute = sql.get_setting('ldap_user_attribute') + server = sql.get_setting('ldap_server') + port = sql.get_setting('ldap_port') + user = sql.get_setting('ldap_user') + password = sql.get_setting('ldap_password') + ldap_base = sql.get_setting('ldap_base') + domain = sql.get_setting('ldap_domain') + ldap_search_field = sql.get_setting('ldap_search_field') + ldap_class_search = sql.get_setting('ldap_class_search') + ldap_user_attribute = sql.get_setting('ldap_user_attribute') - l = ldap.initialize(server+':'+port) - try: - l.protocol_version = ldap.VERSION3 - l.set_option(ldap.OPT_REFERRALS, 0) + l = ldap.initialize(server + ':' + port) + try: + l.protocol_version = ldap.VERSION3 + l.set_option(ldap.OPT_REFERRALS, 0) - bind = l.simple_bind_s(user, password) + bind = l.simple_bind_s(user, password) - criteria = "(&(objectClass="+ldap_class_search+")("+ldap_user_attribute+"="+username+"))" - attributes = [ldap_search_field] - result = l.search_s(ldap_base, ldap.SCOPE_SUBTREE, criteria, attributes) - - results = [entry for dn, entry in result if isinstance(entry, dict)] - try: - print('["'+results[0][ldap_search_field][0].decode("utf-8")+'","'+domain+'"]') - except: - print('error: user not found') - finally: - l.unbind() + criteria = "(&(objectClass=" + ldap_class_search + ")(" + ldap_user_attribute + "=" + username + "))" + attributes = [ldap_search_field] + result = l.search_s(ldap_base, ldap.SCOPE_SUBTREE, criteria, attributes) + results = [entry for dn, entry in result if isinstance(entry, dict)] + try: + print('["' + results[0][ldap_search_field][0].decode("utf-8") + '","' + domain + '"]') + except: + print('error: user not found') + finally: + l.unbind() if form.getvalue('change_waf_mode'): - waf_mode = form.getvalue('change_waf_mode') - server_hostname = form.getvalue('server_hostname') - haproxy_dir = sql.get_setting('haproxy_dir') - serv = sql.select_server_by_name(server_hostname) - commands = [ "sudo sed -i 's/^SecRuleEngine.*/SecRuleEngine %s/' %s/waf/modsecurity.conf " % (waf_mode, haproxy_dir) ] - funct.ssh_command(serv, commands) - funct.logging(serv, 'Was changed WAF mod to '+waf_mode, haproxywi=1, login=1) - + waf_mode = form.getvalue('change_waf_mode') + server_hostname = form.getvalue('server_hostname') + haproxy_dir = sql.get_setting('haproxy_dir') + serv = sql.select_server_by_name(server_hostname) + commands = ["sudo sed -i 's/^SecRuleEngine.*/SecRuleEngine %s/' %s/waf/modsecurity.conf " % (waf_mode, haproxy_dir)] + funct.ssh_command(serv, commands) + funct.logging(serv, 'Was changed WAF mod to ' + waf_mode, haproxywi=1, login=1) error_mess = 'error: All fields must be completed' - if form.getvalue('newuser') is not None: - email = form.getvalue('newemail') - password = form.getvalue('newpassword') - role = form.getvalue('newrole') - new_user = form.getvalue('newusername') - page = form.getvalue('page') - activeuser = form.getvalue('activeuser') - group = form.getvalue('newgroupuser') - role_id = sql.get_role_id_by_name(role) + email = form.getvalue('newemail') + password = form.getvalue('newpassword') + role = form.getvalue('newrole') + new_user = form.getvalue('newusername') + page = form.getvalue('page') + activeuser = form.getvalue('activeuser') + group = form.getvalue('newgroupuser') + role_id = sql.get_role_id_by_name(role) - if funct.check_user_group(): - if funct.is_admin(level=role_id): - if sql.add_user(new_user, email, password, role, activeuser): - from jinja2 import Environment, FileSystemLoader - env = Environment(loader=FileSystemLoader('templates/'), autoescape=True) - template = env.get_template('ajax/new_user.html') + if funct.check_user_group(): + if funct.is_admin(level=role_id): + if sql.add_user(new_user, email, password, role, activeuser): + from jinja2 import Environment, FileSystemLoader - template = template.render(users=sql.select_users(user=new_user), - groups=sql.select_groups(), - page=page, - roles=sql.select_roles(), - adding=1) - print(template) - funct.logging('a new user '+new_user, ' has created ', haproxywi=1, login=1) - else: - funct.logging(new_user, ' tried to privilege escalation', haproxywi=1, login=1) + env = Environment(loader=FileSystemLoader('templates/'), autoescape=True) + template = env.get_template('ajax/new_user.html') + template = template.render(users=sql.select_users(user=new_user), + groups=sql.select_groups(), + page=page, + roles=sql.select_roles(), + adding=1) + print(template) + funct.logging('a new user ' + new_user, ' has created ', haproxywi=1, login=1) + else: + funct.logging(new_user, ' tried to privilege escalation', haproxywi=1, login=1) if form.getvalue('userdel') is not None: - userdel = form.getvalue('userdel') - user = sql.select_users(id=userdel) - for u in user: - username = u[1] - if sql.delete_user(userdel): - sql.delete_user_groups(userdel) - funct.logging(username, ' has deleted user ', haproxywi=1, login=1) - print("Ok") - + userdel = form.getvalue('userdel') + user = sql.select_users(id=userdel) + for u in user: + username = u[1] + if sql.delete_user(userdel): + sql.delete_user_groups(userdel) + funct.logging(username, ' has deleted user ', haproxywi=1, login=1) + print("Ok") if form.getvalue('updateuser') is not None: - email = form.getvalue('email') - role = form.getvalue('role') - new_user = form.getvalue('updateuser') - id = form.getvalue('id') - activeuser = form.getvalue('activeuser') - group = form.getvalue('usergroup') - role_id = sql.get_role_id_by_name(role) - - if funct.check_user_group(): - if funct.is_admin(level=role_id): - sql.update_user(new_user, email, role, id, activeuser) - funct.logging(new_user, ' has updated user ', haproxywi=1, login=1) - else: - funct.logging(new_user, ' tried to privilege escalation', haproxywi=1, login=1) + email = form.getvalue('email') + role = form.getvalue('role') + new_user = form.getvalue('updateuser') + id = form.getvalue('id') + activeuser = form.getvalue('activeuser') + group = form.getvalue('usergroup') + role_id = sql.get_role_id_by_name(role) + if funct.check_user_group(): + if funct.is_admin(level=role_id): + sql.update_user(new_user, email, role, id, activeuser) + funct.logging(new_user, ' has updated user ', haproxywi=1, login=1) + else: + funct.logging(new_user, ' tried to privilege escalation', haproxywi=1, login=1) if form.getvalue('updatepassowrd') is not None: - password = form.getvalue('updatepassowrd') - id = form.getvalue('id') - user = sql.select_users(id=id) - for u in user: - username = u[1] - sql.update_user_password(password, id) - funct.logging('user '+username, ' has changed password ', haproxywi=1, login=1) - print("Ok") - + password = form.getvalue('updatepassowrd') + id = form.getvalue('id') + user = sql.select_users(id=id) + for u in user: + username = u[1] + sql.update_user_password(password, id) + funct.logging('user ' + username, ' has changed password ', haproxywi=1, login=1) + print("Ok") if form.getvalue('newserver') is not None: - hostname = form.getvalue('servername') - ip = form.getvalue('newip') - group = form.getvalue('newservergroup') - typeip = form.getvalue('typeip') - haproxy = form.getvalue('haproxy') - nginx = form.getvalue('nginx') - enable = form.getvalue('enable') - master = form.getvalue('slave') - cred = form.getvalue('cred') - page = form.getvalue('page') - page = page.split("#")[0] - port = form.getvalue('newport') - desc = form.getvalue('desc') + hostname = form.getvalue('servername') + ip = form.getvalue('newip') + group = form.getvalue('newservergroup') + typeip = form.getvalue('typeip') + haproxy = form.getvalue('haproxy') + nginx = form.getvalue('nginx') + enable = form.getvalue('enable') + master = form.getvalue('slave') + cred = form.getvalue('cred') + page = form.getvalue('page') + page = page.split("#")[0] + port = form.getvalue('newport') + desc = form.getvalue('desc') - if sql.add_server(hostname, ip, group, typeip, enable, master, cred, port, desc, haproxy, nginx): - from jinja2 import Environment, FileSystemLoader - env = Environment(loader=FileSystemLoader('templates/'), autoescape=True) - template = env.get_template('ajax/new_server.html') + if sql.add_server(hostname, ip, group, typeip, enable, master, cred, port, desc, haproxy, nginx): + from jinja2 import Environment, FileSystemLoader - template = template.render(groups = sql.select_groups(), - servers = sql.select_servers(server=ip), - roles = sql.select_roles(), - masters = sql.select_servers(get_master_servers=1), - sshs = sql.select_ssh(group=group), - page = page, - adding = 1) - print(template) - funct.logging('a new server '+hostname, ' has created ', haproxywi=1, login=1) + env = Environment(loader=FileSystemLoader('templates/'), autoescape=True) + template = env.get_template('ajax/new_server.html') + template = template.render(groups=sql.select_groups(), + servers=sql.select_servers(server=ip), + roles=sql.select_roles(), + masters=sql.select_servers(get_master_servers=1), + sshs=sql.select_ssh(group=group), + page=page, + adding=1) + print(template) + funct.logging('a new server ' + hostname, ' has created ', haproxywi=1, login=1) if form.getvalue('updatehapwiserver') is not None: - id = form.getvalue('updatehapwiserver') - active = form.getvalue('active') - name = form.getvalue('name') - alert = form.getvalue('alert_en') - metrics = form.getvalue('metrics') - sql.update_hapwi_server(id, alert, metrics, active) - funct.logging('the server '+name, ' has updated ', haproxywi=1, login=1) - + id = form.getvalue('updatehapwiserver') + active = form.getvalue('active') + name = form.getvalue('name') + alert = form.getvalue('alert_en') + metrics = form.getvalue('metrics') + sql.update_hapwi_server(id, alert, metrics, active) + funct.logging('the server ' + name, ' has updated ', haproxywi=1, login=1) if form.getvalue('updateserver') is not None: - name = form.getvalue('updateserver') - group = form.getvalue('servergroup') - typeip = form.getvalue('typeip') - haproxy = form.getvalue('haproxy') - nginx = form.getvalue('nginx') - enable = form.getvalue('enable') - master = form.getvalue('slave') - id = form.getvalue('id') - cred = form.getvalue('cred') - port = form.getvalue('port') - desc = form.getvalue('desc') - - if name is None or port is None: - print(error_mess) - else: - sql.update_server(name, group, typeip, enable, master, id, cred, port, desc, haproxy, nginx) - funct.logging('the server '+name, ' has updated ', haproxywi=1, login=1) + name = form.getvalue('updateserver') + group = form.getvalue('servergroup') + typeip = form.getvalue('typeip') + haproxy = form.getvalue('haproxy') + nginx = form.getvalue('nginx') + enable = form.getvalue('enable') + master = form.getvalue('slave') + id = form.getvalue('id') + cred = form.getvalue('cred') + port = form.getvalue('port') + desc = form.getvalue('desc') + if name is None or port is None: + print(error_mess) + else: + sql.update_server(name, group, typeip, enable, master, id, cred, port, desc, haproxy, nginx) + funct.logging('the server ' + name, ' has updated ', haproxywi=1, login=1) if form.getvalue('serverdel') is not None: - serverdel = form.getvalue('serverdel') - server = sql.select_servers(id=serverdel) - for s in server: - hostname = s[1] - ip = s[2] - if sql.check_exists_backup(ip): - print('warning: Delete the backup first ') - sys.exit() - if sql.delete_server(serverdel): - sql.delete_waf_server(serverdel) - print("Ok") - funct.logging(hostname, ' has deleted server with ', haproxywi=1, login=1) - + serverdel = form.getvalue('serverdel') + server = sql.select_servers(id=serverdel) + for s in server: + hostname = s[1] + ip = s[2] + if sql.check_exists_backup(ip): + print('warning: Delete the backup first ') + sys.exit() + if sql.delete_server(serverdel): + sql.delete_waf_server(serverdel) + print("Ok") + funct.logging(hostname, ' has deleted server with ', haproxywi=1, login=1) if form.getvalue('newgroup') is not None: - newgroup = form.getvalue('groupname') - desc = form.getvalue('newdesc') - if newgroup is 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') + newgroup = form.getvalue('groupname') + desc = form.getvalue('newdesc') + if newgroup is None: + print(error_mess) + else: + if sql.add_group(newgroup, desc): + from jinja2 import Environment, FileSystemLoader - output_from_parsed_template = template.render(groups = sql.select_groups(group=newgroup)) - print(output_from_parsed_template) - funct.logging('a new group '+newgroup, ' created ', haproxywi=1, login=1) + env = Environment(loader=FileSystemLoader('templates/ajax/'), autoescape=True) + template = env.get_template('/new_group.html') + output_from_parsed_template = template.render(groups=sql.select_groups(group=newgroup)) + print(output_from_parsed_template) + funct.logging('a new group ' + newgroup, ' created ', haproxywi=1, login=1) if form.getvalue('groupdel') is not None: - groupdel = form.getvalue('groupdel') - group = sql.select_groups(id=groupdel) - for g in group: - groupname = g[1] - if sql.delete_group(groupdel): - print("Ok") - funct.logging(groupname, ' has deleted group ', haproxywi=1, login=1) - + groupdel = form.getvalue('groupdel') + group = sql.select_groups(id=groupdel) + for g in group: + groupname = g[1] + if sql.delete_group(groupdel): + print("Ok") + funct.logging(groupname, ' has deleted group ', haproxywi=1, login=1) if form.getvalue('updategroup') is not None: - name = form.getvalue('updategroup') - descript = form.getvalue('descript') - id = form.getvalue('id') - if name is None: - print(error_mess) - else: - group = sql.select_groups(id=id) - for g in group: - groupname = g[1] - sql.update_group(name, descript, id) - funct.logging('the group '+groupname, ' has update ', haproxywi=1, login=1) - + name = form.getvalue('updategroup') + descript = form.getvalue('descript') + id = form.getvalue('id') + if name is None: + print(error_mess) + else: + group = sql.select_groups(id=id) + for g in group: + groupname = g[1] + sql.update_group(name, descript, id) + funct.logging('the group ' + groupname, ' has update ', haproxywi=1, login=1) if form.getvalue('new_ssh'): - user_group = funct.get_user_group() - name = form.getvalue('new_ssh') - name = name + '_' + user_group - enable = form.getvalue('ssh_enable') - group = form.getvalue('new_group') - username = form.getvalue('ssh_user') - password = form.getvalue('ssh_pass') - page = form.getvalue('page') - page = page.split("#")[0] + user_group = funct.get_user_group() + name = form.getvalue('new_ssh') + name = name + '_' + user_group + enable = form.getvalue('ssh_enable') + group = form.getvalue('new_group') + username = form.getvalue('ssh_user') + password = form.getvalue('ssh_pass') + page = form.getvalue('page') + page = page.split("#")[0] - if username is None or name is None: - 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),page=page) - print(output_from_parsed_template) - funct.logging(name, ' has created a new SSH credentials ', haproxywi=1, login=1) + if username is None or name is None: + 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), + page=page) + print(output_from_parsed_template) + funct.logging(name, ' has created a new SSH credentials ', haproxywi=1, login=1) if form.getvalue('sshdel') is not None: - fullpath = funct.get_config_var('main', 'fullpath') - sshdel = form.getvalue('sshdel') + fullpath = funct.get_config_var('main', 'fullpath') + sshdel = form.getvalue('sshdel') - for sshs in sql.select_ssh(id=sshdel): - ssh_enable = sshs[2] - name = sshs[1] - ssh_key_name = fullpath+'/keys/%s.pem' % sshs[1] - - if ssh_enable == 1: - cmd = 'rm -f %s' % ssh_key_name - try: - funct.subprocess_execute(cmd) - except: - pass - if sql.delete_ssh(sshdel): - print("Ok") - funct.logging(name, ' has deleted the SSH credentials ', haproxywi=1, login=1) + for sshs in sql.select_ssh(id=sshdel): + ssh_enable = sshs[2] + name = sshs[1] + ssh_key_name = fullpath + '/keys/%s.pem' % sshs[1] + if ssh_enable == 1: + cmd = 'rm -f %s' % ssh_key_name + try: + funct.subprocess_execute(cmd) + except: + pass + if sql.delete_ssh(sshdel): + print("Ok") + funct.logging(name, ' has deleted the SSH credentials ', haproxywi=1, login=1) if form.getvalue('updatessh'): - id = form.getvalue('id') - name = form.getvalue('name') - enable = form.getvalue('ssh_enable') - group = form.getvalue('group') - username = form.getvalue('ssh_user') - password = form.getvalue('ssh_pass') + id = form.getvalue('id') + name = form.getvalue('name') + enable = form.getvalue('ssh_enable') + group = form.getvalue('group') + username = form.getvalue('ssh_user') + password = form.getvalue('ssh_pass') - if username is None: - print(error_mess) - else: + if username is None: + print(error_mess) + else: - fullpath = funct.get_config_var('main', 'fullpath') + fullpath = funct.get_config_var('main', 'fullpath') - for sshs in sql.select_ssh(id=id): - ssh_enable = sshs[2] - ssh_key_name = fullpath+'/keys/%s.pem' % sshs[1] - new_ssh_key_name = fullpath+'/keys/%s.pem' % name - - if ssh_enable == 1: - cmd = 'mv %s %s' % (ssh_key_name, new_ssh_key_name) - cmd1 = 'chmod 600 %s' % new_ssh_key_name - try: - funct.subprocess_execute(cmd) - funct.subprocess_execute(cmd1) - except: - pass - sql.update_ssh(id, name, enable, group, username, password) - funct.logging('the SSH '+name, ' has updated credentials ', haproxywi=1, login=1) + for sshs in sql.select_ssh(id=id): + ssh_enable = sshs[2] + ssh_key_name = fullpath + '/keys/%s.pem' % sshs[1] + new_ssh_key_name = fullpath + '/keys/%s.pem' % name + if ssh_enable == 1: + cmd = 'mv %s %s' % (ssh_key_name, new_ssh_key_name) + cmd1 = 'chmod 600 %s' % new_ssh_key_name + try: + funct.subprocess_execute(cmd) + funct.subprocess_execute(cmd1) + except: + pass + sql.update_ssh(id, name, enable, group, username, password) + funct.logging('the SSH ' + name, ' has updated credentials ', haproxywi=1, login=1) if form.getvalue('ssh_cert'): - user_group = funct.get_user_group() - name = form.getvalue('name') - name = name + '_' + user_group + user_group = funct.get_user_group() + name = form.getvalue('name') + name = name + '_' + user_group - if not os.path.exists(os.getcwd()+'/keys/'): - os.makedirs(os.getcwd()+'/keys/') + if not os.path.exists(os.getcwd() + '/keys/'): + os.makedirs(os.getcwd() + '/keys/') - ssh_keys = os.path.dirname(os.getcwd())+'/keys/'+name+'.pem' + ssh_keys = os.path.dirname(os.getcwd()) + '/keys/' + name + '.pem' - try: - with open(ssh_keys, "w") as conf: - conf.write(form.getvalue('ssh_cert')) - except IOError: - print('error: Can\'t save ssh keys file. Check ssh keys path in config') - else: - print('success: Ssh key was save into: %s ' % ssh_keys) + try: + with open(ssh_keys, "w") as conf: + conf.write(form.getvalue('ssh_cert')) + except IOError: + print('error: Can\'t save ssh keys file. Check ssh keys path in config') + else: + print('success: Ssh key was save into: %s ' % ssh_keys) - try: - cmd = 'chmod 600 %s' % ssh_keys - funct.subprocess_execute(cmd) - except IOError as e: - funct.logging('localhost', e.args[0], haproxywi=1) - - funct.logging("localhost", " upload a new SSH cert %s" % ssh_keys, haproxywi=1, login=1) + try: + cmd = 'chmod 600 %s' % ssh_keys + funct.subprocess_execute(cmd) + except IOError as e: + funct.logging('localhost', e.args[0], haproxywi=1) + funct.logging("localhost", " upload a new SSH cert %s" % ssh_keys, haproxywi=1, login=1) if form.getvalue('newtelegram'): - token = form.getvalue('newtelegram') - channel = form.getvalue('chanel') - group = form.getvalue('telegramgroup') - page = form.getvalue('page') - page = page.split("#")[0] + token = form.getvalue('newtelegram') + channel = form.getvalue('chanel') + group = form.getvalue('telegramgroup') + page = form.getvalue('page') + page = page.split("#")[0] - if token is None or channel is None or group is None: - 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(), telegrams = sql.select_telegram(token=token),page=page) - print(output_from_parsed_template) - funct.logging(channel, ' has created a new Telegram channel ', haproxywi=1, login=1) + if token is None or channel is None or group is None: + 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(), + telegrams=sql.select_telegram(token=token), page=page) + print(output_from_parsed_template) + funct.logging(channel, ' has created a new Telegram channel ', haproxywi=1, login=1) if form.getvalue('telegramdel') is not None: - telegramdel = form.getvalue('telegramdel') - telegram = sql.select_telegram(id=telegramdel) - for t in telegram: - telegram_name = t[1] - if sql.delete_telegram(telegramdel): - print("Ok") - funct.logging(telegram_name, ' has deleted the Telegram channel ', haproxywi=1, login=1) - + telegramdel = form.getvalue('telegramdel') + telegram = sql.select_telegram(id=telegramdel) + for t in telegram: + telegram_name = t[1] + if sql.delete_telegram(telegramdel): + print("Ok") + funct.logging(telegram_name, ' has deleted the Telegram channel ', haproxywi=1, login=1) if form.getvalue('updatetoken') is not None: - token = form.getvalue('updatetoken') - channel = form.getvalue('updategchanel') - group = form.getvalue('updatetelegramgroup') - id = form.getvalue('id') - if token is None or channel is None or group is None: - print(error_mess) - else: - sql.update_telegram(token, channel, group, id) - funct.logging('group '+group, ' telegram token has updated channel: '+channel, haproxywi=1, login=1) - + token = form.getvalue('updatetoken') + channel = form.getvalue('updategchanel') + group = form.getvalue('updatetelegramgroup') + id = form.getvalue('id') + if token is None or channel is None or group is None: + print(error_mess) + else: + sql.update_telegram(token, channel, group, id) + funct.logging('group ' + group, ' telegram token has updated channel: ' + channel, haproxywi=1, login=1) if form.getvalue('updatesettings') is not None: - settings = form.getvalue('updatesettings') - val = form.getvalue('val') - if sql.update_setting(settings, val): - funct.logging('value '+val, ' changed settings '+settings, haproxywi=1, login=1) - print("Ok") - + settings = form.getvalue('updatesettings') + val = form.getvalue('val') + if sql.update_setting(settings, val): + funct.logging('value ' + val, ' changed settings ' + settings, haproxywi=1, login=1) + print("Ok") if form.getvalue('getusergroups'): - id = form.getvalue('getusergroups') - groups = [] - u_g = sql.select_user_groups(id=id) - for g in u_g: - groups.append(g[0]) - from jinja2 import Environment, FileSystemLoader - env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True) - template = env.get_template('/show_user_groups.html') - template = template.render(groups=sql.select_groups(), user_groups=groups,id=id) - print(template) + id = form.getvalue('getusergroups') + groups = [] + u_g = sql.select_user_groups(id=id) + for g in u_g: + groups.append(g[0]) + from jinja2 import Environment, FileSystemLoader + env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True) + template = env.get_template('/show_user_groups.html') + template = template.render(groups=sql.select_groups(), user_groups=groups, id=id) + print(template) if form.getvalue('changeUserGroupId') is not None: - id = form.getvalue('changeUserGroupId') - groups = form.getvalue('changeUserGroups') - user = form.getvalue('changeUserGroupsUser') - if sql.delete_user_groups(id): - for group in groups: - if group[0] == ',': - continue - sql.update_user_groups(groups=group[0], id=id) - - funct.logging('localhost', ' has upgraded groups for user: '+user, haproxywi=1, login=1) + id = form.getvalue('changeUserGroupId') + groups = form.getvalue('changeUserGroups') + user = form.getvalue('changeUserGroupsUser') + if sql.delete_user_groups(id): + for group in groups: + if group[0] == ',': + continue + sql.update_user_groups(groups=group[0], id=id) + funct.logging('localhost', ' has upgraded groups for user: ' + user, haproxywi=1, login=1) 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') - id = sql.get_user_id_by_uuid(user_id.value) - groups = sql.select_user_groups_with_names(id=id) + import http.cookies - 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=id) - print(template) + cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) + user_id = cookie.get('uuid') + group = cookie.get('group') + id = sql.get_user_id_by_uuid(user_id.value) + groups = sql.select_user_groups_with_names(id=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=id) + print(template) if form.getvalue('newsmon') is not None: - user_group = funct.get_user_group(id=1) - server = form.getvalue('newsmon') - port = form.getvalue('newsmonport') - enable = form.getvalue('newsmonenable') - http = form.getvalue('newsmonproto') - uri = form.getvalue('newsmonuri') - body = form.getvalue('newsmonbody') - group = form.getvalue('newsmongroup') - desc = form.getvalue('newsmondescription') - telegram = form.getvalue('newsmontelegram') + user_group = funct.get_user_group(id=1) + server = form.getvalue('newsmon') + port = form.getvalue('newsmonport') + enable = form.getvalue('newsmonenable') + http = form.getvalue('newsmonproto') + uri = form.getvalue('newsmonuri') + body = form.getvalue('newsmonbody') + group = form.getvalue('newsmongroup') + desc = form.getvalue('newsmondescription') + telegram = form.getvalue('newsmontelegram') - try: - port = int(port) - except: - print('SMON error: port must number') - sys.exit() - if port > 65535 or port < 0: - print('SMON error: port must be 0-65535') - sys.exit() - if port == 80 and http == 'https': - print('SMON error: Cannot be HTTPS with 80 port') - sys.exit() - if port == 443 and http == 'http': - print('SMON error: Cannot be HTTP with 443 port') - sys.exit() + try: + port = int(port) + except: + print('SMON error: port must number') + sys.exit() + if port > 65535 or port < 0: + print('SMON error: port must be 0-65535') + sys.exit() + if port == 80 and http == 'https': + print('SMON error: Cannot be HTTPS with 80 port') + sys.exit() + if port == 443 and http == 'http': + print('SMON error: Cannot be HTTP with 443 port') + sys.exit() - if sql.insert_smon(server, port, enable, http, uri, body, group, desc, telegram, user_group): - from jinja2 import Environment, FileSystemLoader - env = Environment(loader=FileSystemLoader('templates'), autoescape=True) - template = env.get_template('ajax/show_new_smon.html') - template = template.render(smon=sql.select_smon(user_group,ip=server,port=port,proto=http,uri=uri,body=body), telegrams=sql.get_user_telegram_by_group(user_group)) - print(template) - funct.logging('SMON', ' Has been add a new server '+server+' to SMON ', haproxywi=1, login=1) + if sql.insert_smon(server, port, enable, http, uri, body, group, desc, telegram, user_group): + from jinja2 import Environment, FileSystemLoader + env = Environment(loader=FileSystemLoader('templates'), autoescape=True) + template = env.get_template('ajax/show_new_smon.html') + template = template.render( + smon=sql.select_smon(user_group, ip=server, port=port, proto=http, uri=uri, body=body), + telegrams=sql.get_user_telegram_by_group(user_group)) + print(template) + funct.logging('SMON', ' Has been add a new server ' + server + ' to SMON ', haproxywi=1, login=1) if form.getvalue('smondel') is not None: - user_group = funct.get_user_group(id=1) - id = form.getvalue('smondel') - - if funct.check_user_group(): - if sql.delete_smon(id, user_group): - print('Ok') - funct.logging('SMON', ' Has been delete server from SMON ', haproxywi=1, login=1) + user_group = funct.get_user_group(id=1) + id = form.getvalue('smondel') + if funct.check_user_group(): + if sql.delete_smon(id, user_group): + print('Ok') + funct.logging('SMON', ' Has been delete server from SMON ', haproxywi=1, login=1) if form.getvalue('showsmon') is not None: - user_group = funct.get_user_group(id=1) - sort = form.getvalue('sort') + 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) - print(template) + 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) + print(template) if form.getvalue('updateSmonIp') is not None: - id = form.getvalue('id') - ip = form.getvalue('updateSmonIp') - port = form.getvalue('updateSmonPort') - en = form.getvalue('updateSmonEn') - http = form.getvalue('updateSmonHttp') - body = form.getvalue('updateSmonBody') - telegram = form.getvalue('updateSmonTelegram') - group = form.getvalue('updateSmonGroup') - desc = form.getvalue('updateSmonDesc') + id = form.getvalue('id') + ip = form.getvalue('updateSmonIp') + port = form.getvalue('updateSmonPort') + en = form.getvalue('updateSmonEn') + http = form.getvalue('updateSmonHttp') + body = form.getvalue('updateSmonBody') + telegram = form.getvalue('updateSmonTelegram') + group = form.getvalue('updateSmonGroup') + desc = form.getvalue('updateSmonDesc') - try: - port = int(port) - except: - print('SMON error: port must number') - sys.exit() - if port > 65535 or port < 0: - print('SMON error: port must be 0-65535') - sys.exit() - if port == 80 and http == 'https': - print('SMON error: Cannot be https with 80 port') - sys.exit() - if port == 443 and http == 'http': - print('SMON error: Cannot be HTTP with 443 port') - sys.exit() - - if sql.update_smon(id, ip, port, body, telegram, group, desc, en): - print("Ok") - funct.logging('SMON', ' Has been update the server '+ip+' to SMON ', haproxywi=1, login=1) + try: + port = int(port) + except: + print('SMON error: port must number') + sys.exit() + if port > 65535 or port < 0: + print('SMON error: port must be 0-65535') + sys.exit() + if port == 80 and http == 'https': + print('SMON error: Cannot be https with 80 port') + sys.exit() + if port == 443 and http == 'http': + print('SMON error: Cannot be HTTP with 443 port') + sys.exit() + if sql.update_smon(id, ip, port, body, telegram, group, desc, en): + print("Ok") + funct.logging('SMON', ' Has been update the server ' + ip + ' to SMON ', haproxywi=1, login=1) if form.getvalue('showBytes') is not None: - serv = form.getvalue('showBytes') - port = sql.get_setting('haproxy_sock_port') - bin_bout = [] - cmd = "echo 'show stat' |nc "+serv+" "+port+" |cut -d ',' -f 1-2,9|grep -E '[0-9]'|awk -F',' '{sum+=$3;}END{print sum;}'" - bin, stderr = funct.subprocess_execute(cmd) - bin_bout.append(bin[0]) - cmd = "echo 'show stat' |nc "+serv+" "+port+" |cut -d ',' -f 1-2,10|grep -E '[0-9]'|awk -F',' '{sum+=$3;}END{print sum;}'" - bin, stderr = funct.subprocess_execute(cmd) - bin_bout.append(bin[0]) - cmd = "echo 'show stat' |nc "+serv+" "+port+" |cut -d ',' -f 1-2,5|grep -E '[0-9]'|awk -F',' '{sum+=$3;}END{print sum;}'" - bin, stderr = funct.subprocess_execute(cmd) - bin_bout.append(bin[0]) - cmd = "echo 'show stat' |nc "+serv+" "+port+" |cut -d ',' -f 1-2,8|grep -E '[0-9]'|awk -F',' '{sum+=$3;}END{print sum;}'" - bin, stderr = funct.subprocess_execute(cmd) - bin_bout.append(bin[0]) + serv = form.getvalue('showBytes') + port = sql.get_setting('haproxy_sock_port') + bin_bout = [] + cmd = "echo 'show stat' |nc " + serv + " " + port + " |cut -d ',' -f 1-2,9|grep -E '[0-9]'|awk -F',' '{sum+=$3;}END{print sum;}'" + bin, stderr = funct.subprocess_execute(cmd) + bin_bout.append(bin[0]) + cmd = "echo 'show stat' |nc " + serv + " " + port + " |cut -d ',' -f 1-2,10|grep -E '[0-9]'|awk -F',' '{sum+=$3;}END{print sum;}'" + bin, stderr = funct.subprocess_execute(cmd) + bin_bout.append(bin[0]) + cmd = "echo 'show stat' |nc " + serv + " " + port + " |cut -d ',' -f 1-2,5|grep -E '[0-9]'|awk -F',' '{sum+=$3;}END{print sum;}'" + bin, stderr = funct.subprocess_execute(cmd) + bin_bout.append(bin[0]) + cmd = "echo 'show stat' |nc " + serv + " " + port + " |cut -d ',' -f 1-2,8|grep -E '[0-9]'|awk -F',' '{sum+=$3;}END{print sum;}'" + bin, stderr = funct.subprocess_execute(cmd) + bin_bout.append(bin[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) - print(template) + 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) + print(template) if form.getvalue('alert_consumer'): - try: - user_group = funct.get_user_group(id=1) - if funct.check_user_group(): - message = sql.select_alerts(user_group) - for m in message: - print(m[0]+ ': '+ m[1] +' date: '+m[2]+';') - except: - pass - + try: + user_group = funct.get_user_group(id=1) + if funct.check_user_group(): + message = sql.select_alerts(user_group) + for m in message: + print(m[0] + ': ' + m[1] + ' date: ' + m[2] + ';') + except: + pass if form.getvalue('waf_rule_id'): - enable = form.getvalue('waf_en') - rule_id = form.getvalue('waf_rule_id') - haproxy_path = sql.get_setting('haproxy_dir') - rule_file = sql.select_waf_rule_by_id(rule_id) - conf_file_path = haproxy_path + 'waf/modsecurity.conf' - rule_file_path = 'Include ' + haproxy_path + '/waf/rules/' + rule_file + enable = form.getvalue('waf_en') + rule_id = form.getvalue('waf_rule_id') + haproxy_path = sql.get_setting('haproxy_dir') + rule_file = sql.select_waf_rule_by_id(rule_id) + conf_file_path = haproxy_path + 'waf/modsecurity.conf' + rule_file_path = 'Include ' + haproxy_path + '/waf/rules/' + rule_file - if enable == '0': - cmd = ["sudo sed -i 's!"+rule_file_path+"!#"+rule_file_path+"!' "+conf_file_path] - en_for_log = 'disable' - else: - cmd = ["sudo sed -i 's!#"+rule_file_path+"!"+rule_file_path+"!' "+conf_file_path] - en_for_log = 'enable' + if enable == '0': + cmd = ["sudo sed -i 's!" + rule_file_path + "!#" + rule_file_path + "!' " + conf_file_path] + en_for_log = 'disable' + else: + cmd = ["sudo sed -i 's!#" + rule_file_path + "!" + rule_file_path + "!' " + conf_file_path] + en_for_log = 'enable' - try: - funct.logging('WAF', ' Has been '+en_for_log+' WAF rule: '+rule_file+' for the server '+serv, haproxywi=1, login=1) - except: - pass - - print(funct.ssh_command(serv, cmd)) - sql.update_enable_waf_rules(rule_id, serv, enable) + try: + funct.logging('WAF', ' Has been ' + en_for_log + ' WAF rule: ' + rule_file + ' for the server ' + serv, + haproxywi=1, login=1) + except: + pass + print(funct.ssh_command(serv, cmd)) + sql.update_enable_waf_rules(rule_id, serv, enable) if form.getvalue('lets_domain'): - serv = form.getvalue('serv') - lets_domain = form.getvalue('lets_domain') - lets_email = form.getvalue('lets_email') - proxy = sql.get_setting('proxy') - ssl_path = sql.get_setting('cert_path') - script = "letsencrypt.sh" - ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(serv) + serv = form.getvalue('serv') + lets_domain = form.getvalue('lets_domain') + lets_email = form.getvalue('lets_email') + proxy = sql.get_setting('proxy') + ssl_path = sql.get_setting('cert_path') + script = "letsencrypt.sh" + ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(serv) - if ssh_enable == 0: - ssh_key_name = '' + if ssh_enable == 0: + ssh_key_name = '' - servers = sql.select_servers(server=serv) - for server in servers: - ssh_port = str(server[10]) + servers = sql.select_servers(server=serv) + for server in servers: + ssh_port = str(server[10]) - os.system("cp scripts/%s ." % script) + os.system("cp scripts/%s ." % script) - if proxy is not None and proxy != '' and proxy != 'None': - proxy_serv = proxy - else: - proxy_serv = '' + if proxy is not None and proxy != '' and proxy != 'None': + proxy_serv = proxy + else: + proxy_serv = '' - commands = ["chmod +x "+script +" && ./"+script +" PROXY=" + proxy_serv+ - " DOMAIN="+lets_domain+" EMAIL="+lets_email+" SSH_PORT="+ssh_port+" SSL_PATH="+ssl_path+ - " HOST="+serv+" USER="+ssh_user_name+" PASS="+ssh_user_password+" KEY="+ssh_key_name] + commands = ["chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + + " DOMAIN=" + lets_domain + " EMAIL=" + lets_email + " SSH_PORT=" + ssh_port + " SSL_PATH=" + ssl_path + + " HOST=" + serv + " USER=" + ssh_user_name + " PASS=" + ssh_user_password + " KEY=" + ssh_key_name] - output, error = funct.subprocess_execute(commands[0]) + output, error = funct.subprocess_execute(commands[0]) - if error: - funct.logging('localhost', error, haproxywi=1) - print(error) - else: - for l in output: - if "msg" in l or "FAILED" in l: - try: - l = l.split(':')[1] - l = l.split('"')[1] - print(l+"
") - break - except: - print(output) - break - else: - print('success: Certificate has been created') + if error: + funct.logging('localhost', error, haproxywi=1) + print(error) + else: + for l in output: + if "msg" in l or "FAILED" in l: + try: + l = l.split(':')[1] + l = l.split('"')[1] + print(l + "
") + break + except: + print(output) + break + else: + print('success: Certificate has been created') - os.system("rm -f %s" % script) \ No newline at end of file + os.system("rm -f %s" % script) diff --git a/app/templates/hapservers.html b/app/templates/hapservers.html index 58766408..4448865d 100644 --- a/app/templates/hapservers.html +++ b/app/templates/hapservers.html @@ -47,6 +47,17 @@ } } }); + {% for s in services %} + {% if s.1 == '* is not installed' %} + {% if s.0 == 'checker_haproxy' %} + $(':regex(id, alert)').checkboxradio('disable'); + {% elif s.0 == 'keep_alive' %} + $(':regex(id, active-)').checkboxradio('disable'); + {% elif s.0 == 'metrics_haproxy' %} + $(':regex(id, metrics-)').checkboxradio('disable'); + {% endif %} + {% endif %} + {% endfor %} }); {% if serv %} @@ -77,7 +88,7 @@ {% endif %}
-
+
{% if service == 'nginx' %} @@ -165,19 +176,19 @@ {% if role <= 2 %} {% set id = 'alert-' + s.8.0.0|string() %} {% if s.8.0.8 == 1 %} - {{ checkbox(id, title='Enable alerting', value='1', desc='Alert', checked='checked') }} + {{ checkbox(id, title='Alerting is enabled', value='1', desc='Alert', checked='checked') }} {% else %} {{ checkbox(id, title='Enable alerting', value='1', desc='Alert') }} {% endif %} {% set id = 'metrics-' + s.8.0.0|string() %} {% if s.8.0.9 == 1 %} - {{ checkbox(id, title='Enable collect metrics', value='1', desc='Metrics', checked='checked') }} + {{ checkbox(id, title='Collecting metrics is enabled', value='1', desc='Metrics', checked='checked') }} {% else %} {{ checkbox(id, title='Enable collect metrics', value='1', desc='Metrics') }} {% endif %} {% set id = 'active-' + s.8.0.0|string() %} {% if s.8.0.12 == 1 %} - {{ checkbox(id, title='Enable Compression', value='1', desc='Auto Start', checked='checked') }} + {{ checkbox(id, title='Auto Start is enabled', value='1', desc='Auto Start', checked='checked') }} {% else %} {{ checkbox(id, title='Enable Auto Start', value='1', desc='Auto Start') }} {% endif %} diff --git a/app/templates/include/admin_telegram.html b/app/templates/include/admin_telegram.html index 834d6ac5..5b19eb77 100644 --- a/app/templates/include/admin_telegram.html +++ b/app/templates/include/admin_telegram.html @@ -1,3 +1,6 @@ +{% for s in services %} +{% if s.0 == 'checker_haproxy' %} +{% if s.3 != '* is not installed' %}
@@ -48,4 +51,14 @@
You can read the description of all parameters here -
\ No newline at end of file + +{% else %} +
+

Welcome and let's get started!

+ You do not have installed Backends checker. + Read hear + how to install it +
+{% endif %} +{% endif %} +{% endfor %} diff --git a/app/templates/metrics.html b/app/templates/metrics.html index 762eb36b..0f71e420 100644 --- a/app/templates/metrics.html +++ b/app/templates/metrics.html @@ -1,5 +1,6 @@ {% extends "base.html" %} -{% block content %} +{% block content %} +