Tracks
/
Elixir
Elixir
/
Ejercicios
/
Nivel de log
Nivel de log

Nivel de log

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 de la siguiente manera:

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

Los átomos se representan internamente mediante un número entero en una tabla de búsqueda, que se establece 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 hay muchas formas de hacer esto en Elixir, una de las más sencillas es usar cond/1.

En su forma más simple, cond sigue el primer camino que se evalúa como true, con 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 ningún camino se evalúa como true, el entorno de ejecución lanza un error.

Instrucciones

Estás ejecutando un sistema que consta de unas cuantas aplicaciones que producen muchos logs. Quieres escribir un pequeño programa que agrupe esos logs y les asigne etiquetas según 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.

Log code Log label Supported in legacy apps?
0 trace no
1 debug sí
2 info sí
3 warning sí
4 error sí
5 fatal no
other / not supported unknown -

1. Determina la etiqueta del log

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

Los códigos de log que no se especifican en la tabla deben devolver la etiqueta unknown. Los códigos de log que la tabla indica como no compatibles con las aplicaciones heredadas también deben devolver la etiqueta unknown si el log proviene de una aplicación heredada.

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

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

2. Envía una alerta

Hay que notificar a alguien cuando ocurren cosas inesperadas.

Implementa la función LogLevel.alert_recipient/2 para determinar a quién se debe enviar la alerta. La función debe recibir un código entero y un valor de tipo Boolean que te indica si el log proviene de una aplicación heredada, y devolver el nombre del destinatario como un á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 la etiqueta unknown 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 una pestaña nuevas
Elixir Exercism

¿Todo listo para empezar Nivel de log?

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