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 | ?> |
