4 changed files with 199 additions and 2 deletions
@ -0,0 +1,189 @@ |
|||
/* |
|||
* Copyright © 2016-2017 The Thingsboard Authors |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
export default angular.module('thingsboard.api.alarm', []) |
|||
.factory('alarmService', AlarmService) |
|||
.name; |
|||
|
|||
/*@ngInject*/ |
|||
function AlarmService($http, $q, $interval, $filter) { |
|||
var service = { |
|||
getAlarm: getAlarm, |
|||
saveAlarm: saveAlarm, |
|||
ackAlarm: ackAlarm, |
|||
clearAlarm: clearAlarm, |
|||
getAlarms: getAlarms, |
|||
pollAlarms: pollAlarms, |
|||
cancelPollAlarms: cancelPollAlarms |
|||
} |
|||
|
|||
return service; |
|||
|
|||
function getAlarm(alarmId, ignoreErrors, config) { |
|||
var deferred = $q.defer(); |
|||
var url = '/api/alarm/' + alarmId; |
|||
if (!config) { |
|||
config = {}; |
|||
} |
|||
config = Object.assign(config, { ignoreErrors: ignoreErrors }); |
|||
$http.get(url, config).then(function success(response) { |
|||
deferred.resolve(response.data); |
|||
}, function fail() { |
|||
deferred.reject(); |
|||
}); |
|||
return deferred.promise; |
|||
} |
|||
|
|||
function saveAlarm(alarm, ignoreErrors, config) { |
|||
var deferred = $q.defer(); |
|||
var url = '/api/alarm'; |
|||
if (!config) { |
|||
config = {}; |
|||
} |
|||
config = Object.assign(config, { ignoreErrors: ignoreErrors }); |
|||
$http.post(url, alarm, config).then(function success(response) { |
|||
deferred.resolve(response.data); |
|||
}, function fail() { |
|||
deferred.reject(); |
|||
}); |
|||
return deferred.promise; |
|||
} |
|||
|
|||
function ackAlarm(alarmId, ignoreErrors, config) { |
|||
var deferred = $q.defer(); |
|||
var url = '/api/alarm/' + alarmId + '/ack'; |
|||
if (!config) { |
|||
config = {}; |
|||
} |
|||
config = Object.assign(config, { ignoreErrors: ignoreErrors }); |
|||
$http.post(url, null, config).then(function success(response) { |
|||
deferred.resolve(response.data); |
|||
}, function fail() { |
|||
deferred.reject(); |
|||
}); |
|||
return deferred.promise; |
|||
} |
|||
|
|||
function clearAlarm(alarmId, ignoreErrors, config) { |
|||
var deferred = $q.defer(); |
|||
var url = '/api/alarm/' + alarmId + '/clear'; |
|||
if (!config) { |
|||
config = {}; |
|||
} |
|||
config = Object.assign(config, { ignoreErrors: ignoreErrors }); |
|||
$http.post(url, null, config).then(function success(response) { |
|||
deferred.resolve(response.data); |
|||
}, function fail() { |
|||
deferred.reject(); |
|||
}); |
|||
return deferred.promise; |
|||
} |
|||
|
|||
function getAlarms(entityType, entityId, pageLink, alarmStatus, ascOrder, config) { |
|||
var deferred = $q.defer(); |
|||
var url = '/api/alarm/' + entityType + '/' + entityId + '?limit=' + pageLink.limit; |
|||
|
|||
if (angular.isDefined(pageLink.startTime)) { |
|||
url += '&startTime=' + pageLink.startTime; |
|||
} |
|||
if (angular.isDefined(pageLink.endTime)) { |
|||
url += '&endTime=' + pageLink.endTime; |
|||
} |
|||
if (angular.isDefined(pageLink.idOffset)) { |
|||
url += '&offset=' + pageLink.idOffset; |
|||
} |
|||
if (alarmStatus) { |
|||
url += '&status=' + alarmStatus; |
|||
} |
|||
if (angular.isDefined(ascOrder) && ascOrder != null) { |
|||
url += '&ascOrder=' + (ascOrder ? 'true' : 'false'); |
|||
} |
|||
|
|||
$http.get(url, config).then(function success(response) { |
|||
deferred.resolve(response.data); |
|||
}, function fail() { |
|||
deferred.reject(); |
|||
}); |
|||
return deferred.promise; |
|||
} |
|||
|
|||
function fetchAlarms(alarmsQuery, pageLink, deferred, alarmsList) { |
|||
getAlarms(alarmsQuery.entityType, alarmsQuery.entityId, |
|||
pageLink, alarmsQuery.alarmStatus, false, {ignoreLoading: true}).then( |
|||
function success(alarms) { |
|||
if (!alarmsList) { |
|||
alarmsList = []; |
|||
} |
|||
alarmsList = alarmsList.concat(alarms.data); |
|||
if (alarms.hasNext && !alarmsQuery.limit) { |
|||
fetchAlarms(alarmsQuery, alarms.nextPageLink, deferred, alarmsList); |
|||
} else { |
|||
alarmsList = $filter('orderBy')(alarmsList, ['-createdTime']); |
|||
deferred.resolve(alarmsList); |
|||
} |
|||
}, |
|||
function fail() { |
|||
deferred.reject(); |
|||
} |
|||
); |
|||
} |
|||
|
|||
function getAlarmsByQuery(alarmsQuery) { |
|||
var deferred = $q.defer(); |
|||
var time = Date.now(); |
|||
var pageLink; |
|||
if (alarmsQuery.limit) { |
|||
pageLink = { |
|||
limit: alarmsQuery.limit |
|||
}; |
|||
} else { |
|||
pageLink = { |
|||
limit: 100, |
|||
startTime: time - alarmsQuery.interval |
|||
}; |
|||
} |
|||
fetchAlarms(alarmsQuery, pageLink, deferred); |
|||
return deferred.promise; |
|||
} |
|||
|
|||
function onPollAlarms(alarmsQuery) { |
|||
getAlarmsByQuery(alarmsQuery).then( |
|||
function success(alarms) { |
|||
alarmsQuery.onAlarms(alarms); |
|||
}, |
|||
function fail() {} |
|||
); |
|||
} |
|||
|
|||
function pollAlarms(entityType, entityId, alarmStatus, interval, limit, pollingInterval, onAlarms) { |
|||
var alarmsQuery = { |
|||
entityType: entityType, |
|||
entityId: entityId, |
|||
alarmStatus: alarmStatus, |
|||
interval: interval, |
|||
limit: limit, |
|||
onAlarms: onAlarms |
|||
}; |
|||
onPollAlarms(alarmsQuery); |
|||
return $interval(onPollAlarms, pollingInterval, 0, false, alarmsQuery); |
|||
} |
|||
|
|||
function cancelPollAlarms(pollPromise) { |
|||
if (angular.isDefined(pollPromise)) { |
|||
$interval.cancel(pollPromise); |
|||
} |
|||
} |
|||
|
|||
} |
|||
Loading…
Reference in new issue