Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:31:52

0001 #! /usr/bin/perl
0002 
0003 use strict;
0004 use warnings;
0005 
0006 ###DEFAULTS (ALL OVERWRITTEN BY CORRESPONDING ENV VARIABLES)###
0007 
0008 my $CMS_STORM_ENDPOINT=undef; #IF undef IS TAKEN FROM SURL
0009 
0010 my $CMS_STORM_PTG_TIMEOUT=300;
0011 
0012 my $CMS_STORM_PTG_POLLING=1;
0013 
0014 my $CMS_STORM_CLIENT_PATH=undef; #CAN SET THE PATH VARIABLE DIRECTLY
0015 
0016 my $CMS_STORM_CLIENT_LD_PATH=undef; #CAN SET THE LD_PATH VARIABLE DIRECTLY
0017 
0018 my $CMS_STORM_CLIENT_DEFAULT_PROTO="file";
0019 ###COMMAND LINE ARGS###
0020 
0021 my $SURL=shift;
0022 
0023 my $PROTO="file";
0024 
0025 $PROTO=$CMS_STORM_CLIENT_DEFAULT_PROTO unless(defined($PROTO));
0026 
0027 die 'No command line protocol specified and no default protocol set\n' unless(defined($PROTO));
0028 
0029 die "ERROR: Usage: storm-ptg SURL [PROTO]\n" unless(defined($SURL) && defined($PROTO));
0030 
0031 ###GLOBALS###
0032 
0033 my $REQID=undef;
0034 
0035 my $TURL=undef;
0036 
0037 my $OUTPUT=undef;
0038 
0039 ###FUNCTIONS###
0040 
0041 sub getEndPoint
0042 {
0043     if(defined($ENV{CMS_STORM_ENDPOINT}))
0044     {
0045     $CMS_STORM_ENDPOINT=$ENV{CMS_STORM_ENDPOINT};
0046     return;
0047     }
0048     elsif(defined($CMS_STORM_ENDPOINT))
0049     {
0050     return;
0051     }
0052     else
0053     {
0054     $SURL =~ /^\s*(srm:\S+)\?SFN=\S+\s*$/;
0055     $CMS_STORM_ENDPOINT=$1;
0056     die "ERROR: cannot determine CMS_STORM_ENDPOINT value" unless(defined($CMS_STORM_ENDPOINT));    
0057     return;
0058     }
0059 }
0060 
0061 
0062 sub getTimeout
0063 {
0064     if(defined($ENV{CMS_STORM_PTG_TIMEOUT}))
0065     {
0066     $CMS_STORM_PTG_TIMEOUT=int($ENV{CMS_STORM_PTG_TIMEOUT});
0067     return;
0068     }
0069     elsif(defined($CMS_STORM_PTG_TIMEOUT))
0070     {
0071     return;
0072     }
0073     else
0074     {
0075     die "ERROR: cannot determine CMS_STORM_PTG_TIMEOUT value"; 
0076     }
0077 }
0078 
0079 
0080 
0081 sub getPolling
0082 {
0083     if(defined($ENV{CMS_STORM_PTG_POLLING}))
0084     {
0085     $CMS_STORM_PTG_POLLING=int($ENV{CMS_STORM_PTG_POLLING});
0086     return;
0087     }
0088     elsif(defined($CMS_STORM_PTG_POLLING))
0089     {
0090     return;
0091     }
0092     else
0093     {
0094     die "ERROR: cannot determine CMS_STORM_PTG_POLLING value"; 
0095     }
0096 
0097 }
0098 
0099 
0100 sub getPath
0101 {
0102     if(defined($ENV{CMS_STORM_CLIENT_PATH}))
0103     {
0104     $CMS_STORM_CLIENT_PATH=$ENV{CMS_STORM_CLIENT_PATH};
0105     return;
0106     }
0107     elsif(defined($CMS_STORM_CLIENT_PATH))
0108     {
0109     return;
0110     }
0111     else
0112     {
0113     warn "WARN: CMS_STORM_CLIENT_PATH has no value"; 
0114     }
0115 }
0116 
0117 
0118 sub getLDPath
0119 {
0120     if(defined($ENV{CMS_STORM_CLIENT_LD_PATH}))
0121     {
0122     $CMS_STORM_CLIENT_LD_PATH=$ENV{CMS_STORM_CLIENT_LD_PATH};
0123     return;
0124     }
0125     elsif(defined($CMS_STORM_CLIENT_LD_PATH))
0126     {
0127     return;
0128     }
0129     else
0130     {
0131     warn "WARN: CMS_STORM_CLIENT_LD_PATH has no value"; 
0132     }
0133 }
0134 
0135 
0136 
0137 sub addPaths()
0138 {
0139    
0140     getPath();
0141 
0142     getLDPath();
0143 
0144     if(defined($CMS_STORM_CLIENT_LD_PATH))
0145     {
0146     $ENV{LD_LIBRARY_PATH}="$CMS_STORM_CLIENT_LD_PATH:$ENV{LD_LIBRARY_PATH}";
0147     }
0148 
0149     if(defined($CMS_STORM_CLIENT_PATH))
0150     {
0151     $ENV{PATH}="$CMS_STORM_CLIENT_PATH:$ENV{PATH}";
0152     }
0153 }
0154 
0155 
0156 sub execPtG
0157 {
0158     my $cl="clientSRM PtG -e $CMS_STORM_ENDPOINT -s $SURL -T -P file|"; 
0159 
0160     open(PTG,"$cl") or die "ERROR: cannot execute command line $cl";
0161 
0162     $OUTPUT="";
0163 
0164     while(<PTG>)
0165     {
0166     $OUTPUT.=$_;
0167 
0168     if(/^\s*requestToken="(\S+)"\s*$/)
0169     {
0170         $REQID=$1;
0171     }
0172     }
0173 
0174     close  PTG;
0175 
0176     die "ERROR: $OUTPUT\nno request token found" unless(defined($REQID));
0177 
0178     return;
0179 }
0180 
0181 
0182 sub poll
0183 {
0184     my $cl="clientSRM StatusPtG -e $CMS_STORM_ENDPOINT -t $REQID|"; 
0185     
0186     open(PTGSTATUS,$cl) or die "ERROR: cannot execute command line $cl";
0187 
0188     $OUTPUT="";
0189     
0190     my $status;
0191 
0192 #    my $req_status;
0193 
0194     while(<PTGSTATUS>)
0195     {
0196     $OUTPUT.=$_;
0197 
0198     if(/^\s*statusCode="(\S+)"\(\S+\)\s*$/)
0199     {
0200         $status=$1;
0201     }
0202 #   if(/^\s*\[\S+\]\s*status:\s*statusCode="(\S+)"\(\S+\)\s*$/)
0203 #   {
0204 #       $status=$1;
0205 #   }
0206     if(/^\s*\[\S+\]\s*transferURL="file:[\/]+(\S+)"\s*$/)
0207     {
0208 #DB
0209 #       print STDERR "matched: $1\n"; 
0210         $TURL="/$1";
0211     }
0212 
0213     }
0214 
0215     close PTGSTATUS;
0216 
0217     if($status eq "SRM_SUCCESS")
0218     {   
0219     return 1;
0220     }
0221     elsif(($status eq "SRM_REQUEST_INPROGRESS") or ($status eq "SRM_REQUEST_QUEUED"))
0222     {
0223 #DB
0224 #       print STDERR "Exiting Poll matched: $TURL\n"; 
0225         return 0;
0226     }
0227     elsif($status eq "SRM_FAILURE")
0228     {
0229     $TURL=undef;
0230     return 1;
0231     }
0232     else
0233     {
0234     warn "WARN: Ping Failed:\n$OUTPUT";
0235     return 0;
0236     }
0237     
0238 }
0239 
0240 
0241 ###MAIN###
0242 
0243 getEndPoint();
0244 
0245 getTimeout();
0246 
0247 getPolling();
0248 
0249 addPaths();
0250 
0251 execPtG();
0252 
0253 print "Prepare to Get request:\n$OUTPUT\n";
0254 
0255 my $elapsed=0;
0256 
0257 
0258 while((poll()==0) and ($elapsed*$CMS_STORM_PTG_POLLING <= $CMS_STORM_PTG_TIMEOUT))
0259 {
0260     system("sleep  $CMS_STORM_PTG_POLLING");
0261     $elapsed++;
0262 #DB
0263 #    print STDERR "TURL=$TURL\n";
0264 }
0265 
0266 #DB
0267 #    print STDERR "Out of loop TURL=$TURL\n";
0268 
0269 my $elapsed_time=$elapsed*$CMS_STORM_PTG_POLLING;
0270 
0271 print "Elapsed time: $elapsed_time sec\n";
0272 
0273 print "Last Polling:\n$OUTPUT\n";
0274 
0275 
0276 if(defined($TURL))
0277 {
0278     print "FilePath:$TURL\n";
0279 }
0280 else
0281 {
0282     print "No FilePath Matched!\n"
0283 }