File indexing completed on 2024-04-06 12:31:52
0001
0002
0003 use strict;
0004 use warnings;
0005
0006
0007
0008 my $CMS_STORM_ENDPOINT=undef;
0009
0010 my $CMS_STORM_PTG_TIMEOUT=300;
0011
0012 my $CMS_STORM_PTG_POLLING=1;
0013
0014 my $CMS_STORM_CLIENT_PATH=undef;
0015
0016 my $CMS_STORM_CLIENT_LD_PATH=undef;
0017
0018 my $CMS_STORM_CLIENT_DEFAULT_PROTO="file";
0019
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
0032
0033 my $REQID=undef;
0034
0035 my $TURL=undef;
0036
0037 my $OUTPUT=undef;
0038
0039
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
0193
0194 while(<PTGSTATUS>)
0195 {
0196 $OUTPUT.=$_;
0197
0198 if(/^\s*statusCode="(\S+)"\(\S+\)\s*$/)
0199 {
0200 $status=$1;
0201 }
0202
0203
0204
0205
0206 if(/^\s*\[\S+\]\s*transferURL="file:[\/]+(\S+)"\s*$/)
0207 {
0208
0209
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
0224
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
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
0263
0264 }
0265
0266
0267
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 }