49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
|
import requests
|
||
|
import subprocess
|
||
|
|
||
|
from dotenv import load_dotenv
|
||
|
from os import getenv
|
||
|
from time import sleep
|
||
|
|
||
|
load_dotenv()
|
||
|
|
||
|
CHECK_INTERVAL = int(getenv('CHECK_INTERVAL'))
|
||
|
|
||
|
CONFIG = [
|
||
|
{'url': getenv('MOSHFERATU_DEV_URL'), 'container_name': getenv('MOSHFERATU_DEV_CONTAINER')},
|
||
|
{'url': getenv('MOSHINGTON_URL'), 'container_name': getenv('MOSHINGTON_CONTAINER')}
|
||
|
]
|
||
|
|
||
|
def healthy(url):
|
||
|
"""Check the health of a web application by pinging the given URL."""
|
||
|
try:
|
||
|
response = requests.get(url, timeout = 20)
|
||
|
if response.status_code == 200:
|
||
|
print(f'Healthcheck successful for {url}')
|
||
|
return True
|
||
|
else:
|
||
|
print(f'Healthcheck failed for {url} with status code: {response.status_code}')
|
||
|
return False
|
||
|
except requests.RequestException as e:
|
||
|
print(f'Healthcheck request failed for {url}: {e}')
|
||
|
return False
|
||
|
|
||
|
def restart_docker_container(container_name):
|
||
|
"""Restart the specified Docker container."""
|
||
|
print(f'Restarting Docker container: {container_name}...')
|
||
|
result = subprocess.run(['docker', 'restart', container_name], capture_output = True, text = True)
|
||
|
if result.returncode == 0:
|
||
|
print(f'Docker container {container_name} restarted successfully.')
|
||
|
else:
|
||
|
print(f'Failed to restart Docker container {container_name}: {result.stderr}')
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
while True:
|
||
|
for config in CONFIG:
|
||
|
url = config['url']
|
||
|
container_name = config['container_name']
|
||
|
|
||
|
if not healthy(url):
|
||
|
restart_docker_container(container_name)
|
||
|
|
||
|
sleep(CHECK_INTERVAL)
|