fix counters
[snqmon:snqmon.git] / ping.php
1 <?php
2 /**
3  * StatusNet - the distributed open-source microblogging tool
4  * Copyright (C) 2010 StatusNet, Inc.
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Affero General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU Affero General Public License for more details.
15  *
16  * You should have received a copy of the GNU Affero General Public License
17  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  *
19  * @package snqmon
20  * @author Brion Vibber <brion@status.net>
21  */
22
23 require "./monutils.php";
24
25 if ($_SERVER['REQUEST_METHOD'] != 'POST') {
26     header('HTTP/1.x 400 Bad Request');
27     die('must POST updates');
28 }
29
30 $args = array('host',
31               'pid',
32               'state',
33               'counter',
34               'hmac');
35
36 foreach ($args as $arg) {
37     if (isset($_POST[$arg])) {
38         $$arg = strval($_POST[$arg]);
39     } else {
40         $$arg = '';
41     }
42 }
43
44 // @fixme hmac!
45
46 if (empty($host)) {
47     header('HTTP/1.x 400 Bad Request');
48     die("host empty");
49 }
50 if (empty($pid) || strval(intval($pid)) !== $pid) {
51     header('HTTP/1.x 400 Bad Request');
52     die("pid empty or invalid");
53 }
54
55 if ($state) {
56     $states = array('init',
57                     'listening',
58                     'queue',
59                     'xmpp',
60                     'idle',
61                     'shutdown');
62     if (!in_array($state, $states)) {
63         header('HTTP/1.x 400 Bad Request');
64         die("state invalid: " . htmlspecialchars($state));
65     }
66
67     $snqmon = new SnqMon();
68     $thread = new ThreadState($snqmon,
69                               array('host' => $host,
70                                     'pid' => $pid,
71                                     'state' => $state));
72     $ok = $snqmon->saveThreadState($thread);
73     if (!$ok) {
74         header('HTTP/1.x 500 Internal Server Error');
75         die("save failed");
76     }
77 }
78
79 if ($counter) {
80     if (!preg_match('/^[a-z_0-9]+$/', $counter)) {
81         header('HTTP/1.x 400 Bad Request');
82         die("counter invalid: " . htmlspecialchars($counter));
83     }
84     $snqmon = new SnqMon();
85     $thread = new ThreadState($snqmon,
86                               array('host' => $host,
87                                     'pid' => $pid,
88                                     'state' => 'n/a'));
89     $ok = $snqmon->incrementCounter($thread, $counter);
90     if (!$ok) {
91         header('HTTP/1.x 500 Internal Server Error');
92         die("save failed");
93     }
94 }
95
96 echo "ok";
97