more spectre goodness, it almost runs!!
This commit is contained in:
parent
9ff0794746
commit
d9a80d9f6f
6 changed files with 78 additions and 43 deletions
|
|
@ -18,6 +18,8 @@ use strict;
|
|||
use POE;
|
||||
use POE::Component::IKC::Server;
|
||||
use POE::Component::IKC::Specifier;
|
||||
use Spectre::Cron;
|
||||
use Spectre::Workflow;
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
|
|
@ -33,7 +35,6 @@ sub _start {
|
|||
my $serviceName = "admin";
|
||||
$kernel->alias_set($serviceName);
|
||||
$kernel->call( IKC => publish => $serviceName, $publicEvents );
|
||||
my $configs = WebGUI::Config->readAllConfigs($self->{_webguiRoot});
|
||||
print "OK\n";
|
||||
}
|
||||
|
||||
|
|
@ -55,31 +56,31 @@ sub _stop {
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 new ( webguiRoot )
|
||||
=head2 new ( config )
|
||||
|
||||
Constructor.
|
||||
|
||||
=head3 webguiRoot
|
||||
=head3 config
|
||||
|
||||
The path to the root of the WebGUI installation.
|
||||
A WebGUI::Config object that represents the spectre.conf file.
|
||||
|
||||
=cut
|
||||
|
||||
sub new {
|
||||
my $class = shift;
|
||||
my $webguiRoot = shift;
|
||||
my $self = {_webguiRoot=>$webguiRoot};
|
||||
my $config = shift;
|
||||
my $self = {_config=>$config};
|
||||
bless $self, $class;
|
||||
create_ikc_server(
|
||||
port => 32133,
|
||||
port => $config->get("port"),
|
||||
name => 'Spectre',
|
||||
);
|
||||
POE::Session->create(
|
||||
object_states => [ $self => {_start=>"_start", _stop=>"_stop", "shutdown"=>"_stop"} ],
|
||||
args=>[["shutdown"]]
|
||||
);
|
||||
$self->{_cron} = Spectre::Cron->new($webguiRoot);
|
||||
$self->{_workflow} = Spectre::Workflow->new($webguiRoot);
|
||||
$self->{_cron} = Spectre::Cron->new($config);
|
||||
$self->{_workflow} = Spectre::Workflow->new($config);
|
||||
POE::Kernel->run();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ sub _start {
|
|||
my $serviceName = "scheduler";
|
||||
$kernel->alias_set($serviceName);
|
||||
$kernel->call( IKC => publish => $serviceName, $publicEvents );
|
||||
my $configs = WebGUI::Config->readAllConfigs($self->{_webguiRoot});
|
||||
my $configs = WebGUI::Config->readAllConfigs($self->{_config}->getWebguiRoot);
|
||||
foreach my $config (keys %{$configs}) {
|
||||
$kernel->yield("loadSchedule", $config);
|
||||
}
|
||||
|
|
@ -160,7 +160,7 @@ The config filename for the site to load the schedule.
|
|||
|
||||
sub loadSchedule {
|
||||
my ($kernel, $self, $config) = @_[KERNEL, OBJECT, ARG0];
|
||||
my $session = WebGUI::Session->open($self->{_webguiRoot}, $config);
|
||||
my $session = WebGUI::Session->open($self->{_config}->getWebguiRoot, $config);
|
||||
my $result = $session->db->read("select * from WorkflowSchedule");
|
||||
while (my $data = $result->hashRef) {
|
||||
$kernel->yield("addJob",$config, $data);
|
||||
|
|
@ -170,24 +170,24 @@ sub loadSchedule {
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 new ( webguiRoot )
|
||||
=head2 new ( config )
|
||||
|
||||
Constructor.
|
||||
|
||||
=head3 webguiRoot
|
||||
=head3 config
|
||||
|
||||
The path to the root of the WebGUI installation.
|
||||
A WebGUI::Config object that represents the spectre.conf file.
|
||||
|
||||
=cut
|
||||
|
||||
sub new {
|
||||
my $class = shift;
|
||||
my $webguiRoot = shift;
|
||||
my $self = {_webguiRoot=>$webguiRoot};
|
||||
my $config = shift;
|
||||
my $self = {_config=>$config};
|
||||
bless $self, $class;
|
||||
my @publicEvents = qw(addJob deleteJob);
|
||||
POE::Session->create(
|
||||
object_states => [ $self => [qw(_start _stop checkEvents checkEvent loadSchedule), @publicEvents] ],
|
||||
object_states => [ $self => [qw(_start _stop checkSchedules checkSchedule loadSchedule), @publicEvents] ],
|
||||
args=>[\@publicEvents]
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ sub _start {
|
|||
my $serviceName = "workflow";
|
||||
$kernel->alias_set($serviceName);
|
||||
$kernel->call( IKC => publish => $serviceName, $publicEvents );
|
||||
my $configs = WebGUI::Config->readAllConfigs($self->{_webguiRoot});
|
||||
my $configs = WebGUI::Config->readAllConfigs($self->{_config}->getWebguiRoot);
|
||||
foreach my $config (keys %{$configs}) {
|
||||
$kernel->yield("loadWorkflows", $config);
|
||||
}
|
||||
|
|
@ -95,7 +95,7 @@ Checks to see if there are any open job slots available, and if there are assign
|
|||
|
||||
sub checkJobs {
|
||||
my ($kernel, $self) = @_[KERNEL, OBJECT];
|
||||
if ($self->countRunningJobs < 5) {
|
||||
if ($self->countRunningJobs < $self->{_config}->get("maxWorkers")) {
|
||||
my $job = $self->getNextJob;
|
||||
if (defined $job) {
|
||||
$job->{status} = "running";
|
||||
|
|
@ -163,7 +163,7 @@ sub getNextJob {
|
|||
|
||||
sub loadWorkflows {
|
||||
my ($kernel, $self, $config) = @_[KERNEL, OBJECT, ARG0];
|
||||
my $session = WebGUI::Session->open($self->{_webguiRoot}, $config);
|
||||
my $session = WebGUI::Session->open($self->{_config}->getWebguiRoot, $config);
|
||||
my $result = $session->db->read("select * from WorkflowInstance");
|
||||
while (my $data = $result->hashRef) {
|
||||
$kernel->yield("addJob", $config, $data);
|
||||
|
|
@ -173,11 +173,11 @@ sub loadWorkflows {
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 new ( webguiRoot )
|
||||
=head2 new ( config )
|
||||
|
||||
Constructor. Loads all active workflows from each WebGUI site and begins executing them.
|
||||
|
||||
=head3 webguiRoot
|
||||
=head3 config
|
||||
|
||||
The path to the root of the WebGUI installation.
|
||||
|
||||
|
|
@ -185,8 +185,8 @@ The path to the root of the WebGUI installation.
|
|||
|
||||
sub new {
|
||||
my $class = shift;
|
||||
my $webguiRoot = shift;
|
||||
my $self = {_webguiRoot=>$webguiRoot};
|
||||
my $config = shift;
|
||||
my $self = {_config=>$config};
|
||||
bless $self, $class;
|
||||
my @publicEvents = qw(addJob deleteJob);
|
||||
POE::Session->create(
|
||||
|
|
|
|||
|
|
@ -32,10 +32,18 @@ This package parses the WebGUI config file.
|
|||
|
||||
use WebGUI::Config;
|
||||
|
||||
$hashRef = WebGUI::Config::getConfig($webguiRoot, $configFile);
|
||||
$hashRef = WebGUI::Config::readConfig($webguiRoot, $configFile);
|
||||
|
||||
WebGUI::Config::loadAllConfigs($webguiRoot);
|
||||
|
||||
my $configs = WebGUI::Config::readAllConfigs($webguiRoot);
|
||||
|
||||
my $config = WebGUI::Config->new($webguiRoot, $configFileName);
|
||||
|
||||
my $value = $config->get($param);
|
||||
$config->set($param,$value);
|
||||
$config->delete($param);
|
||||
|
||||
my $configFileName = $config->getFilename;
|
||||
my $webguiRoot = $config->getWebguiRoot;
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
|
|
@ -151,7 +159,7 @@ sub loadAllConfigs {
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 new ( webguiRoot , configFile )
|
||||
=head2 new ( webguiRoot , configFile [ , noCache ] )
|
||||
|
||||
Returns a hash reference containing the configuration data. It tries to get the data out of the memory cache first, but reads the config file directly if necessary.
|
||||
|
||||
|
|
@ -163,12 +171,17 @@ The path to the WebGUI installation.
|
|||
|
||||
The filename of the config file to read.
|
||||
|
||||
=head3 noCache
|
||||
|
||||
A boolean value that when set to true tells the config system not to store the config in an in memory cache, in case it's loaded again later. This is mostly used when loading utility configs, like spectre.conf.
|
||||
|
||||
=cut
|
||||
|
||||
sub new {
|
||||
my $class = shift;
|
||||
my $webguiPath = shift;
|
||||
my $filename = shift;
|
||||
my $noCache = shift;
|
||||
if (exists $config{$filename}) {
|
||||
return $config{$filename};
|
||||
} else {
|
||||
|
|
@ -181,7 +194,7 @@ sub new {
|
|||
my $conf = jsonToObj($json);
|
||||
my $self = {_webguiRoot=>$webguiPath, _configFile=>$filename, _config=>$conf};
|
||||
bless $self, $class;
|
||||
$config{$filename} = $self;
|
||||
$config{$filename} = $self unless $noCache;
|
||||
return $self;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue