diff options
| author | Christian Weiske <cweiske@cweiske.de> | 2012-07-14 22:56:33 +0200 |
|---|---|---|
| committer | Christian Weiske <cweiske@cweiske.de> | 2012-07-14 22:56:33 +0200 |
| commit | fc647788cf137595e84bea72edb16d86ab1d76a5 (patch) | |
| tree | abaff9679ba7ac8b029aae22a9b7d23494f17588 /src | |
| parent | 706ce1501a9ab1a33e4106774665c631a3ad3749 (diff) | |
| download | auerswald-callnotifier-fc647788cf137595e84bea72edb16d86ab1d76a5.tar.gz auerswald-callnotifier-fc647788cf137595e84bea72edb16d86ab1d76a5.zip | |
echo logger
Diffstat (limited to 'src')
| -rw-r--r-- | src/callnotifier/CLI.php | 2 | ||||
| -rw-r--r-- | src/callnotifier/Logger.php | 9 | ||||
| -rw-r--r-- | src/callnotifier/Logger/Echo.php | 27 | ||||
| -rw-r--r-- | src/callnotifier/MessageHandler.php | 62 | ||||
| -rw-r--r-- | src/callnotifier/Source/File.php | 6 |
5 files changed, 100 insertions, 6 deletions
diff --git a/src/callnotifier/CLI.php b/src/callnotifier/CLI.php index 928e4ce..f9a4937 100644 --- a/src/callnotifier/CLI.php +++ b/src/callnotifier/CLI.php @@ -24,6 +24,8 @@ class CLI $this->fillConfig($this->config, $result); $handler = new MessageHandler($this->config); + $handler->addLogger(new Logger_Echo(), '*'); + if ($this->config->replayFile !== null) { $sourceClass = 'callnotifier\Source_File'; } else { diff --git a/src/callnotifier/Logger.php b/src/callnotifier/Logger.php new file mode 100644 index 0000000..48a5ecf --- /dev/null +++ b/src/callnotifier/Logger.php @@ -0,0 +1,9 @@ +<?php +namespace callnotifier; + +interface Logger +{ + public function log($type, $arData); +} + +?> diff --git a/src/callnotifier/Logger/Echo.php b/src/callnotifier/Logger/Echo.php new file mode 100644 index 0000000..eec9bb1 --- /dev/null +++ b/src/callnotifier/Logger/Echo.php @@ -0,0 +1,27 @@ +<?php +namespace callnotifier; + +class Logger_Echo implements Logger +{ + public function __construct() + { + $cc = new \Console_Color2(); + $this->begin = $cc->convert('%y'); + $this->end = $cc->convert('%n'); + $this->blue = $cc->convert('%b'); + } + + public function log($type, $arData) + { + if ($type == 'msgData') { + echo $this->begin . $arData['type'] . $this->end + . ': ' . $arData['details'] . "\n"; + } else { + echo $this->blue . $type . $this->end . ': ' + . var_export($arData, true) . "\n"; + } + } + +} + +?> diff --git a/src/callnotifier/MessageHandler.php b/src/callnotifier/MessageHandler.php index b4ed645..89d07e7 100644 --- a/src/callnotifier/MessageHandler.php +++ b/src/callnotifier/MessageHandler.php @@ -5,6 +5,18 @@ class MessageHandler { protected $dumpHdl; + /** + * Array of logger object arrays. + * Key is the notification type, value is an array of logger objects + * that want to get notified about the type. + * + * @var array + */ + protected $logger = array( + 'msgData' => array(), + 'incomingCall' => array() + ); + public function __construct($config) { @@ -12,6 +24,30 @@ class MessageHandler $this->prepareDump(); } + /** + * Add a logger + * + * @param Logger $logger Logger object to register + * @param array|string $types Single notification type or array of such + * types. "*" means "register for all types". + * + * @return self + */ + public function addLogger(Logger $logger, $types) + { + if ($types == '*') { + $types = array_keys($this->logger); + } + $types = (array)$types; + + foreach ($types as $type) { + if (!isset($this->logger[$type])) { + throw new \Exception('Unknown log type: ' . $type); + } + $this->logger[$type][] = $logger; + } + } + public function handle($msg) { if ($this->config->dumpFile !== null) { @@ -27,17 +63,37 @@ class MessageHandler return false; } list(, $type, $someid, $details) = $matches; + $this->log( + 'msgData', + array( + 'type' => $type, + 'id' => $someid, + 'details' => $details + ) + ); if ($type != 'Info') { //we only want info messages - var_dump($type . ': ' . $details); return; } //Vegw/Ets-Cref:[0xffef]/[0x64] - VEGW_SETUP from upper layer to internal destination: CGPN[**22]->CDPN[41], - var_dump($details); $regex = '#CGPN\\[([^\\]]+)\\]->CDPN\\[([^\\]]+)\\]#'; if (preg_match($regex, $details, $matches)) { - var_dump('a call!', $matches); + list(, $from, $to) = $matches; + $this->log('incomingCall', array('from' => $from, 'to' => $to)); + } + } + + protected function log($type, $arData) + { + if (!isset($this->logger[$type])) { + throw new \Exception('Unknown log type: ' . $type); + } + + if (count($this->logger[$type])) { + foreach ($this->logger[$type] as $logger) { + $logger->log($type, $arData); + } } } diff --git a/src/callnotifier/Source/File.php b/src/callnotifier/Source/File.php index c358397..9b6a03e 100644 --- a/src/callnotifier/Source/File.php +++ b/src/callnotifier/Source/File.php @@ -13,19 +13,19 @@ class Source_File { $file = $this->config->replayFile; if (!file_exists($file)) { - throw new Exception('Replay file does not exist'); + throw new \Exception('Replay file does not exist'); } $handle = fopen($file, 'r'); if (!$handle) { - throw new Exception('Cannot open replay file for reading'); + throw new \Exception('Cannot open replay file for reading'); } while (($line = fgets($handle, 4096)) !== false) { $this->handler->handle($line); } if (!feof($handle)) { - throw new Exception('unexpected fgets() fail'); + throw new \Exception('unexpected fgets() fail'); } fclose($handle); } |
