# collectd - Collectd.pm
-# Copyright (C) 2007 Sebastian Harl
+# Copyright (C) 2007, 2008 Sebastian Harl
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
plugin_register
plugin_unregister
plugin_dispatch_values
+ plugin_flush
+ plugin_flush_one
+ plugin_flush_all
+ plugin_dispatch_notification
plugin_log
) ],
'types' => [ qw(
TYPE_SHUTDOWN
TYPE_LOG
TYPE_NOTIF
+ TYPE_FLUSH
TYPE_DATASET
) ],
'ds_types' => [ qw(
foreach keys %EXPORT_TAGS;
}
+# global variables
+our $hostname_g;
+our $interval_g;
+
Exporter::export_ok_tags ('all');
my @plugins : shared = ();
TYPE_WRITE, "write",
TYPE_SHUTDOWN, "shutdown",
TYPE_LOG, "log",
- TYPE_NOTIF, "notify"
+ TYPE_NOTIF, "notify",
+ TYPE_FLUSH, "flush"
);
foreach my $type (keys %types) {
my $status = 0;
if ($p->{'wait_left'} > 0) {
- # TODO: use interval_g
- $p->{'wait_left'} -= 10;
+ $p->{'wait_left'} -= $interval_g;
}
next if ($p->{'wait_left'} > 0);
if ($status) {
$p->{'wait_left'} = 0;
- $p->{'wait_time'} = 10;
+ $p->{'wait_time'} = $interval_g;
}
elsif (TYPE_READ == $type) {
- WARNING ("${plugin}->read() failed with status $status. "
- . "Will suspend it for $p->{'wait_left'} seconds.");
+ if ($p->{'wait_time'} < $interval_g) {
+ $p->{'wait_time'} = $interval_g;
+ }
$p->{'wait_left'} = $p->{'wait_time'};
$p->{'wait_time'} *= 2;
if ($p->{'wait_time'} > 86400) {
$p->{'wait_time'} = 86400;
}
+
+ WARNING ("${plugin}->read() failed with status $status. "
+ . "Will suspend it for $p->{'wait_left'} seconds.");
}
elsif (TYPE_INIT == $type) {
ERROR ("${plugin}->init() failed with status $status. "
my %p : shared;
- if ($data !~ m/^$pkg/) {
+ if ($data !~ m/^$pkg\:\:/) {
$data = $pkg . "::" . $data;
}
- # TODO: make interval_g available at configuration time
%p = (
- wait_time => 10,
+ wait_time => $interval_g,
wait_left => 0,
cb_name => $data,
);
}
}
+sub plugin_flush {
+ my %args = @_;
+
+ my $timeout = -1;
+
+ DEBUG ("Collectd::plugin_flush:"
+ . (defined ($args{'timeout'}) ? " timeout = $args{'timeout'}" : "")
+ . (defined ($args{'plugins'}) ? " plugins = $args{'plugins'}" : ""));
+
+ if (defined ($args{'timeout'}) && ($args{'timeout'} > 0)) {
+ $timeout = $args{'timeout'};
+ }
+
+ if (! defined $args{'plugins'}) {
+ plugin_flush_all ($timeout);
+ }
+ else {
+ if ("ARRAY" eq ref ($args{'plugins'})) {
+ foreach my $plugin (@{$args{'plugins'}}) {
+ plugin_flush_one ($timeout, $plugin);
+ }
+ }
+ else {
+ plugin_flush_one ($timeout, $args{'plugins'});
+ }
+ }
+}
+
1;
# vim: set sw=4 ts=4 tw=78 noexpandtab :