/[cvs]/nfo/perl/libs/OEF/YAA/Jobs.pm
ViewVC logotype

Diff of /nfo/perl/libs/OEF/YAA/Jobs.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.4 by joko, Fri Apr 18 16:04:03 2003 UTC revision 1.5 by joko, Tue May 13 09:07:36 2003 UTC
# Line 2  Line 2 
2  ##  $Id$  ##  $Id$
3  ## -------------------------------------------------------------------------  ## -------------------------------------------------------------------------
4  ##  $Log$  ##  $Log$
5    ##  Revision 1.5  2003/05/13 09:07:36  joko
6    ##  updated api method signatures
7    ##  tasks running asynchronously
8    ##
9  ##  Revision 1.4  2003/04/18 16:04:03  joko  ##  Revision 1.4  2003/04/18 16:04:03  joko
10  ##  new api method: getTaskGroups - returns job groups (just a hash) from some configuration slot  ##  new api method: getTaskGroups - returns job groups (just a hash) from some configuration slot
11  ##  ##
# Line 27  use base qw( DesignPattern::Object ); Line 31  use base qw( DesignPattern::Object );
31  use base qw( OEF::API::Abstract );  use base qw( OEF::API::Abstract );
32    
33    
34  #use Data::Dumper;  use Data::Dumper;
35  #use Data::Mungle::Transform::Deep qw( merge_to expand );  #use Data::Mungle::Transform::Deep qw( merge_to expand );
36  use shortcuts qw( run_cmd );  use shortcuts qw( run_cmd now );
37    
38  # get logger instance  # get logger instance
39  my $logger = Log::Dispatch::Config->instance;  my $logger = Log::Dispatch::Config->instance;
# Line 61  my $bizProcess = $main::bizProcess; Line 65  my $bizProcess = $main::bizProcess;
65          hidden => 0,          hidden => 0,
66          code => \&getTaskList,          code => \&getTaskList,
67          signature => [          signature => [
68            'struct string',             # w/o session            'struct struct',             # w/o session
69            'struct string struct',    # session initialized (a struct containing a key 'RPCSESSID' will get propagated!)            'struct struct struct',    # session initialized (a struct containing a key 'RPCSESSID' will get propagated!)
70          ],          ],
71          help => "",          help => "",
72          protected => 1,          protected => 1,
73        },        },
74        {        {
75          name => "getTaskInfo",          name => "getTaskInfo",
76          version => "0.02",          version => "0.03",
77          hidden => 0,          hidden => 0,
78          code => \&getTaskInfo,          code => \&getTaskInfo,
79          signature => [ 'struct string' ],          signature => [ 'struct string', 'struct string struct' ],
80          help => "",          help => "",
81          protected => 1,          protected => 1,
82        },        },
83        {        {
84          name => "runTask",          name => "runTask",
85          version => "0.02",          version => "0.03",
86          hidden => 0,          hidden => 0,
87          code => \&runTask,          code => \&runTask,
88          signature => [ 'string string' ],          #signature => [ 'string string', 'string string struct' ],
89            signature => [ 'struct string', 'struct string struct' ],
90          help => "",          help => "",
91          protected => 1,          protected => 1,
92        },        },
93        {        {
94          name => "getTaskGroups",          name => "getTaskGroups",
95          version => "0.02",          version => "0.03",
96          hidden => 0,          hidden => 0,
97          code => \&getTaskGroups,          code => \&getTaskGroups,
98          signature => [ 'struct', 'struct struct' ],          signature => [ 'struct', 'struct struct' ],
# Line 105  my $bizProcess = $main::bizProcess; Line 110  my $bizProcess = $main::bizProcess;
110    
111    sub getTaskList {    sub getTaskList {
112      my $srv = shift;      my $srv = shift;
113      my $crit_key = shift;      my $options = shift;
114      $crit_key ||= '';      
115        #print Dumper($options);
116      $logger->info( __PACKAGE__ . "->getTaskList( crit_key $crit_key )" );      
117        # XPath query expression (to be calculated here)
118        my $xpq = '';
119    
120      #print Dumper($bizProcess);      #print Dumper($bizProcess);
   
121      my $file = $bizProcess->{app}->{storage}->{control}->{locator}->{files}->{jobs};      my $file = $bizProcess->{app}->{storage}->{control}->{locator}->{files}->{jobs};
122        
123      # build xpath query database      if ($options->{filter}) {
124        my $xpq_db = {      
125          'all-jobs-unfiltered' => '*/*',        my $crit_key = $options->{filter};
126        };        $crit_key ||= '';
127        my $crit_db = {    
128          'all-jobs' => '/*',        #$logger->info( __PACKAGE__ . "->getTaskList( crit_key|filter=$crit_key )" );
129          'to-backend' => '@source="backend" and (@action="import" or @action="load")',    
130          'to-frontend' => '@target="frontend"',        # build xpath query database
131        };          my $xpq_db = {
132        $crit_db->{'about-import'} = "not ($crit_db->{'to-backend'} or $crit_db->{'to-frontend'})";            'all-jobs-unfiltered' => '*/*',
133            };
134      # select xpath query by criteria          my $crit_db = {
135        my $xpq = '';            'all-jobs' => '/*',
136        if ($crit_key) {            'to-backend' => '@source="backend" and (@action="import" or @action="load")',
137          if ($xpq_db->{$crit_key}) {            'to-frontend' => '@target="frontend"',
138            $xpq = $xpq_db->{$crit_key};          };
139          } else {          $crit_db->{'about-import'} = "not ($crit_db->{'to-backend'} or $crit_db->{'to-frontend'})";
140            my $crit = $crit_db->{$crit_key};    
141            if ($crit) {        # select xpath query by criteria
142              $xpq = "*/target[*/*[$crit]]";          #my $xpq = '';
143            if ($crit_key) {
144              if ($xpq_db->{$crit_key}) {
145                $xpq = $xpq_db->{$crit_key};
146              } else {
147                my $crit = $crit_db->{$crit_key};
148                if ($crit) {
149                  $xpq = "*/target[*/*[$crit]]";
150                }
151            }            }
152          }        }
153          
154        } elsif (my $query = $options->{query}) {
155          #$logger->info( __PACKAGE__ . "->getTaskList( query=$query )" );
156          $xpq = $query;
157          #$xpq = '*/target[@name="dummy" or @name="' . $query . '"]';
158          $xpq = '*/target[@name="dummy" or contains(@name, "' . $query . '")]';
159      }      }
160    
161        #$xpq = '*/target[@name="transfer process dev to frontend"]';
162        #$xpq = '/*[@name="transfer process dev to frontend"]';
163        #my $crit = '/*[@name="transfer process dev to frontend"]';
164        #my $crit = '@name="transfer process dev to frontend"';
165        #$xpq = "*/target[*/*[$crit]]";
166        #$xpq = "*/target[*/*[\@source=\"expekt\"]]";
167        #$xpq = "*/target[*/*[\@target=\"dev\" or \@name=\"dummy\"]]";
168        
169      # issue the query      # issue the query
170          $logger->info( __PACKAGE__ . "->getTaskList( xpq=$xpq )" );
171        my $mdbe = DesignPattern::Object->fromPackage('Data::Storage::Handler::XML', filename => $file );        my $mdbe = DesignPattern::Object->fromPackage('Data::Storage::Handler::XML', filename => $file );
172        $mdbe->sendQuery($xpq);        $mdbe->sendQuery($xpq);
173        $mdbe->circumflex('result');          $mdbe->circumflex('result');  
# Line 174  my $bizProcess = $main::bizProcess; Line 203  my $bizProcess = $main::bizProcess;
203      my $crit = shift;      my $crit = shift;
204      $crit ||= '';      $crit ||= '';
205    
206      $logger->info( __PACKAGE__ . "->getTaskInfo( crit $crit )" );      $logger->info( __PACKAGE__ . "->getTaskInfo( crit=$crit )" );
207    
208      my $task = _getTaskByName($crit);      my $task = _getTaskByName($crit);
     #print Dumper($tasks);  
     return $task;  
209    
210      my $jobname = $task->{name};      my $jobname = $task->{name};
211        
212    =pod
213      my $status = {      my $status = {
214        metadata => {        metadata => {
215          description => $task->{description},          description => $task->{description},
# Line 191  my $bizProcess = $main::bizProcess; Line 219  my $bizProcess = $main::bizProcess;
219          locked => $self->{_pcontrol}->{$jobname}->{locked},          locked => $self->{_pcontrol}->{$jobname}->{locked},
220        },        },
221      };      };
222    =cut
223    
224        # enrich pure task metadata with job status information
225        $task->{status} = {
226          running => $self->{_pcontrol}->{$jobname}->{running},
227          locked => $self->{_pcontrol}->{$jobname}->{locked},
228        };
229    
230      return $status;      return $task;
231    }    }
232    
233    
# Line 208  my $bizProcess = $main::bizProcess; Line 243  my $bizProcess = $main::bizProcess;
243      #print "getTask - 1.1", "\n";      #print "getTask - 1.1", "\n";
244    
245      #print Dumper($task);      #print Dumper($task);
246        #print Dumper($self);
247    
248      # build command      # build command
249        my $jobname = $task->{name};      my $rap = "rap.pl";
250        my $command = "rap.pl $jobname";      #my $rap = 'C:\home\amo\develop\netfrag.org\nfo\perl\scripts\shortcuts\rap.pl';
251            my $jobname = $task->{name};
252      # run      my $command = "$rap $jobname";
       # FIXME: what about asynchronous job execution?  
       $self->{_pcontrol}->{$jobname}->{locked} = 1;  
       $self->{_pcontrol}->{$jobname}->{running} = 1;  
253    
254          run_cmd($command);      # run command
255        # FIXME: what about asynchronous job execution?
256        $self->{_pcontrol}->{$jobname}->{locked} = 1;
257        $self->{_pcontrol}->{$jobname}->{running} = 1;
258    
259        # new of 2003-05-11: USE_PATH and async
260        #run_cmd($command, "Executed from " . __PACKAGE__ . " at " . now(), { USE_PATH => 1 });
261        run_cmd($command, "Executed from " . __PACKAGE__ . " at " . now(), { USE_PATH => 1, async => 1 });
262    
263  =pod  =pod
264          #system($command);          #system($command);
# Line 233  my $bizProcess = $main::bizProcess; Line 273  my $bizProcess = $main::bizProcess;
273          print "result: $result", "\n";          print "result: $result", "\n";
274  =cut  =cut
275    
276        $self->{_pcontrol}->{$jobname}->{locked} = 0;      # FIXME: How to determine when execution has finished?
277        $self->{_pcontrol}->{$jobname}->{running} = 0;      # Implement some dot.pid-mechanism?
278        # Possible solution:
279        # a) Spawn a helper process monitoring the long-running one.
280        #     This one notifies the system when execution has finished and terminates itself afterwards.
281        # b) Have a dedicated process monitoring service running which gets notified of process startup and shutdown.
282        #$self->{_pcontrol}->{$jobname}->{locked} = 0;
283        #$self->{_pcontrol}->{$jobname}->{running} = 0;
284    
285      return 1;      return 1;
286        #return $task;
287        
288    }    }
289    
290    

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed