Skip to content

Commit 3b54426

Browse files
committed
[reto-025] Implementado ejercicio extra
1 parent 886ddae commit 3b54426

File tree

1 file changed

+56
-2
lines changed

1 file changed

+56
-2
lines changed

Roadmap/25 - LOGS/python/isilanes.py

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import logging
2-
2+
import os
3+
import re
4+
from datetime import datetime
35

46
LOGFILE = "isilanes.log"
57

@@ -40,7 +42,7 @@ def get_logger_extra(filename: str) -> logging.Logger:
4042

4143
logger.setLevel(logging.DEBUG)
4244
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')
4446
handler.setFormatter(formatter)
4547
logger.addHandler(handler)
4648

@@ -90,6 +92,54 @@ def summary(self) -> None:
9092
idea usar algún tipo de log estructurado.
9193
"""
9294
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ó.")
93143

94144

95145
def main():
@@ -157,6 +207,10 @@ def extra():
157207
print('>>> tm.list()')
158208
tm.list()
159209

210+
print("\nImprimimos un resumen de las tareas añadidas:")
211+
print('>>> tm.summary()')
212+
tm.summary()
213+
160214

161215
if __name__ == "__main__":
162216
main()

0 commit comments

Comments
 (0)