retry pinging only 5 times
[stapibas.git] / src / stapibas / Cli.php
1 <?php
2 namespace stapibas;
3
4 class Cli
5 {
6     protected $cliParser;
7
8     public function __construct()
9     {
10         $this->setupCli();
11     }
12
13     public function run()
14     {
15         try {
16             $result = $this->cliParser->parse();
17         } catch (\Exception $exc) {
18             $this->cliParser->displayError($exc->getMessage());
19         }
20
21         $log = new Logger();
22         if ($result->options['debug']) {
23             $log->debug = true;
24         }
25
26         try {
27             $deps = new Dependencies();
28             $deps->db = new PDO(
29                 $GLOBALS['dbdsn'], $GLOBALS['dbuser'], $GLOBALS['dbpass']
30             );
31             $deps->log = $log;
32             $deps->options = $result->options;
33
34             $tasks = array_flip(explode(',', $result->options['tasks']));
35
36             if (isset($tasks['feeds'])) {
37                 $this->runUpdateFeeds($deps);
38             }
39             if (isset($tasks['entries'])) {
40                 $this->runUpdateEntries($deps);
41             }
42             if (isset($tasks['urls'])) {
43                 $this->runPingUrls($deps);
44             }
45         } catch (\Exception $e) {
46             $msg = 'stapibas exception!' . "\n"
47                 . 'Code: ' . $e->getCode() . "\n"
48                 . 'Message: ' . $e->getMessage() . "\n";
49             file_put_contents('php://stderr', $msg);
50             exit(1);
51         }
52     }
53
54     protected function runUpdateFeeds($deps)
55     {
56         $uf = new Feed_UpdateFeeds($deps);
57         if ($deps->options['feed'] === null) {
58             $uf->updateAll();
59         } else {
60             $urlOrIds = explode(',', $deps->options['feed']);
61             $uf->updateSome($urlOrIds);
62         }
63     }
64
65     protected function runUpdateEntries($deps)
66     {
67         $ue = new Feed_UpdateEntries($deps);
68         if ($deps->options['entry'] === null) {
69             $ue->updateAll();
70         } else {
71             $urlOrIds = explode(',', $deps->options['entry']);
72             $ue->updateSome($urlOrIds);
73         }
74     }
75
76     protected function runPingUrls($deps)
77     {
78         $uf = new Feed_PingUrls($deps);
79         if ($deps->options['entryurl'] === null) {
80             $uf->pingAll();
81         } else {
82             $urls = explode(',', $deps->options['entryurl']);
83             $uf->pingSome($urls);
84         }
85     }
86
87
88     public function setupCli()
89     {
90         $p = new \Console_CommandLine();
91         $p->description = 'Sends pingbacks to URLs linked in Atom feed entries';
92         $p->version = '0.0.1';
93
94         $p->addOption(
95             'feed',
96             array(
97                 'short_name'  => '-i',
98                 'long_name'   => '--feed',
99                 'description' => 'Update this feed URL or ID',
100                 'help_name'   => 'URL|ID',
101                 'action'      => 'StoreString'
102             )
103         );
104
105         $p->addOption(
106             'entry',
107             array(
108                 'short_name'  => '-e',
109                 'long_name'   => '--entry',
110                 'description' => 'Update this feed entry URL or ID',
111                 'help_name'   => 'URL|ID',
112                 'action'      => 'StoreString'
113             )
114         );
115
116         $p->addOption(
117             'tasks',
118             array(
119                 'short_name'  => '-t',
120                 'long_name'   => '--tasks',
121                 'description' => 'Execute the given tasks (comma-separated: feeds,entries,urls)',
122                 'help_name'   => 'tasks',
123                 'action'      => 'StoreString',
124                 'default'     => 'feeds,entries,urls',
125             )
126         );
127         $p->addOption(
128             'list_tasks',
129             array(
130                 'long_name'   => '--list-tasks',
131                 'description' => 'Show all possible tasks',
132                 'action'      => 'List',
133                 'list'        => array('feeds', 'entries', 'urls')
134             )
135         );
136
137         $p->addOption(
138             'entryurl',
139             array(
140                 'short_name'  => '-u',
141                 'long_name'   => '--url',
142                 'description' => 'Ping this URL or ID',
143                 'help_name'   => 'URL|ID',
144                 'action'      => 'StoreString'
145             )
146         );
147
148
149         $p->addOption(
150             'debug',
151             array(
152                 'short_name'  => '-d',
153                 'long_name'   => '--debug',
154                 'description' => "Output debug messages",
155                 'action'      => 'StoreTrue'
156             )
157         );
158         $p->addOption(
159             'force',
160             array(
161                 'short_name'  => '-f',
162                 'long_name'   => '--force',
163                 'description' => "Update even when resource did not change",
164                 'action'      => 'StoreTrue'
165             )
166         );
167
168         $this->cliParser = $p;
169     }
170
171 }
172 ?>