domotz-remote-pawn
Version:
Domotz Agent
59 lines (54 loc) • 2.09 kB
JavaScript
/** This file is part of Domotz Agent.
* Copyright (C) 2016 Domotz UK LLP
*
* 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/>.
*
* Memory persistence of the mac<->snmp community association
*
* Created by Iacopo Papalini <iacopo@domotz.com> on 12/09/2017.
*/
var communitiesProviderFactory = function (resourceLocator) {
'use strict';
var q = require('q');
var myConsole = resourceLocator.log.decorateLogs();
var engineRequest = resourceLocator.engineRequest;
var communities = {
mac: null,
};
var invalidate = function () {
communities.mac = null;
};
var get = function () {
if (communities.mac !== null) {
myConsole.debug('Cache Hit, returning communities');
return q(communities.mac);
} else {
myConsole.debug('Fetching communities list from engine');
return engineRequest.sendWithPromise('/device/snmp-community', 'GET').then(function (data) {
myConsole.debug('Communities list fetched from engine, %s elements', data.length);
communities.mac = {};
data.forEach(function (device) {
communities.mac[device.mac] = device;
delete device.mac;
});
return communities.mac;
});
}
};
return {
invalidate: invalidate,
get: get,
};
};
module.exports.communitiesProviderFactory = communitiesProviderFactory;