From d0d6267c744c2135f699829ed00d5d6feb3b02fe Mon Sep 17 00:00:00 2001 From: marcsello Date: Fri, 17 Apr 2020 16:51:27 +0200 Subject: [PATCH] Fixed stuff --- app.py | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/app.py b/app.py index e441d51..86c047d 100644 --- a/app.py +++ b/app.py @@ -22,12 +22,11 @@ sentry_sdk.init("https://0a106e104e114bc9a3fa47f9cb0db2f4@sentry.kmlabz.com/10") def main(): - # set logging preferences - logging.basicConfig(filename = '', level = logging.DEBUG) + logging.basicConfig(filename='', level=logging.DEBUG) # connect to redis - r = redis.Redis(host = 'localhost', port = 6379, db = 0) + r = redis.Redis(host='localhost', port=6379, db=0) # set initial consumer addresses ip_list = os.environ['INITIAL_SERVERS'].split(',') @@ -35,20 +34,20 @@ def main(): # get the dictionary of the currently available consumers consumer_list_redis = json.loads((r.get('consumer_list') or b'{}').decode('utf-8')) logging.debug('Get consumer list from redis at first: Done') - temp_dict = { } - + temp_dict = {} + host_name = socket.gethostname() current_ip = socket.gethostbyname(host_name) for ip in ip_list: try: # request synchronization - response = requests.post(f"http://{ip}/sync", json = { 'uuid': os.environ['LOCAL_UUID'] }) + response = requests.post(f"http://{ip}/sync", json={'uuid': os.environ['LOCAL_UUID']}) except requests.exceptions.ConnectionError: continue if response.status_code == 200: - temp_dict[response.json()['uuid']] = { 'ip': ip } + temp_dict[response.json()['uuid']] = {'ip': ip} consumer_list_redis.update(temp_dict) r.set('consumer_list', json.dumps(consumer_list_redis).encode('utf-8')) @@ -76,18 +75,30 @@ def main(): logging.debug('Waiting for next turn') # wait for the next update time - + if current_ip != socket.gethostbyname(host_name): - logging.debug('Check ip : Done') - current_ip = socket.gethostbyname(host_name) - keys = redis.keys('producer_*') - logging.debug('Get producer list from redis: Done') + logging.debug('IP changed. Pushing updates...') + current_ip = socket.gethostbyname(host_name) + keys = r.keys('producer_*') + + logging.debug(f'Pushing update to the following producers: ' + ', '.join(k.decode('utf-8') for k in keys)) + for key in keys: - ip = redis.get(key) - if not ip: + ip = r.get(key) + if ip: + ip = ip.decode('utf-8') + else: continue - response = requests.post(f"http://{ip}/ip", json={'uuid': os.environ['LOCAL_UUID'], 'ip': current_ip}) - logging.debug(response.status_code) + + try: + response = requests.post(f"http://{ip}/ip", json={'uuid': os.environ['LOCAL_UUID'], 'ip': current_ip}) + logging.debug(f"Pushed update to {key.decode('utf-8')} at {ip}. Response: {response.status_code}") + except requests.exceptions.ConnectionError as e: + logging.warning(f"Could not push update to {key.decode('utf-8')}: {str(e)}") + continue + else: + logging.debug('IP unchanged.') + time.sleep(30)