[collectd] [PATCH] Collectd::Unixsock, cussh.pl: Added support for the "flush" command.

Sebastian Harl sh at tokkee.org
Thu Feb 28 18:33:06 CET 2008


Signed-off-by: Sebastian Harl <sh at tokkee.org>
---

This is a replacement for my previous patch. It now supports the changed
interface of the flush command.

---
 bindings/perl/Collectd/Unixsock.pm |   57 ++++++++++++++++++++++++++++++++
 contrib/cussh.pl                   |   63 +++++++++++++++++++++++++++++++----
 2 files changed, 112 insertions(+), 8 deletions(-)

diff --git a/bindings/perl/Collectd/Unixsock.pm b/bindings/perl/Collectd/Unixsock.pm
index d3b77d0..3b6fa5d 100644
--- a/bindings/perl/Collectd/Unixsock.pm
+++ b/bindings/perl/Collectd/Unixsock.pm
@@ -400,6 +400,63 @@ sub putnotif
 	return;
 } # putnotif
 
+=item I<$obj>-E<gt>B<flush> (B<timeout> =E<gt> I<$timeout>, B<plugins> =E<gt> [...]);
+
+Flush cached data.
+
+Valid options are:
+
+=over 4
+
+=item B<timeout>
+
+If this option is specified, only data older than I<$timeout> seconds is
+flushed.
+
+=item B<plugins>
+
+If this option is specified, only the selected plugins will be flushed. 
+
+=back
+
+=cut
+
+sub flush
+{
+	my $obj  = shift;
+	my %args = @_;
+
+	my $fh = $obj->{'sock'} or confess;
+
+	my $status = 0;
+	my $msg    = "FLUSH";
+
+	if ($args{'timeout'})
+	{
+		$msg .= " timeout=" . $args{'timeout'};
+	}
+
+	if ($args{'plugins'})
+	{
+		foreach my $plugin (@{$args{'plugins'}})
+		{
+			$msg .= " plugin=" . $plugin;
+		}
+	}
+
+	$msg .= "\n";
+
+	send ($fh, $msg, 0) or confess ("send: $!");
+	$msg = undef;
+	recv ($fh, $msg, 1024, 0) or confess ("recv: $!");
+
+	($status, $msg) = split (' ', $msg, 2);
+	return (1) if ($status == 0);
+
+	$obj->{'error'} = $msg;
+	return;
+}
+
 =item I<$obj>-E<gt>destroy ();
 
 Closes the socket before the object is destroyed. This function is also
diff --git a/contrib/cussh.pl b/contrib/cussh.pl
index 65c634e..c19c3f3 100755
--- a/contrib/cussh.pl
+++ b/contrib/cussh.pl
@@ -56,12 +56,18 @@ use Collectd::Unixsock();
 	my $path = $ARGV[0] || "/var/run/collectd-unixsock";
 	my $sock = Collectd::Unixsock->new($path);
 
+	my $cmds = {
+		PUTVAL => \&putval,
+		GETVAL => \&getval,
+		FLUSH  => \&flush,
+	};
+
 	if (! $sock) {
 		print STDERR "Unable to connect to $path!\n";
 		exit 1;
 	}
 
-	print "cussh version 0.1, Copyright (C) 2007 Sebastian Harl\n"
+	print "cussh version 0.2, Copyright (C) 2007 Sebastian Harl\n"
 		. "cussh comes with ABSOLUTELY NO WARRANTY. This is free software,\n"
 		. "and you are welcome to redistribute it under certain conditions.\n"
 		. "See the GNU General Public License 2 for more details.\n\n";
@@ -79,11 +85,8 @@ use Collectd::Unixsock();
 		$cmd = uc $cmd;
 
 		my $f = undef;
-		if ($cmd eq "PUTVAL") {
-			$f = \&putval;
-		}
-		elsif ($cmd eq "GETVAL") {
-			$f = \&getval;
+		if (defined $cmds->{$cmd}) {
+			$f = $cmds->{$cmd};
 		}
 		else {
 			print STDERR "ERROR: Unknown command $cmd!\n";
@@ -138,7 +141,10 @@ sub putval {
 
 	my $id = getid(\$line);
 
-	return if (! $id);
+	if (! $id) {
+		print STDERR $sock->{'error'} . $/;
+		return;
+	}
 
 	my ($time, @values) = split m/:/, $line;
 	return $sock->putval(%$id, $time, \@values);
@@ -150,7 +156,10 @@ sub getval {
 
 	my $id = getid(\$line);
 
-	return if (! $id);
+	if (! $id) {
+		print STDERR $sock->{'error'} . $/;
+		return;
+	}
 
 	my $vals = $sock->getval(%$id);
 
@@ -162,6 +171,44 @@ sub getval {
 	return 1;
 }
 
+sub flush {
+	my $sock = shift || return;
+	my $line = shift;
+
+	my $res;
+
+	if (! $line) {
+		$res = $sock->flush();
+	}
+	else {
+		my %args = ();
+
+		foreach my $i (split m/ /, $line) {
+			my ($option, $value) = $i =~ m/^([^=]+)=(.+)$/;
+			next if (! ($option && $value));
+
+			if ($option eq "plugin") {
+				push @{$args{"plugins"}}, $value;
+			}
+			elsif ($option eq "timeout") {
+				$args{"timeout"} = $value;
+			}
+			else {
+				print STDERR "Invalid option \"$option\".\n";
+				return;
+			}
+		}
+
+		$res = $sock->flush(%args);
+	}
+
+	if (! $res) {
+		print STDERR $sock->{'error'} . $/;
+		return;
+	}
+	return 1;
+}
+
 =head1 SEE ALSO
 
 L<collectd(1)>, L<collectd-unisock(5)>
-- 
1.5.4.3.325.g6d216

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://mailman.verplant.org/pipermail/collectd/attachments/20080228/c193f990/attachment.pgp 


More information about the collectd mailing list