|
|
|
@ -26,15 +26,17 @@ const MIN_INTERVAL = SECOND; |
|
|
|
const MAX_INTERVAL = 365 * 20 * DAY; |
|
|
|
|
|
|
|
const MIN_LIMIT = 10; |
|
|
|
const AVG_LIMIT = 200; |
|
|
|
const MAX_LIMIT = 500; |
|
|
|
//const AVG_LIMIT = 200;
|
|
|
|
//const MAX_LIMIT = 500;
|
|
|
|
|
|
|
|
/*@ngInject*/ |
|
|
|
function TimeService($translate, types) { |
|
|
|
function TimeService($translate, $http, $q, types) { |
|
|
|
|
|
|
|
var predefIntervals; |
|
|
|
var maxDatapointsLimit; |
|
|
|
|
|
|
|
var service = { |
|
|
|
loadMaxDatapointsLimit: loadMaxDatapointsLimit, |
|
|
|
minIntervalLimit: minIntervalLimit, |
|
|
|
maxIntervalLimit: maxIntervalLimit, |
|
|
|
boundMinInterval: boundMinInterval, |
|
|
|
@ -45,20 +47,38 @@ function TimeService($translate, types) { |
|
|
|
defaultTimewindow: defaultTimewindow, |
|
|
|
toHistoryTimewindow: toHistoryTimewindow, |
|
|
|
createSubscriptionTimewindow: createSubscriptionTimewindow, |
|
|
|
avgAggregationLimit: function () { |
|
|
|
return AVG_LIMIT; |
|
|
|
getMaxDatapointsLimit: function () { |
|
|
|
return maxDatapointsLimit; |
|
|
|
}, |
|
|
|
getMinDatapointsLimit: function () { |
|
|
|
return MIN_LIMIT; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return service; |
|
|
|
|
|
|
|
function loadMaxDatapointsLimit() { |
|
|
|
var deferred = $q.defer(); |
|
|
|
var url = '/api/dashboard/maxDatapointsLimit'; |
|
|
|
$http.get(url, {ignoreLoading: true}).then(function success(response) { |
|
|
|
maxDatapointsLimit = response.data; |
|
|
|
if (!maxDatapointsLimit || maxDatapointsLimit <= MIN_LIMIT) { |
|
|
|
maxDatapointsLimit = MIN_LIMIT + 1; |
|
|
|
} |
|
|
|
deferred.resolve(); |
|
|
|
}, function fail() { |
|
|
|
deferred.reject(); |
|
|
|
}); |
|
|
|
return deferred.promise; |
|
|
|
} |
|
|
|
|
|
|
|
function minIntervalLimit(timewindow) { |
|
|
|
var min = timewindow / MAX_LIMIT; |
|
|
|
var min = timewindow / 500; |
|
|
|
return boundMinInterval(min); |
|
|
|
} |
|
|
|
|
|
|
|
function avgInterval(timewindow) { |
|
|
|
var avg = timewindow / AVG_LIMIT; |
|
|
|
var avg = timewindow / 200; |
|
|
|
return boundMinInterval(avg); |
|
|
|
} |
|
|
|
|
|
|
|
@ -230,7 +250,7 @@ function TimeService($translate, types) { |
|
|
|
}, |
|
|
|
aggregation: { |
|
|
|
type: types.aggregation.avg.value, |
|
|
|
limit: AVG_LIMIT |
|
|
|
limit: Math.floor(maxDatapointsLimit / 2) |
|
|
|
} |
|
|
|
} |
|
|
|
return timewindow; |
|
|
|
@ -246,22 +266,27 @@ function TimeService($translate, types) { |
|
|
|
} |
|
|
|
|
|
|
|
var aggType; |
|
|
|
var limit; |
|
|
|
if (timewindow.aggregation) { |
|
|
|
aggType = timewindow.aggregation.type || types.aggregation.avg.value; |
|
|
|
limit = timewindow.aggregation.limit || maxDatapointsLimit; |
|
|
|
} else { |
|
|
|
aggType = types.aggregation.avg.value; |
|
|
|
limit = maxDatapointsLimit; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var historyTimewindow = { |
|
|
|
history: { |
|
|
|
fixedTimewindow: { |
|
|
|
startTimeMs: startTimeMs, |
|
|
|
endTimeMs: endTimeMs |
|
|
|
}, |
|
|
|
interval: boundIntervalToTimewindow(endTimeMs - startTimeMs, interval, aggType) |
|
|
|
interval: boundIntervalToTimewindow(endTimeMs - startTimeMs, interval, types.aggregation.avg.value) |
|
|
|
}, |
|
|
|
aggregation: { |
|
|
|
type: aggType |
|
|
|
type: aggType, |
|
|
|
limit: limit |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -275,7 +300,7 @@ function TimeService($translate, types) { |
|
|
|
realtimeWindowMs: null, |
|
|
|
aggregation: { |
|
|
|
interval: SECOND, |
|
|
|
limit: AVG_LIMIT, |
|
|
|
limit: maxDatapointsLimit, |
|
|
|
type: types.aggregation.avg.value |
|
|
|
} |
|
|
|
}; |
|
|
|
@ -283,14 +308,14 @@ function TimeService($translate, types) { |
|
|
|
if (stateData) { |
|
|
|
subscriptionTimewindow.aggregation = { |
|
|
|
interval: SECOND, |
|
|
|
limit: MAX_LIMIT, |
|
|
|
limit: maxDatapointsLimit, |
|
|
|
type: types.aggregation.none.value, |
|
|
|
stateData: true |
|
|
|
}; |
|
|
|
} else { |
|
|
|
subscriptionTimewindow.aggregation = { |
|
|
|
interval: SECOND, |
|
|
|
limit: AVG_LIMIT, |
|
|
|
limit: maxDatapointsLimit, |
|
|
|
type: types.aggregation.avg.value |
|
|
|
}; |
|
|
|
} |
|
|
|
@ -298,7 +323,7 @@ function TimeService($translate, types) { |
|
|
|
if (angular.isDefined(timewindow.aggregation) && !stateData) { |
|
|
|
subscriptionTimewindow.aggregation = { |
|
|
|
type: timewindow.aggregation.type || types.aggregation.avg.value, |
|
|
|
limit: timewindow.aggregation.limit || AVG_LIMIT |
|
|
|
limit: timewindow.aggregation.limit || maxDatapointsLimit |
|
|
|
}; |
|
|
|
} |
|
|
|
if (angular.isDefined(timewindow.realtime)) { |
|
|
|
|