From 7ce13798757e40c04188c952be7b69bc1cff9446 Mon Sep 17 00:00:00 2001 From: Nabil Adouani Date: Mon, 26 Oct 2020 16:08:15 +0100 Subject: [PATCH] #1579 Update the date filter field to support dynamic dates --- .../controllers/alert/AlertEventCtrl.js | 57 ------------------- .../directives/dashboard/filter-editor.js | 33 ++++++++++- frontend/app/scripts/filters/filter-value.js | 33 +++++++++-- .../services/common/QueryBuilderSrv.js | 26 ++++++--- .../app/scripts/services/common/UtilsSrv.js | 32 +++++++++++ .../alert/similar-case-list.component.html | 4 +- .../directives/dashboard/filter-editor.html | 21 ++++++- 7 files changed, 131 insertions(+), 75 deletions(-) diff --git a/frontend/app/scripts/controllers/alert/AlertEventCtrl.js b/frontend/app/scripts/controllers/alert/AlertEventCtrl.js index 2a03738846..0db05c183c 100644 --- a/frontend/app/scripts/controllers/alert/AlertEventCtrl.js +++ b/frontend/app/scripts/controllers/alert/AlertEventCtrl.js @@ -14,18 +14,6 @@ self.loading = true; - self.pagination = { - pageSize: 10, - currentPage: 1, - filter: '', - data: [] - }; - - self.similarityFilters = {}; - self.similaritySorts = ['-startDate', '-similarArtifactCount', '-similarIocCount', '-iocCount']; - self.currentSimilarFilter = ''; - self.similarCasesStats = []; - self.customFieldsCache = CustomFieldsSrv; self.counts = { @@ -51,7 +39,6 @@ AlertingSrv.get(eventId).then(function(data) { self.event = data; self.loading = false; - self.initSimilarCasesFilter(self.event.similarCases); self.dataTypes = _.countBy(self.event.artifacts, function(attr) { return attr.dataType; @@ -196,50 +183,6 @@ $uibModalInstance.dismiss(); }; - self.initSimilarCasesFilter = function(data) { - var stats = { - 'Open': 0 - }; - - // Init the stats object - _.each(_.without(_.keys(CaseResolutionStatus), 'Duplicated'), function(key) { - stats[key] = 0; - }); - - _.each(data, function(item) { - if(item.status === 'Open') { - stats[item.status] = stats[item.status] + 1; - } else { - stats[item.resolutionStatus] = stats[item.resolutionStatus] + 1; - } - }); - - var result = []; - _.each(_.keys(stats), function(key) { - result.push({ - key: key, - value: stats[key] - }); - }); - - self.similarCasesStats = result; - }; - - self.filterSimilarCases = function(filter) { - self.currentSimilarFilter = filter; - if(filter === '') { - self.similarityFilters = {}; - } else if(filter === 'Open') { - self.similarityFilters = { - status: filter - }; - } else { - self.similarityFilters = { - resolutionStatus: filter - }; - } - }; - self.copyId = function(id) { clipboard.copyText(id); }; diff --git a/frontend/app/scripts/directives/dashboard/filter-editor.js b/frontend/app/scripts/directives/dashboard/filter-editor.js index 033923ba56..def05a2327 100644 --- a/frontend/app/scripts/directives/dashboard/filter-editor.js +++ b/frontend/app/scripts/directives/dashboard/filter-editor.js @@ -1,6 +1,6 @@ (function() { 'use strict'; - angular.module('theHiveDirectives').directive('filterEditor', function($q, AuthenticationSrv, UserSrv) { + angular.module('theHiveDirectives').directive('filterEditor', function($q, AuthenticationSrv, UserSrv, UtilsSrv) { return { restrict: 'E', scope: { @@ -10,6 +10,37 @@ }, templateUrl: 'views/directives/dashboard/filter-editor.html', link: function(scope) { + scope.dateOperator = { + custom: 'Custom', + today: 'Today', + last7days: 'Last 7 days', + last30days: 'Last 30 days', + last3months: 'Last 3 months', + last6months: 'Last 6 months', + lastyear: 'Last year' + }; + + scope.setDateFilterOperator = function(filter, operator) { + operator = operator || 'custom'; + + var dateRange = UtilsSrv.getDateRange(operator); + + if(operator === 'custom') { + filter.value = { + operator: operator, + from: dateRange.from, + to: dateRange.to + }; + } else { + filter.value = { + operator: operator, + from: null, + to: null + }; + } + + }; + scope.editorFor = function(filter) { if (filter.type === null) { return; diff --git a/frontend/app/scripts/filters/filter-value.js b/frontend/app/scripts/filters/filter-value.js index 44730e3da8..fa7aeee565 100644 --- a/frontend/app/scripts/filters/filter-value.js +++ b/frontend/app/scripts/filters/filter-value.js @@ -1,7 +1,7 @@ (function() { 'use strict'; - angular.module('theHiveFilters').filter('filterValue', function() { + angular.module('theHiveFilters').filter('filterValue', function(UtilsSrv) { return function(value) { if (angular.isArray(value)) { return _.map(value, function(item) { @@ -9,12 +9,35 @@ }).join(', '); } else if(angular.isObject(value) && value.from !== undefined && value.to !== undefined) { var result = []; - if(value.from !== null) { - result.push('From: ' + moment(value.from).hour(0).minutes(0).seconds(0).format('MM/DD/YY HH:mm')); + + result.push({ + custom: 'Custom', + today: 'Today', + last7days: 'Last 7 days', + last30days: 'Last 30 days', + last3months: 'Last 3 months', + last6months: 'Last 6 months', + lastyear: 'Last year' + }[value.operator] || 'Custom'); + + var start, end; + + if(value.operator && value.operator !== 'custom') { + var dateRange = UtilsSrv.getDateRange(value.operator); + + start = dateRange.from; + end = dateRange.to; + } else { + start = value.from; + end = value.to; + } + + if(start !== null) { + result.push('From: ' + moment(start).hour(0).minutes(0).seconds(0).format('MM/DD/YY HH:mm')); } - if(value.to !== null) { - result.push('To: ' + moment(value.to).hour(23).minutes(59).seconds(59).format('MM/DD/YY HH:mm')); + if(end !== null) { + result.push('To: ' + moment(end).hour(23).minutes(59).seconds(59).format('MM/DD/YY HH:mm')); } return result.join(', '); diff --git a/frontend/app/scripts/services/common/QueryBuilderSrv.js b/frontend/app/scripts/services/common/QueryBuilderSrv.js index af66d42a7a..9574a44460 100644 --- a/frontend/app/scripts/services/common/QueryBuilderSrv.js +++ b/frontend/app/scripts/services/common/QueryBuilderSrv.js @@ -1,6 +1,6 @@ (function() { 'use strict'; - angular.module('theHiveServices').service('QueryBuilderSrv', function() { + angular.module('theHiveServices').service('QueryBuilderSrv', function(UtilsSrv) { var self = this; this._buildQueryFromDefaultFilter = function(fieldDef, filter) { @@ -116,19 +116,27 @@ this._buildQueryFromDateFilter = function(fieldDef, filter) { var value = filter.value, + operator = filter.value.operator || 'custom', start, end; - if(value.from && value.from !== null) { - start = _.isString(value.from) ? (new Date(value.from)).getTime() : value.from.getTime(); - } else { - start = null; - } + if(operator === 'custom') { + if(value.from && value.from !== null) { + start = _.isString(value.from) ? (new Date(value.from)).getTime() : value.from.getTime(); + } else { + start = null; + } - if(value.to && value.to !== null) { - end = _.isString(value.to) ? (new Date(value.to)).setHours(23, 59, 59, 999) : value.to.getTime(); + if(value.to && value.to !== null) { + end = _.isString(value.to) ? (new Date(value.to)).setHours(23, 59, 59, 999) : value.to.getTime(); + } else { + end = null; + } } else { - end = null; + var dateRange = UtilsSrv.getDateRange(operator); + + start = dateRange.from.getTime(); + end = dateRange.to.getTime(); } if (start !== null && end !== null) { diff --git a/frontend/app/scripts/services/common/UtilsSrv.js b/frontend/app/scripts/services/common/UtilsSrv.js index 5a4fdb4288..35076d9807 100644 --- a/frontend/app/scripts/services/common/UtilsSrv.js +++ b/frontend/app/scripts/services/common/UtilsSrv.js @@ -118,6 +118,38 @@ }); return parsedQuery ? parsedQuery.substr(paramName.length + 1) : undefined; } + }, + + getDateRange: function(operator) { + var from, + to = moment(); + + switch(operator) { + case 'last7days': + from = moment().subtract(7, 'days'); + break; + case 'last30days': + from = moment().subtract(30, 'days'); + break; + case 'last3months': + from = moment().subtract(3, 'months'); + break; + case 'last6months': + from = moment().subtract(6, 'months'); + break; + case 'lastyear': + from = moment().subtract(1, 'years'); + break; + case 'today': + default: + from = moment(); + break; + } + + return { + from: from.hour(0).minutes(0).seconds(0).toDate(), + to: to.hour(23).minutes(59).seconds(59).toDate() + }; } }; diff --git a/frontend/app/views/components/alert/similar-case-list.component.html b/frontend/app/views/components/alert/similar-case-list.component.html index 63585991c8..86a17ffd0e 100644 --- a/frontend/app/views/components/alert/similar-case-list.component.html +++ b/frontend/app/views/components/alert/similar-case-list.component.html @@ -136,7 +136,9 @@
- {{item.case._createdAt | shortDate}} + + {{item.case._createdAt | shortDate}} +
diff --git a/frontend/app/views/directives/dashboard/filter-editor.html b/frontend/app/views/directives/dashboard/filter-editor.html index 7ffe88890f..cb2b6dcb61 100644 --- a/frontend/app/views/directives/dashboard/filter-editor.html +++ b/frontend/app/views/directives/dashboard/filter-editor.html @@ -96,10 +96,27 @@
-
+
+ + +
+
-
+