IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 109


Ignore:
Timestamp:
Oct 7, 2003, 11:56:12 PM (23 years ago)
Author:
eugene
Message:

cleaned the error exit handling
added code to reprocess missed imstats entries

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/perl/src/elixir.postrun

    r70 r109  
    1111if ($ARGV[0] eq "state")  { &state; }
    1212if ($ARGV[0] eq "update") { &update; }
     13
     14&load_state;
     15   
     16if ($ARGV[0] eq "imstats")   { &imstats_state ("imstats");     &save_state; &goodbye; }
     17if ($ARGV[0] eq "ptolemy")   { &ptolemy_state ("ptolemy");     &save_state; &goodbye; }
     18if ($ARGV[0] eq "standards") { &standards_state ("standards"); &save_state; &goodbye; }
     19if ($ARGV[0] eq "validate")  { &validate_state ("validate");   &save_state; &goodbye; }
    1320
    1421&escape ("unknown command $ARGV[0]");
     
    115122   
    116123    if ($entry eq "camera")    { &camera_state    ($entry); }
     124    if ($entry eq "imstats")   { &imstats_state   ($entry); }
    117125    if ($entry eq "mkdetrend") { &detrend_state   ($entry); }
    118126    if ($entry eq "mkfringe")  { &detrend_state   ($entry); }
     
    126134   
    127135    my ($entry) = "ptolemy";
    128    
    129136    $current = $state{$entry};
    130137    if (! $current) { &escape ("error: ptolemy state not set?"); }
     
    135142   
    136143    # if we can, run 'elixir complete'
    137     if (($current eq "init") && ($state{"mkdetrend"} eq "done") && ($state{"mkfringe"} eq "done")) {
     144    if (($current eq "init") && ($state{"mkdetrend"} eq "done")) {
    138145        $state{$entry} = "running";
    139146        &save_state;
    140147
    141148        if (-e "$fifos/complete.pid") {
    142             $state{$entry} = "fail";
    143             &save_state;
    144149            print STDERR "elixir (sex)complete already running? check pid file $fifos/complete.pid";
    145             &escape ("failed to start ptolemy");
     150            &save_escape ($entry, "failed to start ptolemy");
    146151        }
    147152
    148153        if (! -d "$datdir/$runid") { mkdir ("$datdir/$runid", 0777); }
    149154        ($tmp, $start, $stop) = split (" ", `mkrun run $runid`);
    150         if ($?) { &escape ("error in RUNID $runid"); }
     155        if ($?) { &save_escape ($entry, "error in RUNID $runid"); }
    151156        vsystem ("imsearch -type object -trange $start $stop -pt > $ptlist");
     157        if ($?) { &save_escape ($entry, "error extracting images from db"); }
    152158        vsystem ("elixir -D mode sexcomplete $ptlist >& $ptlog &");
    153159
    154160        # wait for up to 10 seconds for $fifos/complete.pid to exist
    155161        for ($Nwait = 0; ($Nwait < 30) && (! -e "$fifos/complete.pid"); $Nwait ++) { sleep 2; }
    156         if (! -e "$fifos/complete.pid") {
    157             $state{$entry} = "fail";
    158             &save_state;
    159             &escape ("failed to start elixir (sex)complete");
    160         }
     162        if (! -e "$fifos/complete.pid") { &save_escape ($entry, "failed to start elixir (sex)complete"); }
    161163    }
    162164
     
    194196    my ($entry) = "standards";
    195197    $current = $state{$entry};
     198
     199    print "entry: $entry\n";
     200    print "current: $current\n";
     201
    196202    if (! $current) { &escape ("error: standards state not set?"); }
    197203
     
    206212        # insert standards in photometry database
    207213        foreach $filter (@filter) {
    208 #           vsystem ("addrefs -replace -v $stds/Landolt92$filter.fix $filter\_L92");       
    209 #           vsystem ("addrefs -replace -v $stds/Landolt92$filter.hq  $filter\_L92_HQ");
    210 
    211214            @words = split (" ", `filtnames $filter -cal`);
    212215            if ($words[1] == 0) { next; }
     
    221224        vsystem ("elixir.photreport $runid $catdir");
    222225        if ($?) { goto standards_fail; }
    223        
     226
    224227        # load lines from phot.reg files and execute:
    225228        @reglist = ();
     
    398401    $state{$entry} = "fail";
    399402    return;
     403}
     404
     405##############
     406sub imstats_state {
     407
     408    my ($entry) = "imstats";
     409    $current = $state{$entry};
     410    if (! $current) { &escape ("error: imstats state not set?"); }
     411   
     412    $fifos  = `gconfig FIFOS`; chop $fifos;
     413    $pid    = "$fifos/imstats.pid";
     414    $end    = "$fifos/imstats.pid";
     415    $ptlist = "$datdir/$runid/$runid.redo.list";
     416    $ptlog  = "$datdir/$runid/$runid.redo.log";
     417
     418    # if we can, run 'elixir complete'
     419    if (($current eq "init") && ($state{"camera"} eq "off")) {
     420        $state{$entry} = "running";
     421        &save_state;
     422       
     423        # check for currently running imstats
     424        if (-e $pid) {
     425            print STDERR "elixir imstats still running?\n";
     426            print STDERR "run 'elixir -C $camera -D mode imstats -kill' to stop\n";
     427            &save_escape ($entry, "failure on imstats");
     428        }
     429
     430        # extract redo list, run processing
     431        ($tmp, $start, $stop) = split (" ", `mkrun run $runid`);
     432        if ($?) { &save_escape ($entry, "error in RUNID $runid"); }
     433        vsystem ("imsearch -trange $start $stop -proc f -pt > $ptlist");
     434        if ($?) { &save_escape ($entry, "error extracting unprocessed data"); }
     435        vsystem ("elixir -D mode imstats $ptlist >& $ptlog &");
     436       
     437        # wait for up to 10 seconds for $pid to exist
     438        for ($Nwait = 0; ($Nwait < 30) && (! -e "$pid"); $Nwait ++) { sleep 2; }
     439        if (! -e "$pid") { &save_escape ($entry, "failed to start elixir imstats"); }
     440    }
     441
     442    # has 'elixir complete' finished? successfully?
     443    if ($current eq "running") {
     444        if (-e "$fifos/imstats.end") {
     445            $answer = `wc -l $fifos/imstats.success`;
     446            ($Nsuccess) = split (" ", $answer);
     447            $answer = `wc -l $fifos/imstats.failure`;
     448            ($Nfailure) = split (" ", $answer);
     449            $answer = `wc -l $ptlist`;
     450            ($Ntotal) = split (" ", $answer);
     451
     452            print "Ntotal: $Ntotal\n";
     453            print "Nsuccess: $Nsuccess\n";
     454            print "Nfailure: $Nfailure\n";
     455
     456            if ($Nsuccess < 0.5*$Ntotal) { &save_escape ($entry, "too many failures: $Nsuccess of $Ntotal"); }
     457            if ($Nsuccess + $Nfailure > $Ntotal) { &save_escape ($entry, "output list is inconsistent"); }
     458            $state{$entry} = "done";
     459            &save_state;
     460            return;
     461        }
     462        if ((! -e "$fifos/imstats.end") && (! -e "$fifos/imstats.pid")) { &save_escape ($entry, "elixir complete killed?"); }
     463    }
    400464}
    401465
     
    470534}
    471535
     536sub save_escape {
     537    my ($entry) = $_[0];
     538    my ($message) = $_[1];
     539    $state{$entry} = "fail";
     540    &save_state;
     541    &escape ($message);
     542}
     543
    472544sub elixir_config {
    473545    my (@arg) = @_;
     
    554626
    555627    @def_state = ("camera",    "off",
     628                  "imstats",   "init",
    556629                  "mkdetrend", "init",
    557630                  "mkfringe",  "init",
     
    614687    &goodbye;
    615688}
    616 
    617 
Note: See TracChangeset for help on using the changeset viewer.