domotz-remote-pawn
Version:
Domotz Agent
103 lines (90 loc) • 3.34 kB
JavaScript
const FING_LIB_PATH = '/usr/local/lib/fing';
const FING_ENV_OPTIONS = {
env: {
LD_LIBRARY_PATH: FING_LIB_PATH,
DYLD_LIBRARY_PATH: FING_LIB_PATH,
},
};
var fingProcessManager = function (fingCommand, macListFile, childProcess, procManager, q, myConsole) {
'use strict';
var fingProcess = null;
var fingParameters = ['--kickout', '-', '--kocfg', macListFile];
function isFingRunning() {
if (fingProcess !== null) {
myConsole.debug('Fing process is running');
return true;
} else {
myConsole.debug('Fing process not existing');
return false;
}
}
function assureFingIsRunning() {
if (!isFingRunning()) {
myConsole.info('Starting fing');
fingProcess = childProcess.spawn(fingCommand, fingParameters, { env: getEnrichedEnv() });
fingProcess.on('close', function () {
myConsole.info('Fing process killed');
fingProcess = null;
});
fingProcess.stderr.on('data', function (data) {
myConsole.warn('ERR DATA %s', data);
});
fingProcess.stdout.on('data', function (data) {
myConsole.verbose('STDOUT DATA ' + data);
});
fingProcess.on('error', function (err) {
myConsole.warn('Fing block call: unable to execute Fing: %s', JSON.stringify(err));
});
} else {
myConsole.debug('Fing already running, not executed');
}
}
function assureFingIsNotRunning() {
if (isFingRunning()) {
myConsole.info('Killing fing');
fingProcess.kill('SIGKILL');
fingProcess = null;
} else {
myConsole.info('Fing not running, not killing it');
}
}
function getEnrichedEnv() {
var enrichedEnv = JSON.parse(JSON.stringify(process.env));
enrichedEnv.LD_LIBRARY_PATH =
(enrichedEnv.LD_LIBRARY_PATH ? enrichedEnv.LD_LIBRARY_PATH + ':' : '') +
process.env.DOMOTZ_LIB_DIR +
':' +
FING_ENV_OPTIONS.env.LD_LIBRARY_PATH;
enrichedEnv.DYLD_LIBRARY_PATH =
(enrichedEnv.DYLD_LIBRARY_PATH ? enrichedEnv.DYLD_LIBRARY_PATH + ':' : '') +
process.env.DOMOTZ_LIB_DIR +
':' +
FING_ENV_OPTIONS.env.LD_LIBRARY_PATH;
return enrichedEnv;
}
function getFingVersion() {
var deferred = q.defer();
getEnrichedEnv();
procManager
.exec(fingCommand + ' --version', { env: getEnrichedEnv() })
.then(function (stdout) {
var trimmed = stdout.trim();
if (!trimmed.match(/\d+\.\d+\.\d+/)) {
myConsole.warn('fing version is malformed: %s', trimmed);
deferred.reject();
return;
}
deferred.resolve(trimmed);
})
.catch(function () {
deferred.reject();
});
return deferred.promise;
}
return {
assureFingIsRunning: assureFingIsRunning,
assureFingIsNotRunning: assureFingIsNotRunning,
getFingVersion: getFingVersion,
};
};
module.exports = fingProcessManager;