diff --git a/docs/upgrades/upgrade_6.8.5-6.9.0.pl b/docs/upgrades/upgrade_6.8.5-6.9.0.pl index b530e386c..8d977aee4 100644 --- a/docs/upgrades/upgrade_6.8.5-6.9.0.pl +++ b/docs/upgrades/upgrade_6.8.5-6.9.0.pl @@ -44,7 +44,7 @@ sub addWorkflow { taskId varchar(22) binary not null primary key, enabled int not null default 0, runOnce int not null default 0, - minuteofHour varchar(25) not null default '0', + minuteOfHour varchar(25) not null default '0', hourOfDay varchar(25) not null default '*', dayOfMonth varchar(25) not null default '*', monthOfYear varchar(25) not null default '*', diff --git a/lib/Spectre/Cron.pm b/lib/Spectre/Cron.pm index 3046c1230..d817d2a1f 100644 --- a/lib/Spectre/Cron.pm +++ b/lib/Spectre/Cron.pm @@ -19,6 +19,8 @@ use DateTime; use DateTime::Cron::Simple; use POE; use WebGUI::Session; +use WebGUI::Workflow::Cron; +use WebGUI::Workflow::Instance; #------------------------------------------------------------------- @@ -82,7 +84,12 @@ sub addJob { jobId=>$job->{jobId}, config=>$config, schedule=>join(" ", $job->{minuteOfHour}, $job->{hourOfDay}, $job->{dayOfMonth}, $job->{monthOfYear}, $job->{dayOfWeek}), - workflowId=>$job->{workflowId} + runOnce=>$job->{runOnce}, + workflowId=>$job->{workflowId}, + className=>$job->{className}, + methodName=>$job->{methodName}, + parameters=>$job->{parameters}, + priority=>$job->{priority} } } @@ -107,7 +114,15 @@ sub checkSchedule { my ($kernel, $self, $job, $now) = @_[KERNEL, OBJECT, ARG0, ARG1]; my $cron = DateTime::Cron::Simple->new($job->{schedule}); if ($cron->validate_time($now)) { - # kick off an event here once we know what that api looks like + my $session = WebGUI::Session->open($self->{_config}->getWebguiRoot, $job->{config}); + my $instance = WebGUI::Workflow::Instance->create($session, { + workflowId=>$job->{workflowId}, + className=>$job->{className}, + methodName=>$job->{methodName}, + parameters=>$job->{parameters}, + priority=>$job->{priority} + }); + $session->close; } } @@ -125,6 +140,7 @@ sub checkSchedules { foreach my $jobId (keys %{$self->{_jobs}}) { $kernel->yield("checkSchedule", $self->{_jobs}{$jobId}, $now) } + $kernel->delay_set("checkSchedules",60); } diff --git a/lib/WebGUI/Workflow/Instance.pm b/lib/WebGUI/Workflow/Instance.pm index 794d35954..7c1027608 100644 --- a/lib/WebGUI/Workflow/Instance.pm +++ b/lib/WebGUI/Workflow/Instance.pm @@ -171,8 +171,8 @@ sub run { return "complete" unless (defined $activity); my $object = {}; my $class = $self->get("className"); - my $method = $self->get("method"); - my $params = $self->get("params"); + my $method = $self->get("methodName"); + my $params = $self->get("parameters"); if ($class && $method) { $params = eval($params); if ($@) { @@ -224,7 +224,7 @@ The id of the workflow we're executing. The classname of an object that will be created to pass into the workflow. -=head4 method +=head4 methodName The method name of the constructor for className. @@ -244,7 +244,7 @@ sub set { $self->{_data}{priority} = $properties->{priority} || $self->{_data}{priority} || 2; $self->{_data}{workflowId} = $properties->{workflowId} || $self->{_data}{workflowId}; $self->{_data}{className} = (exists $properties->{className}) ? $properties->{className} : $self->{_data}{className}; - $self->{_data}{method} = (exists $properties->{method}) ? $properties->{method} : $self->{_data}{method}; + $self->{_data}{methodName} = (exists $properties->{methodName}) ? $properties->{methodName} : $self->{_data}{methodName}; $self->{_data}{parameters} = (exists $properties->{parameters}) ? $properties->{parameters} : $self->{_data}{parameters}; $self->{_data}{currentActivityId} = (exists $properties->{currentActivityId}) ? $properties->{currentActivityId} : $self->{_data}{currentActivityId}; $self->{_data}{lastUpdate} = time();