X-Git-Url: https://git.cweiske.de/auerswald-callnotifier.git/blobdiff_plain/1745804d9bb19325e5c76b054680bd3408176dfe..4bc203883b0b35be4892768679340effd1348a2f:/src/callnotifier/CLI.php diff --git a/src/callnotifier/CLI.php b/src/callnotifier/CLI.php index c8c8573..0b8ae60 100644 --- a/src/callnotifier/CLI.php +++ b/src/callnotifier/CLI.php @@ -5,7 +5,6 @@ namespace callnotifier; class CLI { protected $cliParser; - protected $config; public function __construct() { @@ -14,25 +13,49 @@ class CLI public function run() { - $this->config = new Config(); + $config = new Config(); try { $result = $this->cliParser->parse(); } catch (\Exception $exc) { $this->cliParser->displayError($exc->getMessage()); } - $this->fillConfig($this->config, $result); + $this->fillConfig($config, $result); - $handler = new MessageHandler($this->config); - $handler->addLogger(new Logger_Debug(), '*'); + $log = new Log(); + if ($result->options['debug'] || $result->options['debugEdss1']) { + $debugLogger = new Logger_Debug(); + $log->addLogger($debugLogger, '*'); + if ($result->options['debugEdss1']) { + $debugLogger->edss1MsgOnly = true; + } + } + + $callMonitor = new CallMonitor($config, $log); + + $configFile = $this->getConfigFile(); + if ($configFile !== null) { + include $configFile; + } - if ($this->config->replayFile !== null) { + $handler = new MessageHandler($config, $log, $callMonitor); + + if ($config->replayFile !== null) { $sourceClass = 'callnotifier\Source_File'; } else { $sourceClass = 'callnotifier\Source_Remote'; } - $source = new $sourceClass($this->config, $handler); - $source->run(); + + try { + $source = new $sourceClass($config, $handler); + $source->run(); + } catch (\Exception $e) { + $msg = 'Callnotifier error!' . "\n" + . 'Code: ' . $e->getCode() . "\n" + . 'Message: ' . $e->getMessage() . "\n"; + file_put_contents('php://stderr', $msg); + exit(1); + } } public function setupCli() @@ -56,7 +79,7 @@ class CLI 'dumpFile', array( 'long_name' => '--dump', - 'description' => 'dump messages into file for later replay', + 'description' => 'Dump messages into file for later replay', 'help_name' => 'FILE', 'action' => 'StoreString' ) @@ -71,6 +94,25 @@ class CLI ) ); + $p->addOption( + 'debug', + array( + 'short_name' => '-d', + 'long_name' => '--debug', + 'description' => "Debug mode: Echo all received messages and events", + 'action' => 'StoreTrue' + ) + ); + $p->addOption( + 'debugEdss1', + array( + 'short_name' => '-e', + 'long_name' => '--debug-edss1', + 'description' => "Debug mode: Show EDSS1 messages only", + 'action' => 'StoreTrue' + ) + ); + $this->cliParser = $p; } @@ -80,6 +122,39 @@ class CLI $config->setIfNotEmpty('dumpFile', $result->options['dumpFile']); $config->setIfNotEmpty('replayFile', $result->options['replayFile']); } + + /** + * Finds the path to the configuration file. + * + * The following locations are tried: + * - Git checkout: data/callnotifier.config.php + * - ~/.config/callnotifier.config.php + * - /etc/callnotifier.config.php + * + * @return string Full path of config file or NULL if no file found + */ + protected function getConfigFile() + { + if (basename(dirname(__DIR__)) == 'src' + && file_exists(__DIR__ . '/../../data/callnotifier.config.php') + ) { + return __DIR__ . '/../../data/callnotifier.config.php'; + } + + if (isset($_ENV['HOME'])) { + $file = $_ENV['HOME'] . '/.config/callnotifier.config.php'; + if (file_exists($file)) { + return $file; + } + } + + $file = '/etc/callnotifier.config.php'; + if (file_exists($file)) { + return $file; + } + + return null; + } } ?> \ No newline at end of file