13 if __name__ ==
"__main__":
15 parser = argparse.ArgumentParser(description=
'Coolr browser.', add_help=
False)
16 parser.add_argument(
'--input', required=
True,help=
'Input file in text folrat. It is output of athena job. It require has lines with info about load data: INFO Retrieved object: folder ')
17 parser.add_argument(
'--gtag', required=
True,
18 help=
'Global tag for CREST')
19 parser.add_argument(
'--gcooltag', required=
True,
20 help=
'Global tag for COOL')
21 parser.add_argument(
'--host', default=
'http://crest-j23.cern.ch',
22 help=
'Host of the CREST service (default: http://crest-j23.cern.ch)')
23 parser.add_argument(
'--port', default=
'8080',
24 help=
'Port of the CREST service (default: 8080)')
25 parser.add_argument(
'--out', default=
'log.out',
26 help=
'Out file for logs (default: log.out)')
27 parser.add_argument(
'--path', default=
'cool_crest_compare',
28 help=
'Path to compare (default: cool_crest_compare)')
30 args = parser.parse_args()
31 server =
"{0}:{1}".
format(args.host, args.port)
36 if not path.exists(args.input)
or not path.isfile(args.input):
37 print(
"Error: input file is not exists")
41 with open(args.input)
as inp_file:
42 while line := inp_file.readline():
43 if line.rstrip().
find(
'/TagInfo<metaOnly/>')>0:
50 sTag=e[e.find(
'<tag>')+5:]
51 if sTag.find(
'</tag>')>0:
52 sTag=sTag[:sTag.find(
'</tag>')]
54 db=e[e.find(
'<db>')+4:]
55 db=db[:db.find(
'</db>')]
57 e=e[e.find(
'</db>')+5:]
58 folder = e[e.find(
'/'):]
59 if folder.find(
'<')>-1:
60 folder = folder[:folder.find(
'<')]
61 elif folder.find(
' ')>-1:
62 folder = folder[:folder.find(
' ')]
64 folder = folder[:folder.find(
'\'')]
66 data[folder.strip()]=el
67 if line.rstrip().
find(
'INFO Retrieved object: folder ')>0:
68 st = line.rstrip()[line.rstrip().
find(
'INFO Retrieved object: folder '):]
69 st = st[st.find(
'/'):]
70 sFolder = st[:st.find(
' ')]
71 st= st[st.find(
'IOV ')+4:]
73 el = data[sFolder.strip()]
77 print(
"List of commands for compare:")
79 for elem
in data.keys():
81 if 'timestamp' not in js:
83 command = appPath +
' -g '+ args.gtag+
' -G '+args.gcooltag+
' -f '+elem +
' -c "'+ js[
'db']+
'" -t ' + js[
'timestamp']+
' -C '+server
85 if js[
'tag'].
find(
'HEAD')>=0:
87 command +=
' >>'+fOut+
' 2>&1'
89 with open(fOut,
'a')
as f:
90 print(
'Compare folder name:', elem, file=f)
94 print(
"Problem folders:")
99 with open(fOut)
as log_file:
100 while line := log_file.readline():
101 if line.find(
'Compare folder name:')>-1:
104 command = appPath +
' -g '+ args.gtag+
' -G '+args.gcooltag+
' -f '+ curFolder +
' -c '+ js[
'db']+
' -t ' + js[
'timestamp']+
' -C '+server
107 curFolder=line.rstrip()[line.rstrip().
find(
'Compare folder name:')+20:]
108 curFolder=curFolder.lstrip()
109 if line.rstrip().
find(
'is the same in COOL and CREST')>0:
111 if line.find(
'CREST output file problem')>-1:
113 crestProblem.append(curFolder)
114 if line.find(
'COOL output file problem')>-1:
116 coolProblem.append(curFolder)
117 if line.rstrip().
find(
'is different in COOL and CREST')>0:
118 fld = line.rstrip()[line.rstrip().
find(
'\"')+1:]
119 fld = fld[:fld.find(
'\"')]
120 difFolder.append(fld)
122 command = appPath +
' -g '+ args.gtag+
' -G '+args.gcooltag+
' -f '+ fld +
' -c '+ js[
'db']+
' -t ' + js[
'timestamp']+
' -C '+server
125 if line.rstrip().
find(
'NO IOVs retrieved for the folder')>0:
126 fld = line.rstrip()[(line.rstrip().
find(
'NO IOVs retrieved for the folder')+32):]
129 command = appPath +
' -g '+ args.gtag+
' -G '+args.gcooltag+
' -f '+ fld +
' -c '+ js[
'db']+
' -t ' + js[
'timestamp']+
' -C '+server
132 print(
"Total number of folders:",len(data),
" Different data:",len(difFolder),
" Cool problem:",len(coolProblem),
" Crest problem:",len(crestProblem))
134 print(
"Different data:",difFolder)
135 if len(coolProblem)>0:
136 print(
"Different data:",coolProblem)
137 if len(crestProblem)>0:
138 print(
"Different data:",crestProblem)