Pavel Loginov 2022-05-23 19:16:21 +03:00
parent 85a59b6b2b
commit 56b2c8639b
4 changed files with 307 additions and 244 deletions

View File

@ -1,15 +1,15 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import json
import os import os
import sys import sys
from bottle import route, run, template, hook, response, request, error from bottle import route, run, hook, response, request, error
sys.path.append(os.path.dirname(os.path.abspath(__file__))) sys.path.append(os.path.dirname(os.path.abspath(__file__)))
os.chdir(os.path.dirname(os.path.abspath(__file__))) os.chdir(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app/')) sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app/'))
import api_funct import api_funct
import json
import sql import sql
_error_auth = '403 Auth before' _error_auth = '403 Auth before'
@ -108,7 +108,7 @@ def get_servers():
'alert': s[8], 'alert': s[8],
'metrics': s[9] 'metrics': s[9]
} }
except: except Exception:
pass pass
return dict(servers=data) return dict(servers=data)
@ -231,6 +231,5 @@ def callback(server_id, service):
if __name__ == '__main__': if __name__ == '__main__':
print(sys.path)
port = int(os.environ.get('PORT', 8080)) port = int(os.environ.get('PORT', 8080))
run(host='0.0.0.0', port=port, debug=True) run(host='0.0.0.0', port=port, debug=True)

View File

@ -1,7 +1,7 @@
import os import os
import sys import sys
import json import json
from bottle import route, run, template, hook, response, request, post from bottle import route, run, hook, response, request, post
sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app/')) sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app/'))
import sql import sql
@ -179,9 +179,12 @@ def get_status(server_id, service):
for k in out: for k in out:
servers_with_status.append(k) servers_with_status.append(k)
json_for_sending = { json_for_sending = {
server_id: {"Version": servers_with_status[0][0].split('/')[1], server_id: {
"Version": servers_with_status[0][0].split('/')[1],
"Uptime": servers_with_status[0][1].split(':')[1].strip(), "Uptime": servers_with_status[0][1].split(':')[1].strip(),
"Process": servers_with_status[0][2].split(' ')[1]}} "Process": servers_with_status[0][2].split(' ')[1]
}
}
data = json_for_sending data = json_for_sending
except Exception as e: except Exception as e:
data = {server_id: {"error": "Cannot get status: " + str(e)}} data = {server_id: {"error": "Cannot get status: " + str(e)}}

View File

@ -16,10 +16,10 @@ funct.check_login(service=1)
funct.page_for_admin(level=3) funct.page_for_admin(level=3)
if ( if (
form.getvalue('mode') is None and form.getvalue('mode') is None
form.getvalue('new_userlist') is None and and form.getvalue('new_userlist') is None
form.getvalue('peers-name') is None and and form.getvalue('peers-name') is None
form.getvalue('generateconfig') is None and form.getvalue('generateconfig') is None
): ):
try: try:
user, user_id, role, token, servers, user_services = funct.get_users_params(haproxy=1) user, user_id, role, token, servers, user_services = funct.get_users_params(haproxy=1)
@ -332,7 +332,8 @@ elif form.getvalue('mode') is not None:
waf = " filter spoe engine modsecurity config " + haproxy_dir + "/waf.conf\n" waf = " filter spoe engine modsecurity config " + haproxy_dir + "/waf.conf\n"
waf += " http-request deny if { var(txn.modsec.code) -m int gt 0 }\n" waf += " http-request deny if { var(txn.modsec.code) -m int gt 0 }\n"
config_add = "\n" + name + "\n" + bind + mode + maxconn + balance + options_split + cache_s + filter_com + compression_s + waf + acl + backend + servers_split + "\n" + cache_set + "\n" config_add = "\n" + name + "\n" + bind + mode + maxconn + balance + options_split + cache_s + filter_com + \
compression_s + waf + acl + backend + servers_split + "\n" + cache_set + "\n"
if form.getvalue('new_userlist') is not None: if form.getvalue('new_userlist') is not None:
name = "userlist " + form.getvalue('new_userlist') + "\n" name = "userlist " + form.getvalue('new_userlist') + "\n"

View File

@ -123,7 +123,8 @@ def add_setting_for_new_group(group_id):
group_id = str(group_id) group_id = str(group_id)
data_source = [ data_source = [
{'param': 'time_zone', 'value': 'UTC', 'section': 'main', 'desc': 'Time Zone', 'group': group_id}, {'param': 'time_zone', 'value': 'UTC', 'section': 'main', 'desc': 'Time Zone', 'group': group_id},
{'param': 'proxy', 'value': '', 'section': 'main', 'desc': 'IP address and port of the proxy server . Use proto://ip:port', {'param': 'proxy', 'value': '', 'section': 'main',
'desc': 'IP address and port of the proxy server . Use proto://ip:port',
'group': group_id}, 'group': group_id},
{'param': 'session_ttl', 'value': '5', 'section': 'main', 'desc': 'TTL for a user session (in days)', {'param': 'session_ttl', 'value': '5', 'section': 'main', 'desc': 'TTL for a user session (in days)',
'group': group_id}, 'group': group_id},
@ -141,7 +142,8 @@ def add_setting_for_new_group(group_id):
'desc': 'Enable getting logs from a syslog server; (0 - no, 1 - yes)', 'group': group_id}, 'desc': 'Enable getting logs from a syslog server; (0 - no, 1 - yes)', 'group': group_id},
{'param': 'syslog_server', 'value': '', 'section': 'logs', 'desc': 'IP address of the syslog_server', {'param': 'syslog_server', 'value': '', 'section': 'logs', 'desc': 'IP address of the syslog_server',
'group': group_id}, 'group': group_id},
{'param': 'stats_user', 'value': 'admin', 'section': 'haproxy', 'desc': 'Username for accessing HAProxy stats page', {'param': 'stats_user', 'value': 'admin', 'section': 'haproxy',
'desc': 'Username for accessing HAProxy stats page',
'group': group_id}, 'group': group_id},
{'param': 'stats_password', 'value': 'password', 'section': 'haproxy', {'param': 'stats_password', 'value': 'password', 'section': 'haproxy',
'desc': 'Password for accessing HAProxy stats page', 'group': group_id}, 'desc': 'Password for accessing HAProxy stats page', 'group': group_id},
@ -151,9 +153,11 @@ def add_setting_for_new_group(group_id):
'group': group_id}, 'group': group_id},
{'param': 'haproxy_dir', 'value': '/etc/haproxy', 'section': 'haproxy', 'desc': 'Path to the HAProxy directory', {'param': 'haproxy_dir', 'value': '/etc/haproxy', 'section': 'haproxy', 'desc': 'Path to the HAProxy directory',
'group': group_id}, 'group': group_id},
{'param': 'haproxy_config_path', 'value': '/etc/haproxy/haproxy.cfg', 'section': 'haproxy', 'desc': 'Path to the HAProxy configuration file', {'param': 'haproxy_config_path', 'value': '/etc/haproxy/haproxy.cfg', 'section': 'haproxy',
'desc': 'Path to the HAProxy configuration file',
'group': group_id}, 'group': group_id},
{'param': 'server_state_file', 'value': '/etc/haproxy/haproxy.state', 'section': 'haproxy', 'desc': 'Path to the HAProxy state file', {'param': 'server_state_file', 'value': '/etc/haproxy/haproxy.state', 'section': 'haproxy',
'desc': 'Path to the HAProxy state file',
'group': group_id}, 'group': group_id},
{'param': 'haproxy_sock', 'value': '/var/run/haproxy.sock', 'section': 'haproxy', {'param': 'haproxy_sock', 'value': '/var/run/haproxy.sock', 'section': 'haproxy',
'desc': 'Path to the HAProxy sock file', 'group': group_id}, 'desc': 'Path to the HAProxy sock file', 'group': group_id},
@ -161,7 +165,8 @@ def add_setting_for_new_group(group_id):
'group': group_id}, 'group': group_id},
{'param': 'nginx_path_logs', 'value': '/var/log/nginx/', 'section': 'nginx', {'param': 'nginx_path_logs', 'value': '/var/log/nginx/', 'section': 'nginx',
'desc': 'NGINX error log', 'group': group_id}, 'desc': 'NGINX error log', 'group': group_id},
{'param': 'nginx_stats_user', 'value': 'admin', 'section': 'nginx', 'desc': 'Username for accessing NGINX stats page', {'param': 'nginx_stats_user', 'value': 'admin', 'section': 'nginx',
'desc': 'Username for accessing NGINX stats page',
'group': group_id}, 'group': group_id},
{'param': 'nginx_stats_password', 'value': 'password', 'section': 'nginx', {'param': 'nginx_stats_password', 'value': 'password', 'section': 'nginx',
'desc': 'Password for accessing NGINX stats page', 'group': group_id}, 'desc': 'Password for accessing NGINX stats page', 'group': group_id},
@ -175,22 +180,26 @@ def add_setting_for_new_group(group_id):
'desc': 'Path to the main NGINX configuration file', 'group': group_id}, 'desc': 'Path to the main NGINX configuration file', 'group': group_id},
{'param': 'ldap_enable', 'value': '0', 'section': 'ldap', 'desc': 'Enable LDAP (1 - yes, 0 - no)', {'param': 'ldap_enable', 'value': '0', 'section': 'ldap', 'desc': 'Enable LDAP (1 - yes, 0 - no)',
'group': group_id}, 'group': group_id},
{'param': 'ldap_server', 'value': '', 'section': 'ldap', 'desc': 'IP address of the LDAP server', 'group': group_id}, {'param': 'ldap_server', 'value': '', 'section': 'ldap', 'desc': 'IP address of the LDAP server',
{'param': 'ldap_port', 'value': '389', 'section': 'ldap', 'desc': 'LDAP port (port 389 or 636 is used by default)', 'group': group_id},
{'param': 'ldap_port', 'value': '389', 'section': 'ldap',
'desc': 'LDAP port (port 389 or 636 is used by default)',
'group': group_id}, 'group': group_id},
{'param': 'ldap_user', 'value': '', 'section': 'ldap', {'param': 'ldap_user', 'value': '', 'section': 'ldap',
'desc': 'LDAP username. Format: user@domain.com', 'group': group_id}, 'desc': 'LDAP username. Format: user@domain.com', 'group': group_id},
{'param': 'ldap_password', 'value': '', 'section': 'ldap', 'desc': 'LDAP password', 'group': group_id}, {'param': 'ldap_password', 'value': '', 'section': 'ldap', 'desc': 'LDAP password', 'group': group_id},
{'param': 'ldap_base', 'value': '', 'section': 'ldap', 'desc': 'Base domain. Example: dc=domain, dc=com', {'param': 'ldap_base', 'value': '', 'section': 'ldap', 'desc': 'Base domain. Example: dc=domain, dc=com',
'group': group_id}, 'group': group_id},
{'param': 'ldap_domain', 'value': '', 'section': 'ldap', 'desc': 'LDAP domain for logging in', 'group': group_id}, {'param': 'ldap_domain', 'value': '', 'section': 'ldap', 'desc': 'LDAP domain for logging in',
'group': group_id},
{'param': 'ldap_class_search', 'value': 'user', 'section': 'ldap', 'desc': 'Class for searching the user', {'param': 'ldap_class_search', 'value': 'user', 'section': 'ldap', 'desc': 'Class for searching the user',
'group': group_id}, 'group': group_id},
{'param': 'ldap_user_attribute', 'value': 'sAMAccountName', 'section': 'ldap', {'param': 'ldap_user_attribute', 'value': 'sAMAccountName', 'section': 'ldap',
'desc': 'Attribute to search users by', 'group': group_id}, 'desc': 'Attribute to search users by', 'group': group_id},
{'param': 'ldap_search_field', 'value': 'mail', 'section': 'ldap', {'param': 'ldap_search_field', 'value': 'mail', 'section': 'ldap',
'desc': 'User\'s email address', 'group': group_id}, 'desc': 'User\'s email address', 'group': group_id},
{'param': 'ldap_type', 'value': '0', 'section': 'ldap', 'desc': 'Use LDAPS (1 - yes, 0 - no)', 'group': group_id}, {'param': 'ldap_type', 'value': '0', 'section': 'ldap', 'desc': 'Use LDAPS (1 - yes, 0 - no)',
'group': group_id},
{'param': 'apache_path_logs', 'value': '/var/log/httpd/', 'section': 'apache', {'param': 'apache_path_logs', 'value': '/var/log/httpd/', 'section': 'apache',
'desc': 'The path for Apache logs', 'group': group_id}, 'desc': 'The path for Apache logs', 'group': group_id},
{'param': 'apache_stats_user', 'value': 'admin', 'section': 'apache', {'param': 'apache_stats_user', 'value': 'admin', 'section': 'apache',
@ -253,7 +262,8 @@ def update_group(name, descript, group_id):
def add_server(hostname, ip, group, typeip, enable, master, cred, port, desc, haproxy, nginx, apache, firewall): def add_server(hostname, ip, group, typeip, enable, master, cred, port, desc, haproxy, nginx, apache, firewall):
try: try:
Server.insert(hostname=hostname, ip=ip, groups=group, type_ip=typeip, enable=enable, master=master, cred=cred, Server.insert(hostname=hostname, ip=ip, groups=group, type_ip=typeip, enable=enable, master=master, cred=cred,
port=port, desc=desc, haproxy=haproxy, nginx=nginx, apache=apache, firewall_enable=firewall).execute() port=port, desc=desc, haproxy=haproxy, nginx=nginx, apache=apache,
firewall_enable=firewall).execute()
return True return True
except Exception as e: except Exception as e:
out_error(e) out_error(e)
@ -289,7 +299,8 @@ def update_hapwi_server(server_id, alert, metrics, active, service_name):
out_error(e) out_error(e)
def update_server(hostname, group, typeip, enable, master, server_id, cred, port, desc, haproxy, nginx, apache, firewall, protected): def update_server(hostname, group, typeip, enable, master, server_id, cred, port, desc, haproxy, nginx, apache,
firewall, protected):
try: try:
server_update = Server.update(hostname=hostname, server_update = Server.update(hostname=hostname,
groups=group, groups=group,
@ -512,7 +523,8 @@ def select_servers(**kwargs):
if kwargs.get("hostname"): if kwargs.get("hostname"):
sql = """select * from `servers` where `hostname` = '{}' """.format(kwargs.get("hostname")) sql = """select * from `servers` where `hostname` = '{}' """.format(kwargs.get("hostname"))
if kwargs.get("id_hostname"): if kwargs.get("id_hostname"):
sql = """select * from `servers` where `hostname` ='{}' or id = '{}' or ip = '{}'""".format(kwargs.get("id_hostname"), kwargs.get("id_hostname"), kwargs.get("id_hostname")) sql = """select * from `servers` where `hostname` ='{}' or id = '{}' or ip = '{}'""".format(
kwargs.get("id_hostname"), kwargs.get("id_hostname"), kwargs.get("id_hostname"))
if kwargs.get("server") and kwargs.get("keep_alive"): if kwargs.get("server") and kwargs.get("keep_alive"):
sql = """select active from `servers` where `ip` = '{}' """.format(kwargs.get("server")) sql = """select active from `servers` where `ip` = '{}' """.format(kwargs.get("server"))
else: else:
@ -535,7 +547,8 @@ def select_servers(**kwargs):
if kwargs.get("hostname"): if kwargs.get("hostname"):
sql = """select * from servers where hostname = '{}' """.format(kwargs.get("hostname")) sql = """select * from servers where hostname = '{}' """.format(kwargs.get("hostname"))
if kwargs.get("id_hostname"): if kwargs.get("id_hostname"):
sql = """select * from servers where hostname = '{}' or id = '{}' or ip = '{}'""".format(kwargs.get("id_hostname"), kwargs.get("id_hostname"), kwargs.get("id_hostname")) sql = """select * from servers where hostname = '{}' or id = '{}' or ip = '{}'""".format(
kwargs.get("id_hostname"), kwargs.get("id_hostname"), kwargs.get("id_hostname"))
if kwargs.get("server") and kwargs.get("keep_alive"): if kwargs.get("server") and kwargs.get("keep_alive"):
sql = """select active from servers where ip = '{}' """.format(kwargs.get("server")) sql = """select active from servers where ip = '{}' """.format(kwargs.get("server"))
@ -810,7 +823,7 @@ def get_dick_permit(**kwargs):
ip = '' ip = ''
if kwargs.get('virt'): if kwargs.get('virt'):
type_ip = "" type_ip = "and type_ip = 1"
else: else:
type_ip = "and type_ip = 0" type_ip = "and type_ip = 0"
if kwargs.get('disable') == 0: if kwargs.get('disable') == 0:
@ -831,16 +844,30 @@ def get_dick_permit(**kwargs):
try: try:
if mysql_enable == '1': if mysql_enable == '1':
if grp == '1' and not only_group: if grp == '1' and not only_group:
sql = """ select * from `servers` order by `pos` desc""" sql = """ select * from `servers` where {} {} {} {} {} {} {} order by `pos` desc""".format(disable,
type_ip,
nginx,
haproxy,
keepalived,
apache,
ip)
else: else:
sql = """ select * from `servers` where `groups` = {group} and ({disable}) {type_ip} {ip} {haproxy} {nginx} {keepalived} {apache} order by `pos` desc sql = """ select * from `servers` where `groups` = {group} and ({disable}) {type_ip} {ip} {haproxy} {nginx} {keepalived} {apache} order by `pos` desc
""".format(group=grp, disable=disable, type_ip=type_ip, ip=ip, haproxy=haproxy, nginx=nginx, keepalived=keepalived, apache=apache) """.format(group=grp, disable=disable, type_ip=type_ip, ip=ip, haproxy=haproxy, nginx=nginx,
keepalived=keepalived, apache=apache)
else: else:
if grp == '1' and not only_group: if grp == '1' and not only_group:
sql = """ select * from servers order by pos""" sql = """ select * from servers where {} {} {} {} {} {} {} order by pos""".format(disable,
type_ip,
nginx,
haproxy,
keepalived,
apache,
ip)
else: else:
sql = """ select * from servers where groups = '{group}' and ({disable}) {type_ip} {ip} {haproxy} {nginx} {keepalived} {apache} order by pos sql = """ select * from servers where groups = '{group}' and ({disable}) {type_ip} {ip} {haproxy} {nginx} {keepalived} {apache} order by pos
""".format(group=grp, disable=disable, type_ip=type_ip, ip=ip, haproxy=haproxy, nginx=nginx, keepalived=keepalived, apache=apache) """.format(group=grp, disable=disable, type_ip=type_ip, ip=ip, haproxy=haproxy, nginx=nginx,
keepalived=keepalived, apache=apache)
except Exception as e: except Exception as e:
print(str(e)) print(str(e))
@ -1081,6 +1108,7 @@ def update_slack(token, chanel, group, slack_id):
else: else:
return True return True
def insert_new_option(saved_option, group): def insert_new_option(saved_option, group):
try: try:
Option.insert(options=saved_option, groups=group).execute() Option.insert(options=saved_option, groups=group).execute()
@ -1095,7 +1123,8 @@ def select_options(**kwargs):
if kwargs.get('option'): if kwargs.get('option'):
query = Option.select().where(Option.options == kwargs.get('option')) query = Option.select().where(Option.options == kwargs.get('option'))
elif kwargs.get('group'): elif kwargs.get('group'):
query = Option.select(Option.options).where((Option.groups == kwargs.get('group')) & (Option.options.startswith(kwargs.get('term')))) query = Option.select(Option.options).where(
(Option.groups == kwargs.get('group')) & (Option.options.startswith(kwargs.get('term'))))
else: else:
query = Option.select() query = Option.select()
try: try:
@ -1271,7 +1300,8 @@ def select_waf_metrics(serv, **kwargs):
date_from = "and date > now() - INTERVAL 720 minute group by `date` div 500" date_from = "and date > now() - INTERVAL 720 minute group by `date` div 500"
else: else:
date_from = "and date > now() - INTERVAL 30 minute" date_from = "and date > now() - INTERVAL 30 minute"
sql = """ select * from waf_metrics where serv = '{serv}' {date_from} order by `date` desc limit 60 """.format(serv=serv, date_from=date_from) sql = """ select * from waf_metrics where serv = '{serv}' {date_from} order by `date` desc limit 60 """.format(
serv=serv, date_from=date_from)
else: else:
if kwargs.get('time_range') == '60': if kwargs.get('time_range') == '60':
date_from = "and date > datetime('now', '-60 minutes', 'localtime') and rowid % 2 = 0" date_from = "and date > datetime('now', '-60 minutes', 'localtime') and rowid % 2 = 0"
@ -1283,7 +1313,8 @@ def select_waf_metrics(serv, **kwargs):
date_from = "and date > datetime('now', '-720 minutes', 'localtime') and rowid % 9 = 0" date_from = "and date > datetime('now', '-720 minutes', 'localtime') and rowid % 9 = 0"
else: else:
date_from = "and date > datetime('now', '-30 minutes', 'localtime')" date_from = "and date > datetime('now', '-30 minutes', 'localtime')"
sql = """ select * from (select * from waf_metrics where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(serv=serv, date_from=date_from) sql = """ select * from (select * from waf_metrics where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(
serv=serv, date_from=date_from)
try: try:
cursor.execute(sql) cursor.execute(sql)
@ -1307,7 +1338,8 @@ def select_nginx_metrics(serv, **kwargs):
date_from = "and date > now() - INTERVAL 720 minute group by `date` div 500" date_from = "and date > now() - INTERVAL 720 minute group by `date` div 500"
else: else:
date_from = "and date > now() - INTERVAL 30 minute" date_from = "and date > now() - INTERVAL 30 minute"
sql = """ select * from nginx_metrics where serv = '{serv}' {date_from} order by `date` desc limit 60 """.format(serv=serv, date_from=date_from) sql = """ select * from nginx_metrics where serv = '{serv}' {date_from} order by `date` desc limit 60 """.format(
serv=serv, date_from=date_from)
else: else:
if kwargs.get('time_range') == '60': if kwargs.get('time_range') == '60':
date_from = "and date > datetime('now', '-60 minutes', 'localtime') and rowid % 2 = 0" date_from = "and date > datetime('now', '-60 minutes', 'localtime') and rowid % 2 = 0"
@ -1319,7 +1351,8 @@ def select_nginx_metrics(serv, **kwargs):
date_from = "and date > datetime('now', '-720 minutes', 'localtime') and rowid % 9 = 0" date_from = "and date > datetime('now', '-720 minutes', 'localtime') and rowid % 9 = 0"
else: else:
date_from = "and date > datetime('now', '-30 minutes', 'localtime')" date_from = "and date > datetime('now', '-30 minutes', 'localtime')"
sql = """ select * from (select * from nginx_metrics where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(serv=serv, date_from=date_from) sql = """ select * from (select * from nginx_metrics where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(
serv=serv, date_from=date_from)
try: try:
cursor.execute(sql) cursor.execute(sql)
@ -1497,7 +1530,8 @@ def select_metrics(serv, **kwargs):
date_from = "and date > now() - INTERVAL 720 minute group by `date` div 500" date_from = "and date > now() - INTERVAL 720 minute group by `date` div 500"
else: else:
date_from = "and date > now() - INTERVAL 30 minute" date_from = "and date > now() - INTERVAL 30 minute"
sql = """ select * from metrics where serv = '{serv}' {date_from} order by `date` asc """.format(serv=serv, date_from=date_from) sql = """ select * from metrics where serv = '{serv}' {date_from} order by `date` asc """.format(serv=serv,
date_from=date_from)
else: else:
if kwargs.get('time_range') == '60': if kwargs.get('time_range') == '60':
date_from = "and date > datetime('now', '-60 minutes', 'localtime') and rowid % 2 = 0" date_from = "and date > datetime('now', '-60 minutes', 'localtime') and rowid % 2 = 0"
@ -1510,7 +1544,8 @@ def select_metrics(serv, **kwargs):
else: else:
date_from = "and date > datetime('now', '-30 minutes', 'localtime')" date_from = "and date > datetime('now', '-30 minutes', 'localtime')"
sql = """ select * from (select * from metrics where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(serv=serv, date_from=date_from) sql = """ select * from (select * from metrics where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(
serv=serv, date_from=date_from)
try: try:
cursor.execute(sql) cursor.execute(sql)
@ -1534,7 +1569,8 @@ def select_metrics_http(serv, **kwargs):
date_from = "and date > now() - INTERVAL 720 minute group by `date` div 500" date_from = "and date > now() - INTERVAL 720 minute group by `date` div 500"
else: else:
date_from = "and date > now() - INTERVAL 30 minute" date_from = "and date > now() - INTERVAL 30 minute"
sql = """ select * from metrics_http_status where serv = '{serv}' {date_from} order by `date` desc """.format(serv=serv, date_from=date_from) sql = """ select * from metrics_http_status where serv = '{serv}' {date_from} order by `date` desc """.format(
serv=serv, date_from=date_from)
else: else:
if kwargs.get('time_range') == '60': if kwargs.get('time_range') == '60':
date_from = "and date > datetime('now', '-60 minutes', 'localtime') and rowid % 2 = 0" date_from = "and date > datetime('now', '-60 minutes', 'localtime') and rowid % 2 = 0"
@ -1547,7 +1583,8 @@ def select_metrics_http(serv, **kwargs):
else: else:
date_from = "and date > datetime('now', '-30 minutes', 'localtime')" date_from = "and date > datetime('now', '-30 minutes', 'localtime')"
sql = """ select * from (select * from metrics_http_status where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(serv=serv, date_from=date_from) sql = """ select * from (select * from metrics_http_status where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(
serv=serv, date_from=date_from)
try: try:
cursor.execute(sql) cursor.execute(sql)
@ -1586,7 +1623,8 @@ def select_servers_metrics():
if group_id == 1: if group_id == 1:
query = Server.select(Server.ip).where((Server.enable == 1) & (Server.metrics == 1)) query = Server.select(Server.ip).where((Server.enable == 1) & (Server.metrics == 1))
else: else:
query = Server.select(Server.ip).where((Server.enable == 1) & (Server.groups == group_id) & (Server.metrics == 1)) query = Server.select(Server.ip).where(
(Server.enable == 1) & (Server.groups == group_id) & (Server.metrics == 1))
try: try:
query_res = query.execute() query_res = query.execute()
except Exception as e: except Exception as e:
@ -1824,7 +1862,8 @@ def get_setting(param, **kwargs):
return query_res return query_res
else: else:
for setting in query_res: for setting in query_res:
if param in ('nginx_stats_port', 'session_ttl', 'token_ttl', 'stats_port', 'haproxy_sock_port', 'ldap_type', if param in (
'nginx_stats_port', 'session_ttl', 'token_ttl', 'stats_port', 'haproxy_sock_port', 'ldap_type',
'ldap_port', 'ldap_enable', 'log_time_storage', 'syslog_server_enable', 'smon_check_interval', 'ldap_port', 'ldap_enable', 'log_time_storage', 'syslog_server_enable', 'smon_check_interval',
'checker_check_interval', 'port_scan_interval', 'smon_keep_history_range', 'checker_keep_history_range', 'checker_check_interval', 'port_scan_interval', 'smon_keep_history_range', 'checker_keep_history_range',
'portscanner_keep_history_range', 'checker_maxconn_threshold', 'apache_stats_port'): 'portscanner_keep_history_range', 'checker_maxconn_threshold', 'apache_stats_port'):
@ -2105,7 +2144,8 @@ def insert_smon(server, port, enable, proto, uri, body, group, desc, telegram, s
try: try:
last_id = SMON.insert(ip=server, port=port, en=enable, desc=desc, group=group, http=http, body=body, last_id = SMON.insert(ip=server, port=port, en=enable, desc=desc, group=group, http=http, body=body,
telegram_channel_id=telegram, slack_channel_id=slack, user_group=user_group, status='3').execute() telegram_channel_id=telegram, slack_channel_id=slack, user_group=user_group,
status='3').execute()
except Exception as e: except Exception as e:
out_error(e) out_error(e)
return False return False
@ -2175,7 +2215,8 @@ def delete_smon(smon_id, user_group):
def update_smon(smon_id, ip, port, body, telegram, slack, group, desc, en): def update_smon(smon_id, ip, port, body, telegram, slack, group, desc, en):
funct.check_user_group() funct.check_user_group()
query = (SMON.update(ip=ip, port=port, body=body, telegram_channel_id=telegram, slack_channel_id=slack, group=group, desc=desc, en=en) query = (SMON.update(ip=ip, port=port, body=body, telegram_channel_id=telegram, slack_channel_id=slack, group=group,
desc=desc, en=en)
.where(SMON.id == smon_id)) .where(SMON.id == smon_id))
try: try:
query.execute() query.execute()
@ -2371,9 +2412,11 @@ def insert_alerts(user_group, level, ip, port, message, service):
def select_alerts(user_group): def select_alerts(user_group):
cursor = conn.cursor() cursor = conn.cursor()
if mysql_enable == '1': if mysql_enable == '1':
sql = """ select level, message, `date` from alerts where user_group = '%s' and `date` <= (now()+ INTERVAL 10 second) """ % (user_group) sql = """ select level, message, `date` from alerts where user_group = '%s' and `date` <= (now()+ INTERVAL 10 second) """ % (
user_group)
else: else:
sql = """ select level, message, `date` from alerts where user_group = '%s' and `date` >= datetime('now', '-20 second', 'localtime') and `date` <= datetime('now', 'localtime') ; """ % (user_group) sql = """ select level, message, `date` from alerts where user_group = '%s' and `date` >= datetime('now', '-20 second', 'localtime') and `date` <= datetime('now', 'localtime') ; """ % (
user_group)
try: try:
cursor.execute(sql) cursor.execute(sql)
except Exception as e: except Exception as e:
@ -2631,12 +2674,14 @@ def delete_provider(provider_id):
return False return False
def add_server_aws(region, instance_type, public_ip, floating_ip, volume_size, ssh_key_name, name, os, firewall, provider_id, group_id, status, delete_on_termination, volume_type): def add_server_aws(region, instance_type, public_ip, floating_ip, volume_size, ssh_key_name, name, os, firewall,
provider_id, group_id, status, delete_on_termination, volume_type):
try: try:
ProvisionedServers.insert(region=region, instance_type=instance_type, public_ip=public_ip, ProvisionedServers.insert(region=region, instance_type=instance_type, public_ip=public_ip,
floating_ip=floating_ip, volume_size=volume_size, volume_type=volume_type, floating_ip=floating_ip, volume_size=volume_size, volume_type=volume_type,
ssh_key_name=ssh_key_name, name=name, os=os, firewall=firewall, ssh_key_name=ssh_key_name, name=name, os=os, firewall=firewall,
provider_id=provider_id, group_id=group_id, delete_on_termination=delete_on_termination, provider_id=provider_id, group_id=group_id,
delete_on_termination=delete_on_termination,
type='aws', status=status, date=funct.get_data('regular')).execute() type='aws', status=status, date=funct.get_data('regular')).execute()
return True return True
except Exception as e: except Exception as e:
@ -2647,8 +2692,10 @@ def add_server_aws(region, instance_type, public_ip, floating_ip, volume_size, s
def add_server_gcore(project, region, instance_type, network_type, network_name, volume_size, ssh_key_name, name, os, def add_server_gcore(project, region, instance_type, network_type, network_name, volume_size, ssh_key_name, name, os,
firewall, provider_id, group_id, status, delete_on_termination, volume_type): firewall, provider_id, group_id, status, delete_on_termination, volume_type):
try: try:
ProvisionedServers.insert(region=region, instance_type=instance_type, public_ip=network_type, network_name=network_name, ProvisionedServers.insert(region=region, instance_type=instance_type, public_ip=network_type,
volume_size=volume_size, volume_type=volume_type, ssh_key_name=ssh_key_name, name=name, network_name=network_name,
volume_size=volume_size, volume_type=volume_type, ssh_key_name=ssh_key_name,
name=name,
os=os, firewall=firewall, provider_id=provider_id, group_id=group_id, type='gcore', os=os, firewall=firewall, provider_id=provider_id, group_id=group_id, type='gcore',
delete_on_termination=delete_on_termination, project=project, status=status, delete_on_termination=delete_on_termination, project=project, status=status,
date=funct.get_data('regular')).execute() date=funct.get_data('regular')).execute()
@ -2661,7 +2708,8 @@ def add_server_gcore(project, region, instance_type, network_type, network_name,
def add_server_do(region, size, privet_net, floating_ip, ssh_ids, ssh_key_name, name, oss, firewall, monitoring, backup, def add_server_do(region, size, privet_net, floating_ip, ssh_ids, ssh_key_name, name, oss, firewall, monitoring, backup,
provider_id, group_id, status): provider_id, group_id, status):
try: try:
ProvisionedServers.insert(region=region, instance_type=size, private_networking=privet_net, floating_ip=floating_ip, ProvisionedServers.insert(region=region, instance_type=size, private_networking=privet_net,
floating_ip=floating_ip,
ssh_ids=ssh_ids, ssh_key_name=ssh_key_name, name=name, os=oss, firewall=firewall, ssh_ids=ssh_ids, ssh_key_name=ssh_key_name, name=name, os=oss, firewall=firewall,
monitoring=monitoring, backup=backup, provider_id=provider_id, group_id=group_id, monitoring=monitoring, backup=backup, provider_id=provider_id, group_id=group_id,
type='do', status=status, date=funct.get_data('regular')).execute() type='do', status=status, date=funct.get_data('regular')).execute()
@ -2691,7 +2739,8 @@ def select_gcore_server(server_id):
prov_serv = ProvisionedServers.alias() prov_serv = ProvisionedServers.alias()
query = ( query = (
prov_serv.select(prov_serv.region, prov_serv.instance_type, prov_serv.public_ip, prov_serv.floating_ip, prov_serv.select(prov_serv.region, prov_serv.instance_type, prov_serv.public_ip, prov_serv.floating_ip,
prov_serv.volume_size, prov_serv.ssh_key_name, prov_serv.name, prov_serv.os, prov_serv.firewall, prov_serv.volume_size, prov_serv.ssh_key_name, prov_serv.name, prov_serv.os,
prov_serv.firewall,
prov_serv.provider_id, prov_serv.group_id, prov_serv.id, prov_serv.delete_on_termination, prov_serv.provider_id, prov_serv.group_id, prov_serv.id, prov_serv.delete_on_termination,
prov_serv.project, prov_serv.network_name, prov_serv.volume_type, prov_serv.name_template) prov_serv.project, prov_serv.network_name, prov_serv.volume_type, prov_serv.name_template)
.where(prov_serv.id == server_id)) .where(prov_serv.id == server_id))
@ -2705,9 +2754,11 @@ def select_gcore_server(server_id):
def select_do_server(server_id): def select_do_server(server_id):
prov_serv = ProvisionedServers.alias() prov_serv = ProvisionedServers.alias()
query = (prov_serv.select(prov_serv.region, prov_serv.instance_type, prov_serv.private_networking, prov_serv.floating_ip, query = (
prov_serv.select(prov_serv.region, prov_serv.instance_type, prov_serv.private_networking, prov_serv.floating_ip,
prov_serv.ssh_ids, prov_serv.ssh_key_name, prov_serv.name, prov_serv.os, prov_serv.firewall, prov_serv.ssh_ids, prov_serv.ssh_key_name, prov_serv.name, prov_serv.os, prov_serv.firewall,
prov_serv.backup, prov_serv.monitoring, prov_serv.provider_id, prov_serv.group_id, prov_serv.id) prov_serv.backup, prov_serv.monitoring, prov_serv.provider_id, prov_serv.group_id,
prov_serv.id)
.where(prov_serv.id == server_id)) .where(prov_serv.id == server_id))
try: try:
query_res = query.execute() query_res = query.execute()
@ -2756,7 +2807,8 @@ def update_provisioning_server_error(status, user_group_id, name, provider_id):
out_error(e) out_error(e)
def update_server_aws(region, size, public_ip, floating_ip, volume_size, ssh_name, workspace, oss, firewall, provider, group, status, server_id, delete_on_termination, volume_type): def update_server_aws(region, size, public_ip, floating_ip, volume_size, ssh_name, workspace, oss, firewall, provider,
group, status, server_id, delete_on_termination, volume_type):
query = ProvisionedServers.update(region=region, instance_type=size, public_ip=public_ip, floating_ip=floating_ip, query = ProvisionedServers.update(region=region, instance_type=size, public_ip=public_ip, floating_ip=floating_ip,
volume_size=volume_size, ssh_key_name=ssh_name, name=workspace, os=oss, volume_size=volume_size, ssh_key_name=ssh_name, name=workspace, os=oss,
firewall=firewall, provider_id=provider, group_id=group, status=status, firewall=firewall, provider_id=provider, group_id=group, status=status,
@ -2772,7 +2824,8 @@ def update_server_aws(region, size, public_ip, floating_ip, volume_size, ssh_nam
def update_server_gcore(region, size, network_type, network_name, volume_size, ssh_name, workspace, oss, firewall, def update_server_gcore(region, size, network_type, network_name, volume_size, ssh_name, workspace, oss, firewall,
provider, group, status, server_id, delete_on_termination, volume_type, project): provider, group, status, server_id, delete_on_termination, volume_type, project):
query = ProvisionedServers.update(region=region, instance_type=size, public_ip=network_type, network_name=network_name, query = ProvisionedServers.update(region=region, instance_type=size, public_ip=network_type,
network_name=network_name,
volume_size=volume_size, ssh_key_name=ssh_name, name=workspace, os=oss, volume_size=volume_size, ssh_key_name=ssh_name, name=workspace, os=oss,
firewall=firewall, provider_id=provider, group_id=group, status=status, firewall=firewall, provider_id=provider, group_id=group, status=status,
delete_on_termination=delete_on_termination, volume_type=volume_type, delete_on_termination=delete_on_termination, volume_type=volume_type,
@ -2814,13 +2867,16 @@ def select_provisioned_servers(**kwargs):
query = ( query = (
prov_serv.select(prov_serv.id, prov_serv.name, prov_serv.provider_id, prov_serv.type, prov_serv.select(prov_serv.id, prov_serv.name, prov_serv.provider_id, prov_serv.type,
prov_serv.group_id, prov_serv.instance_type, prov_serv.status, prov_serv.date, prov_serv.group_id, prov_serv.instance_type, prov_serv.status, prov_serv.date,
prov_serv.region, prov_serv.os, prov_serv.IP, prov_serv.last_error, prov_serv.name_template) prov_serv.region, prov_serv.os, prov_serv.IP, prov_serv.last_error,
prov_serv.name_template)
.where((prov_serv.name == kwargs.get('new')) & .where((prov_serv.name == kwargs.get('new')) &
(prov_serv.group_id == kwargs.get('group')) & (prov_serv.group_id == kwargs.get('group')) &
(prov_serv.type == kwargs.get('type')))) (prov_serv.type == kwargs.get('type'))))
else: else:
query = prov_serv.select(prov_serv.id, prov_serv.name, prov_serv.provider_id, prov_serv.type, prov_serv.group_id, query = prov_serv.select(prov_serv.id, prov_serv.name, prov_serv.provider_id, prov_serv.type,
prov_serv.instance_type, prov_serv.status, prov_serv.date, prov_serv.region, prov_serv.os, prov_serv.group_id,
prov_serv.instance_type, prov_serv.status, prov_serv.date, prov_serv.region,
prov_serv.os,
prov_serv.IP, prov_serv.last_error, prov_serv.name_template) prov_serv.IP, prov_serv.last_error, prov_serv.name_template)
try: try:
query_res = query.execute() query_res = query.execute()
@ -2917,7 +2973,8 @@ def update_user_services(services, user_id):
def insert_or_update_service_setting(server_id, service, setting, value): def insert_or_update_service_setting(server_id, service, setting, value):
try: try:
ServiceSetting.insert(server_id=server_id, service=service, setting=setting, value=value).on_conflict('replace').execute() ServiceSetting.insert(server_id=server_id, service=service, setting=setting, value=value).on_conflict(
'replace').execute()
except Exception as e: except Exception as e:
out_error(e) out_error(e)
return False return False
@ -3089,7 +3146,8 @@ def select_remote_path_from_version(server_ip: str, service: str, local_path: st
return query_res return query_res
def insert_system_info(server_id: int, os_info: str, sys_info: str, cpu: str, ram: str, network: str, disks: str) -> bool: def insert_system_info(server_id: int, os_info: str, sys_info: str, cpu: str, ram: str, network: str,
disks: str) -> bool:
try: try:
SystemInfo.insert(server_id=server_id, os_info=os_info, sys_info=sys_info, cpu=cpu, ram=ram, SystemInfo.insert(server_id=server_id, os_info=os_info, sys_info=sys_info, cpu=cpu, ram=ram,
network=network, disks=disks).on_conflict('replace').execute() network=network, disks=disks).on_conflict('replace').execute()
@ -3241,7 +3299,8 @@ def select_user_all():
def insert_new_git(server_id, service_id, repo, branch, period, cred, description): def insert_new_git(server_id, service_id, repo, branch, period, cred, description):
try: try:
GitSetting.insert(server_id=server_id, service_id=service_id, repo=repo, branch=branch, period=period, cred_id=cred, GitSetting.insert(server_id=server_id, service_id=service_id, repo=repo, branch=branch, period=period,
cred_id=cred,
description=description).execute() description=description).execute()
except Exception as e: except Exception as e:
out_error(e) out_error(e)
@ -3252,7 +3311,8 @@ def insert_new_git(server_id, service_id, repo, branch, period, cred, descriptio
def select_gits(**kwargs): def select_gits(**kwargs):
if kwargs.get("server_id") is not None and kwargs.get("service_id") is not None: if kwargs.get("server_id") is not None and kwargs.get("service_id") is not None:
query = GitSetting.select().where((GitSetting.server_id == kwargs.get("server_id")) & (GitSetting.service_id == kwargs.get("service_id"))) query = GitSetting.select().where(
(GitSetting.server_id == kwargs.get("server_id")) & (GitSetting.service_id == kwargs.get("service_id")))
else: else:
query = GitSetting.select().order_by(GitSetting.id) query = GitSetting.select().order_by(GitSetting.id)