Logs time range
pull/19/head
Aidaho12 2018-05-19 00:09:14 +06:00
parent c270d5d144
commit fe7b682cba
10 changed files with 137 additions and 143 deletions

View File

@ -163,6 +163,12 @@ if serv is not None and act == "stats":
if serv is not None and form.getvalue('rows') is not None: if serv is not None and form.getvalue('rows') is not None:
rows = form.getvalue('rows') rows = form.getvalue('rows')
grep = form.getvalue('grep') grep = form.getvalue('grep')
hour = form.getvalue('hour')
minut = form.getvalue('minut')
hour1 = form.getvalue('hour1')
minut1 = form.getvalue('minut1')
date = hour+':'+minut
date1 = hour1+':'+minut1
if grep is not None: if grep is not None:
grep_act = '|grep' grep_act = '|grep'
@ -174,25 +180,57 @@ if serv is not None and form.getvalue('rows') is not None:
if syslog_server_enable is None or syslog_server_enable == "0": if syslog_server_enable is None or syslog_server_enable == "0":
local_path_logs = funct.get_config_var('logs', 'local_path_logs') local_path_logs = funct.get_config_var('logs', 'local_path_logs')
syslog_server = serv syslog_server = serv
commands = [ 'sudo tail -%s %s %s %s' % (rows, local_path_logs, grep_act, grep) ] 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: else:
commands = [ 'sudo tail -%s /var/log/%s/syslog.log %s %s' % (rows, serv, grep_act, grep) ] 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 = funct.get_config_var('logs', 'syslog_server') syslog_server = funct.get_config_var('logs', 'syslog_server')
print('<div id="logs">')
funct.ssh_command(syslog_server, commands, show_log="1")
print('</div>')
funct.ssh_command(syslog_server, commands, show_log="1")
if serv is not None and form.getvalue('rows1') is not None: if serv is not None and form.getvalue('rows1') is not None:
rows = form.getvalue('rows1') rows = form.getvalue('rows1')
grep = form.getvalue('grep') grep = form.getvalue('grep')
grep = form.getvalue('grep')
hour = form.getvalue('hour')
minut = form.getvalue('minut')
hour1 = form.getvalue('hour1')
minut1 = form.getvalue('minut1')
date = hour+':'+minut
date1 = hour1+':'+minut1
if grep is not None: if grep is not None:
grep_act = '|grep' grep_act = '|grep'
else: else:
grep_act = '' grep_act = ''
grep = '' grep = ''
cmd='tail -%s %s %s %s' % (rows, '/var/log/httpd/'+serv, grep_act, grep) cmd="cat %s| awk -F\"/|:\" '$3>\"%s:00\" && $3<\"%s:00\"' |tail -%s %s %s" % ('/var/log/httpd/'+serv, date, date1, rows, grep_act, grep)
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, universal_newlines=True)
stdout, stderr = p.communicate()
output = stdout.splitlines()
funct.show_log(output)
print(stderr)
if form.getvalue('viewlogs') is not None:
viewlog = form.getvalue('viewlogs')
log_path = funct.get_config_var('main', 'log_path')
rows = form.getvalue('rows2')
grep = form.getvalue('grep')
hour = form.getvalue('hour')
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 = ''
cmd="cat %s| awk '$3>\"%s:00\" && $3<\"%s:00\"' |tail -%s %s %s" % (log_path + viewlog, date, date1, rows, grep_act, grep)
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, universal_newlines=True) p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, universal_newlines=True)
stdout, stderr = p.communicate() stdout, stderr = p.communicate()
output = stdout.splitlines() output = stdout.splitlines()
@ -262,26 +300,7 @@ if serv is not None and act == "configShow":
funct.get_button("Just save", value="save") funct.get_button("Just save", value="save")
funct.get_button("Upload and restart") funct.get_button("Upload and restart")
print('</form></center>') print('</form></center>')
if form.getvalue('viewlogs') is not None:
viewlog = form.getvalue('viewlogs')
log_path = funct.get_config_var('main', 'log_path')
try:
log = open(log_path + viewlog, "r",encoding='utf-8', errors='ignore')
except IOError:
print('<div class="alert alert-danger">Can\'t read import log file</div>')
sys.exit()
print('<center><h3>Shows log: %s</h3></center><br />' % viewlog)
i = 0
for line in log:
i = i + 1
if i % 2 == 0:
print('<div class="line3">' + line + '</div>')
else:
print('<div class="line">' + line + '</div>')
if form.getvalue('master'): if form.getvalue('master'):
master = form.getvalue('master') master = form.getvalue('master')
slave = form.getvalue('slave') slave = form.getvalue('slave')

View File

@ -99,9 +99,9 @@
</ul> </ul>
</nav> </nav>
<div class="copyright-menu"> <div class="copyright-menu">
HAproxy-WI v2.5.4.4 HAproxy-WI v2.5.4.5
<br> <br>
<a href="https://www.patreon.com/haproxy_wi" title="Donate" style="color: #fff; margin-left: 40px;">Patreon</a> <a href="https://www.patreon.com/haproxy_wi" title="Donate" target="_blank" style="color: #fff; margin-left: 40px;">Patreon</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -5,22 +5,27 @@
{% endif %} {% endif %}
<table class="overview"> <table class="overview">
<tr class="overviewHead"> <tr class="overviewHead">
<td class="padding10 first-collumn"> <td class="padding10 first-collumn" style="width: 10%;">
{% if onclick == 'showApacheLog()' %} {% if onclick == 'showApacheLog()' %}
Log Log
{% else %} {% else %}
Server Server
{% endif %} {% endif %}
</td> </td>
<td>Number rows</td> <td style="width: 10%;">Number rows</td>
<td class="padding10">Ex for grep</td> <td class="padding10" style="width: 10%;">Ex for grep</td>
<td> </td> <td style="width: 10%;">
<label for="time_range_out_hour">Time range:</label>
<input type="text" id="time_range_out_hour" readonly class="time-range">:<input type="text" id="time_range_out_minut" readonly class="time-range"> -
<input type="text" id="time_range_out_hour1" readonly class="time-range">:<input type="text" id="time_range_out_minut1" readonly class="time-range">
</td>
<td style="width: 10%;"> </td>
</tr> </tr>
<tr> <tr>
<td class="padding10 first-collumn"> <td class="padding10 first-collumn" style="width: 10%;">
<form action="logs.py" method="get"> <form action="logs.py" method="get">
<select autofocus required name="serv" id="serv"> <select autofocus required name="serv" id="{{ select_id }}">
{% if onclick == 'showApacheLog()' %} {% if onclick == 'showApacheLog()' or onclick == 'viewLogs()' %}
<option disabled selected>Choose log</option> <option disabled selected>Choose log</option>
{% for select in selects %} {% for select in selects %}
{% if select.2 == serv %} {% if select.2 == serv %}
@ -41,16 +46,19 @@
{% endif %} {% endif %}
</select> </select>
</td> </td>
<td> <td class="padding10" style="width: 10%;">
<input type="number" name="rows" id="rows" value="{{ rows }}" class="form-control" required> <input type="number" name="rows" id="rows" value="{{ rows }}" class="form-control" required>
</td> </td>
<td class="padding10 first-collumn"> <td class="padding10" style="width: 10%;">
<input type="text" name="grep" id="grep" class="form-control" value="{{ grep }}" > <input type="text" name="grep" id="grep" class="form-control" value="{{ grep }}" >
</td> </td>
<td class="padding10 first-collumn"> <td class="padding10" style="width: 10%;">
<div id="time-range"></div>
</td>
<td class="padding10 first-collumn" style="width: 10%;">
<a class="ui-button ui-widget ui-corner-all" id="show" title="Show logs" onclick="{{ onclick }}">Show</a> <a class="ui-button ui-widget ui-corner-all" id="show" title="Show logs" onclick="{{ onclick }}">Show</a>
</form> </form>
</td> </td>
</tr> </tr>
</table> </table>
<div id="ajax"> <div id="ajax">
@ -60,7 +68,7 @@
window.onload = showApacheLog() window.onload = showApacheLog()
{% else %} {% else %}
window.onload = showLog() window.onload = showLog()
{% endif %} {% endif %}
</script> </script>
{% endblock %} {% endblock %}

View File

@ -1,67 +0,0 @@
{% extends "base.html" %}
{% block content %}
{% if role <= 1 %}
<table class="overview">
<tr class="overviewHead">
<td class="padding10">Login</td>
<td class="padding10">Email</td>
<td>Group</td>
<td class="padding10">Role</td>
<td style="width: 200px;">
<span class="add-button">
<a href="#" title="Show all users" id="show-all-users" style="color: #fff">
Show all
</a>
</span>
</td>
</tr>
{% set counter = 0 -%}
{% for user in users %}
{% set counter = counter + 1 %}
{% if counter < 4 %}
<tr>
<td class="padding10 first-collumn"> {{ user.1 }}</td>
<td class="padding10"> {{ user.2 }}</td>
<td class="second-collumn">{{ user.5 }}</td>
<td>{{ user.4 }}</td>
<td></td>
</tr>
{% else %}
<tr style="display: none;" class="show-users">
<td class="padding10 first-collumn"> {{ user.1 }}</td>
<td class="padding10"> {{ user.2 }}</td>
<td class="second-collumn">{{ user.5 }}</td>
<td>{{ user.4 }}</td>
<td></td>
</tr>
{% endif %}
{% endfor %}
</table>
{% endif %}
<table class="overview">
<tr class="overviewHead">
<td class="padding10">Server</td>
<td class="padding10">
HAproxy status
</td>
<td class="padding10">
Action
</td>
<td>
Last edit
</td>
</tr>
{% for server in servers %}
<tr>
<td class="padding10 first-collumn"><a title={{ server.1 }} style="color: #000">{{ server.1 }}</a></td>
<td class="second-collumn">{{ server.7 }}</td>
<td class="padding10">
<a href="/app/configshow.py?serv={{ server.2 }}&open=open#conf" title="Show config"><img src="/image/pic/show.png" alt="show" class="icon"></a>
<a href="/app/configshow.py?serv={{ server.2 }}&open=open#conf" title="Edit config"><img src="/image/pic/edit.png" alt="edit" class="icon"></a>
<a href="/app/configshow.py?serv={{ server.2 }}&open=open#conf" title="Compare config"><img src="/image/pic/compare.png" alt="compare" class="icon"></a>
<a href="/app/configshow.py?serv={{ server.2 }}&open=open#conf" title="Map listen/frontend/backend"><img src="/image/pic/map.png" alt="map" class="icon"></a>
</td>
</tr>
{% endfor %}
</table>
{% endblock %}

View File

@ -1,30 +0,0 @@
{% extends "base.html" %}
{% block content %}
<center>
<h3>Choose server</h3>
<p>
<form action="{{ action }}" method="get">
<select autofocus required name="serv" id="{{ select_id }}">
<option disabled>Choose server</option>
{% for select in selects %}
{% if select == serv %}
<option value="{{ select }}" selected>{{ select }}</option>
{% else %}
<option value="{{ select }}">{{ select }}</option>
{% endif %}
{% endfor %}
</select>
{% if onclick %}
<a class="ui-button ui-widget ui-corner-all" id="show" title="Show config" onclick="{{ onclick }}">Show</a>
{% else %}
<button type="submit" value="open" name="open" class="btn btn-default">Open</button>
{% endif %}
</form>
</p>
</center>
<div id="ajax">
</div>
<script>
window.onload = viewLogs()
</script>
{% endblock %}

View File

@ -8,9 +8,19 @@ import glob
import datetime import datetime
from jinja2 import Environment, FileSystemLoader from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/')) env = Environment(loader=FileSystemLoader('templates/'))
template = env.get_template('viewlogs.html') template = env.get_template('logs.html')
form = cgi.FieldStorage() form = cgi.FieldStorage()
if form.getvalue('grep') is None:
grep = ""
else:
grep = form.getvalue('grep')
if form.getvalue('rows') is None:
rows = 10
else:
rows = form.getvalue('rows')
print('Content-type: text/html\n') print('Content-type: text/html\n')
funct.check_login() funct.check_login()
funct.page_for_admin() funct.page_for_admin()
@ -35,14 +45,13 @@ try:
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
user_id = cookie.get('uuid') user_id = cookie.get('uuid')
user = sql.get_user_name_by_uuid(user_id.value) user = sql.get_user_name_by_uuid(user_id.value)
servers = sql.get_dick_permit()
except: except:
pass pass
def get_files(): def get_files():
file = set() file = []
for files in glob.glob(os.path.join(log_path,'*.log')): for files in glob.glob(os.path.join(log_path,'*.log')):
file.add(files.split('/')[5]) file += [(files.split('/')[5], files.split('/')[5])]
return sorted(file, reverse=True) return sorted(file, reverse=True)
output_from_parsed_template = template.render(h2 = 1, output_from_parsed_template = template.render(h2 = 1,
@ -53,5 +62,7 @@ output_from_parsed_template = template.render(h2 = 1,
onclick = "viewLogs()", onclick = "viewLogs()",
serv = form.getvalue('viewlogs'), serv = form.getvalue('viewlogs'),
select_id = "viewlogs", select_id = "viewlogs",
selects = get_files()) selects = get_files(),
rows = rows,
grep = grep)
print(output_from_parsed_template) print(output_from_parsed_template)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 453 KiB

After

Width:  |  Height:  |  Size: 456 KiB

View File

@ -148,6 +148,10 @@ function showLog() {
rows: $('#rows').val(), rows: $('#rows').val(),
serv: $("#serv").val(), serv: $("#serv").val(),
grep: $("#grep").val(), grep: $("#grep").val(),
hour: $('#time_range_out_hour').val(),
minut: $('#time_range_out_minut').val(),
hour1: $('#time_range_out_hour1').val(),
minut1: $('#time_range_out_minut1').val(),
}, },
type: "GET", type: "GET",
success: function( data ) { success: function( data ) {
@ -258,6 +262,12 @@ function viewLogs() {
url: "options.py", url: "options.py",
data: { data: {
viewlogs: $('#viewlogs').val(), viewlogs: $('#viewlogs').val(),
rows2: $('#rows').val(),
grep: $("#grep").val(),
hour: $('#time_range_out_hour').val(),
minut: $('#time_range_out_minut').val(),
hour1: $('#time_range_out_hour1').val(),
minut1: $('#time_range_out_minut1').val(),
}, },
type: "GET", type: "GET",
success: function( data ) { success: function( data ) {
@ -321,7 +331,38 @@ $( function() {
$(this).addClass('current'); $(this).addClass('current');
} }
}); });
var now = new Date(Date.now());
var date1 = now.getHours() * 60 - 1 * 60;
var date2 = now.getHours() * 60;
$("#time-range").slider({
range: true,
min: 0,
max: 1440,
step: 15,
values: [ date1, date2 ],
slide: function(e, ui) {
var hours = Math.floor(ui.values[0] / 60);
var minutes = ui.values[0] - (hours * 60);
if(hours.toString().length == 1) hours = '0' + hours;
if(minutes.toString().length == 1) minutes = '0' + minutes;
var hours1 = Math.floor(ui.values[1] / 60);
var minutes1 = ui.values[1] - (hours1 * 60);
if(hours1.toString().length == 1) hours1 = '0' + hours1;
if(minutes1.toString().length == 1) minutes1 = '0' + minutes1;
$('#time_range_out_hour').val(hours);
$('#time_range_out_minut').val(minutes);
$('#time_range_out_hour1').val(hours1);
$('#time_range_out_minut1').val(minutes1);
}
});
$('#time_range_out_hour').val(date1/60);
$('#time_range_out_minut').val('00');
$('#time_range_out_hour1').val(date2/60);
$('#time_range_out_minut1').val('00');
$('#0').click(function() { $('#0').click(function() {
$('.auto-refresh-div').show("blind", "fast"); $('.auto-refresh-div').show("blind", "fast");
$('#0').css("display", "none"); $('#0').css("display", "none");

View File

@ -209,6 +209,14 @@ pre {
.line:hover, .line3:hover, tr:hover { .line:hover, .line3:hover, tr:hover {
background-color: #f6f8fa; background-color: #f6f8fa;
} }
.time-range {
border: 0;
background-color: #f5faf4;
font-weight: bold;
width: 18px;
padding-left: 0;
padding-right: 0;
}
.overviewHead:hover { .overviewHead:hover {
background-color: #f4f9f3e6; background-color: #f4f9f3e6;
} }

View File

@ -527,6 +527,10 @@ function showApacheLog() {
rows1: $('#rows').val(), rows1: $('#rows').val(),
serv: $("#serv").val(), serv: $("#serv").val(),
grep: $("#grep").val(), grep: $("#grep").val(),
hour: $('#time_range_out_hour').val(),
minut: $('#time_range_out_minut').val(),
hour1: $('#time_range_out_hour1').val(),
minut1: $('#time_range_out_minut1').val(),
}, },
type: "GET", type: "GET",
success: function( data ) { success: function( data ) {