fixes and log messages

This commit is contained in:
Oliver Gorwits
2013-03-26 23:39:23 +00:00
parent cfcb7a956f
commit 6e527629a2
2 changed files with 20 additions and 10 deletions

View File

@@ -12,6 +12,7 @@ use namespace::clean;
my $jobactions = {
map {$_ => undef} qw/
/
# saveconfigs
# discoverall
# refresh
# macwalk
@@ -31,11 +32,14 @@ sub worker_begin {
my $config = setting('housekeeping')->{$a};
# accept either single crontab format, or individual time fields
my $cron = Algorithm::Cron->new(%{
ref {} eq ref $config->{when}
? $config->{when}
: {crontab => $config->{when}}
});
my $cron = Algorithm::Cron->new(
base => 'local',
%{
(ref {} eq ref $config->{when})
? $config->{when}
: {crontab => $config->{when}}
}
);
$jobactions->{$a} = $config;
$jobactions->{$a}->{when} = $cron;
@@ -49,10 +53,11 @@ sub worker_body {
while (1) {
# sleep until some point in the next minute
my $naptime = 60 - (time % 60) + int(rand(45));
debug "scheduler ($wid): sleeping for $naptime seconds";
debug "sched ($wid): sleeping for $naptime seconds";
sleep $naptime;
my $win_start = time - (time % 60);
# NB next_time() returns the next *after* win_start
my $win_start = time - (time % 60) - 1;
my $win_end = $win_start + 60;
# if any job is due, add it to the queue
@@ -61,19 +66,24 @@ sub worker_body {
my $sched = $jobactions->{$a};
# next occurence of job must be in this minute's window
next unless $sched->{when}->next_time($win_start) < $win_end;
debug sprintf "sched ($wid): $a: win_start: %s, win_end: %s, next: %s",
$win_start, $win_end, $sched->{when}->next_time($win_start);
next unless $sched->{when}->next_time($win_start) <= $win_end;
# queue it!
# due to a table constraint, this will (intentionally) fail if a
# similar job is already queued.
try {
debug "scheduler ($wid): queueing $a job";
debug "sched ($wid): queueing $a job";
schema('netdisco')->resultset('Admin')->create({
action => $a,
device => ($sched->{device} || undef),
subaction => ($sched->{param} || undef),
status => 'queued',
});
}
catch {
debug "sched ($wid): action $a was not queued (dupe?)";
};
}
}