From 5caf80e9a25750524162a663e4da7bdb2f6cc57c Mon Sep 17 00:00:00 2001 From: Joe Fiorini Date: Fri, 29 May 2015 13:43:16 -0400 Subject: [PATCH] Display timestamp from API in column headers --- .../js/system-tracking/compare-facts/flat.js | 58 ++++++++++++++++--- .../data-services/fact-scan-data.service.js | 6 +- .../get-data-for-comparison.factory.js | 3 +- .../js/system-tracking/search-date-range.js | 4 +- .../system-tracking.controller.js | 40 ++++++++----- .../system-tracking.partial.html | 4 +- .../system-tracking/system-tracking.route.js | 24 +++++--- 7 files changed, 99 insertions(+), 40 deletions(-) diff --git a/awx/ui/static/js/system-tracking/compare-facts/flat.js b/awx/ui/static/js/system-tracking/compare-facts/flat.js index 449db66e7c..da64984389 100644 --- a/awx/ui/static/js/system-tracking/compare-facts/flat.js +++ b/awx/ui/static/js/system-tracking/compare-facts/flat.js @@ -7,23 +7,53 @@ export default function flatCompare(facts, nameKey, compareKeys) { - var leftFacts = facts[0]; - var rightFacts = facts[1]; + // Make sure we always start comparison against + // a non-empty array + // + // Partition with _.isEmpty will give me an array + // with empty arrays in index 0, and non-empty + // arrays in index 1 + // - return rightFacts.reduce(function(arr, rightFact) { + // Save the position of the data so we + // don't lose it later + + facts[0].position = 'left'; + facts[1].position = 'right'; + + var splitFacts = _.partition(facts, _.isEmpty); + var emptyScans = splitFacts[0]; + var nonEmptyScans = splitFacts[1]; + var basisFacts, comparatorFacts; + + if (_.isEmpty(nonEmptyScans)) { + // we have NO data, so don't bother! + return []; + } else if (_.isEmpty(emptyScans)) { + // both scans have facts, rejoice! + comparatorFacts = nonEmptyScans[0]; + basisFacts = nonEmptyScans[1]; + } else { + // only one scan has facts, so we use that + // as the basis for our comparison + basisFacts = nonEmptyScans[0]; + comparatorFacts = []; + } + + return basisFacts.reduce(function(arr, basisFact) { var searcher = {}; - searcher[nameKey] = rightFact[nameKey]; + searcher[nameKey] = basisFact[nameKey]; var isNewFactValue = false; - var matchingFact = _.where(leftFacts, searcher); + var matchingFact = _.where(comparatorFacts, searcher); var diffs; if (_.isEmpty(matchingFact)) { isNewFactValue = true; diffs = - _.map(rightFact, function(value, key) { + _.map(basisFact, function(value, key) { return { keyName: key, value1: value, value2: '' @@ -34,8 +64,18 @@ export default diffs = _(compareKeys) .map(function(key) { - var leftValue = rightFact[key]; - var rightValue = matchingFact[key]; + var basisValue = basisFact[key]; + var comparatorValue = matchingFact[key]; + var leftValue, rightValue; + + if (basisFacts.position === 'left') { + leftValue = basisValue; + rightValue = comparatorValue; + } else { + rightValue = basisValue; + leftValue = comparatorValue; + } + if (leftValue !== rightValue) { return { keyName: key, @@ -49,7 +89,7 @@ export default } var descriptor = - { displayKeyPath: rightFact[nameKey], + { displayKeyPath: basisFact[nameKey], isNew: isNewFactValue, nestingLevel: 0, facts: diffs diff --git a/awx/ui/static/js/system-tracking/data-services/fact-scan-data.service.js b/awx/ui/static/js/system-tracking/data-services/fact-scan-data.service.js index 01d582680f..7187a4078d 100644 --- a/awx/ui/static/js/system-tracking/data-services/fact-scan-data.service.js +++ b/awx/ui/static/js/system-tracking/data-services/fact-scan-data.service.js @@ -15,7 +15,7 @@ function (Rest, GetBasePath, ProcessErrors, _) { return version .then(function(versionData) { if (_.isEmpty(versionData)) { - return []; + return { fact: [] }; } else { return getFacts(versionData); } @@ -26,8 +26,8 @@ function (Rest, GetBasePath, ProcessErrors, _) { var promise; Rest.setUrl(version.related.fact_view); promise = Rest.get(); - return promise.then(function (data) { - return data.data.fact; + return promise.then(function (response) { + return response.data; }).catch(function (response) { ProcessErrors(null, response.data, response.status, null, { hdr: 'Error!', diff --git a/awx/ui/static/js/system-tracking/data-services/get-data-for-comparison.factory.js b/awx/ui/static/js/system-tracking/data-services/get-data-for-comparison.factory.js index 8865d62bea..42c8796181 100644 --- a/awx/ui/static/js/system-tracking/data-services/get-data-for-comparison.factory.js +++ b/awx/ui/static/js/system-tracking/data-services/get-data-for-comparison.factory.js @@ -50,8 +50,7 @@ export default return getHostFacts(params); }).then(function(hostFacts) { - hostFacts.moduleOptions = moduleOptions; - return hostFacts; + return [moduleOptions, hostFacts]; }); }; } diff --git a/awx/ui/static/js/system-tracking/search-date-range.js b/awx/ui/static/js/system-tracking/search-date-range.js index 40acdb3efb..c2b5141a2a 100644 --- a/awx/ui/static/js/system-tracking/search-date-range.js +++ b/awx/ui/static/js/system-tracking/search-date-range.js @@ -20,7 +20,7 @@ export function searchDateRange(dateString) { return { - from: date.startOf('day'), - to: date.endOf('day') + from: date.clone().startOf('day'), + to: date.clone().endOf('day') }; } diff --git a/awx/ui/static/js/system-tracking/system-tracking.controller.js b/awx/ui/static/js/system-tracking/system-tracking.controller.js index f3dc587ca5..50877c6a16 100644 --- a/awx/ui/static/js/system-tracking/system-tracking.controller.js +++ b/awx/ui/static/js/system-tracking/system-tracking.controller.js @@ -33,17 +33,17 @@ function controller($rootScope, var viewType = hostIds.length > 1 ? 'multiHost' : 'singleHost'; var searchConfig = - { leftDate: initialFactData.leftDate, - rightDate: initialFactData.rightDate + { leftRange: initialFactData.leftSearchRange, + rightRange: initialFactData.rightSearchRange }; - $scope.leftDate = initialFactData.leftDate.from; - $scope.rightDate = initialFactData.rightDate.from; + $scope.leftDate = initialFactData.leftSearchRange.from; + $scope.rightDate = initialFactData.rightSearchRange.from; function setHeaderValues(viewType) { if (viewType === 'singleHost') { - $scope.comparisonLeftHeader = $scope.leftDate; - $scope.comparisonRightHeader = $scope.rightDate; + $scope.comparisonLeftHeader = $scope.leftScanDate; + $scope.comparisonRightHeader = $scope.rightScanDate; } else { $scope.comparisonLeftHeader = hosts[0].name; $scope.comparisonRightHeader = hosts[1].name; @@ -54,16 +54,26 @@ function controller($rootScope, searchConfig = _.merge({}, searchConfig, params); var factData = initialData; - var leftDate = searchConfig.leftDate; - var rightDate = searchConfig.rightDate; + var leftRange = searchConfig.leftRange; + var rightRange = searchConfig.rightRange; var activeModule = searchConfig.module; if (!factData) { - factData = getDataForComparison( - hostIds, - activeModule.name, - leftDate, - rightDate); + factData = + getDataForComparison( + hostIds, + activeModule.name, + leftRange, + rightRange) + .thenAll(function(factDataAndModules) { + var responses = factDataAndModules[1]; + var data = _.pluck(responses, 'fact'); + + $scope.leftScanDate = moment(responses[0].timestamp); + $scope.rightScanDate = moment(responses[1].timestamp); + + return data; + }, true); } waitIndicator('start'); @@ -122,9 +132,9 @@ function controller($rootScope, }; } - $scope.$watch('leftDate', dateWatcher('leftDate'), true); + $scope.$watch('leftDate', dateWatcher('leftRange'), true); - $scope.$watch('rightDate', dateWatcher('rightDate'), true); + $scope.$watch('rightDate', dateWatcher('rightRange'), true); $scope.setActiveModule(initialFactData.moduleName, initialFactData); } diff --git a/awx/ui/static/js/system-tracking/system-tracking.partial.html b/awx/ui/static/js/system-tracking/system-tracking.partial.html index f6828ffba1..3c7bb10a63 100644 --- a/awx/ui/static/js/system-tracking/system-tracking.partial.html +++ b/awx/ui/static/js/system-tracking/system-tracking.partial.html @@ -35,8 +35,8 @@
-

{{comparisonLeftHeader|stringOrDate:'L'}}

-

{{comparisonRightHeader|stringOrDate:'L'}}

+

{{comparisonLeftHeader|stringOrDate:'L LT'}}

+

{{comparisonRightHeader|stringOrDate:'L LT'}}

diff --git a/awx/ui/static/js/system-tracking/system-tracking.route.js b/awx/ui/static/js/system-tracking/system-tracking.route.js index 372012ca3a..26cc66472b 100644 --- a/awx/ui/static/js/system-tracking/system-tracking.route.js +++ b/awx/ui/static/js/system-tracking/system-tracking.route.js @@ -30,13 +30,23 @@ export default { var data = getDataForComparison(hostIds, moduleParam, leftDate, rightDate). - thenThru(function(factData) { - factData.leftDate = leftDate; - factData.rightDate = rightDate; - factData.moduleName = moduleParam; - return factData; - }) - .value(); + thenAll(function(factDataAndModules) { + var moduleOptions = factDataAndModules[0]; + var factResponses = factDataAndModules[1]; + var factData = _.pluck(factResponses, 'fact'); + + factData.leftSearchRange = leftDate; + factData.rightSearchRange = rightDate; + + factData.leftScanDate = moment(factResponses[0].timestamp); + factData.rightScanDate = moment(factResponses[0].timestamp); + + factData.moduleName = moduleParam; + factData.moduleOptions = moduleOptions; + + return factData; + }, true) + .value(); return data;