Skip to content

Commit a5760f5

Browse files
committed
#25-bash
1 parent 5e8b8b5 commit a5760f5

File tree

1 file changed

+195
-0
lines changed

1 file changed

+195
-0
lines changed
Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
#!/bin/bash
2+
3+
# * EJERCICIO:
4+
# * Explora el concepto de "logging" en tu lenguaje. Configuralo y muestra
5+
# * un ejemplo con cada nivel de "severidad" disponible.
6+
7+
8+
echo -e "\n\n=======================================EJERCICIO=======================================\n\n"
9+
10+
11+
12+
# * Emergency: El sistema esta inutilizable
13+
# * Alert : Se debe de actuar inmediatemente
14+
# * Critical: El sistema esta en condiciones criticas
15+
# * Error: Se ha producido un error
16+
# * Warning: Aviso en condiciones de peligro
17+
# * Notice: Aviso normal pero condiciones notables
18+
# * Info: Aviso de informacion, mensajes informatiovs
19+
# * Debug: Depuracion, mensajes de bajo nive
20+
21+
22+
log_message() {
23+
local log_level=$1
24+
local log_message=$2
25+
local log_date=$(date '+%Y-%m-%d %H:%M:%S')
26+
27+
28+
case $log_level in
29+
DEBUG)
30+
echo "$log_date - DEBUG - $log_message"
31+
;;
32+
INFO)
33+
echo "$log_date - INFO - $log_message"
34+
;;
35+
NOTICE)
36+
echo "$log_date - NOTICE - $log_message"
37+
;;
38+
WARNING)
39+
echo "$log_date - WARNING - $log_message"
40+
;;
41+
ERROR)
42+
echo "$log_date - ERROR - $log_message"
43+
;;
44+
CRITICAL)
45+
echo "$log_date - CRITICAL - $log_message"
46+
;;
47+
ALERT)
48+
echo "$log_date - ALERT - $log_message"
49+
;;
50+
EMERGENCY)
51+
echo "$log_date - EMERGENCY - $log_message"
52+
;;
53+
*)
54+
echo "$log_date - UNKNOWN - $log_message"
55+
;;
56+
esac
57+
}
58+
59+
60+
log_message "DEBUG" "[+] Entramos a la funcion"
61+
log_message "INFO" "[+] La conexion con el servidor fue exitosa"
62+
log_message "NOTICE" "[+] Es importante que revises el archivo syslog"
63+
log_message "WARNING" "[!] Queda poco espacio en disco"
64+
log_message "ERROR" "[!] Bloque de sangria previsto"
65+
log_message "CRITICAL" "[!] Hay un error critico. Saliendo de la aplicacion ...."
66+
log_message "ALERT" "[!] Se debe de actuar inmediatemente"
67+
log_message "EMERGENCY" "[!] El sistema esta inutilizable"
68+
69+
# Los logs se pueden generar con el comando 'logger' y se pueden ver en el archivo de logs dependiendo de la distribucion (syslog, rsyslog,...)
70+
# Este script se ha hecho para que aparezcan en la salida por terminal cuando se ejecuta
71+
# con el comando 'logger' sustituimos en el case, tampoco necesitamos la variable 'log_date' ya que el archivo de logs proporciona la fecha y hora. Quedaría asi:
72+
73+
74+
# logger -p user.debug "$log_message"
75+
# logger -p user.info "$log_message"
76+
# logger -p user.notice "$log_message"
77+
# logger -p user.warn "$log_message"
78+
# logger -p user.err "$log_message"
79+
# logger -p user.crit "$log_message"
80+
# logger -p user.alert "$log_message"
81+
# logger -p user.emerg "$log_message"
82+
83+
84+
85+
86+
echo -e "\n\n=======================================DIFICULTAD EXTRA=======================================\n\n"
87+
88+
89+
# * DIFICULTAD EXTRA (opcional):
90+
# * Crea un programa ficticio de gestion de tareas que permita añadir, eliminar
91+
# * y listar dichas tareas.
92+
# * - Añadir: recibe nombre y descripcion.
93+
# * - Eliminar: por nombre de la tarea.
94+
# * Implementa diferentes mensajes de log que muestren informacion segun la
95+
# * tarea ejecutada (a tu eleccion).
96+
# * Utiliza el log para visualizar el tiempo de ejecucion de cada tarea.
97+
98+
99+
function time_spent() {
100+
local star_time=$(date +%s.%N)
101+
"$@"
102+
local end_time=$(date +%s.%N)
103+
local elapsed_time=$(echo "$end_time - $star_time" | bc)
104+
local formatted_time=$(LC_NUMERIC=C printf "%.4f" "$elapsed_time")
105+
echo -e "La funcion $1 ha tardado $formatted_time en ejecutarse\n"
106+
}
107+
108+
109+
declare -a list_task=()
110+
111+
function add_task() {
112+
local task="$1"
113+
local description="$2"
114+
local now=$(date '+%Y-%m-%d %H:%M:%S')
115+
logger -p user.debug "[*] Comienza la funcion para 'añadir tareas'"
116+
echo -e "[$now] (user.debug) [*] Comienza la funcion para 'añadir tareas'"
117+
sleep 1
118+
for t in "${list_task[@]}"; do
119+
if [[ "$t" == "$task" ]]; then
120+
logger -p user.warn "[!] La tarea ya esta en la lista"
121+
echo -e "[$now](user.warn) [!] La tarea ya esta en la lista"
122+
return
123+
fi
124+
done
125+
list_task+=("$task")
126+
sleep 1
127+
logger -p user.info "[+] Se agrega nueva tarea $task - $description"
128+
echo -e "[$now](user.info) [+] Se agrega nueva tarea $task - $description"
129+
logger -p user.debug "[*] Finaliza la funcion 'añadir tareas'"
130+
echo -e "[$now](user.debug) [*] Finaliza la funcion 'añadir tareas'"
131+
}
132+
133+
134+
function del_task() {
135+
local task="$1"
136+
local description="$2"
137+
local now=$(date '+%Y-%m-%d %H:%M:%S')
138+
logger -p user.debug "[*] Comienza la funcion para 'borrar tareas'"
139+
echo -e "[$now](user.debug) [*] Comienza la funcion para 'borrar tareas'"
140+
sleep 1
141+
local new_list=()
142+
local task_found=0
143+
for t in "${list_task[@]}"; do
144+
if [[ "$t" == "$task" ]]; then
145+
task_found=1
146+
else
147+
new_list+=("$t")
148+
fi
149+
done
150+
if [[ $task_found -eq 1 ]]; then
151+
list_task=("${new_list[@]}")
152+
logger -p user.info "[-] Se elimino la tarea: $task - $description"
153+
echo -e "[$now](user.info) [-] Se elimino la tarea: $task - $description"
154+
else
155+
logger -p user.warn "[!] La tarea a eliminar $task - $description no existe"
156+
echo -e "[$now](user.warn) [!] La tarea a eliminar $task - $description no existe"
157+
fi
158+
sleep 1
159+
logger -p user.debug "[*] Finaliza la funcion 'eliminar tareas'"
160+
echo -e "[$now](user.debug) [*] Finaliza la funcion 'eliminar tareas'"
161+
}
162+
163+
164+
function list_tasks() {
165+
local now=$(date '+%Y-%m-%d %H:%M:%S')
166+
logger -p user.debug "[*] Comienza la funcion para 'listar tareas'"
167+
echo -e "[$now](user.debug) [*] Comienza la funcion para 'listar tareas'"
168+
sleep 3
169+
for t in "${list_task[@]}"; do
170+
echo -e "[$now](user.info) [+] La lista de tareas programadas: $t"
171+
logger -p user.info "[+] La lista de tareas programadas: $t"
172+
done
173+
logger -p user.debug "[*] Finaliza la funcion 'listar tareas'"
174+
echo -e "[$now}(user.debug) [*] Finaliza la funcion 'listar tareas'"
175+
176+
}
177+
178+
179+
function decorator() {
180+
time_spent "$@"
181+
}
182+
183+
184+
185+
decorator add_task "task1" "recepcionar pedidos"
186+
decorator add_task "task2" "preparar pedidos"
187+
decorator add_task "task3" "enviar pedidos"
188+
decorator add_task "task2" "preparar pedidos"
189+
190+
decorator list_tasks
191+
192+
decorator del_task "task4" "ordenar pedidos"
193+
decorator del_task "task3" "enviar pedidos"
194+
195+
decorator list_tasks

0 commit comments

Comments
 (0)