mirror of https://github.com/Aidaho12/haproxy-wi
parent
a177053314
commit
498153ef1a
|
@ -3,3 +3,4 @@ roxy-wi.db
|
|||
configs
|
||||
keys
|
||||
log
|
||||
.DS_Store
|
||||
|
|
|
@ -961,7 +961,7 @@ def update_db_v_6_2_1():
|
|||
except Exception as e:
|
||||
print("An error occurred:", e)
|
||||
else:
|
||||
print("Updating... DB has been updated to version 6.2.1.0")
|
||||
print("Updating... DB has been updated to version 6.2.2.0")
|
||||
|
||||
|
||||
def update_ver():
|
||||
|
|
157
app/funct.py
157
app/funct.py
|
@ -5,6 +5,8 @@ import re
|
|||
import json
|
||||
import http.cookies
|
||||
|
||||
import distro
|
||||
|
||||
import modules.roxy_wi_tools as roxy_wi_tools
|
||||
|
||||
get_config_var = roxy_wi_tools.GetConfigVar()
|
||||
|
@ -115,7 +117,6 @@ def get_user_group(**kwargs) -> str:
|
|||
|
||||
def logging(server_ip: str, action: str, **kwargs) -> None:
|
||||
import sql
|
||||
import distro
|
||||
|
||||
login = ''
|
||||
cur_date = get_data('logs')
|
||||
|
@ -335,13 +336,10 @@ def page_for_admin(level=1) -> None:
|
|||
return
|
||||
|
||||
|
||||
def return_ssh_keys_path(server_ip: str, **kwargs):
|
||||
def return_ssh_keys_path(server_ip: str, **kwargs) -> dict:
|
||||
import sql
|
||||
lib_path = get_config_var.get_config_var('main', 'lib_path')
|
||||
ssh_enable = ''
|
||||
ssh_user_name = ''
|
||||
ssh_user_password = ''
|
||||
ssh_key_name = ''
|
||||
ssh_settings = {}
|
||||
|
||||
if kwargs.get('id'):
|
||||
sshs = sql.select_ssh(id=kwargs.get('id'))
|
||||
|
@ -349,26 +347,24 @@ def return_ssh_keys_path(server_ip: str, **kwargs):
|
|||
sshs = sql.select_ssh(serv=server_ip)
|
||||
|
||||
for ssh in sshs:
|
||||
ssh_enable = ssh.enable
|
||||
ssh_user_name = ssh.username
|
||||
ssh_user_password = ssh.password
|
||||
ssh_key_name = f'{lib_path}/keys/{ssh.name}.pem'
|
||||
ssh_settings.setdefault('enabled', ssh.enable)
|
||||
ssh_settings.setdefault('user', ssh.username)
|
||||
ssh_settings.setdefault('password', ssh.password)
|
||||
ssh_settings.setdefault('key', f'{lib_path}/keys/{ssh.name}.pem')
|
||||
|
||||
return ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name
|
||||
ssh_port = [str(server[10]) for server in sql.select_servers(server=server_ip)]
|
||||
ssh_settings.setdefault('port', ssh_port[0])
|
||||
|
||||
return ssh_settings
|
||||
|
||||
|
||||
def ssh_connect(server_ip):
|
||||
import sql
|
||||
from modules import ssh_connection
|
||||
|
||||
ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = return_ssh_keys_path(server_ip)
|
||||
servers = sql.select_servers(server=server_ip)
|
||||
ssh_port = 22
|
||||
ssh_settings = return_ssh_keys_path(server_ip)
|
||||
|
||||
for server in servers:
|
||||
ssh_port = server[10]
|
||||
|
||||
ssh = ssh_connection.SshConnection(server_ip, ssh_port, ssh_user_name, ssh_user_password, ssh_enable, ssh_key_name)
|
||||
ssh = ssh_connection.SshConnection(server_ip, ssh_settings['port'], ssh_settings['user'],
|
||||
ssh_settings['password'], ssh_settings['enabled'], ssh_settings['key'])
|
||||
|
||||
return ssh
|
||||
|
||||
|
@ -629,15 +625,8 @@ def install_haproxy(server_ip, **kwargs):
|
|||
haproxy_ver = kwargs.get('hapver')
|
||||
server_for_installing = kwargs.get('server')
|
||||
docker = kwargs.get('docker')
|
||||
ssh_port = 22
|
||||
ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = return_ssh_keys_path(server_ip)
|
||||
|
||||
if ssh_enable == 0:
|
||||
ssh_key_name = ''
|
||||
|
||||
servers = sql.select_servers(server=server_ip)
|
||||
for server in servers:
|
||||
ssh_port = str(server[10])
|
||||
proxy_serv = ''
|
||||
ssh_settings = return_ssh_keys_path(server_ip)
|
||||
|
||||
os.system("cp scripts/%s ." % script)
|
||||
|
||||
|
@ -646,17 +635,15 @@ def install_haproxy(server_ip, **kwargs):
|
|||
|
||||
if proxy is not None and proxy != '' and proxy != 'None':
|
||||
proxy_serv = proxy
|
||||
else:
|
||||
proxy_serv = ''
|
||||
|
||||
syn_flood_protect = '1' if kwargs.get('syn_flood') == "1" else ''
|
||||
|
||||
commands = [
|
||||
"chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + " SOCK_PORT=" + hap_sock_p
|
||||
+ " STAT_PORT=" + stats_port + " STAT_FILE=" + server_state_file + " DOCKER=" + docker
|
||||
+ " SSH_PORT=" + ssh_port + " STATS_USER=" + stats_user + " CONT_NAME=" + container_name + " HAP_DIR=" + haproxy_dir
|
||||
+ " STATS_PASS='" + stats_password + "' HAPVER=" + haproxy_ver + " SYN_FLOOD=" + syn_flood_protect
|
||||
+ " HOST=" + server_ip + " USER=" + ssh_user_name + " PASS='" + ssh_user_password + "' KEY=" + ssh_key_name
|
||||
f"chmod +x {script} && ./{script} PROXY={proxy_serv} SOCK_PORT={hap_sock_p} STAT_PORT={stats_port} "
|
||||
f"STAT_FILE={server_state_file} DOCKER={docker} SSH_PORT={ssh_settings['port']} STATS_USER={stats_user} "
|
||||
f"CONT_NAME={container_name} HAP_DIR={haproxy_dir} STATS_PASS='{stats_password}' HAPVER={haproxy_ver} "
|
||||
f"SYN_FLOOD={syn_flood_protect} HOST={server_ip} USER={ssh_settings['user']} PASS='{ssh_settings['password']}' "
|
||||
f"KEY={ssh_settings['key']}"
|
||||
]
|
||||
|
||||
output, error = subprocess_execute(commands[0])
|
||||
|
@ -673,7 +660,7 @@ def install_haproxy(server_ip, **kwargs):
|
|||
sql.insert_or_update_service_setting(server_id, 'haproxy', 'dockerized', '1')
|
||||
sql.insert_or_update_service_setting(server_id, 'haproxy', 'restart', '1')
|
||||
|
||||
os.system("rm -f %s" % script)
|
||||
os.remove(script)
|
||||
|
||||
|
||||
def waf_install(server_ip):
|
||||
|
@ -683,23 +670,18 @@ def waf_install(server_ip):
|
|||
haproxy_dir = sql.get_setting('haproxy_dir')
|
||||
ver = check_haproxy_version(server_ip)
|
||||
service = ' WAF'
|
||||
ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = return_ssh_keys_path(server_ip)
|
||||
ssh_port = '22'
|
||||
|
||||
if ssh_enable == 0:
|
||||
ssh_key_name = ''
|
||||
proxy_serv = ''
|
||||
ssh_settings = return_ssh_keys_path(server_ip)
|
||||
|
||||
os.system("cp scripts/%s ." % script)
|
||||
|
||||
if proxy is not None and proxy != '' and proxy != 'None':
|
||||
proxy_serv = proxy
|
||||
else:
|
||||
proxy_serv = ''
|
||||
|
||||
commands = [
|
||||
"chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + " HAPROXY_PATH=" + haproxy_dir
|
||||
+ " VERSION='" + ver + "' SSH_PORT=" + ssh_port + " HOST=" + server_ip
|
||||
+ " USER=" + ssh_user_name + " PASS='" + ssh_user_password + "' KEY=" + ssh_key_name
|
||||
f"chmod +x {script} && ./{script} PROXY={proxy_serv} HAPROXY_PATH={haproxy_dir} VERSION='{ver}' "
|
||||
f"SSH_PORT={ssh_settings['port']} HOST={server_ip} USER={ssh_settings['user']} PASS='{ssh_settings['password']}' "
|
||||
f"KEY={ssh_settings['key']}"
|
||||
]
|
||||
|
||||
output, error = subprocess_execute(commands[0])
|
||||
|
@ -708,7 +690,7 @@ def waf_install(server_ip):
|
|||
sql.insert_waf_metrics_enable(server_ip, "0")
|
||||
sql.insert_waf_rules(server_ip)
|
||||
|
||||
os.system("rm -f %s" % script)
|
||||
os.remove(script)
|
||||
|
||||
|
||||
def waf_nginx_install(server_ip):
|
||||
|
@ -717,23 +699,17 @@ def waf_nginx_install(server_ip):
|
|||
proxy = sql.get_setting('proxy')
|
||||
nginx_dir = sql.get_setting('nginx_dir')
|
||||
service = ' WAF'
|
||||
ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = return_ssh_keys_path(server_ip)
|
||||
ssh_port = '22'
|
||||
|
||||
if ssh_enable == 0:
|
||||
ssh_key_name = ''
|
||||
proxy_serv = ''
|
||||
ssh_settings = return_ssh_keys_path(server_ip)
|
||||
|
||||
os.system("cp scripts/%s ." % script)
|
||||
|
||||
if proxy is not None and proxy != '' and proxy != 'None':
|
||||
proxy_serv = proxy
|
||||
else:
|
||||
proxy_serv = ''
|
||||
|
||||
commands = [
|
||||
"chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + " NGINX_PATH=" + nginx_dir
|
||||
+ " SSH_PORT=" + ssh_port + " HOST=" + server_ip
|
||||
+ " USER=" + ssh_user_name + " PASS='" + ssh_user_password + "' KEY=" + ssh_key_name
|
||||
f"chmod +x {script} && ./{script} PROXY={proxy_serv} NGINX_PATH={nginx_dir} SSH_PORT={ssh_settings['port']} "
|
||||
f"HOST={server_ip} USER={ssh_settings['user']} PASS='{ssh_settings['password']}' KEY={ssh_settings['key']}"
|
||||
]
|
||||
|
||||
output, error = subprocess_execute(commands[0])
|
||||
|
@ -742,7 +718,7 @@ def waf_nginx_install(server_ip):
|
|||
sql.insert_nginx_waf_rules(server_ip)
|
||||
sql.insert_waf_nginx_server(server_ip)
|
||||
|
||||
os.system("rm -f %s" % script)
|
||||
os.remove(script)
|
||||
|
||||
|
||||
def install_nginx(server_ip, **kwargs):
|
||||
|
@ -758,30 +734,21 @@ def install_nginx(server_ip, **kwargs):
|
|||
proxy = sql.get_setting('proxy')
|
||||
docker = kwargs.get('docker')
|
||||
container_name = sql.get_setting('nginx_container_name')
|
||||
ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = return_ssh_keys_path(server_ip)
|
||||
ssh_port = '22'
|
||||
|
||||
if ssh_enable == 0:
|
||||
ssh_key_name = ''
|
||||
proxy_serv = ''
|
||||
ssh_settings = return_ssh_keys_path(server_ip)
|
||||
|
||||
os.system("cp scripts/%s ." % script)
|
||||
|
||||
if proxy is not None and proxy != '' and proxy != 'None':
|
||||
proxy_serv = proxy
|
||||
else:
|
||||
proxy_serv = ''
|
||||
|
||||
servers = sql.select_servers(server=server_ip)
|
||||
for server in servers:
|
||||
ssh_port = str(server[10])
|
||||
|
||||
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 + " CONT_NAME=" + container_name
|
||||
+ " STAT_PORT=" + stats_port + " STAT_PAGE=" + stats_page + " SYN_FLOOD=" + syn_flood_protect + " DOCKER=" + docker
|
||||
+ " nginx_dir=" + nginx_dir + " HOST=" + server_ip + " USER=" + ssh_user_name + " PASS='" + ssh_user_password + "' KEY=" + ssh_key_name
|
||||
f"chmod +x {script} && ./{script} PROXY={proxy_serv} STATS_USER={stats_user} STATS_PASS='{stats_password}' "
|
||||
f"SSH_PORT={ssh_settings['port']} CONFIG_PATH={config_path} CONT_NAME={container_name} STAT_PORT={stats_port} "
|
||||
f"STAT_PAGE={stats_page} SYN_FLOOD={syn_flood_protect} DOCKER={docker} nginx_dir={nginx_dir} HOST={server_ip} "
|
||||
f"USER={ssh_settings['user']} PASS='{ssh_settings['password']}' KEY={ssh_settings['key']}"
|
||||
]
|
||||
|
||||
output, error = subprocess_execute(commands[0])
|
||||
|
@ -797,11 +764,10 @@ def install_nginx(server_ip, **kwargs):
|
|||
sql.insert_or_update_service_setting(server_id, 'nginx', 'dockerized', '1')
|
||||
sql.insert_or_update_service_setting(server_id, 'nginx', 'restart', '1')
|
||||
|
||||
os.system("rm -f %s" % script)
|
||||
os.remove(script)
|
||||
|
||||
|
||||
def update_roxy_wi(service):
|
||||
import distro
|
||||
restart_service = ''
|
||||
|
||||
if distro.id() == 'ubuntu':
|
||||
|
@ -1273,8 +1239,7 @@ def show_roxy_log(
|
|||
serv = value
|
||||
break
|
||||
else:
|
||||
print('Haha')
|
||||
return
|
||||
return 'Haha'
|
||||
|
||||
if serv == 'backup.log':
|
||||
awk_column = 2
|
||||
|
@ -1286,35 +1251,35 @@ def show_roxy_log(
|
|||
return show_log(output, grep=grep)
|
||||
|
||||
|
||||
def roxy_wi_log(**kwargs) -> str:
|
||||
def roxy_wi_log(**kwargs) -> list:
|
||||
log_path = get_config_var.get_config_var('main', 'log_path')
|
||||
|
||||
if kwargs.get('log_id'):
|
||||
selects = get_files(log_path, "log")
|
||||
for key, value in selects:
|
||||
log_file = kwargs.get('file') + ".log"
|
||||
log_file = f"{kwargs.get('file')}.log"
|
||||
if log_file == value:
|
||||
return key
|
||||
else:
|
||||
user_group_id = get_user_group(id=1)
|
||||
if user_group_id != 1:
|
||||
user_group = get_user_group()
|
||||
group_grep = '|grep "group: ' + user_group + '"'
|
||||
group_grep = f'|grep "group: {user_group}"'
|
||||
else:
|
||||
group_grep = ''
|
||||
cmd = "find " + log_path + "/roxy-wi-* -type f -exec stat --format '%Y :%y %n' '{}' \; | sort -nr | cut -d: -f2- " \
|
||||
"| head -1 |awk '{print $4}' |xargs tail" + group_grep + "|sort -r"
|
||||
cmd = f"find {log_path}/roxy-wi-* -type f -exec stat --format '%Y :%y %n' '{{}}' \; | sort -nr | cut -d: -f2- " \
|
||||
f"| head -1 |awk '{{print $4}}' |xargs tail {group_grep}|sort -r"
|
||||
try:
|
||||
output, stderr = subprocess_execute(cmd)
|
||||
return output
|
||||
except Exception:
|
||||
return ''
|
||||
return ['']
|
||||
|
||||
|
||||
def show_ip(stdout):
|
||||
for line in stdout:
|
||||
if "Permission denied" in line:
|
||||
print('error: ' + line)
|
||||
print(f'error: {line}')
|
||||
else:
|
||||
print(line)
|
||||
|
||||
|
@ -1447,6 +1412,7 @@ def return_nice_path(return_path: str) -> str:
|
|||
and 'keepalived' not in return_path
|
||||
):
|
||||
return 'error: The path must contain the name of the service. Check it in Roxy-WI settings'
|
||||
|
||||
if return_path[-1] != '/':
|
||||
return_path += '/'
|
||||
|
||||
|
@ -1582,6 +1548,8 @@ def get_users_params(**kwargs):
|
|||
servers = sql.get_dick_permit(disable=0)
|
||||
elif kwargs.get('haproxy'):
|
||||
servers = sql.get_dick_permit(haproxy=1)
|
||||
elif kwargs.get('service'):
|
||||
servers = sql.get_dick_permit(service=kwargs.get('service'))
|
||||
else:
|
||||
servers = sql.get_dick_permit()
|
||||
|
||||
|
@ -1642,7 +1610,7 @@ def check_service(server_ip, service_name):
|
|||
return ssh_command(server_ip, commands)
|
||||
|
||||
|
||||
def get_service_version(server_ip, service_name):
|
||||
def get_service_version(server_ip: str, service_name: str) -> str:
|
||||
server_ip = is_ip_or_dns(server_ip)
|
||||
if service_name == 'haproxy_exporter':
|
||||
commands = ["/opt/prometheus/exporters/haproxy_exporter --version 2>&1 |head -1|awk '{print $3}'"]
|
||||
|
@ -1650,6 +1618,8 @@ def get_service_version(server_ip, service_name):
|
|||
commands = ["/opt/prometheus/exporters/nginx_exporter 2>&1 |head -1 |awk -F\"=\" '{print $2}'|awk '{print $1}'"]
|
||||
elif service_name == 'node_exporter':
|
||||
commands = ["node_exporter --version 2>&1 |head -1|awk '{print $3}'"]
|
||||
elif service_name == 'apache_exporter':
|
||||
commands = ["/opt/prometheus/exporters/apache_exporter --version 2>&1 |head -1|awk '{print $3}'"]
|
||||
|
||||
ver = ssh_command(server_ip, commands)
|
||||
|
||||
|
@ -1660,7 +1630,6 @@ def get_service_version(server_ip, service_name):
|
|||
|
||||
|
||||
def get_services_status():
|
||||
import distro
|
||||
services = []
|
||||
is_in_docker = is_docker()
|
||||
services_name = {
|
||||
|
@ -1678,10 +1647,12 @@ def get_services_status():
|
|||
}
|
||||
for s, v in services_name.items():
|
||||
if is_in_docker:
|
||||
cmd = "sudo supervisorctl status " + s + "|awk '{print $2}'"
|
||||
cmd = f"sudo supervisorctl status {s}|awk '{{print $2}}'"
|
||||
else:
|
||||
cmd = "systemctl is-active %s" % s
|
||||
cmd = f"systemctl is-active {s}"
|
||||
|
||||
status, stderr = subprocess_execute(cmd)
|
||||
|
||||
if s != 'roxy-wi-keep_alive':
|
||||
service_name = s.split('_')[0]
|
||||
if s == 'grafana-server':
|
||||
|
@ -1695,9 +1666,9 @@ def get_services_status():
|
|||
cmd = "prometheus --version 2>&1 |grep prometheus|awk '{print $3}'"
|
||||
else:
|
||||
if distro.id() == 'ubuntu':
|
||||
cmd = "apt list --installed 2>&1 |grep " + service_name + "|awk '{print $2}'|sed 's/-/./'"
|
||||
cmd = f"apt list --installed 2>&1 |grep {service_name}|awk '{{print $2}}'|sed 's/-/./'"
|
||||
else:
|
||||
cmd = "rpm -q " + service_name + "|awk -F\"" + service_name + "\" '{print $2}' |awk -F\".noa\" '{print $1}' |sed 's/-//1' |sed 's/-/./'"
|
||||
cmd = f"rpm -q {service_name}|awk -F\"{service_name}\" '{{print $2}}' |awk -F\".noa\" '{{print $1}}' |sed 's/-//1' |sed 's/-/./'"
|
||||
service_ver, stderr = subprocess_execute(cmd)
|
||||
|
||||
try:
|
||||
|
@ -2073,9 +2044,9 @@ def send_email(email_to: str, subject: str, message: str) -> None:
|
|||
smtp_obj.starttls()
|
||||
smtp_obj.login(mail_smtp_user, mail_smtp_password)
|
||||
smtp_obj.send_message(msg)
|
||||
logging('localhost', 'An email has been sent to ' + email_to, haproxywi=1)
|
||||
logging('localhost', f'An email has been sent to {email_to}', haproxywi=1)
|
||||
except Exception as e:
|
||||
logging('localhost', 'error: unable to send email: ' + str(e), haproxywi=1)
|
||||
logging('localhost', f'error: unable to send email: {e}', haproxywi=1)
|
||||
|
||||
|
||||
def send_email_to_server_group(subject: str, mes: str, group_id: int) -> None:
|
||||
|
@ -2087,7 +2058,7 @@ def send_email_to_server_group(subject: str, mes: str, group_id: int) -> None:
|
|||
for user_email in users_email:
|
||||
send_email(user_email.email, subject, mes)
|
||||
except Exception as e:
|
||||
logging('localhost', 'error: unable to send email: ' + str(e), haproxywi=1)
|
||||
logging('localhost', f'error: unable to send email: {e}', haproxywi=1)
|
||||
|
||||
|
||||
def alert_routing(
|
||||
|
|
438
app/options.py
438
app/options.py
|
@ -5,6 +5,7 @@ import sys
|
|||
import json
|
||||
import http.cookies
|
||||
|
||||
import requests
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
|
||||
import funct
|
||||
|
@ -121,7 +122,7 @@ if serv and form.getvalue('ssl_cert'):
|
|||
except Exception as e:
|
||||
funct.logging('localhost', e.args[0], haproxywi=1)
|
||||
try:
|
||||
os.system("mv %s %s" % (name, cert_local_dir))
|
||||
os.rename(name, cert_local_dir)
|
||||
except OSError as e:
|
||||
funct.logging('localhost', e.args[0], haproxywi=1)
|
||||
|
||||
|
@ -456,17 +457,17 @@ if form.getvalue('action_hap') is not None and serv is not None:
|
|||
|
||||
if is_docker == '1':
|
||||
container_name = sql.get_setting('haproxy_container_name')
|
||||
commands = ["sudo docker %s %s" % (action, container_name)]
|
||||
commands = [f"sudo docker {action} {container_name}"]
|
||||
else:
|
||||
haproxy_enterprise = sql.select_service_setting(server_id, 'haproxy', 'haproxy_enterprise')
|
||||
if haproxy_enterprise == '1':
|
||||
haproxy_service_name = "hapee-2.0-lb"
|
||||
commands = ["sudo systemctl %s %s" % (action, haproxy_service_name)]
|
||||
commands = [f"sudo systemctl {action} {haproxy_service_name}"]
|
||||
|
||||
funct.ssh_command(serv, commands)
|
||||
funct.logging(serv, 'Service has been ' + action + 'ed', haproxywi=1, login=1, keep_history=1,
|
||||
funct.logging(serv, f'Service has been {action}ed', haproxywi=1, login=1, keep_history=1,
|
||||
service='haproxy')
|
||||
print("success: HAProxy has been %s" % action)
|
||||
print(f"success: HAProxy has been {action}")
|
||||
else:
|
||||
print("error: Bad config, check please")
|
||||
|
||||
|
@ -651,17 +652,17 @@ if form.getvalue('show_userlists'):
|
|||
except Exception as e:
|
||||
funct.logging('localhost', str(e), haproxywi=1)
|
||||
try:
|
||||
cfg = configs_dir + serv + "-" + funct.get_data('config') + '.' + format_file
|
||||
cfg = f'{configs_dir}{serv}-{funct.get_data("config")}.{format_file}'
|
||||
except Exception as e:
|
||||
funct.logging('localhost', ' Cannot generate a cfg path ' + str(e), haproxywi=1)
|
||||
funct.logging('localhost', f' Cannot generate a cfg path {e}', haproxywi=1)
|
||||
try:
|
||||
error = funct.get_config(serv, cfg)
|
||||
except Exception as e:
|
||||
funct.logging('localhost', ' Cannot download a config ' + str(e), haproxywi=1)
|
||||
funct.logging('localhost', f' Cannot download a config {e}', haproxywi=1)
|
||||
try:
|
||||
sections = funct.get_userlists(cfg)
|
||||
except Exception as e:
|
||||
funct.logging('localhost', ' Cannot get Userlists from the config file ' + str(e), haproxywi=1)
|
||||
funct.logging('localhost', f' Cannot get Userlists from the config file {e}', haproxywi=1)
|
||||
sections = 'error: Cannot get Userlists'
|
||||
|
||||
print(sections)
|
||||
|
@ -704,20 +705,19 @@ if act == "overview":
|
|||
except Exception:
|
||||
waf_len = 0
|
||||
|
||||
if haproxy == 1:
|
||||
cmd = 'echo "show info" |nc %s %s -w 1|grep -e "Process_num"' % (
|
||||
serv2, sql.get_setting('haproxy_sock_port'))
|
||||
if haproxy:
|
||||
cmd = f'echo "show info" |nc {serv2} {sql.get_setting("haproxy_sock_port")} -w 1|grep -e "Process_num"'
|
||||
haproxy_process = funct.server_status(funct.subprocess_execute(cmd))
|
||||
|
||||
if nginx == 1:
|
||||
nginx_cmd = 'echo "something" |nc %s %s -w 1' % (serv2, sql.get_setting('nginx_stats_port'))
|
||||
if nginx:
|
||||
nginx_cmd = f'echo "something" |nc {serv2} {sql.get_setting("nginx_stats_port")} -w 1'
|
||||
nginx_process = funct.server_status(funct.subprocess_execute(nginx_cmd))
|
||||
|
||||
if apache == 1:
|
||||
apache_cmd = 'echo "something" |nc %s %s -w 1' % (serv2, sql.get_setting('apache_stats_port'))
|
||||
if apache:
|
||||
apache_cmd = f'echo "something" |nc {serv2} {sql.get_setting("apache_stats_port")} -w 1'
|
||||
apache_process = funct.server_status(funct.subprocess_execute(apache_cmd))
|
||||
|
||||
if keepalived == 1:
|
||||
if keepalived:
|
||||
command = ["ps ax |grep keepalived|grep -v grep|wc -l|tr -d '\n'"]
|
||||
try:
|
||||
keepalived_process = funct.ssh_command(serv2, command)
|
||||
|
@ -893,8 +893,6 @@ if act == "overviewServers":
|
|||
ioloop.close()
|
||||
|
||||
if form.getvalue('action'):
|
||||
import requests
|
||||
|
||||
haproxy_user = sql.get_setting('stats_user')
|
||||
haproxy_pass = sql.get_setting('stats_password')
|
||||
stats_port = sql.get_setting('stats_port')
|
||||
|
@ -919,8 +917,6 @@ if form.getvalue('action'):
|
|||
auth=(haproxy_user, haproxy_pass))
|
||||
|
||||
if serv is not None and act == "stats":
|
||||
import requests
|
||||
|
||||
if form.getvalue('service') == 'nginx':
|
||||
haproxy_user = sql.get_setting('nginx_stats_user')
|
||||
haproxy_pass = sql.get_setting('nginx_stats_password')
|
||||
|
@ -1004,7 +1000,7 @@ if form.getvalue('viewlogs') is not None:
|
|||
if funct.check_user_group():
|
||||
out = funct.show_roxy_log(serv=viewlog, rows=rows, waf='0', grep=grep, hour=hour, minut=minut, hour1=hour1,
|
||||
minut1=minut1, service='internal')
|
||||
print(out)
|
||||
print(out)
|
||||
|
||||
if serv is not None and act == "showMap":
|
||||
import networkx as nx
|
||||
|
@ -1017,10 +1013,9 @@ if serv is not None and act == "showMap":
|
|||
haproxy_config_path = sql.get_setting('haproxy_config_path')
|
||||
hap_configs_dir = get_config.get_config_var('configs', 'haproxy_save_configs_dir')
|
||||
date = funct.get_data('config')
|
||||
cfg = hap_configs_dir + serv + "-" + date + ".cfg"
|
||||
cfg = f'{hap_configs_dir}{serv}-{date}.cfg'
|
||||
|
||||
print('<center>')
|
||||
print("<h4>Map from %s</h4><br />" % serv)
|
||||
print(f'<center><h4 style="margin-bottom: 0;">Map from {serv}</h4>')
|
||||
|
||||
error = funct.get_config(serv, cfg)
|
||||
if error:
|
||||
|
@ -1028,7 +1023,8 @@ if serv is not None and act == "showMap":
|
|||
try:
|
||||
conf = open(cfg, "r")
|
||||
except IOError:
|
||||
print('error: Can\'t read import config file')
|
||||
print('error: Cannot read import config file')
|
||||
sys.exit()
|
||||
|
||||
G = nx.DiGraph()
|
||||
node = ""
|
||||
|
@ -1090,8 +1086,8 @@ if serv is not None and act == "showMap":
|
|||
sections['backends'][node]['servers'][line_new[0]] = {line_new[0]: backend_server_port}
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
os.system("/bin/rm -f " + cfg)
|
||||
conf.close()
|
||||
os.remove(cfg)
|
||||
|
||||
i, k, j = 0, 0, 0
|
||||
backend_servers_len_dict = 1
|
||||
|
@ -1215,11 +1211,8 @@ if serv is not None and act == "showMap":
|
|||
except Exception as e:
|
||||
print(str(e))
|
||||
|
||||
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('<img src="/map%s.png" alt="map">' % date)
|
||||
os.system(f"rm -f {os.path.dirname(os.getcwd())}/map*.png && mv map.png {os.path.dirname(os.getcwd())}/map{date}.png")
|
||||
print(f'<img src="/map{date}.png" alt="map"></center>')
|
||||
|
||||
if form.getvalue('servaction') is not None:
|
||||
server_state_file = sql.get_setting('server_state_file')
|
||||
|
@ -1227,22 +1220,23 @@ if form.getvalue('servaction') is not None:
|
|||
enable = funct.checkAjaxInput(form.getvalue('servaction'))
|
||||
backend = funct.checkAjaxInput(form.getvalue('servbackend'))
|
||||
|
||||
cmd = 'echo "{} {}" |sudo socat stdio {}'.format(enable, backend, haproxy_sock)
|
||||
cmd = f'echo "{enable} {backend}" |sudo socat stdio {haproxy_sock}'
|
||||
|
||||
if form.getvalue('save') == "on":
|
||||
save_command = 'echo "show servers state" | sudo socat {} stdio > {}'.format(haproxy_sock, server_state_file)
|
||||
save_command = f'echo "show servers state" | sudo socat {haproxy_sock} stdio > {server_state_file}'
|
||||
command = [cmd + ';' + save_command]
|
||||
else:
|
||||
command = [cmd]
|
||||
|
||||
if enable != "show":
|
||||
funct.logging(serv, 'Has been ' + enable + 'ed ' + backend, login=1, keep_history=1, service='haproxy')
|
||||
funct.logging(serv, f'Has been {enable}ed {backend}', login=1, keep_history=1, service='haproxy')
|
||||
print(
|
||||
'<center><h3>You %s %s on HAProxy %s. <a href="statsview.py?serv=%s" title="View stat" target="_blank">Look it</a> or <a href="runtimeapi.py" title="Runtime API">Edit something else</a></h3><br />' % (
|
||||
enable, backend, serv, serv))
|
||||
f'<center><h3>You {enable} {backend} on HAProxy {serv}. <a href="statsview.py?serv={serv}" '
|
||||
f'title="View stat" target="_blank">Look it</a> or <a href="runtimeapi.py" '
|
||||
f'title="Runtime API">Edit something else</a></h3><br />')
|
||||
|
||||
print(funct.ssh_command(serv, command, show_log="1"))
|
||||
action = 'runtimeapi.py ' + enable + ' ' + backend
|
||||
action = f'runtimeapi.py {enable} {backend}'
|
||||
funct.logging(serv, action)
|
||||
|
||||
if act == "showCompareConfigs":
|
||||
|
@ -1344,9 +1338,10 @@ if serv is not None and act == "configShow":
|
|||
is_serv_protected=is_serv_protected,
|
||||
is_restart=is_restart)
|
||||
print(template)
|
||||
conf.close()
|
||||
|
||||
if form.getvalue('configver') is None:
|
||||
os.system("/bin/rm -f " + cfg)
|
||||
os.remove(cfg)
|
||||
|
||||
if act == 'configShowFiles':
|
||||
service = form.getvalue('service')
|
||||
|
@ -1396,31 +1391,19 @@ if form.getvalue('master'):
|
|||
script = "install_keepalived.sh"
|
||||
proxy = sql.get_setting('proxy')
|
||||
keepalived_path_logs = sql.get_setting('keepalived_path_logs')
|
||||
ssh_port = 22
|
||||
ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(master)
|
||||
|
||||
if ssh_enable == 0:
|
||||
ssh_key_name = ''
|
||||
|
||||
servers = sql.select_servers(server=master)
|
||||
for server in servers:
|
||||
ssh_port = str(server[10])
|
||||
proxy_serv = ''
|
||||
ssh_settings = funct.return_ssh_keys_path(master)
|
||||
|
||||
if proxy is not None and proxy != '' and proxy != 'None':
|
||||
proxy_serv = proxy
|
||||
else:
|
||||
proxy_serv = ''
|
||||
|
||||
os.system("cp scripts/%s ." % script)
|
||||
os.system(f"cp scripts/{script} .")
|
||||
|
||||
commands = [
|
||||
"chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + " SSH_PORT=" + ssh_port + " router_id=" + router_id
|
||||
+ " ETH=" + ETH + " IP=" + str(
|
||||
IP) + " MASTER=MASTER" + " ETH_SLAVE=" + ETH_SLAVE + " keepalived_path_logs=" + keepalived_path_logs
|
||||
+ " RETURN_TO_MASTER=" + return_to_master + " SYN_FLOOD=" + syn_flood + " HOST=" + str(
|
||||
master) + " HAPROXY=" + haproxy
|
||||
+ " NGINX=" + nginx + " USER=" + str(ssh_user_name) + " PASS='" + str(ssh_user_password) + "' KEY=" + str(
|
||||
ssh_key_name)
|
||||
f"chmod +x {script} && ./{script} PROXY={proxy_serv} SSH_PORT={ssh_settings['port']} router_id={router_id} "
|
||||
f"ETH={ETH} IP={IP} MASTER=MASTER ETH_SLAVE={ETH_SLAVE} keepalived_path_logs={keepalived_path_logs} "
|
||||
f"RETURN_TO_MASTER={return_to_master} SYN_FLOOD={syn_flood} HOST={master} HAPROXY={haproxy} NGINX={nginx} "
|
||||
f"USER={ssh_settings['user']} PASS='{ssh_settings['password']}' KEY={ssh_settings['key']}"
|
||||
]
|
||||
|
||||
output, error = funct.subprocess_execute(commands[0])
|
||||
|
@ -1437,6 +1420,7 @@ if form.getvalue('master'):
|
|||
hostname + '-VIP', IP, group_id, '1', '1', '0', cred_id, ssh_port, 'VRRP IP for ' + master, haproxy,
|
||||
nginx, '0', firewall
|
||||
)
|
||||
os.remove(script)
|
||||
|
||||
if form.getvalue('master_slave'):
|
||||
master = form.getvalue('master_slave')
|
||||
|
@ -1451,36 +1435,25 @@ if form.getvalue('master_slave'):
|
|||
script = "install_keepalived.sh"
|
||||
proxy = sql.get_setting('proxy')
|
||||
keepalived_path_logs = sql.get_setting('keepalived_path_logs')
|
||||
ssh_port = 22
|
||||
ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(slave)
|
||||
|
||||
if ssh_enable == 0:
|
||||
ssh_key_name = ''
|
||||
|
||||
servers = sql.select_servers(server=slave)
|
||||
for server in servers:
|
||||
ssh_port = str(server[10])
|
||||
proxy_serv = ''
|
||||
ssh_settings = funct.return_ssh_keys_path(slave)
|
||||
|
||||
if proxy is not None and proxy != '' and proxy != 'None':
|
||||
proxy_serv = proxy
|
||||
else:
|
||||
proxy_serv = ''
|
||||
|
||||
os.system("cp scripts/%s ." % script)
|
||||
os.system(f"cp scripts/{script} .")
|
||||
|
||||
commands = [
|
||||
"chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + " SSH_PORT=" + ssh_port + " router_id=" + router_id
|
||||
+ " ETH=" + ETH + " IP=" + IP + " MASTER=BACKUP" + " ETH_SLAVE=" + ETH_SLAVE + " keepalived_path_logs=" + keepalived_path_logs
|
||||
+ " HAPROXY=" + HAPROXY + " NGINX=" + nginx + " HOST=" + str(slave) + " USER=" + str(
|
||||
ssh_user_name) + " PASS='" + str(ssh_user_password)
|
||||
+ "' KEY=" + str(ssh_key_name)
|
||||
f"chmod +x {script} && ./{script} PROXY={proxy_serv} SSH_PORT={ssh_settings['port']} router_id={router_id} ETH={ETH} "
|
||||
f"IP={IP} MASTER=BACKUP ETH_SLAVE={ETH_SLAVE} keepalived_path_logs={keepalived_path_logs} HAPROXY={HAPROXY} "
|
||||
f"NGINX={nginx} HOST={slave} USER={ssh_settings['user']} PASS='{ssh_settings['password']}' KEY={ssh_settings['key']}"
|
||||
]
|
||||
|
||||
output, error = funct.subprocess_execute(commands[0])
|
||||
|
||||
funct.show_installation_output(error, output, 'slave Keepalived')
|
||||
|
||||
os.system("rm -f %s" % script)
|
||||
os.remove(script)
|
||||
sql.update_server_master(master, slave)
|
||||
sql.update_keepalived(slave)
|
||||
|
||||
|
@ -1496,34 +1469,25 @@ if form.getvalue('masteradd'):
|
|||
script = "install_keepalived.sh"
|
||||
proxy = sql.get_setting('proxy')
|
||||
keepalived_path_logs = sql.get_setting('keepalived_path_logs')
|
||||
ssh_port = 22
|
||||
ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(master)
|
||||
|
||||
if ssh_enable == 0:
|
||||
ssh_key_name = ''
|
||||
proxy_serv = ''
|
||||
ssh_settings = funct.return_ssh_keys_path(master)
|
||||
|
||||
if proxy is not None and proxy != '' and proxy != 'None':
|
||||
proxy_serv = proxy
|
||||
else:
|
||||
proxy_serv = ''
|
||||
|
||||
os.system("cp scripts/%s ." % script)
|
||||
|
||||
servers = sql.select_servers(server=master)
|
||||
for server in servers:
|
||||
ssh_port = str(server[10])
|
||||
os.system(f"cp scripts/{script} .")
|
||||
|
||||
commands = [
|
||||
"chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + " SSH_PORT=" + ssh_port + " ETH=" + ETH
|
||||
+ " SLAVE_ETH=" + SLAVE_ETH + " keepalived_path_logs=" + keepalived_path_logs + " RETURN_TO_MASTER=" + return_to_master
|
||||
+ " IP=" + str(IP) + " MASTER=MASTER" + " RESTART=" + kp + " ADD_VRRP=1 HOST=" + str(
|
||||
master) + " router_id=" + router_id
|
||||
+ " USER=" + str(ssh_user_name) + " PASS='" + str(ssh_user_password) + "' KEY=" + str(ssh_key_name)
|
||||
f"chmod +x {script} && ./{script} PROXY={proxy_serv} SSH_PORT={ssh_settings['port']} ETH={ETH} SLAVE_ETH={SLAVE_ETH} "
|
||||
f"keepalived_path_logs={keepalived_path_logs} RETURN_TO_MASTER={return_to_master} IP={IP} MASTER=MASTER "
|
||||
f"RESTART={kp} ADD_VRRP=1 HOST={master} router_id={router_id} USER={ssh_settings['user']} "
|
||||
f"PASS='{ssh_settings['password']}' KEY={ssh_settings['key']}"
|
||||
]
|
||||
|
||||
output, error = funct.subprocess_execute(commands[0])
|
||||
|
||||
funct.show_installation_output(error, output, 'master VRRP address')
|
||||
os.remove(script)
|
||||
|
||||
if form.getvalue('masteradd_slave'):
|
||||
master = form.getvalue('masteradd_slave')
|
||||
|
@ -1536,36 +1500,25 @@ if form.getvalue('masteradd_slave'):
|
|||
script = "install_keepalived.sh"
|
||||
proxy = sql.get_setting('proxy')
|
||||
keepalived_path_logs = sql.get_setting('keepalived_path_logs')
|
||||
ssh_port = 22
|
||||
ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(slave)
|
||||
|
||||
if ssh_enable == 0:
|
||||
ssh_key_name = ''
|
||||
proxy_serv = ''
|
||||
ssh_settings = funct.return_ssh_keys_path(slave)
|
||||
|
||||
if proxy is not None and proxy != '' and proxy != 'None':
|
||||
proxy_serv = proxy
|
||||
else:
|
||||
proxy_serv = ''
|
||||
|
||||
os.system("cp scripts/%s ." % script)
|
||||
|
||||
servers = sql.select_servers(server=slave)
|
||||
for server in servers:
|
||||
ssh_port = str(server[10])
|
||||
os.system(f"cp scripts/{script} .")
|
||||
|
||||
commands = [
|
||||
"chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv
|
||||
+ " SSH_PORT=" + ssh_port + " ETH=" + ETH + " SLAVE_ETH=" + SLAVE_ETH + " keepalived_path_logs=" + keepalived_path_logs
|
||||
+ " IP=" + str(IP) + " MASTER=BACKUP" + " RESTART=" + kp + " ADD_VRRP=1 HOST=" + str(
|
||||
slave) + " router_id=" + router_id
|
||||
+ " USER=" + str(ssh_user_name) + " PASS='" + str(ssh_user_password) + "' KEY=" + str(ssh_key_name)
|
||||
f"chmod +x {script} && ./{script} PROXY={proxy_serv} SSH_PORT={ssh_settings['port']} ETH={ETH} SLAVE_ETH={SLAVE_ETH} "
|
||||
f"keepalived_path_logs={keepalived_path_logs} IP={IP} MASTER=BACKUP RESTART={kp} ADD_VRRP=1 HOST={slave} "
|
||||
f"router_id={router_id} USER={ssh_settings['user']} PASS='{ssh_settings['password']}' KEY={ssh_settings['key']}"
|
||||
]
|
||||
|
||||
output, error = funct.subprocess_execute(commands[0])
|
||||
|
||||
funct.show_installation_output(error, output, 'slave VRRP address')
|
||||
|
||||
os.system("rm -f %s" % script)
|
||||
os.remove(script)
|
||||
|
||||
if form.getvalue('master_slave_hap'):
|
||||
master = form.getvalue('master_slave_hap')
|
||||
|
@ -1592,16 +1545,15 @@ if form.getvalue('master_slave_nginx'):
|
|||
if form.getvalue('install_grafana'):
|
||||
script = "install_grafana.sh"
|
||||
proxy = sql.get_setting('proxy')
|
||||
proxy_serv = ''
|
||||
host = os.environ.get('HTTP_HOST', '')
|
||||
|
||||
os.system("cp scripts/%s ." % script)
|
||||
os.system(f"cp scripts/{script} .")
|
||||
|
||||
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 = [f"chmod +x {script} && ./{script} PROXY={proxy_serv}"]
|
||||
|
||||
output, error = funct.subprocess_execute(commands[0])
|
||||
|
||||
|
@ -1623,7 +1575,7 @@ if form.getvalue('install_grafana'):
|
|||
print(
|
||||
f'success: Grafana and Prometheus servers were installed. You can find Grafana on http://{host}:3000<br>')
|
||||
|
||||
os.system("rm -f %s" % script)
|
||||
os.remove(script)
|
||||
|
||||
if form.getvalue('haproxy_exp_install'):
|
||||
serv = form.getvalue('haproxy_exp_install')
|
||||
|
@ -1636,17 +1588,9 @@ if form.getvalue('haproxy_exp_install'):
|
|||
stats_password = sql.get_setting('stats_password')
|
||||
stat_page = sql.get_setting('stats_page')
|
||||
proxy = sql.get_setting('proxy')
|
||||
ssh_port = 22
|
||||
ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(serv)
|
||||
ssh_settings = funct.return_ssh_keys_path(serv)
|
||||
|
||||
if ssh_enable == 0:
|
||||
ssh_key_name = ''
|
||||
|
||||
servers = sql.select_servers(server=serv)
|
||||
for server in servers:
|
||||
ssh_port = str(server[10])
|
||||
|
||||
os.system("cp scripts/%s ." % script)
|
||||
os.system(f"cp scripts/{script} .")
|
||||
|
||||
if proxy is not None and proxy != '' and proxy != 'None':
|
||||
proxy_serv = proxy
|
||||
|
@ -1654,93 +1598,76 @@ if form.getvalue('haproxy_exp_install'):
|
|||
proxy_serv = ''
|
||||
|
||||
commands = [
|
||||
"chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv
|
||||
+ " STAT_PORT=" + str(stats_port) + " STAT_FILE=" + server_state_file
|
||||
+ " SSH_PORT=" + ssh_port + " STAT_PAGE=" + stat_page + " VER=" + ver + " EXP_PROM=" + ext_prom
|
||||
+ " STATS_USER=" + stats_user + " STATS_PASS='" + stats_password + "' HOST=" + serv
|
||||
+ " USER=" + ssh_user_name + " PASS='" + ssh_user_password + "' KEY=" + ssh_key_name
|
||||
f"chmod +x {script} && ./{script} PROXY={proxy_serv} STAT_PORT={stats_port} STAT_FILE={server_state_file}"
|
||||
f" SSH_PORT={ssh_settings['port']} STAT_PAGE={stat_page} VER={ver} EXP_PROM={ext_prom} STATS_USER={stats_user}"
|
||||
f" STATS_PASS='{stats_password}' HOST={serv} USER={ssh_settings['user']} PASS='{ssh_settings['password']}' KEY={ssh_settings['key']}"
|
||||
]
|
||||
|
||||
output, error = funct.subprocess_execute(commands[0])
|
||||
|
||||
funct.show_installation_output(error, output, 'HAProxy exporter')
|
||||
|
||||
os.system("rm -f %s" % script)
|
||||
os.remove(script)
|
||||
|
||||
if form.getvalue('nginx_exp_install'):
|
||||
serv = form.getvalue('nginx_exp_install')
|
||||
ver = form.getvalue('exporter_v')
|
||||
ext_prom = form.getvalue('ext_prom')
|
||||
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')
|
||||
if form.getvalue('nginx_exp_install') or form.getvalue('apache_exp_install'):
|
||||
if form.getvalue('nginx_exp_install'):
|
||||
service = 'nginx'
|
||||
elif form.getvalue('apache_exp_install'):
|
||||
service = 'apache'
|
||||
|
||||
serv = funct.is_ip_or_dns(form.getvalue('serv'))
|
||||
ver = funct.checkAjaxInput(form.getvalue('exporter_v'))
|
||||
ext_prom = funct.checkAjaxInput(form.getvalue('ext_prom'))
|
||||
script = f"install_{service}_exporter.sh"
|
||||
stats_user = sql.get_setting(f'{service}_stats_user')
|
||||
stats_password = sql.get_setting(f'{service}_stats_password')
|
||||
stats_port = sql.get_setting(f'{service}_stats_port')
|
||||
stats_page = sql.get_setting(f'{service}_stats_page')
|
||||
proxy = sql.get_setting('proxy')
|
||||
ssh_port = 22
|
||||
ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(serv)
|
||||
proxy_serv = ''
|
||||
ssh_settings = funct.return_ssh_keys_path(serv)
|
||||
|
||||
if ssh_enable == 0:
|
||||
ssh_key_name = ''
|
||||
|
||||
servers = sql.select_servers(server=serv)
|
||||
for server in servers:
|
||||
ssh_port = str(server[10])
|
||||
|
||||
os.system("cp scripts/%s ." % script)
|
||||
os.system(f"cp scripts/{script} .")
|
||||
|
||||
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=" + str(stats_port) + " SSH_PORT=" + ssh_port + " STAT_PAGE=" + stats_page
|
||||
+ " STATS_USER=" + stats_user + " STATS_PASS='" + stats_password + "' HOST=" + serv + " VER=" + ver
|
||||
+ " EXP_PROM=" + ext_prom + " USER=" + ssh_user_name + " PASS='" + ssh_user_password + "' KEY=" + ssh_key_name
|
||||
f"chmod +x {script} && ./{script} PROXY={proxy_serv} STAT_PORT={stats_port} SSH_PORT={ssh_settings['port']} STAT_PAGE={stats_page}"
|
||||
f" STATS_USER={stats_user} STATS_PASS='{stats_password}' HOST={serv} VER={ver} EXP_PROM={ext_prom} USER={ssh_settings['user']} "
|
||||
f" PASS='{ssh_settings['password']}' KEY={ssh_settings['key']}"
|
||||
]
|
||||
|
||||
output, error = funct.subprocess_execute(commands[0])
|
||||
|
||||
funct.show_installation_output(error, output, 'Nginx exporter')
|
||||
funct.show_installation_output(error, output, f'{service.title()} exporter')
|
||||
|
||||
os.system("rm -f %s" % script)
|
||||
os.remove(script)
|
||||
|
||||
if form.getvalue('node_exp_install'):
|
||||
serv = form.getvalue('node_exp_install')
|
||||
ver = form.getvalue('exporter_v')
|
||||
ext_prom = form.getvalue('ext_prom')
|
||||
serv = funct.is_ip_or_dns(form.getvalue('node_exp_install'))
|
||||
ver = funct.checkAjaxInput(form.getvalue('exporter_v'))
|
||||
ext_prom = funct.checkAjaxInput(form.getvalue('ext_prom'))
|
||||
script = "install_node_exporter.sh"
|
||||
proxy = sql.get_setting('proxy')
|
||||
ssh_port = 22
|
||||
ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(serv)
|
||||
proxy_serv = ''
|
||||
ssh_settings = funct.return_ssh_keys_path(serv)
|
||||
|
||||
if ssh_enable == 0:
|
||||
ssh_key_name = ''
|
||||
|
||||
servers = sql.select_servers(server=serv)
|
||||
for server in servers:
|
||||
ssh_port = str(server[10])
|
||||
|
||||
os.system("cp scripts/%s ." % script)
|
||||
os.system(f"cp scripts/{script} .")
|
||||
|
||||
if proxy is not None and proxy != '' and proxy != 'None':
|
||||
proxy_serv = proxy
|
||||
else:
|
||||
proxy_serv = ''
|
||||
|
||||
commands = [
|
||||
"chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + " SSH_PORT=" + ssh_port
|
||||
+ " VER=" + ver + " EXP_PROM=" + ext_prom + " HOST=" + serv + " USER=" + ssh_user_name
|
||||
+ " PASS='" + ssh_user_password + "' KEY=" + ssh_key_name
|
||||
f"chmod +x {script} && ./{script} PROXY={proxy_serv} SSH_PORT={ssh_settings['port']} VER={ver} EXP_PROM={ext_prom} "
|
||||
f"HOST={serv} USER={ssh_settings['user']} PASS='{ssh_settings['password']}' KEY={ssh_settings['key']}"
|
||||
]
|
||||
|
||||
output, error = funct.subprocess_execute(commands[0])
|
||||
|
||||
funct.show_installation_output(error, output, 'Node exporter')
|
||||
|
||||
os.system("rm -f %s" % script)
|
||||
os.remove(script)
|
||||
|
||||
if form.getvalue('backup') or form.getvalue('deljob') or form.getvalue('backupupdate'):
|
||||
serv = form.getvalue('server')
|
||||
|
@ -1753,8 +1680,7 @@ if form.getvalue('backup') or form.getvalue('deljob') or form.getvalue('backupup
|
|||
update = form.getvalue('backupupdate')
|
||||
description = form.getvalue('description')
|
||||
script = 'backup.sh'
|
||||
ssh_port = 22
|
||||
ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path('localhost', id=int(cred))
|
||||
ssh_settings = funct.return_ssh_keys_path('localhost', id=int(cred))
|
||||
|
||||
if deljob:
|
||||
time = ''
|
||||
|
@ -1768,16 +1694,11 @@ if form.getvalue('backup') or form.getvalue('deljob') or form.getvalue('backupup
|
|||
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])
|
||||
|
||||
os.system("cp scripts/%s ." % script)
|
||||
os.system(f"cp scripts/{script} .")
|
||||
|
||||
commands = [
|
||||
"chmod +x " + script + " && ./" + script + " HOST=" + rserver + " SERVER=" + serv
|
||||
+ " TYPE=" + backup_type + " SSH_PORT=" + ssh_port + " TIME=" + time
|
||||
+ " RPATH=" + rpath + " DELJOB=" + deljob + " USER=" + str(ssh_user_name) + " KEY=" + str(ssh_key_name)
|
||||
f"chmod +x {script} && ./{script} HOST={rserver} SERVER={serv} TYPE={backup_type} SSH_PORT={ssh_settings['port']} "
|
||||
f"TIME={time} RPATH={rpath} DELJOB={deljob} USER={ssh_settings['user']} KEY={ssh_settings['key']}"
|
||||
]
|
||||
|
||||
output, error = funct.subprocess_execute(commands[0])
|
||||
|
@ -1813,6 +1734,8 @@ if form.getvalue('backup') or form.getvalue('deljob') or form.getvalue('backupup
|
|||
print('Ok')
|
||||
funct.logging('backup ', ' a backup job for server ' + serv + ' has been updated', haproxywi=1, login=1)
|
||||
|
||||
os.remove(script)
|
||||
|
||||
if form.getvalue('git_backup'):
|
||||
server_id = form.getvalue('server')
|
||||
service_id = form.getvalue('git_service')
|
||||
|
@ -1830,19 +1753,13 @@ if form.getvalue('git_backup'):
|
|||
service_name = sql.select_service_name_by_id(service_id).lower()
|
||||
service_config_dir = sql.get_setting(service_name + '_dir')
|
||||
script = 'git_backup.sh'
|
||||
ssh_port = 22
|
||||
ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path('localhost', id=int(cred))
|
||||
proxy_serv = ''
|
||||
ssh_settings = funct.return_ssh_keys_path('localhost', id=int(cred))
|
||||
|
||||
os.system("cp scripts/%s ." % script)
|
||||
os.system(f"cp scripts/{script} .")
|
||||
|
||||
if proxy is not None and proxy != '' and proxy != 'None':
|
||||
proxy_serv = proxy
|
||||
else:
|
||||
proxy_serv = ''
|
||||
|
||||
servers = sql.select_servers(server=server_ip)
|
||||
for server in servers:
|
||||
ssh_port = str(server[10])
|
||||
|
||||
if repo is None or git_init == '0':
|
||||
repo = ''
|
||||
|
@ -1850,10 +1767,9 @@ if form.getvalue('git_backup'):
|
|||
branch = 'main'
|
||||
|
||||
commands = [
|
||||
"chmod +x " + script + " && ./" + script + " HOST=" + server_ip + " DELJOB=" + deljob
|
||||
+ " SERVICE=" + service_name + " INIT=" + git_init + " SSH_PORT=" + ssh_port + " PERIOD=" + period
|
||||
+ " REPO=" + repo + " BRANCH=" + branch + " CONFIG_DIR=" + service_config_dir
|
||||
+ " PROXY=" + proxy_serv + " USER=" + str(ssh_user_name) + " KEY=" + str(ssh_key_name)
|
||||
f"chmod +x {script} && ./{script} HOST={server_ip} DELJOB={deljob} SERVICE={service_name} INIT={git_init} "
|
||||
f"SSH_PORT={ssh_settings['port']} PERIOD={period} REPO={repo} BRANCH={branch} CONFIG_DIR={service_config_dir} "
|
||||
f"PROXY={proxy_serv} USER={ssh_settings['user']} KEY={ssh_settings['key']}"
|
||||
]
|
||||
|
||||
output, error = funct.subprocess_execute(commands[0])
|
||||
|
@ -1887,7 +1803,7 @@ if form.getvalue('git_backup'):
|
|||
else:
|
||||
if sql.delete_git(form.getvalue('git_backup')):
|
||||
print('Ok')
|
||||
os.system("rm -f %s" % script)
|
||||
os.remove(script)
|
||||
|
||||
if form.getvalue('install_nginx'):
|
||||
funct.install_nginx(form.getvalue('install_nginx'), docker=form.getvalue('docker'))
|
||||
|
@ -1914,7 +1830,7 @@ if form.getvalue('update_roxy_wi'):
|
|||
'roxy-wi-socket',
|
||||
'roxy-wi-prometheus-exporter']
|
||||
if service not in services:
|
||||
print('error: ' + service + ' is not part of Roxy-WI')
|
||||
print(f'error: {service} is not part of Roxy-WI')
|
||||
sys.exit()
|
||||
funct.update_roxy_wi(service)
|
||||
|
||||
|
@ -2094,7 +2010,7 @@ if form.getvalue('get_nginx_v'):
|
|||
|
||||
if is_dockerized == '1':
|
||||
container_name = sql.get_setting('nginx_container_name')
|
||||
cmd = ["docker exec -it " + container_name + " /usr/sbin/nginx -v 2>&1|awk '{print $3}'"]
|
||||
cmd = [f"docker exec -it {container_name} /usr/sbin/nginx -v 2>&1|awk '{{print $3}}'"]
|
||||
else:
|
||||
cmd = ['sudo /usr/sbin/nginx -v']
|
||||
print(funct.ssh_command(serv, cmd))
|
||||
|
@ -2108,44 +2024,45 @@ if form.getvalue('get_exporter_v'):
|
|||
|
||||
if form.getvalue('bwlists'):
|
||||
lib_path = get_config.get_config_var('main', 'lib_path')
|
||||
list_path = lib_path + "/" + sql.get_setting('lists_path') + "/" + form.getvalue('group') + "/" + form.getvalue(
|
||||
'color') + "/" + form.getvalue('bwlists')
|
||||
color = funct.checkAjaxInput(form.getvalue('color'))
|
||||
group = funct.checkAjaxInput(form.getvalue('group'))
|
||||
bwlists = funct.checkAjaxInput(form.getvalue('bwlists'))
|
||||
list_path = f"{lib_path}/{sql.get_setting('lists_path')}/{group}/{color}/{bwlist}"
|
||||
|
||||
try:
|
||||
file = open(list_path, "r")
|
||||
file_read = file.read()
|
||||
file.close()
|
||||
print(file_read)
|
||||
except IOError:
|
||||
print('error: Cat\'n read ' + form.getvalue('color') + ' list , ')
|
||||
print(f"error: Cannot read {color} list")
|
||||
|
||||
if form.getvalue('bwlists_create'):
|
||||
color = form.getvalue('color')
|
||||
color = funct.checkAjaxInput(form.getvalue('color'))
|
||||
lib_path = get_config.get_config_var('main', 'lib_path')
|
||||
list_name = form.getvalue('bwlists_create').split('.')[0]
|
||||
list_name += '.lst'
|
||||
list_path = lib_path + "/" + sql.get_setting('lists_path') + "/" + form.getvalue(
|
||||
'group') + "/" + color + "/" + list_name
|
||||
list_name = f"{form.getvalue('bwlists_create').split('.')[0]}.lst"
|
||||
list_path = f"{lib_path}/{sql.get_setting('lists_path')}/{form.getvalue('group')}/{color}/{list_name}"
|
||||
try:
|
||||
open(list_path, 'a').close()
|
||||
print('success: ')
|
||||
try:
|
||||
funct.logging(serv, 'has been created ' + color + ' list ' + list_name, haproxywi=1, login=1)
|
||||
funct.logging(serv, f'A new list {color} {list_name} has been created', haproxywi=1, login=1)
|
||||
except Exception:
|
||||
pass
|
||||
except IOError as e:
|
||||
print('error: Cannot create new ' + color + ' list. %s , ' % e)
|
||||
print(f'error: Cannot create a new {color} list. {e}, ')
|
||||
|
||||
if form.getvalue('bwlists_save'):
|
||||
color = form.getvalue('color')
|
||||
bwlists_save = form.getvalue('bwlists_save')
|
||||
color = funct.checkAjaxInput(form.getvalue('color'))
|
||||
group = funct.checkAjaxInput(form.getvalue('group'))
|
||||
bwlists_save = funct.checkAjaxInput(form.getvalue('bwlists_save'))
|
||||
lib_path = get_config.get_config_var('main', 'lib_path')
|
||||
list_path = lib_path + "/" + sql.get_setting('lists_path') + "/" + form.getvalue(
|
||||
'group') + "/" + color + "/" + bwlists_save
|
||||
list_path = f"{lib_path}/{sql.get_setting('lists_path')}/{group}/{color}/{bwlists_save}"
|
||||
try:
|
||||
with open(list_path, "w") as file:
|
||||
file.write(form.getvalue('bwlists_content'))
|
||||
except IOError as e:
|
||||
print('error: Cannot save ' + color + ' list. %s , ' % e)
|
||||
print(f'error: Cannot save {color} list. {e}')
|
||||
|
||||
path = sql.get_setting('haproxy_dir') + "/" + color
|
||||
servers = []
|
||||
|
@ -2163,8 +2080,8 @@ if form.getvalue('bwlists_save'):
|
|||
servers.append(s[2])
|
||||
|
||||
for serv in servers:
|
||||
funct.ssh_command(serv, ["sudo mkdir " + path])
|
||||
funct.ssh_command(serv, ["sudo chown $(whoami) " + path])
|
||||
funct.ssh_command(serv, [f"sudo mkdir {path}"])
|
||||
funct.ssh_command(serv, [f"sudo chown $(whoami) {path}"])
|
||||
error = funct.upload(serv, path + "/" + bwlists_save, list_path, dir='fullpath')
|
||||
|
||||
if error:
|
||||
|
@ -2172,7 +2089,7 @@ if form.getvalue('bwlists_save'):
|
|||
else:
|
||||
print('success: Edited ' + color + ' list was uploaded to ' + serv + ' , ')
|
||||
try:
|
||||
funct.logging(serv, 'has been edited the ' + color + ' list ' + bwlists_save, haproxywi=1, login=1)
|
||||
funct.logging(serv, f'Has been edited the {color} list {bwlists_save}', haproxywi=1, login=1)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
@ -2184,9 +2101,9 @@ if form.getvalue('bwlists_save'):
|
|||
haproxy_service_name = "haproxy"
|
||||
|
||||
if form.getvalue('bwlists_restart') == 'restart':
|
||||
funct.ssh_command(serv, ["sudo systemctl restart " + haproxy_service_name])
|
||||
funct.ssh_command(serv, [f"sudo systemctl restart {haproxy_service_name}"])
|
||||
elif form.getvalue('bwlists_restart') == 'reload':
|
||||
funct.ssh_command(serv, ["sudo systemctl reload " + haproxy_service_name])
|
||||
funct.ssh_command(serv, [f"sudo systemctl reload {haproxy_service_name}"])
|
||||
|
||||
if form.getvalue('bwlists_delete'):
|
||||
color = form.getvalue('color')
|
||||
|
@ -2939,13 +2856,11 @@ if form.getvalue('showBytes') is not None:
|
|||
bin_bout.append(cout[0])
|
||||
env = Environment(loader=FileSystemLoader('templates'), autoescape=True)
|
||||
template = env.get_template('ajax/bin_bout.html')
|
||||
template = template.render(bin_bout=bin_bout, serv=serv)
|
||||
template = template.render(bin_bout=bin_bout, serv=serv, service='haproxy')
|
||||
print(template)
|
||||
|
||||
if form.getvalue('nginxConnections'):
|
||||
import requests
|
||||
|
||||
serv = form.getvalue('nginxConnections')
|
||||
serv = funct.is_ip_or_dns(form.getvalue('nginxConnections'))
|
||||
port = sql.get_setting('nginx_stats_port')
|
||||
user = sql.get_setting('nginx_stats_user')
|
||||
password = sql.get_setting('nginx_stats_password')
|
||||
|
@ -2967,7 +2882,30 @@ if form.getvalue('nginxConnections'):
|
|||
template = template.render(bin_bout=bin_bout, serv=serv, service='nginx')
|
||||
print(template)
|
||||
else:
|
||||
print('error: cannot connect to Nginx stat page')
|
||||
print('error: cannot connect to NGINX stat page')
|
||||
|
||||
if form.getvalue('apachekBytes'):
|
||||
serv = funct.is_ip_or_dns(form.getvalue('apachekBytes'))
|
||||
port = sql.get_setting('apache_stats_port')
|
||||
user = sql.get_setting('apache_stats_user')
|
||||
password = sql.get_setting('apache_stats_password')
|
||||
page = sql.get_setting('apache_stats_page')
|
||||
bin_bout = []
|
||||
url = f'http://{serv}:{port}/{page}?auto'
|
||||
|
||||
r = requests.get(url, auth=(user, password))
|
||||
|
||||
if r.status_code == 200:
|
||||
for line in r.text.split('\n'):
|
||||
if 'ReqPerSec' in line or 'BytesPerSec' in line:
|
||||
bin_bout.append(line.split(' ')[1])
|
||||
|
||||
env = Environment(loader=FileSystemLoader('templates'))
|
||||
template = env.get_template('ajax/bin_bout.html')
|
||||
template = template.render(bin_bout=bin_bout, serv=serv, service='apache')
|
||||
print(template)
|
||||
else:
|
||||
print('error: cannot connect to Apache stat page')
|
||||
|
||||
if form.getvalue('waf_rule_id'):
|
||||
enable = funct.checkAjaxInput(form.getvalue('waf_en'))
|
||||
|
@ -3029,27 +2967,18 @@ if form.getvalue('lets_domain'):
|
|||
ssl_path = sql.get_setting('cert_path')
|
||||
haproxy_dir = sql.get_setting('haproxy_dir')
|
||||
script = "letsencrypt.sh"
|
||||
ssh_port = "22"
|
||||
ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(serv)
|
||||
proxy_serv = ''
|
||||
ssh_settings = funct.return_ssh_keys_path(serv)
|
||||
|
||||
if ssh_enable == 0:
|
||||
ssh_key_name = ''
|
||||
|
||||
servers = sql.select_servers(server=serv)
|
||||
for server in servers:
|
||||
ssh_port = str(server[10])
|
||||
|
||||
os.system("cp scripts/%s ." % script)
|
||||
os.system(f"cp scripts/{script} .")
|
||||
|
||||
if proxy is not None and proxy != '' and proxy != 'None':
|
||||
proxy_serv = proxy
|
||||
else:
|
||||
proxy_serv = ''
|
||||
|
||||
commands = [
|
||||
"chmod +x " + script + " && ./" + script + " PROXY=" + proxy_serv + " haproxy_dir=" + haproxy_dir
|
||||
+ " 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
|
||||
f"chmod +x {script} && ./{script} PROXY={proxy_serv} haproxy_dir={haproxy_dir} DOMAIN={lets_domain} "
|
||||
f"EMAIL={lets_email} SSH_PORT={ssh_settings['port']} SSL_PATH={ssl_path} HOST={serv} USER={ ssh_settings['user']} "
|
||||
f"PASS='{ssh_settings['password']}' KEY={ssh_settings['key']}"
|
||||
]
|
||||
|
||||
output, error = funct.subprocess_execute(commands[0])
|
||||
|
@ -3071,7 +3000,7 @@ if form.getvalue('lets_domain'):
|
|||
else:
|
||||
print('success: Certificate has been created')
|
||||
|
||||
os.system("rm -f %s" % script)
|
||||
os.remove(script)
|
||||
|
||||
if form.getvalue('uploadovpn'):
|
||||
name = funct.checkAjaxInput(form.getvalue('ovpnname'))
|
||||
|
@ -3194,7 +3123,8 @@ if form.getvalue('geoip_install'):
|
|||
service = form.getvalue('geoip_service')
|
||||
proxy = sql.get_setting('proxy')
|
||||
maxmind_key = sql.get_setting('maxmind_key')
|
||||
ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(serv)
|
||||
proxy_serv = ''
|
||||
ssh_settings = funct.return_ssh_keys_path(serv)
|
||||
|
||||
if service in ('haproxy', 'nginx'):
|
||||
service_dir = funct.return_nice_path(sql.get_setting(f'{service}_dir'))
|
||||
|
@ -3203,28 +3133,22 @@ if form.getvalue('geoip_install'):
|
|||
print('warning: select a server and service first')
|
||||
sys.exit()
|
||||
|
||||
if ssh_enable == 0:
|
||||
ssh_key_name = ''
|
||||
|
||||
ssh_port = [ str(server[10]) for server in sql.select_servers(server=serv) ]
|
||||
|
||||
if proxy is not None and proxy != '' and proxy != 'None':
|
||||
proxy_serv = proxy
|
||||
else:
|
||||
proxy_serv = ''
|
||||
|
||||
os.system(f"cp scripts/{script} .")
|
||||
|
||||
commands = [
|
||||
f"chmod +x {script} && ./{script} PROXY={proxy_serv} SSH_PORT={ssh_port[0]} UPDATE={geoip_update} maxmind_key={maxmind_key} "
|
||||
f"service_dir={service_dir} HOST={serv} USER={ssh_user_name} PASS={ssh_user_password} KEY={ssh_key_name}"
|
||||
f"chmod +x {script} && ./{script} PROXY={proxy_serv} SSH_PORT={ssh_settings['port']} UPDATE={geoip_update} "
|
||||
f"maxmind_key={maxmind_key} service_dir={service_dir} HOST={serv} USER={ssh_settings['user']} "
|
||||
f"PASS={ssh_settings['password']} KEY={ssh_settings['key']}"
|
||||
]
|
||||
|
||||
output, error = funct.subprocess_execute(commands[0])
|
||||
|
||||
funct.show_installation_output(error, output, 'GeoLite2 Database')
|
||||
|
||||
os.system("rm -f %s" % script)
|
||||
os.remove(script)
|
||||
|
||||
if form.getvalue('nettools_icmp_server_from'):
|
||||
server_from = form.getvalue('nettools_icmp_server_from')
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
- hosts: "{{ variable_host }}"
|
||||
become: yes
|
||||
become_method: sudo
|
||||
tasks:
|
||||
- name: Set SSH port
|
||||
set_fact:
|
||||
ansible_port: "{{SSH_PORT}}"
|
||||
|
||||
- name: Open stat port for iptables
|
||||
iptables:
|
||||
chain: INPUT
|
||||
destination_port: "9117"
|
||||
jump: ACCEPT
|
||||
protocol: tcp
|
||||
ignore_errors: yes
|
||||
|
||||
|
||||
roles:
|
||||
- role: apache_exporter
|
||||
environment:
|
||||
http_proxy: "{{PROXY}}"
|
||||
https_proxy: "{{PROXY}}"
|
||||
vars:
|
||||
apache_exporter_scrape_uri: 'http://{{STATS_USER}}:{{STATS_PASS}}@{{variable_host}}:{{STAT_PORT}}/{{STAT_PAGE}}'
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
apache_exporter_version: 0.6.0
|
||||
apache_exporter_telemetry_address: "0.0.0.0:9117"
|
||||
apache_exporter_telemetry_endpoint: "/metrics"
|
||||
apache_exporter_incecure: "false"
|
||||
stats_page: "stats"
|
||||
apache_exporter_scrape_uri: "http://{{host}}/{{stats_page}}?auto"
|
||||
prometheus_exporter_dir: "/opt/prometheus/exporters"
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
- name: restart apache exporter
|
||||
become: true
|
||||
systemd:
|
||||
daemon_reload: true
|
||||
name: apache_exporter
|
||||
state: restarted
|
|
@ -0,0 +1,81 @@
|
|||
---
|
||||
- include: preflight.yml
|
||||
|
||||
- name: Create the Apache Exporter group
|
||||
become: true
|
||||
group:
|
||||
name: "{{ __apache_exporter_group }}"
|
||||
state: present
|
||||
system: true
|
||||
|
||||
- name: Create the Apache Exporter user
|
||||
become: true
|
||||
user:
|
||||
name: "{{ __apache_exporter_user }}"
|
||||
groups: "{{ __apache_exporter_group }}"
|
||||
append: true
|
||||
shell: /usr/sbin/nologin
|
||||
system: true
|
||||
createhome: false
|
||||
home: /
|
||||
|
||||
- name: Distribution Directory
|
||||
become: true
|
||||
become_user: root
|
||||
file:
|
||||
path: "{{ prometheus_exporter_dir }}"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "u=rwx,go=rx"
|
||||
state: directory
|
||||
|
||||
- name: Download apache_exporter binary to local folder
|
||||
get_url:
|
||||
url: "https://github.com/Lusitaniae/apache_exporter/releases/download/v{{ apache_exporter_version }}/apache_exporter-{{ apache_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}.tar.gz"
|
||||
dest: "/tmp/apache_exporter-{{ apache_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}.tar.gz"
|
||||
checksum: "sha256:{{ __apache_exporter_checksum }}"
|
||||
register: _download_binary
|
||||
until: _download_binary is succeeded
|
||||
retries: 5
|
||||
delay: 2
|
||||
delegate_to: localhost
|
||||
check_mode: false
|
||||
|
||||
- name: Unpack apache_exporter binary
|
||||
unarchive:
|
||||
src: "/tmp/apache_exporter-{{ apache_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}.tar.gz"
|
||||
dest: "/tmp"
|
||||
creates: "/tmp/apache_exporter-{{ apache_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}/apache_exporter"
|
||||
delegate_to: localhost
|
||||
check_mode: false
|
||||
|
||||
- name: Propagate apache_exporter binaries
|
||||
become: true
|
||||
copy:
|
||||
src: "/tmp/apache_exporter-{{ apache_exporter_version }}.linux-{{ go_arch_map[ansible_architecture] | default(ansible_architecture) }}/apache_exporter"
|
||||
dest: "/opt/prometheus/exporters/apache_exporter"
|
||||
mode: 0755
|
||||
owner: root
|
||||
group: root
|
||||
notify:
|
||||
- restart apache exporter
|
||||
|
||||
when: not ansible_check_mode
|
||||
- name: Copy the apache_exporter systemd service file
|
||||
become: true
|
||||
template:
|
||||
src: apache_exporter.service.j2
|
||||
dest: /etc/systemd/system/apache_exporter.service
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0644
|
||||
no_log: true
|
||||
notify:
|
||||
- restart apache exporter
|
||||
|
||||
- name: Ensure apache_exporter is enabled on boot
|
||||
become: true
|
||||
systemd:
|
||||
name: apache_exporter
|
||||
state: started
|
||||
enabled: true
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
- name: "Get checksum for {{ go_arch_map[ansible_architecture] | default(ansible_architecture) }} architecture"
|
||||
set_fact:
|
||||
__apache_exporter_checksum: "{{ item.split(' ')[0] }}"
|
||||
with_items:
|
||||
- "{{ lookup('url', 'https://github.com/Lusitaniae/apache_exporter/releases/download/v' + apache_exporter_version + '/sha256sums.txt', wantlist=True) | list }}"
|
||||
when: "('linux-' + (go_arch_map[ansible_architecture] | default(ansible_architecture)) + '.tar.gz') in item"
|
|
@ -0,0 +1,20 @@
|
|||
{{ ansible_managed | comment }}
|
||||
|
||||
[Unit]
|
||||
Description=Prometheus Apache Exporter
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User={{ __apache_exporter_user }}
|
||||
Group={{ __apache_exporter_group }}
|
||||
ExecStart={{ prometheus_exporter_dir }}/apache_exporter \
|
||||
--telemetry.address {{ apache_exporter_telemetry_address|default("0.0.0.0:9117") }} \
|
||||
--scrape_uri {{ apache_exporter_scrape_uri|default("http://localhost/server-status/?auto") }} \
|
||||
--telemetry.endpoint {{ apache_exporter_telemetry_endpoint|default("/metrics") }} \
|
||||
|
||||
SyslogIdentifier=apache_exporter
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
go_arch_map:
|
||||
i386: '386'
|
||||
x86_64: 'amd64'
|
||||
aarch64: 'arm64'
|
||||
armv7l: 'armv7'
|
||||
armv6l: 'armv6'
|
||||
|
||||
__apache_exporter_user: apache-exp
|
||||
__apache_exporter_group: apache-exp
|
|
@ -0,0 +1,54 @@
|
|||
#!/bin/bash
|
||||
for ARGUMENT in "$@"
|
||||
do
|
||||
KEY=$(echo $ARGUMENT | cut -f1 -d=)
|
||||
VALUE=$(echo $ARGUMENT | cut -f2 -d=)
|
||||
|
||||
case "$KEY" in
|
||||
PROXY) PROXY=${VALUE} ;;
|
||||
HOST) HOST=${VALUE} ;;
|
||||
USER) USER=${VALUE} ;;
|
||||
PASS) PASS=${VALUE} ;;
|
||||
KEY) KEY=${VALUE} ;;
|
||||
VER) VER=${VALUE} ;;
|
||||
EXP_PROM) EXP_PROM=${VALUE} ;;
|
||||
STAT_PORT) STAT_PORT=${VALUE} ;;
|
||||
STAT_PAGE) STAT_PAGE=${VALUE} ;;
|
||||
STATS_USER) STATS_USER=${VALUE} ;;
|
||||
STATS_PASS) STATS_PASS=${VALUE} ;;
|
||||
SSH_PORT) SSH_PORT=${VALUE} ;;
|
||||
*)
|
||||
esac
|
||||
done
|
||||
|
||||
export ANSIBLE_HOST_KEY_CHECKING=False
|
||||
export ANSIBLE_DISPLAY_SKIPPED_HOSTS=False
|
||||
export ACTION_WARNINGS=False
|
||||
export LOCALHOST_WARNING=False
|
||||
export COMMAND_WARNINGS=False
|
||||
|
||||
PWD=`pwd`
|
||||
PWD=$PWD/scripts/ansible/
|
||||
echo "$HOST ansible_port=$SSH_PORT" > $PWD/$HOST
|
||||
|
||||
if [[ $KEY == "" ]]; then
|
||||
ansible-playbook $PWD/roles/apache_exporter.yml -e "ansible_user=$USER ansible_ssh_pass='$PASS' variable_host=$HOST PROXY=$PROXY STAT_PAGE=$STAT_PAGE STAT_PORT=$STAT_PORT STATS_USER=$STATS_USER STATS_PASS=$STATS_PASS SSH_PORT=$SSH_PORT apache_exporter_version=$VER" -i $PWD/$HOST
|
||||
else
|
||||
ansible-playbook $PWD/roles/apache_exporter.yml --key-file $KEY -e "ansible_user=$USER variable_host=$HOST PROXY=$PROXY STAT_PAGE=$STAT_PAGE STAT_PORT=$STAT_PORT STATS_USER=$STATS_USER STATS_PASS=$STATS_PASS SSH_PORT=$SSH_PORT apache_exporter_version=$VER" -i $PWD/$HOST
|
||||
fi
|
||||
|
||||
if [ $? -gt 0 ]
|
||||
then
|
||||
echo "error: Can't install Apache exporter <br /><br />"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$EXP_PROM" == 0 ]
|
||||
then
|
||||
if ! sudo grep -Fxq " - $HOST:9117" /etc/prometheus/prometheus.yml; then
|
||||
sudo echo " - $HOST:9117" | sudo tee -a /etc/prometheus/prometheus.yml > /dev/null
|
||||
sudo systemctl reload prometheus 2>> /dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
rm -f $PWD/$HOST
|
|
@ -1,4 +1,4 @@
|
|||
{% if service != 'nginx' %}
|
||||
{% if service == 'haproxy' %}
|
||||
<div class="bin_bout" id="show_bin_bout">
|
||||
<div class="server-name">
|
||||
Bytes in
|
||||
|
@ -39,6 +39,7 @@
|
|||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if service == 'nginx' or service == 'haproxy' %}
|
||||
<div id="sessions" class="bin_bout">
|
||||
<div class="server-name">
|
||||
Current ses
|
||||
|
@ -59,4 +60,36 @@
|
|||
<div class="bytes" id="total_sess">
|
||||
{{bin_bout.3}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if service == 'apache' %}
|
||||
<div class="bin_bout" id="show_bin_bout">
|
||||
<div class="server-name">
|
||||
ReqPerSec
|
||||
<span class="update-icon" style="font-size: 13px; margin-top: 8px;">
|
||||
<a onclick="showApachekBytes('{{ serv }}')" title="Refresh">
|
||||
<span class="service-reload"></span>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
<div class="bytes" id="bin">
|
||||
{{bin_bout.0}}
|
||||
</div>
|
||||
<div class="server-name">
|
||||
BytesPerSec
|
||||
</div>
|
||||
<div class="bytes" id="bout">
|
||||
{% set total = bin_bout.1|int / 1024 %}
|
||||
{% set metric = 'Kb' %}
|
||||
{% if total > 1000 %}
|
||||
{% set total = total / 1024 %}
|
||||
{% set metric = 'Mb' %}
|
||||
{% endif %}
|
||||
{% if total > 1000 %}
|
||||
{% set total = total / 1024 %}
|
||||
{% set metric = 'Gb' %}
|
||||
{% endif %}
|
||||
{{total|round(2)}} {{metric}}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
|
|
@ -68,11 +68,11 @@
|
|||
function showMetrics() {
|
||||
{%- if service == 'haproxy' %}
|
||||
{%- for s in servers %}
|
||||
{%- if s.8.0.9 %}
|
||||
getChartData(server_ip)
|
||||
getHttpChartData(server_ip)
|
||||
getWafChartData(server_ip)
|
||||
{% endif %}
|
||||
{%- if s.8.0.9 %}
|
||||
getChartData(server_ip)
|
||||
getHttpChartData(server_ip)
|
||||
getWafChartData(server_ip)
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
showOverviewServer('{{s.1}}', server_ip, '{{s.0}}', '{{service}}');
|
||||
|
@ -82,6 +82,7 @@
|
|||
getNginxChartData(server_ip)
|
||||
{% endif %}
|
||||
{%- elif service == 'apache' %}
|
||||
showApachekBytes(server_ip)
|
||||
{% if s.8.0.27 %}
|
||||
getApacheChartData(server_ip)
|
||||
{% endif %}
|
||||
|
|
|
@ -93,6 +93,37 @@
|
|||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table>
|
||||
<caption><h3>Install Apache Exporter</h3></caption>
|
||||
<tr class="overviewHead">
|
||||
<td class="padding10 first-collumn">Current installation</td>
|
||||
<td class="padding10 first-collumn" style="width: 30%;">Available Versions</td>
|
||||
<td class="help_cursor" style="width: 20%;" title="This exporter will be used by an external Prometheus. Also use this checkbox if you update the Exporter">External Prometheus</td>
|
||||
<td class="padding10 first-collumn" style="width: 30%;">Server</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td id="cur_apache_exp_ver" class="padding10 first-collumn"></td>
|
||||
<td class="padding10 first-collumn" style="width: 20%;">
|
||||
{% set values = dict() %}
|
||||
{% set values = {'0.7.0':'0.7.0', '0.8.0':'0.8.0', '0.9.0':'0.9.0', '0.10.0':'0.10.0'} %}
|
||||
{{ select('apacheexpver', values=values, selected='0.10.0') }}
|
||||
</td>
|
||||
<td style="padding-left: 53px;">{{ checkbox('apache_ext_prom', title="This exporter will be used by an external Prometheus. Also use this checkbox if you update the Exporter") }}</td>
|
||||
<td class="padding10 first-collumn">
|
||||
<select autofocus required name="apache_exp_addserv" id="apache_exp_addserv">
|
||||
<option disabled selected>------</option>
|
||||
{% for select in servers %}
|
||||
<option value="{{ select.2 }}">{{ select.1 }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<span class="ui-button ui-widget ui-corner-all" id="apache_exp_install" title="Install Apache Exporter">Install</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table style="margin-top: 20px">
|
||||
<caption><h3>Install Node Exporter</h3></caption>
|
||||
<tr class="overviewHead">
|
||||
|
|
|
@ -4,3 +4,4 @@ pyTelegramBotAPI>=3.6.3
|
|||
slack-sdk>=3.4.0
|
||||
distro>=1.2.0
|
||||
retry>=0.9.2
|
||||
psutil>=5.9.1
|
||||
|
|
|
@ -518,6 +518,28 @@ function showNginxConnections(serv) {
|
|||
}
|
||||
} );
|
||||
}
|
||||
function showApachekBytes(serv) {
|
||||
$.ajax( {
|
||||
url: "options.py",
|
||||
data: {
|
||||
apachekBytes: serv,
|
||||
token: $('#token').val()
|
||||
},
|
||||
type: "POST",
|
||||
beforeSend: function() {
|
||||
$("#sessions").html('<img class="loading_small_bin_bout" src="/inc/images/loading.gif" />');
|
||||
},
|
||||
success: function( data ) {
|
||||
data = data.replace(/\s+/g,' ');
|
||||
if (data.indexOf('error:') != '-1') {
|
||||
toastr.error(data);
|
||||
} else {
|
||||
$("#bin_bout").html(data);
|
||||
$.getScript("/inc/fontawesome.min.js")
|
||||
}
|
||||
}
|
||||
} );
|
||||
}
|
||||
function showUsersOverview() {
|
||||
$.ajax( {
|
||||
url: "options.py",
|
||||
|
|
68
inc/users.js
68
inc/users.js
|
@ -166,7 +166,8 @@ $( function() {
|
|||
$.ajax( {
|
||||
url: "options.py",
|
||||
data: {
|
||||
nginx_exp_install: $('#nginx_exp_addserv').val(),
|
||||
nginx_exp_install: 1,
|
||||
serv: $('#nginx_exp_addserv').val(),
|
||||
exporter_v: $('#nginxexpver').val(),
|
||||
ext_prom: ext_prom,
|
||||
token: $('#token').val()
|
||||
|
@ -180,7 +181,7 @@ $( function() {
|
|||
} else if (data.indexOf('success') != '-1' ){
|
||||
toastr.clear();
|
||||
toastr.success(data);
|
||||
$('#cur_nginx_exp_ver').text('Nginx exporter is installed');
|
||||
$('#cur_nginx_exp_ver').text('NGINX exporter is installed');
|
||||
$("#nginx_exp_addserv").trigger( "selectmenuchange" );
|
||||
} else if (data.indexOf('Info') != '-1' ){
|
||||
toastr.clear();
|
||||
|
@ -192,6 +193,43 @@ $( function() {
|
|||
}
|
||||
} );
|
||||
});
|
||||
$('#apache_exp_install').click(function() {
|
||||
$("#ajaxmon").html('')
|
||||
$("#ajaxmon").html(wait_mess);
|
||||
var ext_prom = 0;
|
||||
if ($('#apache_ext_prom').is(':checked')) {
|
||||
ext_prom = '1';
|
||||
}
|
||||
$.ajax( {
|
||||
url: "options.py",
|
||||
data: {
|
||||
apache_exp_install: 1,
|
||||
serv: $('#apache_exp_addserv').val(),
|
||||
exporter_v: $('#apacheexpver').val(),
|
||||
ext_prom: ext_prom,
|
||||
token: $('#token').val()
|
||||
},
|
||||
type: "POST",
|
||||
success: function( data ) {
|
||||
data = data.replace(/\s+/g,' ');
|
||||
$("#ajaxmon").html('');
|
||||
if (data.indexOf('error:') != '-1' || data.indexOf('FAILED') != '-1' || data.indexOf('UNREACHABLE') != '-1') {
|
||||
toastr.error(data);
|
||||
} else if (data.indexOf('success') != '-1' ){
|
||||
toastr.clear();
|
||||
toastr.success(data);
|
||||
$('#cur_apache_exp_ver').text('Apache exporter is installed');
|
||||
$("#apache_exp_addserv").trigger( "selectmenuchange" );
|
||||
} else if (data.indexOf('Info') != '-1' ){
|
||||
toastr.clear();
|
||||
toastr.info(data);
|
||||
} else {
|
||||
toastr.clear();
|
||||
toastr.info(data);
|
||||
}
|
||||
}
|
||||
} );
|
||||
});
|
||||
$('#node_exp_install').click(function() {
|
||||
$("#ajaxmon").html('')
|
||||
$("#ajaxmon").html(wait_mess);
|
||||
|
@ -315,7 +353,7 @@ $( function() {
|
|||
toastr.clear();
|
||||
toastr.error(data);
|
||||
} else if(data == 'no' || data == '') {
|
||||
$('#cur_nginx_exp_ver').text('Nginx exporter has not been installed');
|
||||
$('#cur_nginx_exp_ver').text('NGINX exporter has not been installed');
|
||||
} else {
|
||||
$('#cur_nginx_exp_ver').text(data);
|
||||
$('#cur_nginx_exp_ver').css('font-weight', 'bold');
|
||||
|
@ -323,6 +361,29 @@ $( function() {
|
|||
}
|
||||
} );
|
||||
});
|
||||
$( "#apache_exp_addserv" ).on('selectmenuchange',function() {
|
||||
$.ajax( {
|
||||
url: "options.py",
|
||||
data: {
|
||||
get_exporter_v: 'apache_exporter',
|
||||
serv: $('#apache_exp_addserv option:selected').val(),
|
||||
token: $('#token').val()
|
||||
},
|
||||
type: "POST",
|
||||
success: function( data ) {
|
||||
data = data.replace(/^\s+|\s+$/g,'');
|
||||
if (data.indexOf('error:') != '-1') {
|
||||
toastr.clear();
|
||||
toastr.error(data);
|
||||
} else if(data == 'no' || data == '') {
|
||||
$('#cur_apache_exp_ver').text('Apache exporter has not been installed');
|
||||
} else {
|
||||
$('#cur_apache_exp_ver').text(data);
|
||||
$('#cur_apache_exp_ver').css('font-weight', 'bold');
|
||||
}
|
||||
}
|
||||
} );
|
||||
});
|
||||
$( "#node_exp_addserv" ).on('selectmenuchange',function() {
|
||||
$.ajax( {
|
||||
url: "options.py",
|
||||
|
@ -1060,6 +1121,7 @@ function addServer(dialog_id) {
|
|||
$('select:regex(id, backup-server)').append('<option value=' + $('#ip-'+id).text() + '>' + $('#hostname-'+id).val() + '</option>').selectmenu("refresh");
|
||||
$('select:regex(id, haproxy_exp_addserv)').append('<option value=' + $('#ip-'+id).text() + '>' + $('#hostname-'+id).val() + '</option>').selectmenu("refresh");
|
||||
$('select:regex(id, nginx_exp_addserv)').append('<option value=' + $('#ip-'+id).text() + '>' + $('#hostname-'+id).val() + '</option>').selectmenu("refresh");
|
||||
$('select:regex(id, apache_exp_addserv)').append('<option value=' + $('#ip-'+id).text() + '>' + $('#hostname-'+id).val() + '</option>').selectmenu("refresh");
|
||||
$('select:regex(id, node_exp_addserv)').append('<option value=' + $('#ip-'+id).text() + '>' + $('#hostname-'+id).val() + '</option>').selectmenu("refresh");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue