Added log level filter

This commit is contained in:
Joel Collins 2020-12-04 15:08:47 +00:00
parent 08f653233b
commit 4d1d0a15c4

View file

@ -11,7 +11,11 @@
<!-- Left side controls --> <!-- Left side controls -->
<div <div
class="uk-navbar-left uk-padding-remove-top uk-padding-remove-bottom" class="uk-navbar-left uk-padding-remove-top uk-padding-remove-bottom"
></div> >
<select v-model="filterLevel" class="uk-select">
<option v-for="level in allLevels" :key="level">{{ level }}</option>
</select>
</div>
<!-- Right side buttons --> <!-- Right side buttons -->
<div class="uk-navbar-right"> <div class="uk-navbar-right">
@ -40,15 +44,14 @@
v-for="item in pagedItems" v-for="item in pagedItems"
:key="item.timestamp" :key="item.timestamp"
uk-alert uk-alert
class="logging-entry"
:class="{ :class="{
'uk-alert-warning uk-alert': item.data.levelname == 'WARNING', 'uk-alert-warning uk-alert': item.data.levelname == 'WARNING',
'uk-alert-danger uk-alert': item.data.levelname == 'ERROR' 'uk-alert-danger uk-alert': item.data.levelname == 'ERROR'
}" }"
> >
<p> <b>{{ formatDateTime(item.data.created) }}</b>
<b>{{ formatDateTime(item.data.created) }}</b> <div class="logging-message">{{ formatMessage(item) }}</div>
</p>
{{ item.data.levelname }}: {{ item.data.message }}
</div> </div>
<Paginate <Paginate
@ -84,11 +87,28 @@ export default {
return { return {
maxitems: 20, maxitems: 20,
page: 1, page: 1,
logs: [] logs: [],
allLevels: ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
filterLevel: "WARNING"
}; };
}, },
computed: { computed: {
filteredLevels: function() {
let cutoffIndex = this.allLevels.indexOf(this.filterLevel);
return this.allLevels.slice(cutoffIndex, -1);
},
filteredItems: function() {
var items = [];
for (var item of this.logs) {
// Add to capture list if matched
if (this.filteredLevels.includes(item.data.levelname)) {
items.push(item);
}
}
return items;
},
loggingUri: function() { loggingUri: function() {
return `${this.$store.getters.baseUri}/api/v2/events/logging`; return `${this.$store.getters.baseUri}/api/v2/events/logging`;
}, },
@ -97,10 +117,10 @@ export default {
}, },
pagedItems: function() { pagedItems: function() {
let startIndex = (this.page - 1) * this.maxitems; let startIndex = (this.page - 1) * this.maxitems;
return this.logs.slice(startIndex, startIndex + this.maxitems); return this.filteredItems.slice(startIndex, startIndex + this.maxitems);
}, },
numberOfPages: function() { numberOfPages: function() {
return Math.floor(this.logs.length / this.maxitems); return Math.floor(this.filteredItems.length / this.maxitems);
} }
}, },
@ -134,6 +154,9 @@ export default {
formatDateTime: function(isoDateTimeString) { formatDateTime: function(isoDateTimeString) {
let date = new Date(isoDateTimeString); let date = new Date(isoDateTimeString);
return date.toLocaleDateString() + " " + date.toLocaleTimeString(); return date.toLocaleDateString() + " " + date.toLocaleTimeString();
},
formatMessage: function(item) {
return item.data.levelname + ": " + item.data.message;
} }
} }
}; };
@ -147,4 +170,10 @@ export default {
margin-bottom: 30px; margin-bottom: 30px;
height: 80px; height: 80px;
} }
.logging-entry {
white-space: break-spaces;
}
.logging-message {
font-family: monospace;
}
</style> </style>