Add log level filter to PlexPy logs

This commit is contained in:
JonnyWong16 2016-06-05 11:17:58 -07:00
commit 13ab4a9363
2 changed files with 102 additions and 65 deletions

View file

@ -21,9 +21,9 @@
<span><i class="fa fa-list-alt"></i> Logs</span>
</div>
<div class="button-bar">
<div class="btn-group" id="filter-logs" style="display: none; ">
<div class="btn-group" id="plexpy-log-levels">
<label>
<select name="log-filter" id="log-filter" class="btn" style="color: inherit;">
<select name="plexpy-log-level-filter" id="plexpy-log-level-filter" class="btn" style="color: inherit;">
<option value="">All log levels</option>
<option disabled>&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;</option>
<option value="DEBUG">Debug</option>
@ -34,6 +34,18 @@
</label>
</div>
<button class="btn btn-dark" id="download-plexpylog"><i class="fa fa-download"></i> Download log</button>
<div class="btn-group" id="plex-log-levels" style="display: none;">
<label>
<select name="plex-log-level-filter" id="plex-log-level-filter" class="btn" style="color: inherit;">
<option value="">All log levels</option>
<option disabled>&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;</option>
<option value="DEBUG">Debug</option>
<option value="INFO">Info</option>
<option value="WARN">Warning</option>
<option value="ERROR">Error</option>
</select>
</label>
</div>
<button class="btn btn-dark" id="clear-logs"><i class="fa fa-trash-o"></i> Clear logs</button>
<button class="btn btn-dark" id="clear-notify-logs" style="display: none;"><i class="fa fa-trash-o"></i> Clear logs</button>
<button class="btn btn-dark" id="clear-login-logs" style="display: none;"><i class="fa fa-trash-o"></i> Clear logs</button>
@ -58,8 +70,7 @@
<th class="all" align="left" id="message">Message</th>
</tr>
</thead>
<tbody>
</tbody>
<tbody></tbody>
</table>
</div>
<div role="tabpanel" class="tab-pane" id="tabs-2">
@ -126,7 +137,8 @@
</div>
<br>
<div align="center">Refresh rate:
<div align="center">
Refresh rate:
<select id="refreshrate" onchange="setRefresh()">
<option value="0" selected="selected">No Refresh</option>
<option value="5">5 Seconds</option>
@ -151,8 +163,7 @@
<script>
$(document).ready(function() {
loadPlexPyLogs();
clearSearchButton('log_table', log_table);
loadPlexPyLogs(selected_log_level);
});
var log_levels = ['DEBUG', 'INFO', 'WARN', 'ERROR'];
@ -160,7 +171,7 @@
function bindLogLevelFilter() {
clearLogLevelFilter();
var log_level_column = this.api().column(1);
var select = $('#log-filter');
var select = $('#plex-log-level-filter');
select.on('change', function () {
var val = $.fn.dataTable.util.escapeRegex(
$(this).val()
@ -172,7 +183,6 @@
.slice(levelIndex)
.join('|') + '$';
}
log_level_column
.search(search_string, true, false)
.draw();
@ -180,14 +190,28 @@
}
function clearLogLevelFilter() {
$('#log-filter').off('change');
$('#plex-log-level-filter').off('change');
}
function loadPlexPyLogs() {
var selected_log_level = null;
function loadPlexPyLogs(selected_log_level) {
log_table_options.ajax = {
url: "getLog"
url: "getLog",
type: 'post',
data: function (d) {
return {
json_data: JSON.stringify(d),
log_level: selected_log_level
};
}
}
log_table = $('#log_table').DataTable(log_table_options);
clearSearchButton('log_table', log_table);
$('#plexpy-log-level-filter').on('change', function () {
selected_log_level = $(this).val() || null;
log_table.draw();
});
}
function loadPlexLogs() {
@ -232,17 +256,19 @@
}
$("#plexpy-logs-btn").click(function () {
$("#filter-logs").hide();
$("#plexpy-log-levels").show();
$("#plex-log-levels").hide();
$("#clear-logs").show();
$("#download-plexpylog").show()
$("#clear-notify-logs").hide();
$("#clear-login-logs").hide();
loadPlexPyLogs();
loadPlexPyLogs(selected_log_level);
clearSearchButton('log_table', log_table);
});
$("#plex-logs-btn").click(function () {
$("#filter-logs").show();
$("#plexpy-log-levels").hide();
$("#plex-log-levels").show();
$("#clear-logs").hide();
$("#download-plexpylog").hide()
$("#clear-notify-logs").hide();
@ -252,7 +278,8 @@
});
$("#plex-scanner-logs-btn").click(function () {
$("#filter-logs").show();
$("#plexpy-log-levels").hide();
$("#plex-log-levels").show();
$("#clear-logs").hide();
$("#download-plexpylog").hide()
$("#clear-notify-logs").hide();
@ -262,7 +289,8 @@
});
$("#notification-logs-btn").click(function () {
$("#filter-logs").hide();
$("#plexpy-log-levels").hide();
$("#plex-log-levels").hide();
$("#clear-logs").hide();
$("#download-plexpylog").hide()
$("#clear-notify-logs").show();
@ -272,7 +300,8 @@
});
$("#login-logs-btn").click(function () {
$("#filter-logs").hide();
$("#plexpy-log-levels").hide();
$("#plex-log-levels").hide();
$("#clear-logs").hide();
$("#download-plexpylog").hide()
$("#clear-notify-logs").hide();

View file

@ -34,6 +34,7 @@ import config
import database
import datafactory
import graphs
import helpers
import http_handler
import libraries
import log_reader
@ -2233,13 +2234,15 @@ class WebInterface(object):
@cherrypy.expose
@requireAuth(member_of("admin"))
def getLog(self, start=0, length=100, **kwargs):
start = int(start)
length = int(length)
order_dir = kwargs.get('order[0][dir]', "desc")
order_column = kwargs.get('order[0][column]', "0")
search_value = kwargs.get('search[value]', "")
search_regex = kwargs.get('search[regex]', "") # Remove?
def getLog(self, **kwargs):
json_data = helpers.process_json_kwargs(json_kwargs=kwargs.get('json_data'))
log_level = kwargs.get('log_level', "")
start = json_data['start']
length = json_data['length']
order_column = json_data['order'][0]['column']
order_dir = json_data['order'][0]['dir']
search_value = json_data['search']['value']
sortcolumn = 0
filt = []
@ -2250,7 +2253,7 @@ class WebInterface(object):
try:
temp_loglevel_and_time = l.split(' - ', 1)
loglvl = temp_loglevel_and_time[1].split(' ::', 1)[0].strip()
msg = l.split(' : ', 1)[1].replace('\n', '')
msg = unicode(l.split(' : ', 1)[1].replace('\n', ''), 'utf-8')
fa([temp_loglevel_and_time[0], loglvl, msg])
except IndexError:
# Add traceback message to previous msg.
@ -2260,10 +2263,15 @@ class WebInterface(object):
filt[tl][2] += '<br>' + l
continue
if search_value == '':
filtered = filt
log_levels = ['DEBUG', 'INFO', 'WARN', 'ERROR']
if log_level in log_levels:
log_levels = log_levels[log_levels.index(log_level)::]
filtered = [row for row in filt if row[1] in log_levels]
else:
filtered = [row for row in filt for column in row if search_value.lower() in column.lower()]
filtered = filt
if search_value:
filtered = [row for row in filtered for column in row if search_value.lower() in column.lower()]
if order_column == '1':
sortcolumn = 2