Closed cadusilva closed 11 months ago
como o atual, sobre o certificado SSL do site
Não apareceu pra mim o exemplo do log. Poderia incluir?
como o atual, sobre o certificado SSL do site
Não apareceu pra mim o exemplo do log. Poderia incluir?
Saindo do forno quentinho (ainda não resolveram a treta):
Traceback (most recent call last):
File "/usr/lib/python3.11/urllib/request.py", line 1348, in do_open
h.request(req.get_method(), req.selector, req.data, headers,
File "/usr/lib/python3.11/http/client.py", line 1282, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/usr/lib/python3.11/http/client.py", line 1328, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/usr/lib/python3.11/http/client.py", line 1277, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/usr/lib/python3.11/http/client.py", line 1037, in _send_output
self.send(msg)
File "/usr/lib/python3.11/http/client.py", line 975, in send
self.connect()
File "/usr/lib/python3.11/http/client.py", line 1454, in connect
self.sock = self._context.wrap_socket(self.sock,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/ssl.py", line 517, in wrap_socket
return self.sslsocket_class._create(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/ssl.py", line 1075, in _create
self.do_handshake()
File "/usr/lib/python3.11/ssl.py", line 1346, in do_handshake
self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Hostname mismatch, certificate is not valid for 'weather.visualcrossing.com'. (_ssl.c:992)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/gitwork/clima/openweathermap.py", line 86, in <module>
try_city(
File "/opt/gitwork/clima/openweathermap.py", line 47, in try_city
with urllib.request.urlopen(full_api_url) as url:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/urllib/request.py", line 216, in urlopen
return opener.open(url, data, timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/urllib/request.py", line 519, in open
response = self._open(req, data)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/urllib/request.py", line 536, in _open
result = self._call_chain(self.handle_open, protocol, protocol +
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/urllib/request.py", line 496, in _call_chain
result = func(*args)
^^^^^^^^^^^
File "/usr/lib/python3.11/urllib/request.py", line 1391, in https_open
return self.do_open(http.client.HTTPSConnection, req,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/urllib/request.py", line 1351, in do_open
raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Hostname mismatch, certificate is not valid for 'weather.visualcrossing.com'. (_ssl.c:992)>
esse pedido é um tanto mais complicado que os outros.. Subi uma proposta. Depois me diga se atendeu
esse pedido é um tanto mais complicado que os outros.. Subi uma proposta. Depois me diga se atendeu
Testei aqui trocando weather
por weatheru
na URL da API, para simular que ela esteja fora do ar e defini API_TIMEOUT=60
no .env
. A resposta foi:
Algo inesperado aconteceu.
Traceback (most recent call last):
File "/opt/gitwork/clima/openweathermap.py", line 51, in try_city
json_data = executor.submit(_read_json, (full_api_url,)).result(timeout=timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/concurrent/futures/_base.py", line 449, in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/concurrent/futures/_base.py", line 401, in __get_result
raise self._exception
File "/usr/lib/python3.11/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/gitwork/clima/openweathermap.py", line 92, in _read_json
with urllib.request.urlopen(url) as doc:
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/urllib/request.py", line 216, in urlopen
return opener.open(url, data, timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/urllib/request.py", line 509, in open
req.timeout = timeout
^^^^^^^^^^^
AttributeError: 'tuple' object has no attribute 'timeout'
Erro 500
Status recebido de clima.
Era o resultado esperado? O bot parou de crashar e nos notifica na resposta.
não era o resultado esperado rsrs. A parte de timeout ainda está quebrada. Vou corrigir..
Reabrindo. Quando o timeout tiver sido testado ai sim pode concluir a issue
Eis o novo erro:
Algo inesperado aconteceu.
Traceback (most recent call last):
File "/opt/gitwork/clima/openweathermap.py", line 51, in try_city
json_data = executor.submit(_read_json, full_api_url).result(timeout=timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/concurrent/futures/_base.py", line 451, in result
self._condition.wait(timeout)
File "/usr/lib/python3.11/threading.py", line 323, in wait
if timeout > 0:
^^^^^^^^^^^
TypeError: '>' not supported between instances of 'str' and 'int'
Erro 500
Dev que não testa as coisas na máquina testa onde? Em produção, onerando a área de operações... Mal pelos 2 erros anteriores.
sem problemas hahaha
Bom, com o último commit ele responde certinho quando a URL da API tá certa e retorna erro de DNS quando está errada, então tudo normal aqui. Porém não sei como simular a API demorando a responder para fazer o timeout valer. Vamos esperar até ocorrer uma queda de verdade?
Hoje acho que a maior parte do downtime foi cache de DNS.
Testa com API_TIMEOUT=0 e a URL correta
Testa com API_TIMEOUT=0 e a URL correta
Nesse caso retornou erro 429 e uma resposta dizendo que está sobrecarregado.
Sucesso. Foi isso que eu programei para retornar.
Excelente! Muito obrigado, Fernanda 🥇
Quando a API demorar muito a responder ou retornar outro erro (como o atual, sobre o certificado SSL do site), em vez do bot quebrar e reiniciar, haveria uma resposta dada ao usuário caso o robô não tivesse recebido nada da API em tempo hábil.