diff --git a/api/api.py b/api/api.py index 5286f439..aadff4e5 100644 --- a/api/api.py +++ b/api/api.py @@ -70,7 +70,8 @@ def index(): 'server//action/restart':'restart HAProxy service by id or hostname or ip', 'server//config/get':'get HAProxy config from the server by id or hostname or ip', 'server//config/send':'send HAProxy config to the server by id or hostname or ip. Has to have config header with config and action header for action after upload. Action header accepts next value: save, test, reload and restart. May be empty for just save', - 'server//config/add':'add 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. Action header accepts next value: save, test, reload and restart. May be empty for just save' + 'server//config/add':'add 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. Action header accepts next value: save, test, reload and restart. May be empty for just save', + 'server//log':'show HAProxy log by id or hostname or ip. May to have config next headers: rows(format INT) default: 10 grep, waf(if needs WAF log) deault: 0, start_hour(format: 24) default: 00, start_minut, end_hour(format: 24) default: 24, end_minut' } return dict(help=data) @@ -169,4 +170,12 @@ def callback(id): if not check_login(): return dict(error=_error_auth) return api_funct.add_to_config(id) + + +@route('/server//log', method=['GET', 'POST']) +@route('/server//log', method=['GET', 'POST']) +def callback(id): + if not check_login(): + return dict(error=_error_auth) + return api_funct.show_log(id) \ No newline at end of file diff --git a/api/api_funct.py b/api/api_funct.py index e257ec1e..ff8e4703 100644 --- a/api/api_funct.py +++ b/api/api_funct.py @@ -257,10 +257,48 @@ def add_to_config(id): data = {id: return_mess} except: - data = {} data[id] = {"error":"Cannot find the server"} return dict(error=data) return dict(config=data) + + +def show_log(id): + data = {} + rows = request.headers.get('rows') + waf = request.headers.get('waf') + grep = request.headers.get('grep') + hour = request.headers.get('starthour') + minut = request.headers.get('startminut') + hour1 = request.headers.get('endhour') + minut1 = request.headers.get('endminut') + + if rows is None: + rows = '10' + if waf is None: + waf = '0' + if hour is None: + hour = '00' + if minut is None: + minut = '00' + if hour1 is None: + hour1 = '24' + if minut1 is None: + minut1 = '00' + + try: + servers = check_permit_to_server(id) + + for s in servers: + ip = s[2] + except: + + data[id] = {"error":"Cannot find the server"} + return dict(error=data) + + out = funct.show_haproxy_log(ip, rows=rows, waf=str(waf), grep=grep, hour=str(hour), minut=str(minut), hour1=str(hour1), minut1=str(minut1), html=0) + data = {id: out} + + return dict(log=data) \ No newline at end of file diff --git a/app/create_db.py b/app/create_db.py index 5334188f..a3a8b171 100644 --- a/app/create_db.py +++ b/app/create_db.py @@ -438,7 +438,7 @@ def update_db_v_3_5_3(**kwargs): def update_ver(**kwargs): con, cur = get_cur() - sql = """update version set version = '3.7.3.3'; """ + sql = """update version set version = '3.7.4'; """ try: cur.execute(sql) con.commit() diff --git a/app/funct.py b/app/funct.py index 9fb9be64..1c56bf61 100644 --- a/app/funct.py +++ b/app/funct.py @@ -546,12 +546,51 @@ def check_haproxy_config(serv): ssh.close() -def show_log(stdout): +def show_log(stdout, **kwargs): i = 0 - for line in stdout: - i = i + 1 - line_class = "line3" if i % 2 == 0 else "line" - print('
' + escape_html(line) + '
') + out = '' + for line in stdout: + if kwargs.get("html") != 0: + i = i + 1 + line_class = "line3" if i % 2 == 0 else "line" + out += '
' + escape_html(line) + '
' + else: + out += line + + return out + + +def show_haproxy_log(serv, rows=10, waf='0', grep=None, hour='00', minut='00', hour1='24', minut1='00', **kwargs): + import sql + date = hour+':'+minut + date1 = hour1+':'+minut1 + if grep is not None: + grep_act = '|grep' + else: + grep_act = '' + grep = '' + + syslog_server_enable = sql.get_setting('syslog_server_enable') + if syslog_server_enable is None or syslog_server_enable == "0": + local_path_logs = sql.get_setting('local_path_logs') + syslog_server = serv + commands = [ "sudo cat %s| awk '$3>\"%s:00\" && $3<\"%s:00\"' |tail -%s %s %s" % (local_path_logs, date, date1, rows, grep_act, grep) ] + else: + commands = [ "sudo cat /var/log/%s/syslog.log | sed '/ %s:00/,/ %s:00/! d' |tail -%s %s %s" % (serv, date, date1, rows, grep_act, grep) ] + syslog_server = sql.get_setting('syslog_server') + + if waf == "1": + local_path_logs = '/var/log/modsec_audit.log' + commands = [ "sudo cat %s |tail -%s %s %s" % (local_path_logs, rows, grep_act, grep) ] + + + if kwargs.get('html') == 0: + a = ssh_command(syslog_server, commands) + return show_log(a, html=0) + else: + return ssh_command(syslog_server, commands, show_log='1') + + def show_ip(stdout): @@ -583,7 +622,7 @@ def ssh_command(serv, commands, **kwargs): if kwargs.get("ip") == "1": show_ip(stdout) elif kwargs.get("show_log") == "1": - show_log(stdout) + return show_log(stdout) elif kwargs.get("server_status") == "1": server_status(stdout) elif kwargs.get('print_out'): diff --git a/app/options.py b/app/options.py index e68eca02..b08bfca4 100644 --- a/app/options.py +++ b/app/options.py @@ -328,7 +328,7 @@ if serv is not None and act == "stats": data = response.content print(data.decode('utf-8')) - + if serv is not None and form.getvalue('rows') is not None: rows = form.getvalue('rows') waf = form.getvalue('waf') @@ -337,29 +337,8 @@ if serv is not None and form.getvalue('rows') is not None: minut = form.getvalue('minut') hour1 = form.getvalue('hour1') minut1 = form.getvalue('minut1') - date = hour+':'+minut - date1 = hour1+':'+minut1 - - if grep is not None: - grep_act = '|grep' - else: - grep_act = '' - grep = '' - - syslog_server_enable = sql.get_setting('syslog_server_enable') - if syslog_server_enable is None or syslog_server_enable == "0": - local_path_logs = sql.get_setting('local_path_logs') - syslog_server = serv - commands = [ "sudo cat %s| awk '$3>\"%s:00\" && $3<\"%s:00\"' |tail -%s %s %s" % (local_path_logs, date, date1, rows, grep_act, grep) ] - else: - commands = [ "sudo cat /var/log/%s/syslog.log | sed '/ %s:00/,/ %s:00/! d' |tail -%s %s %s" % (serv, date, date1, rows, grep_act, grep) ] - syslog_server = sql.get_setting('syslog_server') - - if waf == "1": - local_path_logs = '/var/log/modsec_audit.log' - commands = [ "sudo cat %s |tail -%s %s %s" % (local_path_logs, rows, grep_act, grep) ] - - funct.ssh_command(syslog_server, commands, show_log="1") + out = funct.show_haproxy_log(serv, rows=rows, waf=waf, grep=grep, hour=hour, minut=minut, hour1=hour1, minut1=minut1) + print(out) if serv is not None and form.getvalue('rows1') is not None: @@ -386,7 +365,7 @@ if serv is not None and form.getvalue('rows1') is not None: output, stderr = funct.subprocess_execute(cmd) - funct.show_log(output) + print(funct.show_log(output)) print(stderr) @@ -411,7 +390,7 @@ if form.getvalue('viewlogs') is not None: cmd="cat %s| awk '$3>\"%s:00\" && $3<\"%s:00\"' |tail -%s %s %s" % (log_path + viewlog, date, date1, rows, grep_act, grep) output, stderr = funct.subprocess_execute(cmd) - funct.show_log(output) + print(funct.show_log(output)) print(stderr)