136def scanLogfile(args, logfile, ignorePattern=[]):
137 """Scan one log file and print report"""
138 tPattern = re.compile('|'.join(backtrace))
139 fpeStartPattern = re.compile('|'.join(fpeTracebackStart))
140 fpeContPattern = re.compile('|'.join(fpeTracebackCont))
141 ignoreDict = None
142
143 categories = []
144 if args.warnings is True:
145 categories += ['warning']
146 if args.errors is True:
147 categories += ['error/fatal', 'prohibited', 'python error', 'fpe', 'backtrace']
148
149
150 if not ignorePattern:
151 ignorePattern.append('(?!)')
152
153 igLevels = re.compile('|'.join(ignorePattern))
154
155 patterns = {
156 cat: re.compile('|'.join(regexMap[cat])) for cat in categories
157 }
158 resultsA = {cat:[] for cat in categories}
159 with open(logfile, encoding='utf-8') as f:
160 tracing = False
161 fpeTracing = False
162
163 try:
164 for line in f:
165
166
167 if args.errors:
168 if tPattern.search(line) and not igLevels.search(line):
169 tracing = True
170 elif fpeStartPattern.search(line) and not igLevels.search(line):
171 fpeTracing = True
172 elif line =='\n':
173 tracing = False
174 fpeTracing = False
175
176 if tracing:
177
178 resultsA['backtrace'].append(line)
179 elif fpeTracing:
180
181 if fpeStartPattern.search(line) or fpeContPattern.search(line):
182 resultsA['fpe'].append(line)
183 else:
184 fpeTracing = False
185 else:
186 for cat in categories:
187 if patterns[cat].
search(line):
188 resultsA[cat].append(line)
189 except UnicodeDecodeError as e:
190 print(f
'ERROR: Exception raised processing log file: {e}\n')
191
192 ignoreDict = {}
193 results = {cat:[] for cat in categories}
194 if args.config is None:
195 results = resultsA
196 else:
197 if args.showexcludestats:
198 separateIgnoreRegex = [re.compile(line) for line in ignorePattern]
199 ignoreDict = {line:0 for line in ignorePattern}
200
201
202 for cat, messages in resultsA.items():
203 for res in messages:
204 if not igLevels.search(res):
205 results[cat].append(res)
206 elif args.showexcludestats:
207 for i in range(len(separateIgnoreRegex)):
208 if separateIgnoreRegex[i].
search(res):
209 ignoreDict[ignorePattern[i]] += 1
210
211
212
213 found_bad_message = False
214 for cat in categories:
215
216 if args.printpatterns:
217 print(f
'check_log.py - Checking for {cat} messages with pattern: {str(patterns[cat])} in '+logfile+
'\n')
218 if len(results[cat]) > 0:
219 print(f
'Found {len(results[cat])} {cat} message(s) in {logfile}:')
220 for msg
in results[cat]:
print(msg.strip(
'\n'))
221 found_bad_message = True
222
223 if ignoreDict:
225 for s in ignoreDict:
226 if ignoreDict[s] > 0:
227 print(str(ignoreDict[s]) +
"x " + s)
229
230 if found_bad_message:
231 print(f
'FAILURE : problematic message found in {logfile}')
232 return 1
233
234 print(f
'No error/warning messages found in {logfile}')
235 return 0
236
237
void search(TDirectory *td, const std::string &s, std::string cwd, node *n)
recursive directory search for TH1 and TH2 and TProfiles