[GitHub] [brooklyn-ui] algairim commented on a change in pull request #249: Logbook widget navigation improvements

2021-07-20 Thread GitBox


algairim commented on a change in pull request #249:
URL: https://github.com/apache/brooklyn-ui/pull/249#discussion_r672141531



##
File path: ui-modules/utils/logbook/logbook.js
##
@@ -210,36 +285,30 @@ export function logbook() {
 }
 
 /**
- * Converts log entries to string.
+ * Extracts timestamp from the log entry.
  *
- * @param {Array.} logEntries The log entries to convert.
- * @returns {String} log entries converted to string.
+ * @param logEntry The log entry.
+ * @returns {number} The extracted date-time.
  */
-function covertLogEntriesToString(logEntries) {
-let output = [];
-const fieldsToShow = getCheckedBoxes($scope.logFields);
-logEntries.forEach(entry => {
-let outputLine = [];
-if (fieldsToShow.includes('datetime') && entry.timestamp)
-outputLine.push(entry.timestamp);
-if (fieldsToShow.includes('taskId') && entry.taskId)
-outputLine.push(entry.taskId);
-if (fieldsToShow.includes('entityIds') && entry.entityIds)
-outputLine.push(entry.entityIds);
-if (fieldsToShow.includes('level') && entry.level)
-outputLine.push(entry.level);
-if (fieldsToShow.includes('bundleId') && entry.bundleId)
-outputLine.push(entry.bundleId);
-if (fieldsToShow.includes('class') && entry.class)
-outputLine.push(entry.class);
-if (fieldsToShow.includes('threadName') && entry.threadName)
-outputLine.push(entry.threadName);
-if (fieldsToShow.includes('message') && entry.message)
-outputLine.push(entry.message);
-
-output.push(outputLine.join(' '));
-})
-return output.length > 0 ? output.join('\n') : 'No results';
+function getLogEntryTimestamp(logEntry) {
+return Date.parse(logEntry.timestamp.replace(',', '.'))
+}
+
+/**
+ * Extracts UTC timestamp from the date.
+ *
+ * @param {Date|number} date The date to get UTC timestamp of.
+ * @returns {number|undefined} The UTC timestamp.
+ */
+function getUtcTimestamp(date) {
+const timezoneOffsetMs = new Date().getTimezoneOffset() * 60 * 
1000;
+if (date instanceof Date) {
+return date.valueOf() - timezoneOffsetMs;
+} else if (typeof date === 'number') {
+return date - timezoneOffsetMs;
+} else {
+return undefined;

Review comment:
   I would prefer to keep it explicit.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@brooklyn.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [brooklyn-ui] algairim commented on a change in pull request #249: Logbook widget navigation improvements

2021-07-19 Thread GitBox


algairim commented on a change in pull request #249:
URL: https://github.com/apache/brooklyn-ui/pull/249#discussion_r672141531



##
File path: ui-modules/utils/logbook/logbook.js
##
@@ -210,36 +285,30 @@ export function logbook() {
 }
 
 /**
- * Converts log entries to string.
+ * Extracts timestamp from the log entry.
  *
- * @param {Array.} logEntries The log entries to convert.
- * @returns {String} log entries converted to string.
+ * @param logEntry The log entry.
+ * @returns {number} The extracted date-time.
  */
-function covertLogEntriesToString(logEntries) {
-let output = [];
-const fieldsToShow = getCheckedBoxes($scope.logFields);
-logEntries.forEach(entry => {
-let outputLine = [];
-if (fieldsToShow.includes('datetime') && entry.timestamp)
-outputLine.push(entry.timestamp);
-if (fieldsToShow.includes('taskId') && entry.taskId)
-outputLine.push(entry.taskId);
-if (fieldsToShow.includes('entityIds') && entry.entityIds)
-outputLine.push(entry.entityIds);
-if (fieldsToShow.includes('level') && entry.level)
-outputLine.push(entry.level);
-if (fieldsToShow.includes('bundleId') && entry.bundleId)
-outputLine.push(entry.bundleId);
-if (fieldsToShow.includes('class') && entry.class)
-outputLine.push(entry.class);
-if (fieldsToShow.includes('threadName') && entry.threadName)
-outputLine.push(entry.threadName);
-if (fieldsToShow.includes('message') && entry.message)
-outputLine.push(entry.message);
-
-output.push(outputLine.join(' '));
-})
-return output.length > 0 ? output.join('\n') : 'No results';
+function getLogEntryTimestamp(logEntry) {
+return Date.parse(logEntry.timestamp.replace(',', '.'))
+}
+
+/**
+ * Extracts UTC timestamp from the date.
+ *
+ * @param {Date|number} date The date to get UTC timestamp of.
+ * @returns {number|undefined} The UTC timestamp.
+ */
+function getUtcTimestamp(date) {
+const timezoneOffsetMs = new Date().getTimezoneOffset() * 60 * 
1000;
+if (date instanceof Date) {
+return date.valueOf() - timezoneOffsetMs;
+} else if (typeof date === 'number') {
+return date - timezoneOffsetMs;
+} else {
+return undefined;

Review comment:
   I would prefer to keep it explicit.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@brooklyn.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [brooklyn-ui] algairim commented on a change in pull request #249: Logbook widget navigation improvements

2021-07-16 Thread GitBox


algairim commented on a change in pull request #249:
URL: https://github.com/apache/brooklyn-ui/pull/249#discussion_r671245417



##
File path: ui-modules/utils/logbook/logbook.js
##
@@ -39,168 +39,235 @@ export function logbook() {
 
 const DEFAULT_NUMBER_OF_ITEMS = 1000;
 
-$scope.isAutoScroll = true; // Auto-scroll by default.
-$scope.isLatest = true; // Indicates whether to query tail (last 
number of lines) or head (by default).
-$scope.autoUpdate = false;
-$scope.waitingResponse = false;
-
-$scope.logtext = '';
-$scope.logEntries = [];
-
 let vm = this;
 let refreshFunction = null;
-let autoScrollableElements = 
Array.from($element.find('pre')).filter(item => 
item.classList.contains('auto-scrollable'));
-let dateTimeToAutoUpdateFrom = ''; // TODO: use this date to optimize 
'tail' queries to reduce the network traffic.
-
-// Set up cancellation of auto-scrolling on scrolling up.
-autoScrollableElements.forEach(item => {
-if (item.addEventListener) {
-let wheelHandler = () => {
-$scope.$apply(() => {
-$scope.isAutoScroll = (item.scrollTop + 
item.offsetHeight) >= item.scrollHeight;
-});
-}
-// Chrome, Safari, Opera
-item.addEventListener("mousewheel", wheelHandler, false);
-// Firefox
-item.addEventListener("DOMMouseScroll", wheelHandler, false);
-}
-});
-
-vm.queryTail = () => {
-let autoUpdate = !$scope.autoUpdate; // Calculate new value.
-
-if (autoUpdate) {
-$scope.isAutoScroll = true;
-resetQueryParameters();
-doQuery();
+let autoScrollableElement = Array.from($element.find('pre')).find(item 
=> item.classList.contains('auto-scrollable'));
+let isNewQueryParameters = true; // Fresh start, new parameters!
+let dateTimeToAutoRefreshFrom = '';
+let datetimeToScrollTo = null;
+
+// Set up cancellation of auto-scrolling down.
+if (autoScrollableElement.addEventListener) {
+let wheelHandler = () => {
+$scope.$apply(() => {
+$scope.isAutoScrollDown = (autoScrollableElement.scrollTop 
+ autoScrollableElement.offsetHeight) >= autoScrollableElement.scrollHeight;
+});
 }
-
-$scope.autoUpdate = autoUpdate; // Set new value.
+// Chrome, Safari, Opera
+autoScrollableElement.addEventListener("mousewheel", wheelHandler, 
false);
+// Firefox
+autoScrollableElement.addEventListener("DOMMouseScroll", 
wheelHandler, false);
 }
 
-vm.queryHead = () => {
-$scope.waitingResponse = true;
-$scope.autoUpdate = false;
-$scope.isLatest = false;
-$scope.logtext = 'Loading...';
-doQuery();
-}
-
-$scope.$watch('allLevels', (value) => {
-if (!value) {
-if (getCheckedBoxes($scope.logLevels).length === 0) {
-$scope.allLevels = true;
-} else {
-return;
-}
-}
-for (let i = 0; i < $scope.logLevels.length; ++i) {
-$scope.logLevels[i].selected = false;
-}
-});
+$scope.isAutoScrollDown = true; // Auto-scroll down, by default.
+$scope.autoRefresh = false;
+$scope.waitingResponse = false;
+$scope.logtext = '';
+$scope.wordwrap = true;
+$scope.logEntries = [];
+$scope.minNumberOfItems = 1;
+$scope.maxNumberOfItems = 1;
+
+// Initialize search parameters.
+$scope.search = {
+logLevels: [
+{name: 'Info',  value: 'INFO',  selected: true},
+{name: 'Warn',  value: 'WARN',  selected: true},
+{name: 'Error', value: 'ERROR', selected: true},
+{name: 'Fatal', value: 'FATAL', selected: true},
+{name: 'Debug', value: 'DEBUG', selected: true},
+],
+latest: true,
+dateTimeFrom: '',
+dateTimeTo: '',
+numberOfItems: DEFAULT_NUMBER_OF_ITEMS,
+phrase: ''
+};
+
+// Define search result filters.
+$scope.fieldsToShow = ['timestamp', 'class', 'message']
+$scope.logFields = [
+{name: 'Timestamp',   value: 'timestamp',  selected: true},
+{name: 'Task ID', value: 'taskId', selected: false},
+{name: 'Entity IDs',  value: 'entityIds',  selected: false},
+{name: 'Log level',   value: 'level',  selected: true},
+{name: 'Bundle ID',   value: 'bundleId',   selected: false},
+{name: 'Class',  

[GitHub] [brooklyn-ui] algairim commented on a change in pull request #249: Logbook widget navigation improvements

2021-07-16 Thread GitBox


algairim commented on a change in pull request #249:
URL: https://github.com/apache/brooklyn-ui/pull/249#discussion_r671174878



##
File path: ui-modules/utils/logbook/logbook.js
##
@@ -39,168 +39,249 @@ export function logbook() {
 
 const DEFAULT_NUMBER_OF_ITEMS = 1000;
 
-$scope.isAutoScroll = true; // Auto-scroll by default.
-$scope.isLatest = true; // Indicates whether to query tail (last 
number of lines) or head (by default).
-$scope.autoUpdate = false;
-$scope.waitingResponse = false;
-
-$scope.logtext = '';
-$scope.logEntries = [];
-
 let vm = this;
 let refreshFunction = null;
-let autoScrollableElements = 
Array.from($element.find('pre')).filter(item => 
item.classList.contains('auto-scrollable'));
-let dateTimeToAutoUpdateFrom = ''; // TODO: use this date to optimize 
'tail' queries to reduce the network traffic.
-
-// Set up cancellation of auto-scrolling on scrolling up.
-autoScrollableElements.forEach(item => {
-if (item.addEventListener) {
-let wheelHandler = () => {
-$scope.$apply(() => {
-$scope.isAutoScroll = (item.scrollTop + 
item.offsetHeight) >= item.scrollHeight;
-});
-}
-// Chrome, Safari, Opera
-item.addEventListener("mousewheel", wheelHandler, false);
-// Firefox
-item.addEventListener("DOMMouseScroll", wheelHandler, false);
-}
-});
-
-vm.queryTail = () => {
-let autoUpdate = !$scope.autoUpdate; // Calculate new value.
-
-if (autoUpdate) {
-$scope.isAutoScroll = true;
-resetQueryParameters();
-doQuery();
+let autoScrollableElement = Array.from($element.find('pre')).find(item 
=> item.classList.contains('auto-scrollable'));
+let isNewQueryParameters = true; // Fresh start, new parameters!
+let dateTimeToAutoRefreshFrom = '';
+let datetimeToScrollTo = null;
+
+// Set up cancellation of auto-scrolling down.
+if (autoScrollableElement.addEventListener) {
+let wheelHandler = () => {
+$scope.$apply(() => {
+$scope.isAutoScrollDown = (autoScrollableElement.scrollTop 
+ autoScrollableElement.offsetHeight) >= autoScrollableElement.scrollHeight;
+});
 }
-
-$scope.autoUpdate = autoUpdate; // Set new value.
+// Chrome, Safari, Opera
+autoScrollableElement.addEventListener("mousewheel", wheelHandler, 
false);
+// Firefox
+autoScrollableElement.addEventListener("DOMMouseScroll", 
wheelHandler, false);
 }
 
-vm.queryHead = () => {
-$scope.waitingResponse = true;
-$scope.autoUpdate = false;
-$scope.isLatest = false;
-$scope.logtext = 'Loading...';
-doQuery();
-}
-
-$scope.$watch('allLevels', (value) => {
-if (!value) {
-if (getCheckedBoxes($scope.logLevels).length === 0) {
-$scope.allLevels = true;
-} else {
-return;
-}
-}
-for (let i = 0; i < $scope.logLevels.length; ++i) {
-$scope.logLevels[i].selected = false;
-}
-});
+$scope.isAutoScrollDown = true; // Auto-scroll down, by default.
+$scope.autoRefresh = false;
+$scope.waitingResponse = false;
+$scope.logtext = '';
+$scope.wordwrap = true;
+$scope.logEntries = [];
+$scope.minNumberOfItems = 1;
+$scope.maxNumberOfItems = 1;
+
+// Initialize search parameters.
+$scope.search = {
+logLevels: [
+{name: 'Info',  value: 'INFO',  selected: true},
+{name: 'Warn',  value: 'WARN',  selected: true},
+{name: 'Error', value: 'ERROR', selected: true},
+{name: 'Fatal', value: 'FATAL', selected: true},
+{name: 'Debug', value: 'DEBUG', selected: true},
+],
+latest: true,
+dateTimeFrom: '',
+dateTimeTo: '',
+numberOfItems: DEFAULT_NUMBER_OF_ITEMS,
+phrase: ''
+};
+
+// Define search result filters.
+$scope.fieldsToShow = ['datetime', 'class', 'message']
+$scope.logFields = [
+{name: 'Timestamp',   value: 'datetime',   selected: true},
+{name: 'Task ID', value: 'taskId', selected: false},
+{name: 'Entity IDs',  value: 'entityIds',  selected: false},
+{name: 'Log level',   value: 'level',  selected: true},
+{name: 'Bundle ID',   value: 'bundleId',   selected: false},
+{name: 'Class',   

[GitHub] [brooklyn-ui] algairim commented on a change in pull request #249: Logbook widget navigation improvements

2021-07-16 Thread GitBox


algairim commented on a change in pull request #249:
URL: https://github.com/apache/brooklyn-ui/pull/249#discussion_r671173592



##
File path: ui-modules/utils/logbook/logbook.js
##
@@ -39,168 +39,249 @@ export function logbook() {
 
 const DEFAULT_NUMBER_OF_ITEMS = 1000;
 
-$scope.isAutoScroll = true; // Auto-scroll by default.
-$scope.isLatest = true; // Indicates whether to query tail (last 
number of lines) or head (by default).
-$scope.autoUpdate = false;
-$scope.waitingResponse = false;
-
-$scope.logtext = '';
-$scope.logEntries = [];
-
 let vm = this;
 let refreshFunction = null;
-let autoScrollableElements = 
Array.from($element.find('pre')).filter(item => 
item.classList.contains('auto-scrollable'));
-let dateTimeToAutoUpdateFrom = ''; // TODO: use this date to optimize 
'tail' queries to reduce the network traffic.
-
-// Set up cancellation of auto-scrolling on scrolling up.
-autoScrollableElements.forEach(item => {
-if (item.addEventListener) {
-let wheelHandler = () => {
-$scope.$apply(() => {
-$scope.isAutoScroll = (item.scrollTop + 
item.offsetHeight) >= item.scrollHeight;
-});
-}
-// Chrome, Safari, Opera
-item.addEventListener("mousewheel", wheelHandler, false);
-// Firefox
-item.addEventListener("DOMMouseScroll", wheelHandler, false);
-}
-});
-
-vm.queryTail = () => {
-let autoUpdate = !$scope.autoUpdate; // Calculate new value.
-
-if (autoUpdate) {
-$scope.isAutoScroll = true;
-resetQueryParameters();
-doQuery();
+let autoScrollableElement = Array.from($element.find('pre')).find(item 
=> item.classList.contains('auto-scrollable'));
+let isNewQueryParameters = true; // Fresh start, new parameters!
+let dateTimeToAutoRefreshFrom = '';
+let datetimeToScrollTo = null;
+
+// Set up cancellation of auto-scrolling down.
+if (autoScrollableElement.addEventListener) {
+let wheelHandler = () => {
+$scope.$apply(() => {
+$scope.isAutoScrollDown = (autoScrollableElement.scrollTop 
+ autoScrollableElement.offsetHeight) >= autoScrollableElement.scrollHeight;
+});
 }
-
-$scope.autoUpdate = autoUpdate; // Set new value.
+// Chrome, Safari, Opera
+autoScrollableElement.addEventListener("mousewheel", wheelHandler, 
false);
+// Firefox
+autoScrollableElement.addEventListener("DOMMouseScroll", 
wheelHandler, false);
 }
 
-vm.queryHead = () => {
-$scope.waitingResponse = true;
-$scope.autoUpdate = false;
-$scope.isLatest = false;
-$scope.logtext = 'Loading...';
-doQuery();
-}
-
-$scope.$watch('allLevels', (value) => {
-if (!value) {
-if (getCheckedBoxes($scope.logLevels).length === 0) {
-$scope.allLevels = true;
-} else {
-return;
-}
-}
-for (let i = 0; i < $scope.logLevels.length; ++i) {
-$scope.logLevels[i].selected = false;
-}
-});
+$scope.isAutoScrollDown = true; // Auto-scroll down, by default.
+$scope.autoRefresh = false;
+$scope.waitingResponse = false;
+$scope.logtext = '';
+$scope.wordwrap = true;
+$scope.logEntries = [];
+$scope.minNumberOfItems = 1;
+$scope.maxNumberOfItems = 1;
+
+// Initialize search parameters.
+$scope.search = {
+logLevels: [
+{name: 'Info',  value: 'INFO',  selected: true},
+{name: 'Warn',  value: 'WARN',  selected: true},
+{name: 'Error', value: 'ERROR', selected: true},
+{name: 'Fatal', value: 'FATAL', selected: true},
+{name: 'Debug', value: 'DEBUG', selected: true},
+],
+latest: true,
+dateTimeFrom: '',
+dateTimeTo: '',
+numberOfItems: DEFAULT_NUMBER_OF_ITEMS,
+phrase: ''
+};
+
+// Define search result filters.
+$scope.fieldsToShow = ['datetime', 'class', 'message']
+$scope.logFields = [
+{name: 'Timestamp',   value: 'datetime',   selected: true},
+{name: 'Task ID', value: 'taskId', selected: false},
+{name: 'Entity IDs',  value: 'entityIds',  selected: false},
+{name: 'Log level',   value: 'level',  selected: true},
+{name: 'Bundle ID',   value: 'bundleId',   selected: false},
+{name: 'Class',   

[GitHub] [brooklyn-ui] algairim commented on a change in pull request #249: Logbook widget navigation improvements

2021-07-16 Thread GitBox


algairim commented on a change in pull request #249:
URL: https://github.com/apache/brooklyn-ui/pull/249#discussion_r671172890



##
File path: ui-modules/utils/logbook/logbook.js
##
@@ -39,168 +39,249 @@ export function logbook() {
 
 const DEFAULT_NUMBER_OF_ITEMS = 1000;
 
-$scope.isAutoScroll = true; // Auto-scroll by default.
-$scope.isLatest = true; // Indicates whether to query tail (last 
number of lines) or head (by default).
-$scope.autoUpdate = false;
-$scope.waitingResponse = false;
-
-$scope.logtext = '';
-$scope.logEntries = [];
-
 let vm = this;
 let refreshFunction = null;
-let autoScrollableElements = 
Array.from($element.find('pre')).filter(item => 
item.classList.contains('auto-scrollable'));
-let dateTimeToAutoUpdateFrom = ''; // TODO: use this date to optimize 
'tail' queries to reduce the network traffic.
-
-// Set up cancellation of auto-scrolling on scrolling up.
-autoScrollableElements.forEach(item => {
-if (item.addEventListener) {
-let wheelHandler = () => {
-$scope.$apply(() => {
-$scope.isAutoScroll = (item.scrollTop + 
item.offsetHeight) >= item.scrollHeight;
-});
-}
-// Chrome, Safari, Opera
-item.addEventListener("mousewheel", wheelHandler, false);
-// Firefox
-item.addEventListener("DOMMouseScroll", wheelHandler, false);
-}
-});
-
-vm.queryTail = () => {
-let autoUpdate = !$scope.autoUpdate; // Calculate new value.
-
-if (autoUpdate) {
-$scope.isAutoScroll = true;
-resetQueryParameters();
-doQuery();
+let autoScrollableElement = Array.from($element.find('pre')).find(item 
=> item.classList.contains('auto-scrollable'));
+let isNewQueryParameters = true; // Fresh start, new parameters!
+let dateTimeToAutoRefreshFrom = '';
+let datetimeToScrollTo = null;
+
+// Set up cancellation of auto-scrolling down.
+if (autoScrollableElement.addEventListener) {
+let wheelHandler = () => {
+$scope.$apply(() => {
+$scope.isAutoScrollDown = (autoScrollableElement.scrollTop 
+ autoScrollableElement.offsetHeight) >= autoScrollableElement.scrollHeight;
+});
 }
-
-$scope.autoUpdate = autoUpdate; // Set new value.
+// Chrome, Safari, Opera
+autoScrollableElement.addEventListener("mousewheel", wheelHandler, 
false);
+// Firefox
+autoScrollableElement.addEventListener("DOMMouseScroll", 
wheelHandler, false);
 }
 
-vm.queryHead = () => {
-$scope.waitingResponse = true;
-$scope.autoUpdate = false;
-$scope.isLatest = false;
-$scope.logtext = 'Loading...';
-doQuery();
-}
-
-$scope.$watch('allLevels', (value) => {
-if (!value) {
-if (getCheckedBoxes($scope.logLevels).length === 0) {
-$scope.allLevels = true;
-} else {
-return;
-}
-}
-for (let i = 0; i < $scope.logLevels.length; ++i) {
-$scope.logLevels[i].selected = false;
-}
-});
+$scope.isAutoScrollDown = true; // Auto-scroll down, by default.
+$scope.autoRefresh = false;
+$scope.waitingResponse = false;
+$scope.logtext = '';
+$scope.wordwrap = true;
+$scope.logEntries = [];
+$scope.minNumberOfItems = 1;
+$scope.maxNumberOfItems = 1;
+
+// Initialize search parameters.
+$scope.search = {
+logLevels: [
+{name: 'Info',  value: 'INFO',  selected: true},
+{name: 'Warn',  value: 'WARN',  selected: true},
+{name: 'Error', value: 'ERROR', selected: true},
+{name: 'Fatal', value: 'FATAL', selected: true},
+{name: 'Debug', value: 'DEBUG', selected: true},
+],
+latest: true,
+dateTimeFrom: '',
+dateTimeTo: '',
+numberOfItems: DEFAULT_NUMBER_OF_ITEMS,
+phrase: ''
+};
+
+// Define search result filters.
+$scope.fieldsToShow = ['datetime', 'class', 'message']
+$scope.logFields = [
+{name: 'Timestamp',   value: 'datetime',   selected: true},
+{name: 'Task ID', value: 'taskId', selected: false},
+{name: 'Entity IDs',  value: 'entityIds',  selected: false},
+{name: 'Log level',   value: 'level',  selected: true},
+{name: 'Bundle ID',   value: 'bundleId',   selected: false},
+{name: 'Class',   

[GitHub] [brooklyn-ui] algairim commented on a change in pull request #249: Logbook widget navigation improvements

2021-07-16 Thread GitBox


algairim commented on a change in pull request #249:
URL: https://github.com/apache/brooklyn-ui/pull/249#discussion_r671172091



##
File path: ui-modules/utils/logbook/logbook.js
##
@@ -39,168 +39,249 @@ export function logbook() {
 
 const DEFAULT_NUMBER_OF_ITEMS = 1000;
 
-$scope.isAutoScroll = true; // Auto-scroll by default.
-$scope.isLatest = true; // Indicates whether to query tail (last 
number of lines) or head (by default).
-$scope.autoUpdate = false;
-$scope.waitingResponse = false;
-
-$scope.logtext = '';
-$scope.logEntries = [];
-
 let vm = this;
 let refreshFunction = null;
-let autoScrollableElements = 
Array.from($element.find('pre')).filter(item => 
item.classList.contains('auto-scrollable'));
-let dateTimeToAutoUpdateFrom = ''; // TODO: use this date to optimize 
'tail' queries to reduce the network traffic.
-
-// Set up cancellation of auto-scrolling on scrolling up.
-autoScrollableElements.forEach(item => {
-if (item.addEventListener) {
-let wheelHandler = () => {
-$scope.$apply(() => {
-$scope.isAutoScroll = (item.scrollTop + 
item.offsetHeight) >= item.scrollHeight;
-});
-}
-// Chrome, Safari, Opera
-item.addEventListener("mousewheel", wheelHandler, false);
-// Firefox
-item.addEventListener("DOMMouseScroll", wheelHandler, false);
-}
-});
-
-vm.queryTail = () => {
-let autoUpdate = !$scope.autoUpdate; // Calculate new value.
-
-if (autoUpdate) {
-$scope.isAutoScroll = true;
-resetQueryParameters();
-doQuery();
+let autoScrollableElement = Array.from($element.find('pre')).find(item 
=> item.classList.contains('auto-scrollable'));
+let isNewQueryParameters = true; // Fresh start, new parameters!
+let dateTimeToAutoRefreshFrom = '';
+let datetimeToScrollTo = null;
+
+// Set up cancellation of auto-scrolling down.
+if (autoScrollableElement.addEventListener) {
+let wheelHandler = () => {
+$scope.$apply(() => {
+$scope.isAutoScrollDown = (autoScrollableElement.scrollTop 
+ autoScrollableElement.offsetHeight) >= autoScrollableElement.scrollHeight;
+});
 }
-
-$scope.autoUpdate = autoUpdate; // Set new value.
+// Chrome, Safari, Opera
+autoScrollableElement.addEventListener("mousewheel", wheelHandler, 
false);
+// Firefox
+autoScrollableElement.addEventListener("DOMMouseScroll", 
wheelHandler, false);
 }
 
-vm.queryHead = () => {
-$scope.waitingResponse = true;
-$scope.autoUpdate = false;
-$scope.isLatest = false;
-$scope.logtext = 'Loading...';
-doQuery();
-}
-
-$scope.$watch('allLevels', (value) => {
-if (!value) {
-if (getCheckedBoxes($scope.logLevels).length === 0) {
-$scope.allLevels = true;
-} else {
-return;
-}
-}
-for (let i = 0; i < $scope.logLevels.length; ++i) {
-$scope.logLevels[i].selected = false;
-}
-});
+$scope.isAutoScrollDown = true; // Auto-scroll down, by default.
+$scope.autoRefresh = false;
+$scope.waitingResponse = false;
+$scope.logtext = '';
+$scope.wordwrap = true;
+$scope.logEntries = [];
+$scope.minNumberOfItems = 1;
+$scope.maxNumberOfItems = 1;
+
+// Initialize search parameters.
+$scope.search = {
+logLevels: [
+{name: 'Info',  value: 'INFO',  selected: true},
+{name: 'Warn',  value: 'WARN',  selected: true},
+{name: 'Error', value: 'ERROR', selected: true},
+{name: 'Fatal', value: 'FATAL', selected: true},
+{name: 'Debug', value: 'DEBUG', selected: true},
+],
+latest: true,
+dateTimeFrom: '',
+dateTimeTo: '',
+numberOfItems: DEFAULT_NUMBER_OF_ITEMS,
+phrase: ''
+};
+
+// Define search result filters.
+$scope.fieldsToShow = ['datetime', 'class', 'message']
+$scope.logFields = [
+{name: 'Timestamp',   value: 'datetime',   selected: true},
+{name: 'Task ID', value: 'taskId', selected: false},
+{name: 'Entity IDs',  value: 'entityIds',  selected: false},
+{name: 'Log level',   value: 'level',  selected: true},
+{name: 'Bundle ID',   value: 'bundleId',   selected: false},
+{name: 'Class',   

[GitHub] [brooklyn-ui] algairim commented on a change in pull request #249: Logbook widget navigation improvements

2021-07-16 Thread GitBox


algairim commented on a change in pull request #249:
URL: https://github.com/apache/brooklyn-ui/pull/249#discussion_r671165588



##
File path: ui-modules/utils/logbook/logbook.js
##
@@ -39,168 +39,249 @@ export function logbook() {
 
 const DEFAULT_NUMBER_OF_ITEMS = 1000;
 
-$scope.isAutoScroll = true; // Auto-scroll by default.
-$scope.isLatest = true; // Indicates whether to query tail (last 
number of lines) or head (by default).
-$scope.autoUpdate = false;
-$scope.waitingResponse = false;
-
-$scope.logtext = '';
-$scope.logEntries = [];
-
 let vm = this;
 let refreshFunction = null;
-let autoScrollableElements = 
Array.from($element.find('pre')).filter(item => 
item.classList.contains('auto-scrollable'));
-let dateTimeToAutoUpdateFrom = ''; // TODO: use this date to optimize 
'tail' queries to reduce the network traffic.
-
-// Set up cancellation of auto-scrolling on scrolling up.
-autoScrollableElements.forEach(item => {
-if (item.addEventListener) {
-let wheelHandler = () => {
-$scope.$apply(() => {
-$scope.isAutoScroll = (item.scrollTop + 
item.offsetHeight) >= item.scrollHeight;
-});
-}
-// Chrome, Safari, Opera
-item.addEventListener("mousewheel", wheelHandler, false);
-// Firefox
-item.addEventListener("DOMMouseScroll", wheelHandler, false);
-}
-});
-
-vm.queryTail = () => {
-let autoUpdate = !$scope.autoUpdate; // Calculate new value.
-
-if (autoUpdate) {
-$scope.isAutoScroll = true;
-resetQueryParameters();
-doQuery();
+let autoScrollableElement = Array.from($element.find('pre')).find(item 
=> item.classList.contains('auto-scrollable'));

Review comment:
   Element object is required here to perform a scroll action on entire log 
section, not just on a single log entry (log line), when needed. I take any 
suggestion(s) on how to perform scroll action by using data model, instead of 
searching element in the DOM.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@brooklyn.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org