github.com/goexpert/labobservabilidade

Laboratório de Observabilidade


Install
go get github.com/goexpert/labobservabilidade

Documentation

Project github.com/goexpert/lab-observabilidade

Objetivo:

Desenvolver um sistema em Go que receba um CEP, identifica a cidade e retorna o clima atual (temperatura em graus celsius, fahrenheit e kelvin) juntamente com a cidade. Esse sistema deverá implementar OTEL(Open Telemetry) e Zipkin.

Basedo no cenário conhecido "Sistema de temperatura por CEP" denominado Serviço B, será incluso um novo projeto, denominado Serviço A.

Requisitos - Serviço A (responsável pelo input):

  1. O sistema deve receber um input de 8 dígitos via POST, através do schema: { "cep": "29902555" }

  2. O sistema deve validar se o input é valido (contem 8 dígitos) e é uma STRING

    1. Caso seja válido, será encaminhado para o Serviço B via HTTP

    2. Caso não seja válido, deve retornar:

      1. Código HTTP: 422

      2. Mensagem: invalid zipcode

Requisitos - Serviço B (responsável pela orquestração):

  1. O sistema deve receber um CEP válido de 8 digitos

  2. O sistema deve realizar a pesquisa do CEP e encontrar o nome da localização, a partir disso, deverá retornar as temperaturas e formata-lás em: Celsius, Fahrenheit, Kelvin juntamente com o nome da localização.

  3. O sistema deve responder adequadamente nos seguintes cenários:

    1. Em caso de sucesso:

      1. Código HTTP: 200

      2. Response Body: { "city: "São Paulo", "temp_C": 28.5, "temp_F": 28.5, "temp_K": 28.5 }

    2. Em caso de falha, caso o CEP não seja válido (com formato correto):

      1. Código HTTP: 422

      2. Mensagem: invalid zipcode

    3. ​​​Em caso de falha, caso o CEP não seja encontrado:

      1. Código HTTP: 404

      2. Mensagem: can not find zipcode

Observabilidade

Após a implementação dos serviços, adicione a implementação do OTEL + Zipkin:

  1. Implementar tracing distribuído entre Serviço A - Serviço B

  2. Utilizar span para medir o tempo de resposta do serviço de busca de CEP e busca de temperatura

Dicas:

  1. Utilize a API viaCEP (ou similar) para encontrar a localização que deseja consultar a temperatura: https://viacep.com.br/

  2. Utilize a API WeatherAPI (ou similar) para consultar as temperaturas desejadas: https://www.weatherapi.com/

  3. Para realizar a conversão de Celsius para Fahrenheit, utilize a seguinte fórmula: F = C * 1,8 + 32

  4. Para realizar a conversão de Celsius para Kelvin, utilize a seguinte fórmula: K = C + 273

    1. Sendo F = Fahrenheit

    2. Sendo C = Celsius

    3. Sendo K = Kelvin

  5. Para dúvidas da implementação do OTEL:

  6. Para implementação de spans:

  7. Você precisará utilizar um serviço de collector do OTEL

  8. Para mais informações sobre Zipkin:

Entrega

  1. O código-fonte completo da implementação.

  2. Documentação explicando como rodar o projeto em ambiente dev.

  3. Utilize docker/docker-compose para que possamos realizar os testes de sua aplicação.