[collectd] how to create more graphs wwith one perl script

Frank Kellner Frank.Kellner at gmx.at
Sun Nov 22 17:06:47 CET 2009


Hello,

 

at first please excuse my bad english.

 

I have create an perl script to receive four values.

Now I want to create four single rrd files, but I don't now how.

 

When I start collectd with the option -T I get this message

 

LOG: 4 - perl: Collectd::plugin_dispatch_values with two arguments is
deprecated - pass the type through values->{type}.

 

At this time I get only one rrd-file with the four values.

 

What is the right way to get four single rrd-files?

 

Can someone help me?

Thanks,

Frank

 

This is my config in collectd.conf:

<Plugin perl>

        IncludeDir "/home/frank"

        BaseName "Collectd::Plugins"

        LoadPlugin "Energymeter"

</Plugin>

 

 

And this is my perl.script:

 

#!/usr/bin/perl -w

 

use IO::Socket;

use strict;

use warnings;

 

package Collectd::Plugins::Energymeter;

 

use Collectd qw( :all );

 

my $dataset =

 [

   {

     name => 'energy1_ds',

     type => Collectd::DS_TYPE_GAUGE,

     min  => 0,

     max  => 65536.0,

   },

   {

     name => 'energy2_ds',

     type => Collectd::DS_TYPE_GAUGE,

     min  => 0,

     max  => 65536.0,

   },

   {

     name => 'energy3_ds',

     type => Collectd::DS_TYPE_GAUGE,

     min  => 0,

     max  => 65536.0,

   },

   {

     name => 'energy4_ds',

     type => Collectd::DS_TYPE_GAUGE,

     min  => 0,

     max  => 65536.0,

   }

 ];

 

 

# This code is executed after loading the plugin to register it with
collectd.

Collectd::plugin_register (Collectd::TYPE_LOG, 'Energymeter', 'my_log' );

Collectd::plugin_register (Collectd::TYPE_DATASET, 'Energymeter', $dataset);

Collectd::plugin_register (Collectd::TYPE_INIT, 'Energymeter', 'my_init' );

Collectd::plugin_register (Collectd::TYPE_READ, 'Energymeter', 'my_read' );

Collectd::plugin_register (Collectd::TYPE_WRITE, 'Energymeter', 'my_write'
);

Collectd::plugin_register (Collectd::TYPE_SHUTDOWN, 'Energymeter',
'my_shutdown' );

 

 

 

# This function is called once upon startup to initialize the plugin.

 

sub my_init

{

        # open sockets, initialize data structures, ...

 

        # A false return value indicates an error and causes the plugin to
be

        # disabled.

        return 1;

} # my_init ()

 

 

 # This function is called in regular intervals to collectd the data.

 

sub my_read

{

    my $vl = {};

    my $socket = '';

 

    my $ip_address  = "192.168.210.10";

 

    my $power1 = 0;

    my $power2 = 0;

    my $power3 = 0;

    my $power4 = 0;

  

    $socket = new IO::Socket::INET (

       PeerAddr => $ip_address,

       PeerPort => 3673,

       Type => 1,

       Proto    => getprotobyname('tcp'),

    );

    die "Energymeter: Unable to open connection: $!\n"

       unless defined $socket;

 

    $socket->autoflush(1);

    print $socket "get_value";

 

    #while (<$socket>)();

 

    my $data = <$socket>;

 

    my @tokens = split(/ /,$data);

 

    my @local_temp = split(/:/,$tokens[0]);

    $power1 = $local_temp[1];

 

    @local_temp = split(/:/,$tokens[1]);

    $power2 = $local_temp[1];

 

    @local_temp = split(/:/,$tokens[2]);

    $power3 = $local_temp[1];

 

    @local_temp = split(/:/,$tokens[3]);

    chop($local_temp[1]);

    

    $power4 = $local_temp[1];

 

    $vl->{'values'} = [ $power1, $power2, $power3, $power4 ];

    $vl->{'plugin'} = 'Energymeter';

 

    Collectd::plugin_dispatch_values ( 'Energymeter', $vl );

 

    close $socket;

 

    return 1;

}

 

# This function is called after values have been dispatched to collectd.

sub my_write

{

        my $type = shift;

        my $ds   = shift;

        my $vl   = shift;

 

        if (scalar (@$ds) != scalar (@{$vl->{'values'}})) {

                Collectd::plugin_log (Collectd::LOG_WARNING,

                        "DS number does not match values length");

                return;

        }

 

        for (my $i = 0; $i < scalar (@$ds); ++$i) {

                # do the magic to output the data

                print "$vl->{'host'}: $vl->{'plugin'}: ";

 

                if (defined $vl->{'plugin_instance'}) {

                        print "$vl->{'plugin_instance'}: ";

                }

 

                print "$type: ";

 

                if (defined $vl->{'type_instance'}) {

                        print "$vl->{'type_instance'}: ";

                }

 

                print "$vl->{'values'}->[$i]\n";

        }

        return 1;

} # my_write()

 

# This function is called before shutting down collectd.

sub my_shutdown

{

        # close sockets, ...

        return 1;

} # my_shutdown ()

 

# This function is called when plugin_log () has been used.

sub my_log

{

        my $level = shift;

        my $msg   = shift;

 

        print "LOG: $level - $msg\n";

        return 1;

} # my_log ()

 

return 1;

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.verplant.org/pipermail/collectd/attachments/20091122/d29c5d0d/attachment.htm 


More information about the collectd mailing list