Rutas
/
Elixir
Elixir
/
Ejercicios
/
Nivel de registro
Nivel de registro

Nivel de registro

Ejercicio de aprendizaje

Introducción

Átomos

El tipo atom de Elixir representa una constante fija. El valor de un átomo es simplemente su propio nombre. Esto nos da una forma segura en cuanto a tipos de interactuar con los datos. Los átomos se pueden definir así:

# All atoms are preceded with a ':' then follow with alphanumeric snake-cased characters
variable = :an_atom

Internamente, los átomos se representan mediante un número entero en una tabla de búsqueda, que se asigna automáticamente. No es posible cambiar este valor interno.

Cond

A menudo queremos escribir código que pueda ramificarse según una condición. Aunque en Elixir hay muchas formas de hacerlo, una de las más sencillas es usar cond/1.

En su forma más simple, cond sigue la primera rama que se evalúa como true de entre una o más ramas:

cond do
  x > 10 -> :this_might_be_the_way
  y < 7 -> :or_that_might_be_the_way
  true -> :this_is_the_default_way
end

Si ninguna rama se evalúa como true, el entorno de ejecución lanza un error.

Instrucciones

Tienes en marcha un sistema formado por unas cuantas aplicaciones que producen muchos logs. Quieres escribir un pequeño programa que recopile esos logs y les asigne etiquetas en función de su nivel de gravedad. Todas las aplicaciones de tu sistema usan los mismos códigos de log, pero algunas de las aplicaciones heredadas no admiten todos los códigos.

Código de log Etiqueta de log ¿Admitido en las aplicaciones heredadas?
0 trace no
1 debug sí
2 info sí
3 warning sí
4 error sí
5 fatal no
otro / no admitido unknown -

1. Determina la etiqueta del log

Implementa la función LogLevel.to_label/2. Debe recibir un código entero y un valor booleano que te indique si el log procede de una aplicación heredada, y devolver la etiqueta de una línea de log como átomo.

Los códigos de log que no aparecen en la tabla deben devolver la etiqueta unknown. Los códigos de log que la tabla indica como no admitidos en las aplicaciones heredadas también deben devolver la etiqueta unknown si el log procede de una aplicación heredada.

LogLevel.to_label(0, false)
# => :trace

LogLevel.to_label(0, true)
# => :unknown

2. Envía una alerta

Hay que avisar a alguien cuando ocurren cosas inesperadas.

Implementa la función LogLevel.alert_recipient/2 para determinar a quién hay que enviar la alerta. La función debe recibir un código entero y un valor booleano que te indique si el log procede de una aplicación heredada, y devolver el nombre del destinatario como átomo.

Usa la función LogLevel.to_label/2 de la tarea anterior. Si la etiqueta del log es error o fatal, envía la alerta al equipo ops. Si recibes un log con una etiqueta unknown procedente de un sistema heredado, envía la alerta al equipo dev1; las demás etiquetas unknown deben enviarse al equipo dev2. Todas las demás etiquetas de log se pueden ignorar sin problema devolviendo false.

LogLevel.alert_recipient(-1, true)
# => :dev1

LogLevel.alert_recipient(0, false)
# => false
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Elixir Exercism

¿Listo para empezar Nivel de registro?

Regístrate en Exercism para aprender y dominar Elixir con 58 conceptos168 ejercicios y mentoría humana real, todo gratis.