UNPKG

domotz-remote-pawn

Version:

Domotz Agent

103 lines (90 loc) 3.34 kB
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;