From 5a9db96a2b8cd89a62947049d35692d45689155b Mon Sep 17 00:00:00 2001 From: Pim van den Berg Date: Sat, 22 Mar 2014 15:29:28 +0100 Subject: add rrdcached flush support --- inc/collectd.inc.php | 75 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 44 insertions(+), 31 deletions(-) (limited to 'inc') diff --git a/inc/collectd.inc.php b/inc/collectd.inc.php index 327b5e6..e364180 100644 --- a/inc/collectd.inc.php +++ b/inc/collectd.inc.php @@ -235,6 +235,28 @@ function build_url($base, $items, $s=NULL) { return $base; } +function socket_cmd($socket, $cmd) { + $r = fwrite($socket, $cmd, strlen($cmd)); + if ($r === false || $r != strlen($cmd)) { + error_log(sprintf('ERROR: Failed to write full command to unix-socket: %d out of %d written', + $r === false ? -1 : $r, strlen($cmd))); + return FALSE; + } + + $resp = fgets($socket,128); + if ($resp === false) { + error_log(sprintf('ERROR: Failed to read response from collectd for command: %s', + trim($cmd))); + return FALSE; + } + + $n = (int)$resp; + while ($n-- > 0) + fgets($socket,128); + + return TRUE; +} + # tell collectd to FLUSH all data of the identifier(s) function collectd_flush($identifier) { global $CONFIG; @@ -246,43 +268,34 @@ function collectd_flush($identifier) { !(is_string($identifier) || is_array($identifier))) return FALSE; + if (!is_array($identifier)) + $identifier = array($identifier); + $u_errno = 0; $u_errmsg = ''; - if ($socket = @fsockopen($CONFIG['socket'], 0, $u_errno, $u_errmsg)) { - $cmd = 'FLUSH plugin=rrdtool'; - if (is_array($identifier)) { - foreach ($identifier as $val) - $cmd .= sprintf(' identifier="%s"', $val); - } else - $cmd .= sprintf(' identifier="%s"', $identifier); - $cmd .= "\n"; - - $r = fwrite($socket, $cmd, strlen($cmd)); - if ($r === false || $r != strlen($cmd)) { - error_log(sprintf('ERROR: Failed to write full command to unix-socket: %d out of %d written', - $r === false ? -1 : $r, strlen($cmd))); - return FALSE; - } + if (! $socket = @fsockopen($CONFIG['socket'], 0, $u_errno, $u_errmsg)) { + error_log(sprintf('ERROR: Failed to open unix-socket to %s (%d: %s)', + $CONFIG['socket'], $u_errno, $u_errmsg)); + return FALSE; + } - $resp = fgets($socket); - if ($resp === false) { - error_log(sprintf('ERROR: Failed to read response from collectd for command: %s', - trim($cmd))); - return FALSE; + if ($CONFIG['flush_type'] == 'collectd'){ + $cmd = 'FLUSH'; + foreach ($identifier as $val) + $cmd .= sprintf(' identifier="%s"', $val); + $cmd .= "\n"; + socket_cmd($socket, $cmd); + } + elseif ($CONFIG['flush_type'] == 'rrdcached') { + foreach ($identifier as $val) { + $cmd = sprintf("FLUSH %s.rrd\n", $val); + socket_cmd($socket, $cmd); } + } - $n = (int)$resp; - while ($n-- > 0) - fgets($socket); - - fclose($socket); + fclose($socket); - return TRUE; - } else { - error_log(sprintf('ERROR: Failed to open unix-socket to collectd: %d: %s', - $u_errno, $u_errmsg)); - return FALSE; - } + return TRUE; } ?> -- cgit v1.1