blob: 00f1c3210251a3e6d14f4ac3b58d9c8cba5737b5 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
/*
* Returns whether the given vLogItem matches the map of filters.
* @param {Object} item A single Vanadium log item as defined by parser.item
* @param {map} filters Map of keys to selected filter values as defined
* when constructing the filters in the grid components.
* e.g. filters:{'date':'all', 'levels':['info','warning']}
* @return {boolean} Whether the item satisfies ALL of the given filters.
*/
export function vLogFilter(item, filters) {
if (Object.keys(filters).length === 0) {
return true;
}
for (var key in filters) {
var isMatch = applyFilter(item, key, filters[key]);
// we AND all the filters, short-circuit for early termination
if (!isMatch) {
return false;
}
}
// matches all filters
return true;
};
/*
* Returns whether the given vLogItem matches a single filter
* @param {Object} item A single Vanadium log item as defined by parser.item
* @param {string} key filter key e.g. 'date'
* @param {string} value filter value e.g. 'all'
* @return {boolean} Whether the item satisfies then the given filter key value pair
* @private
*/
function applyFilter(item, key, value) {
switch (key) {
case 'date':
return filterDate(item, value);
case 'level':
return filterLevel(item, value);
default:
// ignore unknown filters
return true;
}
}
/*
* Returns whether item's date satisfies the date filter
* @param {Object} item A single Vanadium log item as defined by parser.item
* @param {string} since One of 'all', '1' or '24'. for Anytime, past one hour, past 24 hours.
* @return {boolean} whether item's date satisfies the date filter
* @private
*/
function filterDate(item, since) {
if (since === 'all') {
return true;
} else {
var hours = parseInt(since);
var targetDate = new Date();
targetDate.setHours(targetDate.getHours() - hours);
return item.date > targetDate;
}
}
/*
* Returns whether item's level is one of the given values
* @param {Object} item A single Vanadium log item as defined by parser.item
* @param {Array<string>} levels Array of level values e.g. ['info','warning']
* @return {boolean} whether item's level is one of the given values
* @private
*/
function filterLevel(item, levels) {
return levels.indexOf(item.level) >= 0;
}