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