in ui-modules/utils/logbook/logbook.js [210:302]
function doQuery() {
if ($scope.autoRefresh && queryParametersChanged > 1) {
queryParametersChanged = 1;
displayInProgress();
return; // User is still editing query parameters.
}
if (!vm.isValidNumber()) {
console.error('number of items is invalid', $scope.search.numberOfItems)
return;
}
let isNewQueryParameters = queryParametersChanged > 0; // new parameters!
queryParametersChanged = 0; // reset the count.
// Take into account timezone offset of the browser.
let dateTimeFrom = getUtcTimestamp($scope.search.dateTimeFrom);
let dateTimeTo = getUtcTimestamp($scope.search.dateTimeTo)
if (isTail() && !isNewQueryParameters && !isEmpty($scope.logEntries)) {
dateTimeFrom = getLogEntryTimestamp($scope.logEntries.slice(-1)[0])
}
const levels = getCheckedBoxes($scope.search.logLevels);
const params = {
levels: levels,
tail: $scope.search.latest,
recursive: $scope.search.recursive,
searchPhrase: $scope.search.phrase,
taskId: $scope.taskId,
entityId: $scope.entityId,
numberOfItems: $scope.search.numberOfItems,
dateTimeFrom: dateTimeFrom,
dateTimeTo: dateTimeTo,
}
logbookApi.logbookQuery(params, true).then((newLogEntries) => {
if (isNewQueryParameters) {
// New query.
// Re-draw all entries.
$scope.logEntries = newLogEntries;
} else if (!isEmpty(newLogEntries) && !isEmpty($scope.logEntries) && isTail() && $scope.autoRefresh) {
// Tail query.
// Use line IDs to resolve the overlap, if any.
let lastLogEntryDisplayed = $scope.logEntries[$scope.logEntries.length - 1];
let indexOfLogEntryInTheNewBatch = newLogEntries.findIndex(({lineId}) => lineId === lastLogEntryDisplayed.lineId);
if (indexOfLogEntryInTheNewBatch >= 0) {
// Append new log entries without overlap.
$scope.logEntries = $scope.logEntries.concat(newLogEntries.slice(indexOfLogEntryInTheNewBatch + 1));
} else {
// Append all new log entries, there is no overlap.
$scope.logEntries = $scope.logEntries.concat(newLogEntries)
}
// Display not more of lines than was requested.
$scope.logEntries.slice(-$scope.search.numberOfItems);
}
// Auto-scroll.
if (!isEmpty($scope.logEntries.length)) {
if ($scope.isAutoScrollDown) {
scrollToMostRecentLogEntry();
} else if (datetimeToScrollTo && datetimeToScrollTo >= getLogEntryTimestamp($scope.logEntries[0])) {
scrollToLogEntryWithDateTime(datetimeToScrollTo);
}
}
// Display 'No results' if user stopped editing search parameters, it can be the case that previous query
// result was empty when the user resumed editing of search parameters.
if (isEmpty($scope.logEntries) && queryParametersChanged === 0) {
$scope.logtext = 'No results.';
}
}, (error) => {
$scope.logtext = 'Error getting the logs: \n' + error.error.message;
console.log(JSON.stringify(error));
}).finally(() => {
$scope.waitingResponse = false;
});
}