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 for line in f:
166
167
168 if args.errors:
169 if tPattern.search(line) and not igLevels.search(line):
170 tracing = True
171 elif fpeStartPattern.search(line) and not igLevels.search(line):
172 fpeTracing = True
173 elif line =='\n':
174 tracing = False
175 fpeTracing = False
176
177 if tracing:
178
179 resultsA['backtrace'].append(line)
180 elif fpeTracing:
181
182 if fpeStartPattern.search(line) or fpeContPattern.search(line):
183 resultsA['fpe'].append(line)
184 else:
185 fpeTracing = False
186 else:
187 for cat in categories:
188 if patterns[cat].
search(line):
189 resultsA[cat].append(line)
190
191 ignoreDict = {}
192 results = {cat:[] for cat in categories}
193 if args.config is None:
194 results = resultsA
195 else:
196 if args.showexcludestats:
197 separateIgnoreRegex = [re.compile(line) for line in ignorePattern]
198 ignoreDict = {line:0 for line in ignorePattern}
199
200
201 for cat, messages in resultsA.items():
202 for res in messages:
203 if not igLevels.search(res):
204 results[cat].append(res)
205 elif args.showexcludestats:
206 for i in range(len(separateIgnoreRegex)):
207 if separateIgnoreRegex[i].
search(res):
208 ignoreDict[ignorePattern[i]] += 1
209
210
211
212 found_bad_message = False
213 for cat in categories:
214
215 if args.printpatterns:
216 print(f
'check_log.py - Checking for {cat} messages with pattern: {str(patterns[cat])} in '+logfile+
'\n')
217 if len(results[cat]) > 0:
218 print(f
'Found {len(results[cat])} {cat} message(s) in {logfile}:')
219 for msg
in results[cat]:
print(msg.strip(
'\n'))
220 found_bad_message = True
221
222 if ignoreDict:
224 for s in ignoreDict:
225 if ignoreDict[s] > 0:
226 print(str(ignoreDict[s]) +
"x " + s)
228
229 if found_bad_message:
230 print(f
'FAILURE : problematic message found in {logfile}')
231 return 1
232
233 print(f
'No error/warning messages found in {logfile}')
234 return 0
235
236
void search(TDirectory *td, const std::string &s, std::string cwd, node *n)
recursive directory search for TH1 and TH2 and TProfiles