1
0
mirror of https://github.com/moparisthebest/SickRage synced 2024-12-12 02:52:20 -05:00

Merge pull request #1347 from fernandog/log_filter

New Feature - Log search and log filter by SR thread
This commit is contained in:
Alexandre Beloin 2015-02-23 20:33:38 -05:00
commit e66c227631
2 changed files with 84 additions and 12 deletions

View File

@ -13,10 +13,51 @@
<script type="text/javascript" charset="utf-8">
<!--
\$(document).ready(function(){
\$('#minLevel').change(function(){
url = '$sbRoot/errorlogs/viewlog/?minLevel='+\$(this).val()
\$(document).ready(
function(){
\$('#minLevel,#logFilter,#logSearch').change(function(){
if ( \$('#logSearch').val().length > 0 ) {
\$('#logSearch').prop('disabled', true);
\$('#logFilter option[value=<NONE>]').prop('selected', true);
\$('#minLevel option[value=INFO]').prop('selected', true);
}
\$('#minLevel').prop('disabled', true);
\$('#logFilter').prop('disabled', true);
\$('#logSearch').prop('disabled', true);
document.body.style.cursor='wait'
url = '$sbRoot/errorlogs/viewlog/?minLevel='+\$('select[name=minLevel]').val()+'&logFilter='+\$('select[name=logFilter]').val()+'&logSearch='+\$('#logSearch').val()
window.location.href = url
});
\$(window).load(function(){
if ( \$('#logSearch').val().length == 0 ) {
\$('#minLevel').prop('disabled', false);
\$('#logFilter').prop('disabled', false);
\$('#logSearch').prop('disabled', false);
} else {
\$('#minLevel').prop('disabled', true);
\$('#logFilter').prop('disabled', true);
\$('#logSearch').prop('disabled', false);
}
document.body.style.cursor='default';
});
\$('#logSearch').keyup(function() {
if ( \$('#logSearch').val().length == 0 ) {
\$('#logFilter option[value=<NONE>]').prop('selected', true);
\$('#minLevel option[value=INFO]').prop('selected', true);
\$('#minLevel').prop('disabled', false);
\$('#logFilter').prop('disabled', false);
url = '$sbRoot/errorlogs/viewlog/?minLevel='+\$('select[name=minLevel]').val()+'&logFilter='+\$('select[name=logFilter]').val()+'&logSearch='+\$('#logSearch').val()
window.location.href = url
} else {
\$('#minLevel').prop('disabled', true);
\$('#logFilter').prop('disabled', true);
}
});
});
//-->
@ -35,6 +76,14 @@ $levels.sort(lambda x,y: cmp($reverseNames[$x], $reverseNames[$y]))
<option value="$reverseNames[$level]" #if $minLevel == $reverseNames[$level] then "selected=\"selected\"" else ""#>$level.title()</option>
#end for
</select>
Filter log by: <select name="logFilter" id="logFilter" class="form-control form-control-inline input-sm">
#for $logNameFilter in sorted($logNameFilters)
<option value="$logNameFilter" #if $logFilter == $logNameFilter then "selected=\"selected\"" else ""#>$logNameFilters[$logNameFilter]</option>
#end for
</select>
Search log by:
<input type="text" name="logSearch" id="logSearch" value="#if $logSearch then $logSearch else ""#" class="form-control form-control-inline input-sm" />
</div>
<br />
<div class="align-left"><pre>
@ -48,10 +97,4 @@ window.setInterval( "location.reload(true)", 600000); // Refresh every 10 minute
//-->
</script>
<script type="text/javascript" charset="utf-8">
<!--
window.setInterval( "location.reload(true)", 600000); // Refresh every 10 minutes
//-->
</script>
#include $os.path.join($sickbeard.PROG_DIR,"gui/slick/interfaces/default/inc_bottom.tmpl")
#include $os.path.join($sickbeard.PROG_DIR,"gui/slick/interfaces/default/inc_bottom.tmpl")

View File

@ -4766,13 +4766,35 @@ class ErrorLogs(WebRoot):
classes.ErrorViewer.clear()
return self.redirect("/errorlogs/")
def viewlog(self, minLevel=logger.INFO, maxLines=500):
def viewlog(self, minLevel=logger.INFO, logFilter="<NONE>",logSearch=None, maxLines=500):
t = PageTemplate(rh=self, file="viewlogs.tmpl")
t.submenu = self.ErrorLogsMenu()
minLevel = int(minLevel)
logNameFilters = {'<NONE>': u'&lt;No Filter&gt;',
'DAILYSEARCHER': u'Daily Searcher',
'BACKLOG': u'Backlog',
'SHOWUPDATER': u'Show Updater',
'CHECKVERSION': u'Check Version',
'SHOWQUEUE': u'Show Queue',
'SEARCHQUEUE': u'Search Queue',
'FINDPROPERS': u'Find Propers',
'POSTPROCESSER': u'Postprocesser',
'FINDSUBTITLES': u'Find Subtitles',
'TRAKTCHECKER': u'Trakt Checker',
'EVENT': u'Event',
'ERROR': u'Error',
'TORNADO': u'Tornado',
'Thread': u'Thread',
'MAIN': u'Main'
}
if logFilter not in logNameFilters:
logFilter = '<NONE>'
data = []
if os.path.isfile(logger.logFile):
with ek.ek(open, logger.logFile) as f:
@ -4793,11 +4815,15 @@ class ErrorLogs(WebRoot):
if match:
level = match.group(7)
logName = match.group(8)
if level not in logger.reverseNames:
lastLine = False
continue
if logger.reverseNames[level] >= minLevel:
if logSearch and logSearch.lower() in x.lower():
lastLine = True
finalData.append(x)
elif not logSearch and logger.reverseNames[level] >= minLevel and (logFilter == '<NONE>' or logName.startswith(logFilter)):
lastLine = True
finalData.append(x)
else:
@ -4816,6 +4842,9 @@ class ErrorLogs(WebRoot):
t.logLines = result
t.minLevel = minLevel
t.logNameFilters = logNameFilters
t.logFilter = logFilter
t.logSearch = logSearch
return t.respond()