more spectre goodness, it almost runs!!

This commit is contained in:
JT Smith 2006-02-03 03:05:28 +00:00
parent 9ff0794746
commit d9a80d9f6f
6 changed files with 78 additions and 43 deletions

View file

@ -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();
}

View file

@ -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]
);
}

View file

@ -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(

View file

@ -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;
}
}