package PerlDaemon::RunModules; use Time::HiRes qw(gettimeofday tv_interval); sub new ($$) { my ($class, $conf) = @_; my $self = bless { conf => $conf }, $class; my $modulesdir = $conf->{'daemon.modules.dir'}; my $logger = $conf->{logger}; my %loadedmodules; my %scheduler; if (-d $modulesdir) { $logger->logmsg("Loading modules from $modulesdir"); for my $module (<$modulesdir/*.pm>) { $logger->logmsg("Loading $module"); require $module; } for my $name (grep /PerlDaemonModules/, keys %INC) { $name =~ s#.*(PerlDaemonModules)/(.*)\.pm$#$1::$2#; $logger->logmsg("Creating module instance of $name"); # TODO: Add eval catching jost un case for errors $loadedmodules{$name} = eval "${name}->new(\$conf)"; $scheduler{$name}{lastrun} = [0,0]; $scheduler{$name}{interval} = $conf->{'modules.runinterval'}; } } else { $logger->warn("Modules dir $modulesdir does not exist!"); } $conf->{modules} = \%loadedmodules; $conf->{scheduler} = \%scheduler; return $self; } sub do ($) { my $self = shift; my $conf = $self->{conf}; my $logger = $conf->{logger}; my $modules = $conf->{modules}; my $scheduler = $conf->{scheduler}; unless (%$modules) { $logger->warn("No modules are loaded!"); } else { while (my ($k, $v) = each %$modules) { my $now = [gettimeofday]; $logger->logmsg(tv_interval($now, $scheduler->{$k}{lastrun})); $logger->logmsg("Triggering $k"); $scheduler->{$k}{lastrun} = $now; #$v->do(); } } } 1;