74 time_per_events_arr = []
76 unsuccessful_arr_files = []
77 successful_arr_files = []
79 files_to_walk = os.walk(_dir)
81 files_to_walk = [next(os.walk(_dir))]
84 for root, dirs, files
in files_to_walk:
88 time, is_successful, failure_marker, run_number, log_event_number, file_processing = self.
parse_logparse_log(os.path.join(root, file))
90 except PermissionError:
91 print(f
"Permission denied - skipping file {os.path.join(root, file)}")
93 except Exception
as ex:
94 print(f
"Error while processing: {ex} - skipping file {os.path.join(root, file)}")
97 print(
"+", end=
"", flush=
True)
100 print(f
"\n Failure marker was found for file - skipping {os.path.join(root, file)}")
104 if is_successful >= self.
SUCCESS:
105 time_arr.append(time)
108 if run_number
is not None:
110 if event_count
is not None and event_count == 0:
112 if event_count
is None and (log_event_number
is not None and log_event_number != 0):
113 event_count = log_event_number
114 if event_count
is not None:
116 print(f
"Warning: more than one run records: the latest period number is selected for {os.path.join(root, file)}")
117 time_per_events_arr.append(time / event_count)
119 print(f
"\nCan't get event count from the database for file {os.path.join(root, file)}")
121 print(f
"\n The log shows that the task was not ended successfully - skipping {os.path.join(root, file)}")
122 elif is_successful >= self.
SUCCESS:
123 print(f
"\nCan not parse time in successfully ended log file {os.path.join(root, file)}")
125 if is_successful < self.
SUCCESS:
126 unsuccessful_arr.append(os.path.join(root, file))
127 if file_processing !=
None:
128 unsuccessful_arr_files.append(file_processing)
130 print(f
"\nUnsuccessfully processed file name was not defined in {os.path.join(root, file)}.")
132 if file_processing !=
None:
133 successful_arr_files.append(file_processing)
135 print(f
"\nSuccessfully processed file name was not defined in {os.path.join(root, file)}.")
138 raise NoDataException
140 print(f
"\n\nTotal files parsed: {files_parsed}")
141 return np.array(time_arr), np.array(time_per_events_arr), unsuccessful_arr, unsuccessful_arr_files, successful_arr_files, files_parsed
145 arr, arr_per_event, unsuccessful_arr, unsuccessful_arr_files, successful_arr_files, files_parsed = self.
parse_dirparse_dir(_dir, recursive)
147 unit = config.UNITS[0]
148 title = f
"Array of time values is empty."
151 title = f
"Time, {unit}. Mean = {np.mean(arr):.3f} {unit}, overall {len(arr)} files."
153 if len(arr_per_event) == 0:
154 unit_per_event = config.UNITS[0]
155 title_per_event = f
"Array of time values per event is empty."
158 title_per_event = f
"Time per event, {unit_per_event}. Mean = {np.mean(arr_per_event):.3f} {unit_per_event}, " \
159 f
"overall {len(arr_per_event)} files."
162 if len(unsuccessful_arr) == 0:
163 print(
"All runs ended successfully.\n")
165 print(
"Unsuccessfully ended runs:")
166 for elem
in unsuccessful_arr:
168 if config.UNSUCCESSFUL_LOG_FILE
is not None:
170 with open(config.UNSUCCESSFUL_LOG_FILE,
"wt")
as f:
171 for elem
in sorted(unsuccessful_arr_files):
173 print(f
"Unsuccessfully processed files list ({len(unsuccessful_arr_files)}/{files_parsed}, {(100*len(unsuccessful_arr_files)/files_parsed):.1f}%)"\
174 f
" was saved to {config.UNSUCCESSFUL_LOG_FILE}")
175 if config.SUCCESSFUL_LOG_FILE
is not None:
176 with open(config.SUCCESSFUL_LOG_FILE,
"wt")
as f:
177 for elem
in sorted(successful_arr_files):
179 print(f
"Successfully processed files list ({len(successful_arr_files)}/{files_parsed}, {(100*len(successful_arr_files)/files_parsed):.1f}%)"\
180 f
" was saved to {config.SUCCESSFUL_LOG_FILE}")
183 print(
"Obtained characteristics:")
185 print(
" Array of time values is empty.")
187 print(f
" Mean time = {np.mean(arr):.3f} {unit}.")
188 print(f
" Summary time = {np.sum(arr):.3f} {unit}.")
189 if arr_per_event.size == 0:
190 print(
" Array of time values per event is empty.")
192 print(f
" Mean time per event = {np.mean(arr_per_event):.3f} {unit_per_event}.")
194 return (arr, unit, title, arr_per_event, unit_per_event, title_per_event)
259 failure_marker =
False
264 file_processing =
None
265 with open(log_file,
'r')
as f:
267 if config.START
in line:
268 result = re.search(config.START_REGEX, line)
272 print(f
"Error while parsing start datetime in log file: {log_file}")
273 if config.END
in line:
274 result = re.search(config.END_REGEX, line)
278 print(f
"Error while parsing end datetime in log file: {log_file}")
279 if config.SUCCESS
in line:
282 failure_marker =
True
283 if config.RUN_EXTENSION
in line
and run_number ==
None:
284 result = re.search(config.RUN_REGEX, line)
286 run_number = int(result.group(1))
287 if event_number ==
None:
288 result = re.search(config.EVENT_REGEX, line)
290 event_number = int(result.group(1))
291 if file_processing ==
None:
292 if line.startswith(config.PROCESSING_LINE_START):
293 result = re.search(config.PROCESSING_REGEX, line)
295 if len(result.groups()) > 0:
296 file_processing = result.groups()[0]
298 if start ==
None or end ==
None:
301 delta = (end - start).total_seconds()
305 return delta, is_successful, failure_marker, run_number, event_number, file_processing