Skip to content

Commit 59ecbd3

Browse files
committed
#25 - python y javascript
1 parent 978e1aa commit 59ecbd3

File tree

2 files changed

+223
-0
lines changed

2 files changed

+223
-0
lines changed
+131
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
/*
2+
* EJERCICIO:
3+
* Explora el concepto de "logging" en tu lenguaje. Configúralo y muestra
4+
* un ejemplo con cada nivel de "severidad" disponible.
5+
*
6+
* DIFICULTAD EXTRA (opcional):
7+
* Crea un programa ficticio de gestión de tareas que permita añadir, eliminar
8+
* y listar dichas tareas.
9+
* - Añadir: recibe nombre y descripción.
10+
* - Eliminar: por nombre de la tarea.
11+
* Implementa diferentes mensajes de log que muestren información según la
12+
* tarea ejecutada (a tu elección).
13+
* Utiliza el log para visualizar el tiempo de ejecución de cada tarea.
14+
*/
15+
16+
17+
// instalar la biblioteca de logging 'winston'
18+
19+
const winston = require('winston')
20+
21+
const logger1 = winston.createLogger({
22+
level: 'debug',
23+
format: winston.format.json(),
24+
transports: [
25+
new winston.transports.Console(),
26+
new winston.transports.File({filename: 'app.log'}),
27+
]
28+
})
29+
30+
logger1.info("An info log")
31+
logger1.error("An error log")
32+
33+
34+
35+
/////////////// --------------------------------- EXTRA ---------------------------------- ///////////////////
36+
37+
const readline = require('readline');
38+
const winston = require('winston');
39+
const { format } = require('path');
40+
41+
const rl = readline.createInterface({
42+
input: process.stdin,
43+
output: process.stdout
44+
});
45+
46+
// configuracion del logger con winston
47+
48+
const logger = winston.createLogger({
49+
level: 'debug',
50+
format: winston.format.combine(
51+
winston.format.timestamp({format: 'YYYY-MM-DD HH:mm:ss' }),
52+
winston.format.printf(({ timestamp, level, message}) => {
53+
return `${timestamp} - ${level.toUpperCase()} - ${message}`;
54+
})
55+
),
56+
transports: [
57+
new winston.transports.Console(),
58+
new winston.transports.File({ filename: 'test.log' })
59+
]
60+
});
61+
62+
63+
class TaskManager {
64+
constructor() {
65+
this.tasks = {};
66+
logger.info("Gestor de Tareas inicializado.");
67+
}
68+
69+
addTask() {
70+
rl.question("Ingrese el nombre de la tarea: ", name => {
71+
rl.question("Ingrese la descripción de la tarea: ", description => {
72+
if (this.tasks[name]) {
73+
logger.warn(`Intento de añadir una tarea ya existente: ${name}`);
74+
return;
75+
}
76+
const execution_time = Math.floor(Math.random() * 5) + 1;
77+
this.tasks[name] = {
78+
description,
79+
execution_time
80+
};
81+
logger.info(`Tarea '${name}' añadida.`);
82+
logger.debug(`Tiempo de ejecución de la tarea '${name}': ${execution_time} segundos.`);
83+
});
84+
});
85+
}
86+
87+
deleteTask() {
88+
rl.question("Ingrese el nombre de la tarea a eliminar: ", name => {
89+
if (!this.tasks[name]) {
90+
logger.warn(`Intento de eliminar una tarea inexistente: ${name}`);
91+
return;
92+
}
93+
delete this.tasks[name];
94+
logger.info(`Tarea '${name}' eliminada.`);
95+
});
96+
}
97+
98+
listTasks() {
99+
if (Object.keys(this.tasks).length === 0) {
100+
logger.info("No hay tareas para listar.");
101+
return;
102+
}
103+
for (const [name, info] of Object.entries(this.tasks)) {
104+
console.log(`Tarea: ${name} - Descripción: ${info.description} - Tiempo de ejecución: ${info.execution_time} segundos`);
105+
logger.info(`Tiempo de ejecución de la tarea '${name}' es ${info.execution_time} segundos.`);
106+
}
107+
}
108+
}
109+
110+
111+
const manager = new TaskManager();
112+
113+
function mainMenu(){
114+
rl.question("\nGestor de Tareas\n1. Añadir Tarea\n2. Eliminar Tarea\n3. Listar Tareas\n4. Salir\n Seleccione una opcion: ", choice => {
115+
if (choice === '1'){
116+
manager.addTask();
117+
}else if (choice === '2'){
118+
manager.deleteTask();
119+
}else if (choice === '3'){
120+
manager.listTasks();
121+
}else if (choice === '4'){
122+
rl.close();
123+
return;
124+
}else{
125+
logger.error("Opción no válida, por favor intente nuevamente.");
126+
}
127+
mainMenu();
128+
});
129+
}
130+
131+
mainMenu();
+92
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
"""
2+
* EJERCICIO:
3+
* Explora el concepto de "logging" en tu lenguaje. Configúralo y muestra
4+
* un ejemplo con cada nivel de "severidad" disponible.
5+
*
6+
* DIFICULTAD EXTRA (opcional):
7+
* Crea un programa ficticio de gestión de tareas que permita añadir, eliminar
8+
* y listar dichas tareas.
9+
* - Añadir: recibe nombre y descripción.
10+
* - Eliminar: por nombre de la tarea.
11+
* Implementa diferentes mensajes de log que muestren información según la
12+
* tarea ejecutada (a tu elección).
13+
* Utiliza el log para visualizar el tiempo de ejecución de cada tarea.
14+
"""
15+
16+
import logging
17+
18+
logging.basicConfig(
19+
level=logging.DEBUG,
20+
#filename="test.log", filemode="w", # Crea un archivo.log con los diferentes mensajes o logs
21+
format="%(asctime)s - %(levelname)s - %(message)s",
22+
datefmt="%Y-%m-%d %H:%M:%S"
23+
)
24+
25+
logger = logging.getLogger(__name__)
26+
27+
logger.debug('Este es un mensaje de depuración (DEBUG)')
28+
logger.info('Este es un mensaje informativo (INFO)')
29+
logger.warning('Este es un mensaje de advertencia (WARNING)')
30+
logger.error('Este es un mensaje de error (ERROR)') # Usado normalmente en try/catch
31+
logger.critical('Este es un mensaje crítico (CRITICAL)')
32+
33+
34+
#############------------------------------------ EXTRA ------------------------------ #####################
35+
36+
import random
37+
38+
class TaskManager:
39+
40+
def __init__(self):
41+
self.tasks = {}
42+
logger.info("Gestor de Tareas inicializado.")
43+
44+
def add_task(self):
45+
name = input("Ingrese el nombre de la tarea: ")
46+
description = input("Ingrese la descripcion de la tarea: ")
47+
if name in self.tasks:
48+
logger.warning(f"Intento de añadir una tarea ya existente: {name}")
49+
return
50+
execution_time = random.randint(1, 5)
51+
self.tasks[name] = {
52+
"description": description,
53+
"execution_time": execution_time
54+
}
55+
logger.info(f"Tarea '{name}' añadida.")
56+
logger.debug(f"Tiempo de ejecucion de la tarea: '{name}': {execution_time} segundos.")
57+
58+
def delete_task(self):
59+
name = input("Ingrese el nombre de la tarea a eliminar: ")
60+
if name not in self.tasks:
61+
logger.warning(f"Intento de eliminar una tarea inexistente: {name}")
62+
return
63+
del self.tasks[name]
64+
logger.info(f"Tarea '{name}' eliminada.")
65+
66+
def list_tasks(self):
67+
if not self.tasks:
68+
logger.info("No hay tareas para listar")
69+
return
70+
for name, info in self.tasks.items():
71+
print(f"Tarea: {name} - Descripcion: {info['description']} - Tiempo de ejecucion: {info['execution_time']} segundos")
72+
logger.info(f"Tiempo de ejecucion de la tarea '{name}' es {info['execution_time']} segundos.")
73+
74+
manager = TaskManager()
75+
76+
while True:
77+
print("\nGestor de Tareas")
78+
print("1. Añadir tarea")
79+
print("2. Eliminar tarea")
80+
print("3. Listar tareas")
81+
print("4. Salir")
82+
choice = input("Seleccione una opción: ")
83+
if choice == '1':
84+
manager.add_task()
85+
elif choice == '2':
86+
manager.delete_task()
87+
elif choice == '3':
88+
manager.list_tasks()
89+
elif choice == '4':
90+
break
91+
else:
92+
print("Opción no válida, por favor intente nuevamente.")

0 commit comments

Comments
 (0)