Last active
July 25, 2024 13:13
-
-
Save faelp22/bc23c5980a4904b880f5c15f14cec01b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import subprocess as terminal | |
import sys | |
import time | |
import requests | |
from requests.exceptions import ConnectionError as ErrorConecxao | |
from requests.exceptions import ReadTimeout | |
class FakeResponse: | |
status_code = 504 | |
def pause(): | |
try: | |
time.sleep(60 * 5) # espera 5 minutos | |
except KeyboardInterrupt: | |
print('\nSaindo Ctrl+C pressionado!') | |
sys.exit() | |
def check_server(response): | |
try: | |
if response.status_code != 200: | |
print('Reiniciando Servidor!') | |
terminal.call(['/usr/bin/ls', '/', '-lha']) | |
# 1 possivel forma | |
# terminal.call(['C:\Program Files\Apache Software\Tomcat 7.0\catalina.bat', 'stop']) | |
# terminal.call(['C:\Program Files\Apache Software\Tomcat 7.0\catalina.bat', 'start']) | |
# 2 possivel forma | |
# terminal.call(['C:\Program Files\Apache Software\Tomcat 7.0\shutdown.bat']) | |
# terminal.call(['C:\Program Files\Apache Software\Tomcat 7.0\startup.bat']) | |
return | |
print('Servidor Ok :)') | |
except Exception as error: | |
print('Erro ao executar o Comando, verifique o caminho/nome do mesmo ou se os argumentos estão certos') | |
print(error) | |
sys.exit() | |
def main(): | |
url_servidor = 'http://127.0.0.1:5000/api/v1/usuario' | |
while True: | |
try: | |
resposta = requests.get(url_servidor, timeout=10) # timeout: espera 10 segundos | |
check_server(resposta) | |
pause() | |
except ReadTimeout: | |
print('Servidor não responde!') | |
check_server(FakeResponse()) | |
pause() | |
except ErrorConecxao as error: | |
print('Servidor não está acessivel nesta URL ou PORTA, verifique a URL correta.') | |
print(error) | |
sys.exit() | |
except KeyboardInterrupt: | |
print('\nSaindo Ctrl+C pressionado!') | |
sys.exit() | |
if __name__ == '__main__': | |
main() | |
''' | |
Em programação você nunca vai saber de tudo, então um dos caminhos é vc saber "o quer vc quer", e | |
o "como" ai vai depender da linguagem. | |
Ex: Quero reiniciar o servidor java tomcat 7. | |
1 - preciso mandar uma requesisição HTTP para saber se o servidor está funcionando. | |
p: Como enviar requisição HTTP GET com python? | |
https://pythonhelp.wordpress.com/2013/03/12/acessando-recursos-na-web-com-python/ | |
precisa instalar com pip: pip install -U requests | |
r: utilizando a biblioteca "requests" é uma das formas | |
primeiro instala a biblioteca pois a mesma não vem instalado no python | |
depois faz a import da mesma e chamando o modulo seguida do metodo que desejo passando a URL. | |
resposta = requests.get(URL) | |
2 - preciso esperar uma quantidade x de segundo caso o servidor não responda preciso reiniciar | |
p: Como setar timeout no "requests" python para esperar x segundos? | |
https://stackoverflow.com/questions/21965484/timeout-for-python-requests-get-entire-response | |
veja a primeira responsta marcada como certo, "para o problema da pessoa deu certo" | |
pricisa instalar com pip: pip install -U eventlet | |
r: o modulo "eventlet" pode ser usado, basta importar o mesmo e chamar o metodo Timeout passando o argumento | |
em segundos, mas tambem na lib "requests" tem o argumento de setar o tempo de espera: | |
requests.get(url, verify=False, timeout=10) | |
verify: é para ignorar caso o servido tenha SSL invalido | |
timeout: é tempo de de esperar em segundos | |
3 - preciso verificar se a resposta do servidor foi valida se não reinicio | |
p: como pegar o status code http do requestes? | |
python requests status code | |
https://realpython.com/python-requests/ | |
r: quando requests reponde ele tras informações, basta pegar o resultado e colocar em uma variavel, | |
a mesma vai ter as informações retornadas, neste caso precisamos apenas saber se é diferente de 200. | |
https://pt.wikipedia.org/wiki/Lista_de_c%C3%B3digos_de_estado_HTTP | |
4 - Preciso agora executar comando no sistema operacional. | |
p: Como executar comandos em Shell/CMD com python | |
https://pt.stackoverflow.com/questions/29846/como-chamar-comando-externo-com-python | |
5 - preciso que esse comando python rode a cada 5m de forma infinita | |
p: como fazer o python esperar x segundos | |
https://pt.stackoverflow.com/questions/21409/temporizador-em-python | |
r: basta importa o modulo "time" depois chamar a função sleep passado os segundos | |
6 - Preciso reinicar o servidor tomcat 7 | |
p: Como reiniciar servidor tomcat 7 no windows | |
https://crunchify.com/how-to-start-stop-apache-tomcat-server-via-command-line-setup-as-windows-service/ | |
você precisa saber como é ai no seu servidor | |
''' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment