diff options
-rw-r--r-- | conf/config.php | 5 | ||||
-rw-r--r-- | inc/collectd.inc.php | 81 | ||||
-rw-r--r-- | inc/html.inc.php | 2 | ||||
-rw-r--r-- | plugin/cpu.php | 2 | ||||
-rw-r--r-- | plugin/df.php | 3 | ||||
-rw-r--r-- | plugin/disk.php | 3 | ||||
-rw-r--r-- | plugin/entropy.php | 3 | ||||
-rw-r--r-- | plugin/interface.php | 3 | ||||
-rw-r--r-- | plugin/irq.php | 2 | ||||
-rw-r--r-- | plugin/load.php | 3 | ||||
-rw-r--r-- | plugin/memory.php | 2 | ||||
-rw-r--r-- | plugin/processes.php | 2 | ||||
-rw-r--r-- | plugin/sensors.php | 2 | ||||
-rw-r--r-- | plugin/swap.php | 2 | ||||
-rw-r--r-- | plugin/users.php | 3 |
15 files changed, 118 insertions, 0 deletions
diff --git a/conf/config.php b/conf/config.php index cbddfb3..751bcf1 100644 --- a/conf/config.php +++ b/conf/config.php | |||
@@ -21,6 +21,11 @@ $CONFIG['groupby'] = array( | |||
21 | 'sensors' => 'type', | 21 | 'sensors' => 'type', |
22 | ); | 22 | ); |
23 | 23 | ||
24 | # collectd's unix socket (unixsock plugin) | ||
25 | # enabled: 'unix:///var/run/collectd-unixsock' | ||
26 | # disabled: NULL | ||
27 | $CONFIG['socket'] = NULL; | ||
28 | |||
24 | if (file_exists(dirname(__FILE__).'/config.local.php')) | 29 | if (file_exists(dirname(__FILE__).'/config.local.php')) |
25 | include 'config.local.php'; | 30 | include 'config.local.php'; |
26 | 31 | ||
diff --git a/inc/collectd.inc.php b/inc/collectd.inc.php index 525b931..3ef9102 100644 --- a/inc/collectd.inc.php +++ b/inc/collectd.inc.php | |||
@@ -157,4 +157,85 @@ function build_url($base, $items, $s=86400) { | |||
157 | return $base; | 157 | return $base; |
158 | } | 158 | } |
159 | 159 | ||
160 | # generate identifier that collectd's FLUSH command understands | ||
161 | function collectd_identifier($host, $plugin, $pinst, $type, $tinst) { | ||
162 | global $CONFIG; | ||
163 | |||
164 | $identifier = sprintf('%s/%s%s%s/%s%s%s', $host, | ||
165 | $plugin, strlen($pinst) ? '-' : '', $pinst, | ||
166 | $type, strlen($tinst) ? '-' : '', $tinst); | ||
167 | |||
168 | if (is_file($CONFIG['datadir'].'/'.$identifier.'.rrd')) | ||
169 | return $identifier; | ||
170 | else | ||
171 | return FALSE; | ||
172 | } | ||
173 | |||
174 | # tell collectd to FLUSH all data of the identifier(s) | ||
175 | function collectd_flush($identifier) { | ||
176 | global $CONFIG; | ||
177 | |||
178 | if (!$CONFIG['socket']) | ||
179 | return FALSE; | ||
180 | |||
181 | if (!$identifier || (is_array($identifier) && count($identifier) == 0) || | ||
182 | !(is_string($identifier) || is_array($identifier))) | ||
183 | return FALSE; | ||
184 | |||
185 | $u_errno = 0; | ||
186 | $u_errmsg = ''; | ||
187 | if ($socket = @fsockopen($CONFIG['socket'], 0, $u_errno, $u_errmsg)) { | ||
188 | $cmd = 'FLUSH plugin=rrdtool'; | ||
189 | if (is_array($identifier)) { | ||
190 | foreach ($identifier as $val) | ||
191 | $cmd .= sprintf(' identifier="%s"', $val); | ||
192 | } else | ||
193 | $cmd .= sprintf(' identifier="%s"', $identifier); | ||
194 | $cmd .= "\n"; | ||
195 | |||
196 | $r = fwrite($socket, $cmd, strlen($cmd)); | ||
197 | if ($r === false || $r != strlen($cmd)) { | ||
198 | printf('ERROR: Failed to write full command to unix-socket: %d out of %d written', | ||
199 | $r === false ? -1 : $r, strlen($cmd)); | ||
200 | return FALSE; | ||
201 | } | ||
202 | |||
203 | $resp = fgets($socket); | ||
204 | if ($resp === false) { | ||
205 | printf('ERROR: Failed to read response from collectd for command: %s', | ||
206 | trim($cmd)); | ||
207 | return FALSE; | ||
208 | } | ||
209 | |||
210 | $n = (int)$resp; | ||
211 | while ($n-- > 0) | ||
212 | fgets($socket); | ||
213 | |||
214 | fclose($socket); | ||
215 | |||
216 | return TRUE; | ||
217 | } else { | ||
218 | printf('ERROR: Failed to open unix-socket to collectd: %d: %s', | ||
219 | $u_errno, $u_errmsg); | ||
220 | return FALSE; | ||
221 | } | ||
222 | } | ||
223 | |||
224 | # generate identifiers from args | ||
225 | function ident_from_args($args) { | ||
226 | if (is_array($args['tinstance'])) { | ||
227 | foreach($args['tinstance'] as $ti) { | ||
228 | $instances[] = collectd_identifier($args['host'], | ||
229 | $args['plugin'], $args['pinstance'], | ||
230 | $args['type'], $ti); | ||
231 | } | ||
232 | } else { | ||
233 | $instances[] = collectd_identifier($args['host'], | ||
234 | $args['plugin'], $args['pinstance'], | ||
235 | $args['type'], $args['tinstance']); | ||
236 | } | ||
237 | |||
238 | return $instances; | ||
239 | } | ||
240 | |||
160 | ?> | 241 | ?> |
diff --git a/inc/html.inc.php b/inc/html.inc.php index cbe3ad2..09da518 100644 --- a/inc/html.inc.php +++ b/inc/html.inc.php | |||
@@ -2,6 +2,7 @@ | |||
2 | 2 | ||
3 | require_once 'conf/common.inc.php'; | 3 | require_once 'conf/common.inc.php'; |
4 | require_once 'inc/rrdtool.class.php'; | 4 | require_once 'inc/rrdtool.class.php'; |
5 | require_once 'inc/collectd.inc.php'; | ||
5 | 6 | ||
6 | function html_start() { | 7 | function html_start() { |
7 | global $CONFIG; | 8 | global $CONFIG; |
@@ -46,6 +47,7 @@ function host_summary($hosts) { | |||
46 | echo "<table class=\"summary\">\n"; | 47 | echo "<table class=\"summary\">\n"; |
47 | 48 | ||
48 | foreach($hosts as $host) { | 49 | foreach($hosts as $host) { |
50 | collectd_flush(sprintf('%s/load/load', $host)); | ||
49 | $rrd_info = $rrd->rrd_info($CONFIG['datadir'].'/'.$host.'/load/load.rrd'); | 51 | $rrd_info = $rrd->rrd_info($CONFIG['datadir'].'/'.$host.'/load/load.rrd'); |
50 | if (!$rrd_info) | 52 | if (!$rrd_info) |
51 | continue; | 53 | continue; |
diff --git a/plugin/cpu.php b/plugin/cpu.php index d750a3a..5f688f4 100644 --- a/plugin/cpu.php +++ b/plugin/cpu.php | |||
@@ -59,6 +59,8 @@ $obj->rrd_title = "CPU-$pinstance usage on $host"; | |||
59 | $obj->rrd_vertical = 'Jiffies'; | 59 | $obj->rrd_vertical = 'Jiffies'; |
60 | $obj->rrd_format = '%5.2lf'; | 60 | $obj->rrd_format = '%5.2lf'; |
61 | 61 | ||
62 | collectd_flush(ident_from_args($obj->args)); | ||
63 | |||
62 | $obj->rrd_graph(); | 64 | $obj->rrd_graph(); |
63 | 65 | ||
64 | ?> | 66 | ?> |
diff --git a/plugin/df.php b/plugin/df.php index f4dd5d6..6d7414b 100644 --- a/plugin/df.php +++ b/plugin/df.php | |||
@@ -4,6 +4,7 @@ | |||
4 | 4 | ||
5 | require_once 'conf/common.inc.php'; | 5 | require_once 'conf/common.inc.php'; |
6 | require_once 'type/GenericStacked.class.php'; | 6 | require_once 'type/GenericStacked.class.php'; |
7 | require_once 'inc/collectd.inc.php'; | ||
7 | 8 | ||
8 | # LAYOUT | 9 | # LAYOUT |
9 | # | 10 | # |
@@ -36,6 +37,8 @@ $obj->rrd_title = "Free space ($tinstance) on $host"; | |||
36 | $obj->rrd_vertical = 'Bytes'; | 37 | $obj->rrd_vertical = 'Bytes'; |
37 | $obj->rrd_format = '%5.1lf%sB'; | 38 | $obj->rrd_format = '%5.1lf%sB'; |
38 | 39 | ||
40 | collectd_flush(ident_from_args($obj->args)); | ||
41 | |||
39 | $obj->rrd_graph(); | 42 | $obj->rrd_graph(); |
40 | 43 | ||
41 | ?> | 44 | ?> |
diff --git a/plugin/disk.php b/plugin/disk.php index 0c18016..45b5fde 100644 --- a/plugin/disk.php +++ b/plugin/disk.php | |||
@@ -4,6 +4,7 @@ | |||
4 | 4 | ||
5 | require_once 'conf/common.inc.php'; | 5 | require_once 'conf/common.inc.php'; |
6 | require_once 'type/GenericIO.class.php'; | 6 | require_once 'type/GenericIO.class.php'; |
7 | require_once 'inc/collectd.inc.php'; | ||
7 | 8 | ||
8 | ## LAYOUT | 9 | ## LAYOUT |
9 | # disk-XXXX/ | 10 | # disk-XXXX/ |
@@ -57,6 +58,8 @@ switch($type) { | |||
57 | break; | 58 | break; |
58 | } | 59 | } |
59 | 60 | ||
61 | collectd_flush(ident_from_args($obj->args)); | ||
62 | |||
60 | $obj->rrd_graph(); | 63 | $obj->rrd_graph(); |
61 | 64 | ||
62 | ?> | 65 | ?> |
diff --git a/plugin/entropy.php b/plugin/entropy.php index dcfbcc8..a4379ab 100644 --- a/plugin/entropy.php +++ b/plugin/entropy.php | |||
@@ -4,6 +4,7 @@ | |||
4 | 4 | ||
5 | require_once 'conf/common.inc.php'; | 5 | require_once 'conf/common.inc.php'; |
6 | require_once 'type/Default.class.php'; | 6 | require_once 'type/Default.class.php'; |
7 | require_once 'inc/collectd.inc.php'; | ||
7 | 8 | ||
8 | ## LAYOUT | 9 | ## LAYOUT |
9 | # entropy/entropy.rrd | 10 | # entropy/entropy.rrd |
@@ -31,6 +32,8 @@ $obj->rrd_title = "Available entropy on $host"; | |||
31 | $obj->rrd_vertical = 'Bits'; | 32 | $obj->rrd_vertical = 'Bits'; |
32 | $obj->rrd_format = '%4.0lf'; | 33 | $obj->rrd_format = '%4.0lf'; |
33 | 34 | ||
35 | collectd_flush(ident_from_args($obj->args)); | ||
36 | |||
34 | $obj->rrd_graph(); | 37 | $obj->rrd_graph(); |
35 | 38 | ||
36 | ?> | 39 | ?> |
diff --git a/plugin/interface.php b/plugin/interface.php index a3fca3d..45e3cf1 100644 --- a/plugin/interface.php +++ b/plugin/interface.php | |||
@@ -4,6 +4,7 @@ | |||
4 | 4 | ||
5 | require_once 'conf/common.inc.php'; | 5 | require_once 'conf/common.inc.php'; |
6 | require_once 'type/GenericIO.class.php'; | 6 | require_once 'type/GenericIO.class.php'; |
7 | require_once 'inc/collectd.inc.php'; | ||
7 | 8 | ||
8 | # LAYOUT | 9 | # LAYOUT |
9 | # interface/ | 10 | # interface/ |
@@ -48,6 +49,8 @@ switch($type) { | |||
48 | break; | 49 | break; |
49 | } | 50 | } |
50 | 51 | ||
52 | collectd_flush(ident_from_args($obj->args)); | ||
53 | |||
51 | $obj->rrd_graph(); | 54 | $obj->rrd_graph(); |
52 | 55 | ||
53 | ?> | 56 | ?> |
diff --git a/plugin/irq.php b/plugin/irq.php index e442142..95bddcf 100644 --- a/plugin/irq.php +++ b/plugin/irq.php | |||
@@ -34,6 +34,8 @@ $obj->rrd_title = "Interrupts on $host"; | |||
34 | $obj->rrd_vertical = 'IRQs/s'; | 34 | $obj->rrd_vertical = 'IRQs/s'; |
35 | $obj->rrd_format = '%6.1lf'; | 35 | $obj->rrd_format = '%6.1lf'; |
36 | 36 | ||
37 | collectd_flush(ident_from_args($obj->args)); | ||
38 | |||
37 | $obj->rrd_graph(); | 39 | $obj->rrd_graph(); |
38 | 40 | ||
39 | ?> | 41 | ?> |
diff --git a/plugin/load.php b/plugin/load.php index 0246edc..83fcf19 100644 --- a/plugin/load.php +++ b/plugin/load.php | |||
@@ -4,6 +4,7 @@ | |||
4 | 4 | ||
5 | require_once 'conf/common.inc.php'; | 5 | require_once 'conf/common.inc.php'; |
6 | require_once 'type/Default.class.php'; | 6 | require_once 'type/Default.class.php'; |
7 | require_once 'inc/collectd.inc.php'; | ||
7 | 8 | ||
8 | ## LAYOUT | 9 | ## LAYOUT |
9 | # load/load.rrd | 10 | # load/load.rrd |
@@ -35,6 +36,8 @@ $obj->rrd_title = "System load on $host"; | |||
35 | $obj->rrd_vertical = 'System load'; | 36 | $obj->rrd_vertical = 'System load'; |
36 | $obj->rrd_format = '%.2lf'; | 37 | $obj->rrd_format = '%.2lf'; |
37 | 38 | ||
39 | collectd_flush(ident_from_args($obj->args)); | ||
40 | |||
38 | $obj->rrd_graph(); | 41 | $obj->rrd_graph(); |
39 | 42 | ||
40 | ?> | 43 | ?> |
diff --git a/plugin/memory.php b/plugin/memory.php index 6cef5a7..7b0e47b 100644 --- a/plugin/memory.php +++ b/plugin/memory.php | |||
@@ -47,6 +47,8 @@ $obj->rrd_title = "Physical memory utilization on $host"; | |||
47 | $obj->rrd_vertical = 'Bytes'; | 47 | $obj->rrd_vertical = 'Bytes'; |
48 | $obj->rrd_format = '%5.1lf%s'; | 48 | $obj->rrd_format = '%5.1lf%s'; |
49 | 49 | ||
50 | collectd_flush(ident_from_args($obj->args)); | ||
51 | |||
50 | $obj->rrd_graph(); | 52 | $obj->rrd_graph(); |
51 | 53 | ||
52 | ?> | 54 | ?> |
diff --git a/plugin/processes.php b/plugin/processes.php index c741a02..5fc0463 100644 --- a/plugin/processes.php +++ b/plugin/processes.php | |||
@@ -52,6 +52,8 @@ $obj->rrd_title = "Processes on $host"; | |||
52 | $obj->rrd_vertical = 'Processes'; | 52 | $obj->rrd_vertical = 'Processes'; |
53 | $obj->rrd_format = '%5.1lf%s'; | 53 | $obj->rrd_format = '%5.1lf%s'; |
54 | 54 | ||
55 | collectd_flush(ident_from_args($obj->args)); | ||
56 | |||
55 | $obj->rrd_graph(); | 57 | $obj->rrd_graph(); |
56 | 58 | ||
57 | ?> | 59 | ?> |
diff --git a/plugin/sensors.php b/plugin/sensors.php index b1b15cf..ddcf521 100644 --- a/plugin/sensors.php +++ b/plugin/sensors.php | |||
@@ -52,6 +52,8 @@ switch($type) { | |||
52 | break; | 52 | break; |
53 | } | 53 | } |
54 | 54 | ||
55 | collectd_flush(ident_from_args($obj->args)); | ||
56 | |||
55 | $obj->rrd_graph(); | 57 | $obj->rrd_graph(); |
56 | 58 | ||
57 | ?> | 59 | ?> |
diff --git a/plugin/swap.php b/plugin/swap.php index 7160ec3..18c6242 100644 --- a/plugin/swap.php +++ b/plugin/swap.php | |||
@@ -44,6 +44,8 @@ $obj->rrd_title = "Swap utilization on $host"; | |||
44 | $obj->rrd_vertical = 'Bytes'; | 44 | $obj->rrd_vertical = 'Bytes'; |
45 | $obj->rrd_format = '%5.1lf%s'; | 45 | $obj->rrd_format = '%5.1lf%s'; |
46 | 46 | ||
47 | collectd_flush(ident_from_args($obj->args)); | ||
48 | |||
47 | $obj->rrd_graph(); | 49 | $obj->rrd_graph(); |
48 | 50 | ||
49 | ?> | 51 | ?> |
diff --git a/plugin/users.php b/plugin/users.php index 00874a2..1555927 100644 --- a/plugin/users.php +++ b/plugin/users.php | |||
@@ -4,6 +4,7 @@ | |||
4 | 4 | ||
5 | require_once 'conf/common.inc.php'; | 5 | require_once 'conf/common.inc.php'; |
6 | require_once 'type/Default.class.php'; | 6 | require_once 'type/Default.class.php'; |
7 | require_once 'inc/collectd.inc.php'; | ||
7 | 8 | ||
8 | ## LAYOUT | 9 | ## LAYOUT |
9 | # users/users.rrd | 10 | # users/users.rrd |
@@ -31,6 +32,8 @@ $obj->rrd_title = "Users on $host"; | |||
31 | $obj->rrd_vertical = 'Users'; | 32 | $obj->rrd_vertical = 'Users'; |
32 | $obj->rrd_format = '%.1lf'; | 33 | $obj->rrd_format = '%.1lf'; |
33 | 34 | ||
35 | collectd_flush(ident_from_args($obj->args)); | ||
36 | |||
34 | $obj->rrd_graph(); | 37 | $obj->rrd_graph(); |
35 | 38 | ||
36 | ?> | 39 | ?> |