Whenever you run: smokeinfo /etc/smokeping/config , smokeping will load a lot of all configurations into memory, this takes a lot of time. Since we don’t change our configuration often, so why don’t we cache the configuration to a file and smokeping will just load it from a file. The script below is a modified version, it save about 3s loading time – i have about 7000 hosts to monitor , 3s is not a bad number. There are other things we can save time.

package Smokeping::Info;
use warnings;
use strict;
use RRDs;
use Smokeping;
use Carp;
use Data::Dumper;

sub new {

    my $this   = shift;
    my $class   = ref($this) || $this;
    my $self = { cfg_file => shift };
    bless $self, $class;

    my $smokeping_cfg_cache_file = "/var/lib/smokeping/smokeping_config_cache3354";
    if(  -e $smokeping_cfg_cache_file)
    {
       open FILE,  "<$smokeping_cfg_cache_file";
       my $data = join "", <FILE>;
       close FILE;
       no strict 'vars';
       $old_data = eval $data;
      $self->{cfg_hash}  = $old_data;
    }else
     {
          my $parser = Smokeping::get_parser();
         $self->{cfg_hash} = $parser->parse( $self->{cfg_file} )
          or croak "ERROR reading config file $parser->{err}";
         open  my $fh, '>', $smokeping_cfg_cache_file;
         print $fh Dumper($self->{cfg_hash});
        close $fh;

    }
    $self->{probe_hash} = Smokeping::load_probes $self->{cfg_hash};



    return $self;
}