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'
@ -44,23 +44,23 @@ def index():
data = { data = {
'help': 'show all available endpoints', 'help': 'show all available endpoints',
'login': 'get temporarily token. Must be JSON body: login, password and group for which getting token. METHOD: POST', 'login': 'get temporarily token. Must be JSON body: login, password and group for which getting token. METHOD: POST',
'servers':'show info about all servers. METHOD: GET', 'servers': 'show info about all servers. METHOD: GET',
'servers/status':'show status all HAProxyes. METHOD: GET', 'servers/status': 'show status all HAProxyes. METHOD: GET',
'haproxy/<id,hostname,ip>':'show info about the HAProxy by id or hostname or ip. METHOD: GET', 'haproxy/<id,hostname,ip>': 'show info about the HAProxy by id or hostname or ip. METHOD: GET',
'haproxy/<id,hostname,ip>/status':'show HAProxy status by id or hostname or ip. METHOD: GET', 'haproxy/<id,hostname,ip>/status': 'show HAProxy status by id or hostname or ip. METHOD: GET',
'haproxy/<id,hostname,ip>/runtime':'exec HAProxy runtime commands by id or hostname or ip. Must be JSON body: "command". METHOD: POST', 'haproxy/<id,hostname,ip>/runtime': 'exec HAProxy runtime commands by id or hostname or ip. Must be JSON body: "command". METHOD: POST',
'haproxy/<id,hostname,ip>/backends':'show backends by id or hostname or ip. METHOD: GET', 'haproxy/<id,hostname,ip>/backends': 'show backends by id or hostname or ip. METHOD: GET',
'haproxy/<id,hostname,ip>/action/start':'start HAProxy service by id or hostname or ip. METHOD: GET', 'haproxy/<id,hostname,ip>/action/start': 'start HAProxy service by id or hostname or ip. METHOD: GET',
'haproxy/<id,hostname,ip>/action/stop':'stop HAProxy service by id or hostname or ip. METHOD: GET', 'haproxy/<id,hostname,ip>/action/stop': 'stop HAProxy service by id or hostname or ip. METHOD: GET',
'haproxy/<id,hostname,ip>/action/restart':'restart HAProxy service by id or hostname or ip. METHOD: GET', 'haproxy/<id,hostname,ip>/action/restart': 'restart HAProxy service by id or hostname or ip. METHOD: GET',
'haproxy/<id,hostname,ip>/config':'get HAProxy config from a server by id or hostname or ip. METHOD: GET', 'haproxy/<id,hostname,ip>/config': 'get HAProxy config from a server by id or hostname or ip. METHOD: GET',
'haproxy/<id,hostname,ip>/config':'upload HAProxy config to a server by id or hostname or ip. Headers: action: save/reload/restart. Body must consist a whole HAProxy config. METHOD: POST', 'haproxy/<id,hostname,ip>/config': 'upload HAProxy config to a server by id or hostname or ip. Headers: action: save/reload/restart. Body must consist a whole HAProxy config. METHOD: POST',
'haproxy/<id,hostname,ip>/log':'show HAProxy logs by id or hostname or ip. May to have config next Headers: rows(format INT) default: 10 grep, waf(if needs WAF log) default: 0, start_hour(format: 24) default: 00, start_minute, end_hour(format: 24) default: 24, end_minute. METHOD: GET', 'haproxy/<id,hostname,ip>/log': 'show HAProxy logs by id or hostname or ip. May to have config next Headers: rows(format INT) default: 10 grep, waf(if needs WAF log) default: 0, start_hour(format: 24) default: 00, start_minute, end_hour(format: 24) default: 24, end_minute. METHOD: GET',
'haproxy/<id,hostname,ip>/section':'show a certain section, headers: section-name. METHOD: GET', 'haproxy/<id,hostname,ip>/section': 'show a certain section, headers: section-name. METHOD: GET',
'haproxy/<id,hostname,ip>/section/add':'add a section to the HAProxy config by id or hostname or ip. Has to have config header with section and action header for action after upload. Section header must consist type: listen, frontend, etc. Action header accepts next value: save, test, reload and restart. Can be empty for just save. METHOD: POST', 'haproxy/<id,hostname,ip>/section/add': 'add a section to the HAProxy config by id or hostname or ip. Has to have config header with section and action header for action after upload. Section header must consist type: listen, frontend, etc. Action header accepts next value: save, test, reload and restart. Can be empty for just save. METHOD: POST',
'haproxy/<id,hostname,ip>/section/edit':'edit a section in the HAProxy config by id or hostname or ip. Has to have config header with section, action header for action after upload and body of a new section configuration. Section header must consist type: listen, frontend, etc. Action header accepts next value: save, test, reload and restart. Can be empty for just save. METHOD: POST', 'haproxy/<id,hostname,ip>/section/edit': 'edit a section in the HAProxy config by id or hostname or ip. Has to have config header with section, action header for action after upload and body of a new section configuration. Section header must consist type: listen, frontend, etc. Action header accepts next value: save, test, reload and restart. Can be empty for just save. METHOD: POST',
'haproxy/<id,hostname,ip>/acl':'add an acl to certain section. Must be JSON body: "section-name", "if", "then", "if_value", "then_value" and "action" for action after upload. Action accepts next value: "save", "test", "reload" and "restart". METHOD: POST', 'haproxy/<id,hostname,ip>/acl': 'add an acl to certain section. Must be JSON body: "section-name", "if", "then", "if_value", "then_value" and "action" for action after upload. Action accepts next value: "save", "test", "reload" and "restart". METHOD: POST',
'haproxy/<id,hostname,ip>/acl':'delete an acl to certain section. Must be JSON body: "section-name", "if", "then", "if_value", "then_value" and "action" for action after upload. Action accepts next value: "save", "test", "reload" and "restart". METHOD: DELETE', 'haproxy/<id,hostname,ip>/acl': 'delete an acl to certain section. Must be JSON body: "section-name", "if", "then", "if_value", "then_value" and "action" for action after upload. Action accepts next value: "save", "test", "reload" and "restart". METHOD: DELETE',
'nginx/<id,hostname,ip>': 'show info about the NGINX by id or hostname or ip. METHOD: GET', 'nginx/<id,hostname,ip>': 'show info about the NGINX by id or hostname or ip. METHOD: GET',
'nginx/<id,hostname,ip>/status': 'show NGINX status by id or hostname or ip. METHOD: GET', 'nginx/<id,hostname,ip>/status': 'show NGINX status by id or hostname or ip. METHOD: GET',
'nginx/<id,hostname,ip>/action/start': 'start NGINX service by id or hostname or ip. METHOD: GET', 'nginx/<id,hostname,ip>/action/start': 'start NGINX service by id or hostname or ip. METHOD: GET',
@ -97,18 +97,18 @@ def get_servers():
for s in servers: for s in servers:
data[s[0]] = { data[s[0]] = {
'server_id':s[0], 'server_id': s[0],
'hostname':s[1], 'hostname': s[1],
'ip':s[2], 'ip': s[2],
'group':s[3], 'group': s[3],
'virt':s[4], 'virt': s[4],
'enable':s[5], 'enable': s[5],
'is_master':s[6], 'is_master': s[6],
'creds':s[7], 'creds': s[7],
'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
@ -28,17 +28,17 @@ def get_token():
login = login_pass['login'] login = login_pass['login']
password_from_user = login_pass['password'] password_from_user = login_pass['password']
except Exception as e: except Exception as e:
return 'error getting credentials: '+str(e) return 'error getting credentials: ' + str(e)
try: try:
group_name = login_pass['group'] group_name = login_pass['group']
group_id = sql.get_group_id_by_name(group_name) group_id = sql.get_group_id_by_name(group_name)
except Exception as e: except Exception as e:
return 'error getting group: '+str(e) return 'error getting group: ' + str(e)
try: try:
users = sql.select_users(user=login) users = sql.select_users(user=login)
password = funct.get_hash(password_from_user) password = funct.get_hash(password_from_user)
except Exception as e: except Exception as e:
return 'error one more: '+str(e) return 'error one more: ' + str(e)
for user in users: for user in users:
if user.activeuser == 0: if user.activeuser == 0:
@ -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: {
"Uptime": servers_with_status[0][1].split(':')[1].strip(), "Version": servers_with_status[0][0].split('/')[1],
"Process": servers_with_status[0][2].split(' ')[1]}} "Uptime": servers_with_status[0][1].split(':')[1].strip(),
"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)}}
@ -230,7 +233,7 @@ def actions(server_id, action, service):
for s in servers: for s in servers:
if service == 'apache': if service == 'apache':
service = funct.get_correct_apache_service_name(server_ip=s[2]) service = funct.get_correct_apache_service_name(server_ip=s[2])
cmd = [ "sudo systemctl %s %s" % (action, service) ] cmd = ["sudo systemctl %s %s" % (action, service)]
error = funct.ssh_command(s[2], cmd) error = funct.ssh_command(s[2], cmd)
done = error if error else 'done' done = error if error else 'done'
@ -250,7 +253,7 @@ def runtime(server_id):
action = json_loads['command'] action = json_loads['command']
haproxy_sock = sql.get_setting('haproxy_sock') haproxy_sock = sql.get_setting('haproxy_sock')
servers = check_permit_to_server(server_id) servers = check_permit_to_server(server_id)
cmd = [ 'echo "%s" |sudo socat stdio %s' % (action, haproxy_sock) ] cmd = ['echo "%s" |sudo socat stdio %s' % (action, haproxy_sock)]
for s in servers: for s in servers:
out = funct.ssh_command(s[2], cmd) out = funct.ssh_command(s[2], cmd)
@ -291,9 +294,9 @@ def get_config(server_id, **kwargs):
servers = check_permit_to_server(server_id) servers = check_permit_to_server(server_id)
for s in servers: for s in servers:
cfg = '/tmp/'+s[2]+'.cfg' cfg = '/tmp/' + s[2] + '.cfg'
out = funct.get_config(s[2], cfg, service=service, config_file_name=kwargs.get('config_path')) out = funct.get_config(s[2], cfg, service=service, config_file_name=kwargs.get('config_path'))
os.system("sed -i 's/\\n/\n/g' "+cfg) os.system("sed -i 's/\\n/\n/g' " + cfg)
try: try:
conf = open(cfg, "r") conf = open(cfg, "r")
config_read = conf.read() config_read = conf.read()
@ -360,7 +363,7 @@ def edit_section(server_id):
out = funct.master_slave_upload_and_restart(ip, cfg, save, login=login) out = funct.master_slave_upload_and_restart(ip, cfg, save, login=login)
funct.logging('localhost', " section " + section_name + " has been edited via API", login=login) funct.logging('localhost', " section " + section_name + " has been edited via API", login=login)
funct.logging(ip, 'Section ' + section_name + ' has been edited via API', haproxywi=1, login=login, funct.logging(ip, 'Section ' + section_name + ' has been edited via API', haproxywi=1, login=login,
keep_history=1, service='haproxy') keep_history=1, service='haproxy')
if out: if out:
return_mess = out return_mess = out
@ -411,7 +414,7 @@ def upload_config(server_id, **kwargs):
for s in servers: for s in servers:
ip = s[2] ip = s[2]
cfg = '/tmp/'+ip+'.cfg' cfg = '/tmp/' + ip + '.cfg'
cfg_for_save = configs_dir + ip + "-" + funct.get_data('config') + ".cfg" cfg_for_save = configs_dir + ip + "-" + funct.get_data('config') + ".cfg"
try: try:
@ -429,7 +432,7 @@ def upload_config(server_id, **kwargs):
funct.logging('localhost', " config has been uploaded via API", login=login) funct.logging('localhost', " config has been uploaded via API", login=login)
funct.logging(ip, 'Config has been uploaded via API', haproxywi=1, login=login, funct.logging(ip, 'Config has been uploaded via API', haproxywi=1, login=login,
keep_history=1, service=service_name) keep_history=1, service=service_name)
if out: if out:
return_mess = out return_mess = out
@ -467,7 +470,7 @@ def add_to_config(server_id):
out = funct.get_config(ip, cfg) out = funct.get_config(ip, cfg)
try: try:
with open(cfg, "a") as conf: with open(cfg, "a") as conf:
conf.write('\n'+body+'\n') conf.write('\n' + body + '\n')
return_mess = 'section has been added to the config' return_mess = 'section has been added to the config'
os.system("/bin/cp %s %s" % (cfg, cfg_for_save)) os.system("/bin/cp %s %s" % (cfg, cfg_for_save))

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)
@ -29,14 +29,14 @@ if (
except Exception as e: except Exception as e:
print(str(e)) print(str(e))
dir = os.path.dirname(os.getcwd())+"/"+sql.get_setting('lists_path') dir = os.path.dirname(os.getcwd())+ "/" + sql.get_setting('lists_path')
white_dir = os.path.dirname(os.getcwd())+"/"+sql.get_setting('lists_path')+"/"+user_group+"/white" white_dir = os.path.dirname(os.getcwd())+ "/" + sql.get_setting('lists_path') + "/" + user_group + "/white"
black_dir = os.path.dirname(os.getcwd())+"/"+sql.get_setting('lists_path')+"/"+user_group+"/black" black_dir = os.path.dirname(os.getcwd()) + "/" + sql.get_setting('lists_path') + "/" + user_group + "/black"
if not os.path.exists(dir): if not os.path.exists(dir):
os.makedirs(dir) os.makedirs(dir)
if not os.path.exists(dir+"/"+user_group): if not os.path.exists(dir + "/" + user_group):
os.makedirs(dir+"/"+user_group) os.makedirs(dir + "/" + user_group)
if not os.path.exists(white_dir): if not os.path.exists(white_dir):
os.makedirs(white_dir) os.makedirs(white_dir)
if not os.path.exists(black_dir): if not os.path.exists(black_dir):
@ -46,18 +46,18 @@ if (
black_lists = funct.get_files(dir=black_dir, format="lst") black_lists = funct.get_files(dir=black_dir, format="lst")
template = template.render(title="Add: ", template = template.render(title="Add: ",
role=role, role=role,
user=user, user=user,
selects=servers, selects=servers,
add=form.getvalue('add'), add=form.getvalue('add'),
conf_add=form.getvalue('conf'), conf_add=form.getvalue('conf'),
group=user_group, group=user_group,
options=sql.select_options(), options=sql.select_options(),
saved_servers=sql.select_saved_servers(), saved_servers=sql.select_saved_servers(),
white_lists=white_lists, white_lists=white_lists,
black_lists=black_lists, black_lists=black_lists,
user_services=user_services, user_services=user_services,
token=token) token=token)
print(template) print(template)
elif form.getvalue('mode') is not None: elif form.getvalue('mode') is not None:
@ -173,9 +173,9 @@ elif form.getvalue('mode') is not None:
'blacklist') + " }\n" 'blacklist') + " }\n"
if form.getvalue('cookie'): if form.getvalue('cookie'):
cookie = " cookie "+form.getvalue('cookie_name') cookie = " cookie " + form.getvalue('cookie_name')
if form.getvalue('cookie_domain'): if form.getvalue('cookie_domain'):
cookie += " domain "+form.getvalue('cookie_domain') cookie += " domain " + form.getvalue('cookie_domain')
if form.getvalue('rewrite'): if form.getvalue('rewrite'):
rewrite = form.getvalue('rewrite') rewrite = form.getvalue('rewrite')
else: else:
@ -196,10 +196,10 @@ elif form.getvalue('mode') is not None:
dynamic = form.getvalue('dynamic') dynamic = form.getvalue('dynamic')
else: else:
dynamic = "" dynamic = ""
cookie += " "+rewrite+" "+prefix+" "+nocache+" "+postonly+" "+dynamic+"\n" cookie += " " + rewrite + " " + prefix + " " + nocache + " " + postonly + " " + dynamic + "\n"
options_split += cookie options_split += cookie
if form.getvalue('dynamic'): if form.getvalue('dynamic'):
options_split += " dynamic-cookie-key " + form.getvalue('dynamic-cookie-key')+"\n" options_split += " dynamic-cookie-key " + form.getvalue('dynamic-cookie-key') + "\n"
if form.getvalue('acl_if'): if form.getvalue('acl_if'):
acl_if = form.getlist('acl_if') acl_if = form.getlist('acl_if')
@ -299,18 +299,18 @@ elif form.getvalue('mode') is not None:
port_check_val = port port_check_val = port
servers_split += " server {0} {0}:{1}{2} port {6} maxconn {5} {3} {4} \n".format(server, servers_split += " server {0} {0}:{1}{2} port {6} maxconn {5} {3} {4} \n".format(server,
server_port[i], server_port[i],
check, check,
send_proxy_param, send_proxy_param,
backup_param, backup_param,
maxconn_val, maxconn_val,
port_check_val) port_check_val)
else: else:
servers_split += " server-template {0} {1} {2}:{3} {4} \n".format(form.getvalue('prefix'), servers_split += " server-template {0} {1} {2}:{3} {4} \n".format(form.getvalue('prefix'),
form.getvalue('template-number'), form.getvalue('template-number'),
server, server,
server_port[i], server_port[i],
check) check)
i += 1 i += 1
compression = form.getvalue("compression") compression = form.getvalue("compression")
@ -322,20 +322,21 @@ elif form.getvalue('mode') is not None:
if compression == "1" or cache == "2": if compression == "1" or cache == "2":
filter_com = " filter compression\n" filter_com = " filter compression\n"
if cache == "2": if cache == "2":
cache_s = " http-request cache-use "+end_name+"\n http-response cache-store "+end_name+"\n" cache_s = " http-request cache-use " + end_name + "\n http-response cache-store " + end_name + "\n"
cache_set = "cache "+end_name+"\n total-max-size 4\n max-age 240\n" cache_set = "cache " + end_name + "\n total-max-size 4\n max-age 240\n"
if compression == "1": if compression == "1":
compression_s = " compression algo gzip\n compression type text/html text/plain text/css\n" compression_s = " compression algo gzip\n compression type text/html text/plain text/css\n"
waf = "" waf = ""
if form.getvalue('waf') is not None: if form.getvalue('waf') 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"
new_userlist_groups = "" new_userlist_groups = ""
if form.getvalue('userlist-group') is not None: if form.getvalue('userlist-group') is not None:
@ -352,10 +353,10 @@ if form.getvalue('new_userlist') is not None:
for user in users: for user in users:
try: try:
group = ' groups '+userlist_user_group[i] group = ' groups ' + userlist_user_group[i]
except Exception: except Exception:
group = '' group = ''
new_users_list += " user "+user+" insecure-password " + passwords[i] + group + "\n" new_users_list += " user " + user + " insecure-password " + passwords[i] + group + "\n"
i += 1 i += 1
config_add = "\n" + name + new_userlist_groups + new_users_list config_add = "\n" + name + new_userlist_groups + new_users_list

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,
@ -329,21 +340,21 @@ def select_users(**kwargs):
elif kwargs.get("group") is not None: elif kwargs.get("group") is not None:
query = (User. query = (User.
select( select(
User, User,
UserGroups, UserGroups,
Case(0, [(( Case(0, [((
User.last_login_date >= funct.get_data('regular', timedelta_minutes_minus=15) User.last_login_date >= funct.get_data('regular', timedelta_minutes_minus=15)
), 0)], 1).alias('last_login')). ), 0)], 1).alias('last_login')).
join(UserGroups, on=(User.user_id == UserGroups.user_id)). join(UserGroups, on=(User.user_id == UserGroups.user_id)).
where(UserGroups.user_group_id == kwargs.get("group")) where(UserGroups.user_group_id == kwargs.get("group"))
) )
else: else:
query = User.select( query = User.select(
User, User,
Case(0, [(( Case(0, [((
User.last_login_date >= funct.get_data('regular', timedelta_minutes_minus=15) User.last_login_date >= funct.get_data('regular', timedelta_minutes_minus=15)
), 0)], 1).alias('last_login') ), 0)], 1).alias('last_login')
).order_by(User.user_id) ).order_by(User.user_id)
try: try:
query_res = query.execute() query_res = query.execute()
@ -490,7 +501,7 @@ def select_server_ip_by_id(server_id):
def select_servers(**kwargs): def select_servers(**kwargs):
cursor = conn.cursor() cursor = conn.cursor()
if mysql_enable == '1': if mysql_enable == '1':
sql = """select * from `servers` where `enable` = 1 ORDER BY servers.groups """ sql = """select * from `servers` where `enable` = 1 ORDER BY servers.groups """
@ -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))
@ -955,7 +982,7 @@ def select_backups(**kwargs):
def update_backup(server, rserver, rpath, backup_type, time, cred, description, backup_id): def update_backup(server, rserver, rpath, backup_type, time, cred, description, backup_id):
backup_update = Backup.update(server=server, rhost=rserver, rpath=rpath, backup_type=backup_type, time=time, backup_update = Backup.update(server=server, rhost=rserver, rpath=rpath, backup_type=backup_type, time=time,
cred=cred, description=description).where(Backup.id == backup_id) cred=cred, description=description).where(Backup.id == backup_id)
try: try:
backup_update.execute() backup_update.execute()
except Exception as e: except Exception as 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:
@ -1187,7 +1216,7 @@ def insert_metrics(serv, curr_con, cur_ssl_con, sess_rate, max_sess_rate):
def insert_metrics_http(serv, http_2xx, http_3xx, http_4xx, http_5xx): def insert_metrics_http(serv, http_2xx, http_3xx, http_4xx, http_5xx):
try: try:
MetricsHttpStatus.insert(serv=serv, ok_ans=http_2xx, redir_ans=http_3xx, not_found_ans=http_4xx, MetricsHttpStatus.insert(serv=serv, ok_ans=http_2xx, redir_ans=http_3xx, not_found_ans=http_4xx,
err_ans=http_5xx, date=funct.get_data('regular')).execute() err_ans=http_5xx, date=funct.get_data('regular')).execute()
except Exception as e: except Exception as e:
out_error(e) out_error(e)
@ -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)
@ -1370,7 +1403,7 @@ def insert_waf_rules(serv):
{'serv': serv, 'rule_name': 'Trojans Protections', 'rule_file': 'modsecurity_crs_45_trojans.conf ', {'serv': serv, 'rule_name': 'Trojans Protections', 'rule_file': 'modsecurity_crs_45_trojans.conf ',
'desc': 'The trojan access detection rules detects access to known Trojans already installed on a server. Uploading of Trojans is part of the Anti-Virus rules and uses external Anti Virus program when uploading files. Detection of Trojans access is especially important in a hosting environment where the actual Trojan upload may be done through valid methods and not through hacking'}, 'desc': 'The trojan access detection rules detects access to known Trojans already installed on a server. Uploading of Trojans is part of the Anti-Virus rules and uses external Anti Virus program when uploading files. Detection of Trojans access is especially important in a hosting environment where the actual Trojan upload may be done through valid methods and not through hacking'},
{'serv': serv, 'rule_name': 'RFI Protections', 'rule_file': 'modsecurity_crs_46_slr_et_lfi_attacks.conf', {'serv': serv, 'rule_name': 'RFI Protections', 'rule_file': 'modsecurity_crs_46_slr_et_lfi_attacks.conf',
'desc': 'Remote file inclusion is an attack targeting vulnerabilities in web applications that dynamically reference external scripts. The perpetrators goal is to exploit the referencing function in an application to upload malware (e.g., backdoor shells) from a remote URL located within a different domain'}, 'desc': 'Remote file inclusion is an attack targeting vulnerabilities in web applications that dynamically reference external scripts. The perpetrators goal is to exploit the referencing function in an application to upload malware (e.g., backdoor shells) from a remote URL located within a different domain'},
{'serv': serv, 'rule_name': 'RFI Protections 2', 'rule_file': 'modsecurity_crs_46_slr_et_rfi_attacks.conf', {'serv': serv, 'rule_name': 'RFI Protections 2', 'rule_file': 'modsecurity_crs_46_slr_et_rfi_attacks.conf',
'desc': 'Remote file inclusion is an attack targeting vulnerabilities in web applications that dynamically reference external scripts. The perpetrators goal is to exploit the referencing function in an application to upload malware (e.g., backdoor shells) from a remote URL located within a different domain'}, 'desc': 'Remote file inclusion is an attack targeting vulnerabilities in web applications that dynamically reference external scripts. The perpetrators goal is to exploit the referencing function in an application to upload malware (e.g., backdoor shells) from a remote URL located within a different domain'},
{'serv': serv, 'rule_name': 'SQLi Protections', 'rule_file': 'modsecurity_crs_46_slr_et_sqli_attacks.conf', {'serv': serv, 'rule_name': 'SQLi Protections', 'rule_file': 'modsecurity_crs_46_slr_et_sqli_attacks.conf',
@ -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:
@ -1606,58 +1644,58 @@ def select_table_metrics():
groups = "and servers.groups = '{group}' ".format(group=group_id) groups = "and servers.groups = '{group}' ".format(group=group_id)
if mysql_enable == '1': if mysql_enable == '1':
sql = """ sql = """
select ip.ip, hostname, avg_sess_1h, avg_sess_24h, avg_sess_3d, max_sess_1h, max_sess_24h, max_sess_3d, avg_cur_1h, avg_cur_24h, avg_cur_3d, max_con_1h, max_con_24h, max_con_3d from select ip.ip, hostname, avg_sess_1h, avg_sess_24h, avg_sess_3d, max_sess_1h, max_sess_24h, max_sess_3d, avg_cur_1h, avg_cur_24h, avg_cur_3d, max_con_1h, max_con_24h, max_con_3d from
(select servers.ip from servers where metrics = 1 ) as ip, (select servers.ip from servers where metrics = 1 ) as ip,
(select servers.ip, servers.hostname as hostname from servers left join metrics as metr on servers.ip = metr.serv where servers.metrics = 1 %s) as hostname, (select servers.ip, servers.hostname as hostname from servers left join metrics as metr on servers.ip = metr.serv where servers.metrics = 1 %s) as hostname,
(select servers.ip,round(avg(metr.sess_rate), 1) as avg_sess_1h from servers (select servers.ip,round(avg(metr.sess_rate), 1) as avg_sess_1h from servers
left join metrics as metr on metr.serv = servers.ip left join metrics as metr on metr.serv = servers.ip
where servers.metrics = 1 and where servers.metrics = 1 and
metr.date <= now() and metr.date >= DATE_ADD(NOW(), INTERVAL -1 HOUR) metr.date <= now() and metr.date >= DATE_ADD(NOW(), INTERVAL -1 HOUR)
group by servers.ip) as avg_sess_1h, group by servers.ip) as avg_sess_1h,
(select servers.ip,round(avg(metr.sess_rate), 1) as avg_sess_24h from servers (select servers.ip,round(avg(metr.sess_rate), 1) as avg_sess_24h from servers
left join metrics as metr on metr.serv = servers.ip left join metrics as metr on metr.serv = servers.ip
where servers.metrics = 1 and where servers.metrics = 1 and
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -24 HOUR) metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -24 HOUR)
group by servers.ip) as avg_sess_24h, group by servers.ip) as avg_sess_24h,
(select servers.ip,round(avg(metr.sess_rate), 1) as avg_sess_3d from servers (select servers.ip,round(avg(metr.sess_rate), 1) as avg_sess_3d from servers
left join metrics as metr on metr.serv = servers.ip left join metrics as metr on metr.serv = servers.ip
where servers.metrics = 1 and where servers.metrics = 1 and
metr.date <= now() and metr.date >= DATE_ADD(NOW(), INTERVAL -3 DAY) metr.date <= now() and metr.date >= DATE_ADD(NOW(), INTERVAL -3 DAY)
group by servers.ip ) as avg_sess_3d, group by servers.ip ) as avg_sess_3d,
(select servers.ip,max(metr.sess_rate) as max_sess_1h from servers (select servers.ip,max(metr.sess_rate) as max_sess_1h from servers
left join metrics as metr on metr.serv = servers.ip left join metrics as metr on metr.serv = servers.ip
where servers.metrics = 1 and where servers.metrics = 1 and
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -1 HOUR) metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -1 HOUR)
group by servers.ip) as max_sess_1h, group by servers.ip) as max_sess_1h,
(select servers.ip,max(metr.sess_rate) as max_sess_24h from servers (select servers.ip,max(metr.sess_rate) as max_sess_24h from servers
left join metrics as metr on metr.serv = servers.ip left join metrics as metr on metr.serv = servers.ip
where servers.metrics = 1 and where servers.metrics = 1 and
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -24 HOUR) metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -24 HOUR)
group by servers.ip) as max_sess_24h, group by servers.ip) as max_sess_24h,
(select servers.ip,max(metr.sess_rate) as max_sess_3d from servers (select servers.ip,max(metr.sess_rate) as max_sess_3d from servers
left join metrics as metr on metr.serv = servers.ip left join metrics as metr on metr.serv = servers.ip
where servers.metrics = 1 and where servers.metrics = 1 and
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -3 DAY) metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -3 DAY)
group by servers.ip ) as max_sess_3d, group by servers.ip ) as max_sess_3d,
(select servers.ip,round(avg(metr.curr_con+metr.cur_ssl_con), 1) as avg_cur_1h from servers (select servers.ip,round(avg(metr.curr_con+metr.cur_ssl_con), 1) as avg_cur_1h from servers
left join metrics as metr on metr.serv = servers.ip left join metrics as metr on metr.serv = servers.ip
where servers.metrics = 1 and where servers.metrics = 1 and
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -1 HOUR) metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -1 HOUR)
group by servers.ip) as avg_cur_1h, group by servers.ip) as avg_cur_1h,
(select servers.ip,round(avg(metr.curr_con+metr.cur_ssl_con), 1) as avg_cur_24h from servers (select servers.ip,round(avg(metr.curr_con+metr.cur_ssl_con), 1) as avg_cur_24h from servers
left join metrics as metr on metr.serv = servers.ip left join metrics as metr on metr.serv = servers.ip
where servers.metrics = 1 and where servers.metrics = 1 and
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -24 HOUR) metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -24 HOUR)
group by servers.ip) as avg_cur_24h, group by servers.ip) as avg_cur_24h,
(select servers.ip,round(avg(metr.curr_con+metr.cur_ssl_con), 1) as avg_cur_3d from servers (select servers.ip,round(avg(metr.curr_con+metr.cur_ssl_con), 1) as avg_cur_3d from servers
left join metrics as metr on metr.serv = servers.ip left join metrics as metr on metr.serv = servers.ip
@ -1666,38 +1704,38 @@ def select_table_metrics():
group by servers.ip ) as avg_cur_3d, group by servers.ip ) as avg_cur_3d,
(select servers.ip,max(metr.curr_con) as max_con_1h from servers (select servers.ip,max(metr.curr_con) as max_con_1h from servers
left join metrics as metr on metr.serv = servers.ip left join metrics as metr on metr.serv = servers.ip
where servers.metrics = 1 and where servers.metrics = 1 and
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -1 HOUR) metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -1 HOUR)
group by servers.ip) as max_con_1h, group by servers.ip) as max_con_1h,
(select servers.ip,max(metr.curr_con) as max_con_24h from servers (select servers.ip,max(metr.curr_con) as max_con_24h from servers
left join metrics as metr on metr.serv = servers.ip left join metrics as metr on metr.serv = servers.ip
where servers.metrics = 1 and where servers.metrics = 1 and
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -24 HOUR) metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -24 HOUR)
group by servers.ip) as max_con_24h, group by servers.ip) as max_con_24h,
(select servers.ip,max(metr.curr_con) as max_con_3d from servers (select servers.ip,max(metr.curr_con) as max_con_3d from servers
left join metrics as metr on metr.serv = servers.ip left join metrics as metr on metr.serv = servers.ip
where servers.metrics = 1 and where servers.metrics = 1 and
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -3 DAY) metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -3 DAY)
group by servers.ip ) as max_con_3d group by servers.ip ) as max_con_3d
where ip.ip=hostname.ip where ip.ip=hostname.ip
and ip.ip=avg_sess_1h.ip and ip.ip=avg_sess_1h.ip
and ip.ip=avg_sess_24h.ip and ip.ip=avg_sess_24h.ip
and ip.ip=avg_sess_3d.ip and ip.ip=avg_sess_3d.ip
and ip.ip=max_sess_1h.ip and ip.ip=max_sess_1h.ip
and ip.ip=max_sess_24h.ip and ip.ip=max_sess_24h.ip
and ip.ip=max_sess_3d.ip and ip.ip=max_sess_3d.ip
and ip.ip=avg_cur_1h.ip and ip.ip=avg_cur_1h.ip
and ip.ip=avg_cur_24h.ip and ip.ip=avg_cur_24h.ip
and ip.ip=avg_cur_3d.ip and ip.ip=avg_cur_3d.ip
and ip.ip=max_con_1h.ip and ip.ip=max_con_1h.ip
and ip.ip=max_con_24h.ip and ip.ip=max_con_24h.ip
and ip.ip=max_con_3d.ip and ip.ip=max_con_3d.ip
group by hostname.ip """ % groups group by hostname.ip """ % groups
else: else:
sql = """ sql = """
select ip.ip, hostname, avg_sess_1h, avg_sess_24h, avg_sess_3d, max_sess_1h, max_sess_24h, max_sess_3d, avg_cur_1h, avg_cur_24h, avg_cur_3d, max_con_1h, max_con_24h, max_con_3d from select ip.ip, hostname, avg_sess_1h, avg_sess_24h, avg_sess_3d, max_sess_1h, max_sess_24h, max_sess_3d, avg_cur_1h, avg_cur_24h, avg_cur_3d, max_con_1h, max_con_24h, max_con_3d from
@ -1824,10 +1862,11 @@ 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 (
'ldap_port', 'ldap_enable', 'log_time_storage', 'syslog_server_enable', 'smon_check_interval', 'nginx_stats_port', 'session_ttl', 'token_ttl', 'stats_port', 'haproxy_sock_port', 'ldap_type',
'checker_check_interval', 'port_scan_interval', 'smon_keep_history_range', 'checker_keep_history_range', 'ldap_port', 'ldap_enable', 'log_time_storage', 'syslog_server_enable', 'smon_check_interval',
'portscanner_keep_history_range', 'checker_maxconn_threshold', 'apache_stats_port'): 'checker_check_interval', 'port_scan_interval', 'smon_keep_history_range', 'checker_keep_history_range',
'portscanner_keep_history_range', 'checker_maxconn_threshold', 'apache_stats_port'):
return int(setting.value) return int(setting.value)
else: else:
return setting.value return setting.value
@ -2099,13 +2138,14 @@ def check_token_exists(token):
def insert_smon(server, port, enable, proto, uri, body, group, desc, telegram, slack, user_group): def insert_smon(server, port, enable, proto, uri, body, group, desc, telegram, slack, user_group):
try: try:
http = proto+':'+uri http = proto + ':' + uri
except: except:
http = '' http = ''
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
@ -2127,7 +2167,7 @@ def select_smon(user_group, **kwargs):
if kwargs.get('ip'): if kwargs.get('ip'):
try: try:
http = kwargs.get('proto')+':'+kwargs.get('uri') http = kwargs.get('proto') + ':' + kwargs.get('uri')
except: except:
http = '' http = ''
sql = """select id, ip, port, en, http, body, telegram_channel_id, `desc`, `group`, user_group, slack_channel_id from smon sql = """select id, ip, port, en, http, body, telegram_channel_id, `desc`, `group`, user_group, slack_channel_id from smon
@ -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()
@ -2199,7 +2240,7 @@ def alerts_history(service, user_group, **kwargs):
sql = (f"select message, level, ip, port, date " sql = (f"select message, level, ip, port, date "
f"from alerts " f"from alerts "
f"where service = '{service}' {sql_user_group} {and_host} " f"where service = '{service}' {sql_user_group} {and_host} "
f"order by date desc; ") f"order by date desc; ")
try: try:
cursor.execute(sql) cursor.execute(sql)
@ -2342,7 +2383,7 @@ def response_time(time, smon_id):
def smon_list(user_group): def smon_list(user_group):
if user_group == 1: if user_group == 1:
query = (SMON.select(SMON.ip, SMON.port, SMON.status, SMON.en, SMON.desc, SMON.response_time, SMON.time_state, query = (SMON.select(SMON.ip, SMON.port, SMON.status, SMON.en, SMON.desc, SMON.response_time, SMON.time_state,
SMON.group, SMON.script, SMON.http, SMON.http_status, SMON.body, SMON.body_status) SMON.group, SMON.script, SMON.http, SMON.http_status, SMON.body, SMON.body_status)
.order_by(SMON.group)) .order_by(SMON.group))
else: else:
query = (SMON.select(SMON.ip, SMON.port, SMON.status, SMON.en, SMON.desc, SMON.response_time, SMON.time_state, query = (SMON.select(SMON.ip, SMON.port, SMON.status, SMON.en, SMON.desc, SMON.response_time, SMON.time_state,
@ -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:
@ -2480,7 +2523,7 @@ def delete_port_scanner_settings(server_id):
def insert_port_scanner_port(serv, user_group_id, port, service_name): def insert_port_scanner_port(serv, user_group_id, port, service_name):
try: try:
PortScannerPorts.insert(serv=serv, port=port, user_group_id=user_group_id, service_name=service_name, PortScannerPorts.insert(serv=serv, port=port, user_group_id=user_group_id, service_name=service_name,
date=funct.get_data('regular')).execute() date=funct.get_data('regular')).execute()
except Exception as e: except Exception as e:
out_error(e) out_error(e)
@ -2534,7 +2577,7 @@ def delete_ports(serv):
def insert_port_scanner_history(serv, port, port_status, service_name): def insert_port_scanner_history(serv, port, port_status, service_name):
try: try:
PortScannerHistory.insert(serv=serv, port=port, status=port_status, service_name=service_name, PortScannerHistory.insert(serv=serv, port=port, status=port_status, service_name=service_name,
date=funct.get_data('regular')).execute() date=funct.get_data('regular')).execute()
except Exception as e: except Exception as e:
out_error(e) out_error(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()
@ -2678,7 +2726,7 @@ def select_aws_server(server_id):
prov_serv.volume_size, prov_serv.ssh_key_name, prov_serv.name, prov_serv.os, 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.firewall, prov_serv.provider_id, prov_serv.group_id, prov_serv.id,
prov_serv.delete_on_termination, prov_serv.volume_type) prov_serv.delete_on_termination, prov_serv.volume_type)
.where(prov_serv.id == server_id)) .where(prov_serv.id == server_id))
try: try:
query_res = query.execute() query_res = query.execute()
except Exception as e: except Exception as e:
@ -2691,10 +2739,11 @@ 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))
try: try:
query_res = query.execute() query_res = query.execute()
except Exception as e: except Exception as e:
@ -2705,10 +2754,12 @@ 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.ssh_ids, prov_serv.ssh_key_name, prov_serv.name, prov_serv.os, prov_serv.firewall, prov_serv.select(prov_serv.region, prov_serv.instance_type, prov_serv.private_networking, prov_serv.floating_ip,
prov_serv.backup, prov_serv.monitoring, prov_serv.provider_id, prov_serv.group_id, prov_serv.id) prov_serv.ssh_ids, prov_serv.ssh_key_name, prov_serv.name, prov_serv.os, prov_serv.firewall,
.where(prov_serv.id == server_id)) prov_serv.backup, prov_serv.monitoring, prov_serv.provider_id, prov_serv.group_id,
prov_serv.id)
.where(prov_serv.id == server_id))
try: try:
query_res = query.execute() query_res = query.execute()
except Exception as e: except Exception as e:
@ -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,
@ -2786,10 +2839,10 @@ def update_server_gcore(region, size, network_type, network_name, volume_size, s
def update_server_do(size, privet_net, floating_ip, ssh_ids, ssh_name, oss, firewall, monitoring, backup, provider, def update_server_do(size, privet_net, floating_ip, ssh_ids, ssh_name, oss, firewall, monitoring, backup, provider,
group, status, server_id): group, status, server_id):
query = ProvisionedServers.update(instance_type=size, private_networking=privet_net, query = ProvisionedServers.update(instance_type=size, private_networking=privet_net,
floating_ip=floating_ip, ssh_ids=ssh_ids, ssh_key_name=ssh_name, floating_ip=floating_ip, ssh_ids=ssh_ids, ssh_key_name=ssh_name,
os=oss, firewall=firewall, monitoring=monitoring, backup=backup, os=oss, firewall=firewall, monitoring=monitoring, backup=backup,
provider_id=provider, provider_id=provider,
group_id=group, status=status).where(ProvisionedServers.id == server_id) group_id=group, status=status).where(ProvisionedServers.id == server_id)
try: try:
@ -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,
.where((prov_serv.name == kwargs.get('new')) & prov_serv.name_template)
(prov_serv.group_id == kwargs.get('group')) & .where((prov_serv.name == kwargs.get('new')) &
(prov_serv.type == kwargs.get('type')))) (prov_serv.group_id == kwargs.get('group')) &
(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
@ -2959,11 +3016,11 @@ def select_docker_services_settings(service: str) -> str:
else: else:
return query_res return query_res
def select_service_setting(server_id: int, service: str, setting: str) -> str: def select_service_setting(server_id: int, service: str, setting: str) -> str:
try: try:
result = ServiceSetting.get( result = ServiceSetting.get(
(ServiceSetting.server_id == server_id) & (ServiceSetting.server_id == server_id) &
(ServiceSetting.service == service) & (ServiceSetting.service == service) &
(ServiceSetting.setting == setting)).value (ServiceSetting.setting == setting)).value
except Exception: except Exception:
@ -3089,10 +3146,11 @@ 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()
except Exception as e: except Exception as e:
out_error(e) out_error(e)
return False return False
@ -3241,8 +3299,9 @@ 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,
description=description).execute() cred_id=cred,
description=description).execute()
except Exception as e: except Exception as e:
out_error(e) out_error(e)
return False return False
@ -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)