ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/OSUT3Analysis/DBTools/scripts/osucrab
Revision: 1.6
Committed: Fri Nov 30 18:21:00 2012 UTC (12 years, 5 months ago) by ahart
Branch: MAIN
Changes since 1.5: +5 -2 lines
Log Message:
Only append the hostname for the lastUpdateUser field.

File Contents

# Content
1 #!/usr/bin/env perl
2
3 use strict;
4 use Mysql;
5
6 sub getWorkingDir;
7 sub dbUpdate;
8 sub dbStatus;
9 sub dbReport;
10 sub dbInsert;
11 sub addSlashes;
12 sub getOption;
13
14 our $db = Mysql->connect ("cmshead.mps.ohio-state.edu", "ntuple", "osuT3User") or die "Failed to connect to Tier 3, stopped";
15
16 my $arg = join (" ", @ARGV);
17 if ($arg =~ m/-create/)
18 {
19 my $crabCfgName = $arg;
20 $crabCfgName =~ s/.*-cfg *([^ \t\n]*).*/$1/;
21 open (CRAB_CFG, "<$crabCfgName");
22 my @crabCfg = <CRAB_CFG>;
23 close (CRAB_CFG);
24 my $dataset = getOption (\@crabCfg, "datasetpath");
25 my $psetName = getOption (\@crabCfg, "pset");
26 my $jsonFileName = getOption (\@crabCfg, "lumi_mask");
27 my $submissionLogName = getOption (\@crabCfg, "ui_working_dir");
28 $submissionLogName .= "/log/crab.log";
29
30 print "Ntuple format (BEAN): ";
31 my $format = <STDIN>;
32 $format =~ s/\n//g;
33 $format = "BEAN" if !$format;
34 print "Comment for the ntuple database: ";
35 my $comment = <STDIN>;
36 $comment =~ s/\n//g;
37
38 system ("crab $arg");
39
40 my $status = "created";
41 $status = "submitted" if $arg =~ m/-submit/;
42 my $results = dbInsert ($dataset, "$ENV{'USER'}\@$ENV{'HOSTNAME'}", $format, "", 0, 0, $status, $comment, $psetName, $crabCfgName, $jsonFileName, $submissionLogName);
43 }
44 elsif ($arg =~ m/-submit/)
45 {
46 my $workingDir = getWorkingDir (\@ARGV);
47 my $id = -1;
48 if (-e "$workingDir/log/.osuID")
49 {
50 open (ID_FILE, "<$workingDir/log/.osuID");
51 $id = <ID_FILE>;
52 close (ID_FILE);
53 $id =~ s/(.*)\n/$1/;
54 }
55 my $submissionLogName = $workingDir . "/log/crab.log";
56
57 system ("crab $arg");
58
59 my $results = dbUpdate ($id, "submitted", $submissionLogName, "$ENV{'USER'}\@$ENV{'HOSTNAME'}") if $id > -1;
60 }
61 elsif ($arg =~ m/-report/)
62 {
63 my $workingDir = getWorkingDir (\@ARGV);
64 my $id = -1;
65 if (-e "$workingDir/log/.osuID")
66 {
67 open (ID_FILE, "<$workingDir/log/.osuID");
68 $id = <ID_FILE>;
69 close (ID_FILE);
70 $id =~ s/(.*)\n/$1/;
71 }
72 my $lumiSummaryName = $workingDir . "/res/lumiSummary.json";
73
74 system ("crab $arg");
75
76 my $results = dbReport ($id, "complete", $lumiSummaryName, "$ENV{'USER'}\@$ENV{'HOSTNAME'}") if $id > -1;
77 }
78 elsif ($arg =~ m/-status/)
79 {
80 my $workingDir = getWorkingDir (\@ARGV);
81 my $id = -1;
82 if (-e "$workingDir/log/.osuID")
83 {
84 open (ID_FILE, "<$workingDir/log/.osuID");
85 $id = <ID_FILE>;
86 close (ID_FILE);
87 $id =~ s/(.*)\n/$1/;
88 }
89 my $currentStatusName = "$workingDir/log/.currentStatus";
90 unlink ($currentStatusName) if -e $currentStatusName;
91 system ("crab $arg | tee $currentStatusName");
92 my $results = dbStatus ($id, $currentStatusName, "$ENV{'USER'}\@$ENV{'HOSTNAME'}") if $id > -1;
93 unlink ($currentStatusName);
94 }
95 else
96 {
97 system ("crab $arg");
98 }
99
100 sub
101 getWorkingDir
102 {
103 my $argv = shift;
104
105 my $workingDir;
106 my $nextToLast = 0;
107 foreach my $argument (@$argv)
108 {
109 if ($nextToLast)
110 {
111 $workingDir = $argument;
112 last;
113 }
114 $nextToLast = 1 if ($argument eq "-c" || $argument eq "-continue");
115 }
116
117 return $workingDir;
118 }
119
120 sub
121 getOption
122 {
123 my $file = shift;
124 my $option = shift;
125
126 my $optionValue;
127 foreach my $line (@$file)
128 {
129 next if (!($line =~ m/$option *= *[^ \t\n]*/));
130 $optionValue = $line;
131 $optionValue =~ s/.*$option *= *([^ \t\n]*).*\n/$1/;
132 }
133
134 return $optionValue;
135 }
136
137 sub
138 addSlashes
139 {
140 my $string = shift;
141
142 $string =~ s/\\/\\\\/g;
143 $string =~ s/'/\\'/g;
144 $string =~ s/"/\\"/g;
145 $string =~ s/\\0/\\\\0/g;
146
147 return $string;
148 }
149
150 sub
151 dbInsert
152 {
153 my $dataset = shift;
154 my $userAndHost = shift;
155 my $format = shift;
156 my $location = shift;
157 my $nFiles = shift;
158 my $sizeInGB = shift;
159 my $status = shift;
160 my $comment = shift;
161 my $psetName = shift;
162 my $crabCfgName = shift;
163 my $jsonFileName = shift;
164 my $submissionLogName = shift;
165
166 my $user = $userAndHost;
167 $user =~ s/@.*$//;
168
169 open (PY_CONFIG, "<$psetName");
170 my @pset = <PY_CONFIG>;
171 close (PY_CONFIG);
172 my $pset = join ("", @pset);
173 open (CRAB_CONFIG, "<$crabCfgName");
174 my @crabCfg = <CRAB_CONFIG>;
175 close (CRAB_CONFIG);
176 my $crabCfg = join ("", @crabCfg);
177 open (JSON_FILE, "<$jsonFileName");
178 my @jsonFile = <JSON_FILE>;
179 close (JSON_FILE);
180 my $jsonFile = join ("", @jsonFile);
181 open (SUBMISSION_LOG, "<$submissionLogName");
182 my @submissionLog = <SUBMISSION_LOG>;
183 close (SUBMISSION_LOG);
184 my $submissionLog = join ("", @submissionLog);
185
186 $dataset = addSlashes ($dataset);
187 $user = addSlashes ($user);
188 $format = addSlashes ($format);
189 $pset = addSlashes ($pset);
190 $crabCfg = addSlashes ($crabCfg);
191 $jsonFile = addSlashes ($jsonFile);
192 $submissionLog = addSlashes ($submissionLog);
193 $location = addSlashes ($location);
194 $status = addSlashes ($status);
195 $comment = addSlashes ($comment);
196
197 my $results;
198 my $query = "select max(id) from ntuple";
199 $db->selectdb ("ntuple");
200 $results = $db->query ($query);
201 my @row = $results->fetchrow ();
202 my $id = 1;
203 $id = $row[0] + 1 if $results->numrows ();
204
205 my $workingDir = $submissionLogName;
206 $workingDir =~ s/(.*)\/log\/crab\.log/$1/;
207 open (ID_FILE, ">$workingDir/log/.osuID");
208 print ID_FILE "$id\n";
209 close (ID_FILE);
210
211 $query = "insert into ntuple (id, dataset, creationTime, lastUpdateTime, lastUpdateUser, user, format, location, nFiles, sizeInGB, status, comment, pset, crabCfg, jsonFile, submissionLog) values ($id, '$dataset', now(), now(), '$userAndHost', '$user', '$format', '$location', $nFiles, $sizeInGB, '$status', '$comment', '$pset', '$crabCfg', '$jsonFile', '$submissionLog')";
212 $results = $db->query ($query);
213
214 return $results;
215 }
216
217 sub
218 dbUpdate
219 {
220 my $id = shift;
221 my $status = shift;
222 my $submissionLogName = shift;
223 my $user = shift;
224
225 open (SUBMISSION_LOG, "<$submissionLogName");
226 my @submissionLog = <SUBMISSION_LOG>;
227 close (SUBMISSION_LOG);
228 my $submissionLog = join ("", @submissionLog);
229
230 $submissionLog = addSlashes ($submissionLog);
231 $status = addSlashes ($status);
232 $user = addSlashes ($user);
233
234 my $results;
235 my $query = "update ntuple set lastUpdateTime=now(), lastUpdateUser='$user', status='$status', submissionLog='$submissionLog' where id=$id";
236 $db->selectdb ("ntuple");
237 $results = $db->query ($query);
238
239 return $results;
240 }
241
242 sub
243 dbStatus
244 {
245 my $id = shift;
246 my $currentStatusName = shift;
247 my $user = shift;
248
249 open (CURRENT_STATUS, "<$currentStatusName");
250 my @currentStatus = <CURRENT_STATUS>;
251 close (CURRENT_STATUS);
252 my $currentStatus = join ("", @currentStatus);
253
254 $currentStatus = addSlashes ($currentStatus);
255 $user = addSlashes ($user);
256
257 my $results;
258 my $query = "update ntuple set lastUpdateTime=now(), lastUpdateUser='$user', currentStatus='$currentStatus' where id=$id";
259 $db->selectdb ("ntuple");
260 $results = $db->query ($query);
261
262 return $results;
263 }
264
265 sub
266 dbReport
267 {
268 my $id = shift;
269 my $status = shift;
270 my $lumiSummaryName = shift;
271 my $user = shift;
272
273 open (LUMI_SUMMARY, "<$lumiSummaryName");
274 my @lumiSummary = <LUMI_SUMMARY>;
275 close (LUMI_SUMMARY);
276 my $lumiSummary = join ("", @lumiSummary);
277
278 $lumiSummary = addSlashes ($lumiSummary);
279 $status = addSlashes ($status);
280 $user = addSlashes ($user);
281
282 my $results;
283 my $query = "update ntuple set lastUpdateTime=now(), lastUpdateUser='$user', status='$status', lumiSummary='$lumiSummary' where id=$id";
284 $db->selectdb ("ntuple");
285 $results = $db->query ($query);
286
287 return $results;
288 }