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