file call logger
[auerswald-callnotifier.git] / src / callnotifier / CLI.php
1 <?php
2 namespace callnotifier;
3
4
5 class CLI
6 {
7     protected $cliParser;
8     protected $config;
9
10     public function __construct()
11     {
12         $this->setupCli();
13     }
14
15     public function run()
16     {
17         $this->config = new Config();
18         try {
19             $result = $this->cliParser->parse();
20         } catch (\Exception $exc) {
21             $this->cliParser->displayError($exc->getMessage());
22         }
23
24         $this->fillConfig($this->config, $result);
25
26         $log = new Log();
27         if ($result->options['debug'] || $result->options['debugEdss1']) {
28             $debugLogger = new Logger_Debug();
29             $log->addLogger($debugLogger, '*');
30             if ($result->options['debugEdss1']) {
31                 $debugLogger->edss1MsgOnly = true;
32             }
33         }
34         $log->addLogger(
35             new Logger_CallEcho(), array('startingCall', 'finishedCall')
36         );
37
38         $callMonitor = new CallMonitor($this->config, $log);
39         /*
40         $callMonitor->addDetailler(
41             new CallMonitor_Detailler_LDAP(
42                 array(
43                     'host' => 'ldap.home.cweiske.de',
44                     'basedn' => 'ou=adressbuch,dc=cweiske,dc=de',
45                     'binddn' => 'cn=readonly,ou=users,dc=cweiske,dc=de',
46                     'bindpw' => 'readonly'
47                 )
48             )
49         );
50         $callMonitor->addDetailler(
51             new CallMonitor_Detailler_OpenGeoDb(
52                 'mysql:host=dojo;dbname=opengeodb',
53                 'opengeodb-read',
54                 'opengeodb'
55             )
56         );
57         */
58
59         $log->addLogger(
60             new Logger_CallFile('incoming.log', 'i', '40862'),
61             array('finishedCall')
62         );
63         $log->addLogger(
64             new Logger_CallFile('all.log'),
65             array('finishedCall')
66         );
67
68         $handler = new MessageHandler($this->config, $log, $callMonitor);
69
70         if ($this->config->replayFile !== null) {
71             $sourceClass = 'callnotifier\Source_File';
72         } else {
73             $sourceClass = 'callnotifier\Source_Remote';
74         }
75         $source = new $sourceClass($this->config, $handler);
76         $source->run();
77     }
78
79     public function setupCli()
80     {
81         $p = new \Console_CommandLine();
82         $p->description = 'Notifies about incoming calls on an Auerswald COMpact 3000';
83         $p->version = '0.0.1';
84
85         $p->addOption(
86             'host',
87             array(
88                 'short_name'  => '-h',
89                 'long_name'   => '--host',
90                 'description' => 'IP of COMpact 3000',
91                 'help_name'   => 'IP',
92                 'action'      => 'StoreString'
93             )
94         );
95
96         $p->addOption(
97             'dumpFile',
98             array(
99                 'long_name'   => '--dump',
100                 'description' => 'dump messages into file for later replay',
101                 'help_name'   => 'FILE',
102                 'action'      => 'StoreString'
103             )
104         );
105         $p->addOption(
106             'replayFile',
107             array(
108                 'long_name'   => '--replay',
109                 'description' => "Replay messages from file instead from network",
110                 'help_name'   => 'FILE',
111                 'action'      => 'StoreString'
112             )
113         );
114
115         $p->addOption(
116             'debug',
117             array(
118                 'short_name'  => '-d',
119                 'long_name'   => '--debug',
120                 'description' => "Debug mode: Echo all received messages and events",
121                 'action'      => 'StoreTrue'
122             )
123         );
124         $p->addOption(
125             'debugEdss1',
126             array(
127                 'short_name'  => '-e',
128                 'long_name'   => '--debug-edss1',
129                 'description' => "Debug mode: Show EDSS1 messages only",
130                 'action'      => 'StoreTrue'
131             )
132         );
133
134         $this->cliParser = $p;
135     }
136
137     protected function fillConfig($config, $result)
138     {
139         $config->setIfNotEmpty('host', $result->options['host']);
140         $config->setIfNotEmpty('dumpFile', $result->options['dumpFile']);
141         $config->setIfNotEmpty('replayFile', $result->options['replayFile']);
142     }
143 }
144
145 ?>