diff --git a/configurator.py b/configurator.py deleted file mode 100644 index 28d6f7a..0000000 --- a/configurator.py +++ /dev/null @@ -1,88 +0,0 @@ -import json -import os -import urllib.parse -from threading import Thread -from time import sleep - -from requests import get - - -class ConfiguratorClient: - def __init__(self, app_name: str, stage: str, need_poll: bool = True): - self.app_name = app_name - self.stage = stage - self.endpoint = 'http://configurator/' - self.fetch_url = urllib.parse.urljoin(self.endpoint, '/api/v1/fetch') - self.config_storage = {} - self.experiment_storage = {} - self.staff_storage = {} - self.poll_data() - if need_poll: - self.poll_data_in_thread() - - def poll_data_in_thread(self): - def inner(): - while True: - sleep(30) - self.fetch() - - Thread(target=inner, daemon=True).start() - - def poll_data(self): - self.fetch(with_exception=True) - - def request_with_retries(self, url, params, with_exception=False, retries_count=3): - exception_to_throw = None - for _ in range(retries_count): - try: - response = get( - url, - params=params - ) - if response.status_code == 200: - return response.json() - print(f'Failed to request {url}, status_code={response.status_code}') - exception_to_throw = Exception('Not 200 status') - except Exception as exc: - print(exc) - exception_to_throw = exc - sleep(1) - print(f'Failed fetching with retries: {url}, {params}') - if with_exception: - raise exception_to_throw - - def fetch(self, with_exception=False): - if self.stage == 'local': - local_platform = json.loads(open('local_platform.json', 'r').read()) - self.config_storage = local_platform['configs'] - self.experiment_storage = local_platform['experiments'] - self.staff_storage = { - key: set(value) - for key, value in local_platform['platform_staff'].items() - } - return - response_data = self.request_with_retries(self.fetch_url, { - 'project': self.app_name, - 'stage': self.stage, - }, with_exception) - self.config_storage = response_data['configs'] - self.experiment_storage = response_data['experiments'] - self.staff_storage = { - key: set(value) - for key, value in response_data['platform_staff'].items() - } - - def is_staff(self, **kwargs): - for key, value in kwargs.items(): - if value in self.staff_storage[key]: - return True - return False - - def get_config(self, name): - return self.config_storage[name] - - def get_experiment(self, name): - return self.experiment_storage[name] - - -configurator = ConfiguratorClient("certupdater", os.getenv("STAGE")) diff --git a/main.py b/main.py index 49e44c4..cc1d83d 100644 --- a/main.py +++ b/main.py @@ -4,8 +4,7 @@ import os import subprocess import time -from requests import post -from configurator import configurator +from requests import get, post from mongo import mongo from blob import minio @@ -49,10 +48,11 @@ def call(command: str) -> Response: def get_hosts() -> list[str]: - if os.getenv("STAGE") == "development": - return list(set(list(configurator.get_config("hosts")))) - else: - return list(set(list(configurator.get_config("hosts")))) + response = get( + f"http://configurator/api/v1/fetch?project=certupdater&stage={os.getenv("STAGE")}" + ).json() + hosts = response["configs"]["hosts"] + return list(hosts) def update_host(host: str) -> str | None: @@ -104,41 +104,47 @@ def update_host(host: str) -> str | None: return None -while True: - now = datetime.datetime.now() - mongo_hosts = mongo.hosts - updated = False - for host in get_hosts(): - if ( - now + datetime.timedelta(days=14) - > mongo_hosts.get( - host, {"expire_time": datetime.datetime.fromtimestamp(1)} - )["expire_time"] - ): - success = update_host(host) - if success: - send_notification( - f"host {host} was not updated with an error: {success}" +if __name__ == "__main__": + while True: + now = datetime.datetime.now() + mongo_hosts = mongo.hosts + hosts = get_hosts() + print(f"got hosts {hosts}") + updated = False + for host in hosts: + if ( + now + datetime.timedelta(days=14) + > mongo_hosts.get( + host, {"expire_time": datetime.datetime.fromtimestamp(1)} + )["expire_time"] + ): + success = update_host(host) + if success: + print(success) + send_notification( + f"host {host} was not updated with an error: {success}" + ) + else: + mongo.update_date(host) + updated = True + send_notification(f"host {host} updated") + else: + print(f"Host {host} does not need to be updated") + if updated: + if os.getenv("STAGE") == "development": + container_id_run = call( + "echo $(docker ps -q -f name=infra-development_nginx)" ) else: - mongo.update_date(host) - updated = True - send_notification(f"host {host} updated") - if updated: - if os.getenv("STAGE") == "development": - container_id_run = call( - "echo $(docker ps -q -f name=infra-development_nginx)" - ) - else: - container_id_run = call("echo $(docker ps -q -f name=infra_nginx)") + container_id_run = call("echo $(docker ps -q -f name=infra_nginx)") - print(container_id_run.code, container_id_run.out, container_id_run.err) + print(container_id_run.code, container_id_run.out, container_id_run.err) - command = f"docker exec {container_id_run.out.strip()} ./refre.sh" - print(command) + command = f"docker exec {container_id_run.out.strip()} ./refre.sh" + print(command) - restart = call(command) - print(restart.code, restart.out, restart.err) - send_notification(f"Balancer for {os.getenv("STAGE")} was restarted") + restart = call(command) + print(restart.code, restart.out, restart.err) + send_notification(f"Balancer for {os.getenv("STAGE")} was restarted") - time.sleep(30) + time.sleep(30)