domotz-remote-pawn
Version:
Domotz Agent
68 lines (62 loc) • 2.33 kB
JavaScript
/** This file is part of Domotz Agent.
* Copyright (C) 2021 Domotz Ltd
*
* Domotz Agent is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Domotz Agent is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Domotz Agent. If not, see <http://www.gnu.org/licenses/>.
**/
var FEATURE_DISABLED = 'feature os_inspections is enabled for the agent';
module.exports.name = 'OS_DATA_INSPECTION_MANAGER';
module.exports.factory = function (resourceLocator) {
var nextExecution = null;
var myConsole = resourceLocator.log.decorateLogs();
function shouldRun() {
if (!resourceLocator.settingsManager.isOsInspectionsEnabled()) {
nextExecution = FEATURE_DISABLED;
return false;
} else {
if (nextExecution === FEATURE_DISABLED) {
nextExecution = null;
}
}
var pollingInterval = resourceLocator.settingsManager.osInspectionsPollingInterval();
var now = new Date();
var postpone = function () {
nextExecution.setHours(nextExecution.getHours() + pollingInterval);
};
if (nextExecution === null) {
nextExecution = now;
postpone();
return true;
} else {
if (now > nextExecution) {
postpone();
return true;
}
return false;
}
}
function collectOSData() {
if (shouldRun()) {
myConsole.info('Scheduling OS data collection');
return resourceLocator.engineRequest.sendWithPromise('/os/identification', 'GET');
} else {
myConsole.info('OS data collection delayed until ' + nextExecution);
return resourceLocator.q.resolve();
}
}
return {
collectOSData: collectOSData,
// for testing
_shouldRun: shouldRun,
};
};