[Bio] / FigKernelPackages / Tracer.pm Repository:
ViewVC logotype

Diff of /FigKernelPackages/Tracer.pm

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

revision 1.120, Thu Jun 4 18:27:33 2009 UTC revision 1.128, Wed Dec 16 20:57:35 2009 UTC
# Line 1062  Line 1062 
1062    
1063  =head3 ETracing  =head3 ETracing
1064    
1065      ETracing($parameter);      ETracing($parameter, %options);
1066    
1067  Set up emergency tracing. Emergency tracing is tracing that is turned  Set up emergency tracing. Emergency tracing is tracing that is turned
1068  on automatically for any program that calls this method. The emergency  on automatically for any program that calls this method. The emergency
# Line 1083  Line 1083 
1083  is a CGI object and emergency tracing is not on, the C<Trace> and  is a CGI object and emergency tracing is not on, the C<Trace> and
1084  C<TF> parameters will be used to determine the type of tracing.  C<TF> parameters will be used to determine the type of tracing.
1085    
1086    =item options
1087    
1088    Hash of options. The permissible options are given below.
1089    
1090    =over 8
1091    
1092    =item destType
1093    
1094    Emergency tracing destination type to use if no tracing file is found. The
1095    default is C<WARN>.
1096    
1097    =item noParms
1098    
1099    If TRUE, then display of the saved CGI parms is suppressed. The default is FALSE.
1100    
1101    =item level
1102    
1103    The trace level to use if no tracing file is found. The default is C<0>.
1104    
1105  =back  =back
1106    
1107  =cut  =cut
1108    
1109  sub ETracing {  sub ETracing {
1110      # Get the parameter.      # Get the parameter.
1111      my ($parameter) = @_;      my ($parameter, %options) = @_;
1112      # Check for CGI mode.      # Check for CGI mode.
1113      if (defined $parameter && ref $parameter eq 'CGI') {      if (defined $parameter && ref $parameter eq 'CGI') {
1114          $SavedCGI = $parameter;          $SavedCGI = $parameter;
1115      } else {      } else {
1116          $SavedCGI = undef;          $SavedCGI = undef;
1117      }      }
1118      # Default to no tracing except errors.      # Check for the noParms option.
1119      my ($tracing, $dest) = ("0", "WARN");      my $noParms = $options{noParms} || 0;
1120        # Get the default tracing information.
1121        my $tracing = $options{level} || 0;
1122        my $dest = $options{destType} || "WARN";
1123      # Check for emergency tracing.      # Check for emergency tracing.
1124      my $tkey = EmergencyKey($parameter);      my $tkey = EmergencyKey($parameter);
1125      my $emergencyFile = EmergencyFileName($tkey);      my $emergencyFile = EmergencyFileName($tkey);
# Line 1119  Line 1141 
1141              # the trace level;              # the trace level;
1142              $dest = shift @tracing;              $dest = shift @tracing;
1143              my $level = shift @tracing;              my $level = shift @tracing;
             # Convert the destination to a real tracing destination.  
             # temp directory.  
             $dest = EmergencyTracingDest($tkey, $dest);  
1144              # Insure Tracer is specified.              # Insure Tracer is specified.
1145              my %moduleHash = map { $_ => 1 } @tracing;              my %moduleHash = map { $_ => 1 } @tracing;
1146              $moduleHash{Tracer} = 1;              $moduleHash{Tracer} = 1;
1147              # Set the trace parameter.              # Set the trace parameter.
1148              $tracing = join(" ", $level, sort keys %moduleHash);              $tracing = join(" ", $level, sort keys %moduleHash);
1149          }          }
     } elsif (defined $SavedCGI) {  
         # There's no emergency tracing, but we have a CGI object, so check  
         # for tracing from the form parameters.  
         if ($SavedCGI->param('Trace')) {  
             # Here the user has requested tracing via a form.  
             $dest = ($SavedCGI->param('TF') ? ">$FIG_Config::temp/Trace$$.log" : "QUEUE");  
             $tracing = $SavedCGI->param('Trace') . " Tracer";  
         }  
1150      }      }
1151        # Convert the destination to a real tracing destination.
1152        $dest = EmergencyTracingDest($tkey, $dest);
1153      # Setup the tracing we've determined from all the stuff above.      # Setup the tracing we've determined from all the stuff above.
1154      TSetup($tracing, $dest);      TSetup($tracing, $dest);
1155      # Check to see if we're a web script.      # Check to see if we're a web script.
1156      if (defined $SavedCGI) {      if (defined $SavedCGI) {
1157          # Yes we are. Trace the form and environment data.          # Yes we are. Trace the form and environment data if it's not suppressed.
1158            if (! $noParms) {
1159          TraceParms($SavedCGI);          TraceParms($SavedCGI);
1160            }
1161          # Check for RAW mode. In raw mode, we print a fake header so that we see everything          # Check for RAW mode. In raw mode, we print a fake header so that we see everything
1162          # emitted by the script in its raw form.          # emitted by the script in its raw form.
1163          if (T(Raw => 3)) {          if (T(Raw => 3)) {
# Line 1333  Line 1348 
1348      # Declare the return variable.      # Declare the return variable.
1349      my $retVal;      my $retVal;
1350      # Determine the parameter type.      # Determine the parameter type.
1351      if (! defined $parameter || defined($ENV{TRACING})) {      if (! defined $parameter) {
1352          # Here we're supposed to check the environment. If that fails, we          # Here we're supposed to check the environment. If that fails, we
1353          # get the effective login ID.          # get the effective login ID.
1354          $retVal = $ENV{TRACING} || scalar getpwuid($<);          $retVal = $ENV{TRACING} || scalar getpwuid($<);
# Line 3696  Line 3711 
3711      my $cmp = Tracer::Cmp($a, $b);      my $cmp = Tracer::Cmp($a, $b);
3712    
3713  This method performs a universal sort comparison. Each value coming in is  This method performs a universal sort comparison. Each value coming in is
3714  separated into a leading text part and a trailing number part. The text  separated into a text parts and number parts. The text
3715  part is string compared, and if both parts are equal, then the number  part is string compared, and if both parts are equal, then the number
3716  parts are compared numerically. A stream of just numbers or a stream of  parts are compared numerically. A stream of just numbers or a stream of
3717  just strings will sort correctly, and a mixed stream will sort with the  just strings will sort correctly, and a mixed stream will sort with the
3718  numbers first. Strings with a label and a number will sort in the  numbers first. Strings with a label and a number will sort in the
3719  expected manner instead of lexically.  expected manner instead of lexically. Undefined values sort last.
3720    
3721  =over 4  =over 4
3722    
# Line 3735  Line 3750 
3750          $retVal = 1;          $retVal = 1;
3751      } else {      } else {
3752          # Here we have two real values. Parse the two strings.          # Here we have two real values. Parse the two strings.
3753          my $aParsed = _Parse($a);          my @aParsed = _Parse($a);
3754          my $bParsed = _Parse($b);          my @bParsed = _Parse($b);
3755            # Loop through the first string.
3756            while (! $retVal && @aParsed) {
3757                # Extract the string parts.
3758                my $aPiece = shift(@aParsed);
3759                my $bPiece = shift(@bParsed) || '';
3760                # Extract the number parts.
3761                my $aNum = shift(@aParsed);
3762                my $bNum = shift(@bParsed) || 0;
3763          # Compare the string parts insensitively.          # Compare the string parts insensitively.
3764          $retVal = (lc $aParsed->[0] cmp lc $bParsed->[0]);              $retVal = (lc($aPiece) cmp lc($bPiece));
3765          # If they're equal, compare them sensitively.          # If they're equal, compare them sensitively.
3766          if (! $retVal) {          if (! $retVal) {
3767              $retVal = ($aParsed->[0] cmp $bParsed->[0]);                  $retVal = ($aPiece cmp $bPiece);
         }  
3768          # If they're STILL equal, compare the number parts.          # If they're STILL equal, compare the number parts.
3769          if (! $retVal) {          if (! $retVal) {
3770              $retVal = $aParsed->[1] <=> $bParsed->[1];                      $retVal = $aNum <=> $bNum;
3771                    }
3772                }
3773          }          }
3774      }      }
3775      # Return the result.      # Return the result.
3776      return $retVal;      return $retVal;
3777  }  }
3778    
3779  # This method parses an input string into a string part and a number part.  # This method parses an input string into a string parts alternating with
3780    # number parts.
3781  sub _Parse {  sub _Parse {
3782        # Get the incoming string.
3783      my ($string) = @_;      my ($string) = @_;
3784      my ($alpha, $num);      # The pieces will be put in here.
3785      if ($string =~ /^(.*?)(\d+(?:\.\d+)?)$/) {      my @retVal;
3786          $alpha = $1;      # Loop through as many alpha/num sets as we can.
3787          $num = $2;      while ($string =~ /^(\D*)(\d+)(.*)/) {
3788      } else {          # Push the alpha and number parts into the return string.
3789          $alpha = $string;          push @retVal, $1, $2;
3790          $num = 0;          # Save the residual.
3791            $string = $3;
3792        }
3793        # If there's still stuff left, add it to the end with a trailing
3794        # zero.
3795        if ($string) {
3796            push @retVal, $string, 0;
3797      }      }
3798      return [$alpha, $num];      # Return the list.
3799        return @retVal;
3800  }  }
3801    
3802  =head3 ListEQ  =head3 ListEQ

Legend:
Removed from v.1.120  
changed lines
  Added in v.1.128

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3