|
1 | 1 | import logging |
2 | | - |
| 2 | +import os |
| 3 | +import re |
| 4 | +from datetime import datetime |
3 | 5 |
|
4 | 6 | LOGFILE = "isilanes.log" |
5 | 7 |
|
@@ -40,7 +42,7 @@ def get_logger_extra(filename: str) -> logging.Logger: |
40 | 42 |
|
41 | 43 | logger.setLevel(logging.DEBUG) |
42 | 44 | handler = logging.FileHandler(filename=filename) |
43 | | - formatter = logging.Formatter('%(asctime)s:%(name)s:%(levelname)s:%(message)s') |
| 45 | + formatter = logging.Formatter('%(asctime)s|%(name)s|%(levelname)s|%(message)s') |
44 | 46 | handler.setFormatter(formatter) |
45 | 47 | logger.addHandler(handler) |
46 | 48 |
|
@@ -90,6 +92,54 @@ def summary(self) -> None: |
90 | 92 | idea usar algún tipo de log estructurado. |
91 | 93 | """ |
92 | 94 | tasks = {} |
| 95 | + if not os.path.exists(self.log_filename): |
| 96 | + self.log.info("No hay log disponible.") |
| 97 | + return |
| 98 | + |
| 99 | + with open(self.log_filename, "r", encoding="utf-8") as f: |
| 100 | + for line in f: |
| 101 | + fields = line.split("|") |
| 102 | + if len(fields) != 4: |
| 103 | + continue |
| 104 | + |
| 105 | + ts = fields[0] |
| 106 | + try: |
| 107 | + t = datetime.strptime(ts, "%Y-%m-%d %H:%M:%S,%f") |
| 108 | + except ValueError: |
| 109 | + continue |
| 110 | + |
| 111 | + msg = fields[-1] |
| 112 | + patt = re.compile(r"'(?P<task>\w+)'") |
| 113 | + match = patt.search(msg) |
| 114 | + |
| 115 | + if not match: |
| 116 | + continue |
| 117 | + |
| 118 | + task = match.group("task") |
| 119 | + |
| 120 | + if task not in tasks: |
| 121 | + tasks[task] = {"start": None, "end": None} |
| 122 | + |
| 123 | + if "fue añadida" in line: |
| 124 | + tasks[task]["start"] = t |
| 125 | + elif "fue eliminada" in line: |
| 126 | + tasks[task]["end"] = t |
| 127 | + else: |
| 128 | + continue |
| 129 | + |
| 130 | + now = datetime.now() |
| 131 | + for i, (task, data) in enumerate(tasks.items()): |
| 132 | + start: datetime = data.get("start") |
| 133 | + if not start: |
| 134 | + continue |
| 135 | + |
| 136 | + end = data.get("end") |
| 137 | + if end: |
| 138 | + dt_ms = (end - start).total_seconds() * 1000 # noqa |
| 139 | + print(f" {i:2d} - {task}: ha durado {dt_ms:.2f} ms.") |
| 140 | + else: |
| 141 | + dt_ms = (now - start).total_seconds() * 1000 # noqa |
| 142 | + print(f" {i:2d} - {task}: aún no ha terminado. Lleva {dt_ms:.2f} ms desde que se añadió.") |
93 | 143 |
|
94 | 144 |
|
95 | 145 | def main(): |
@@ -157,6 +207,10 @@ def extra(): |
157 | 207 | print('>>> tm.list()') |
158 | 208 | tm.list() |
159 | 209 |
|
| 210 | + print("\nImprimimos un resumen de las tareas añadidas:") |
| 211 | + print('>>> tm.summary()') |
| 212 | + tm.summary() |
| 213 | + |
160 | 214 |
|
161 | 215 | if __name__ == "__main__": |
162 | 216 | main() |
|
0 commit comments