diff --git a/main.py b/main.py index 15f882e..f462c77 100644 --- a/main.py +++ b/main.py @@ -7,7 +7,7 @@ import os import socket, struct import requests from flask import Flask - +import time import consul from logging.config import dictConfig @@ -28,6 +28,18 @@ dictConfig({ } }) +def convert_seconds(seconds): + if seconds > 0: + # generated by ChatGPT + days = seconds // (24 * 60 * 60) + seconds = seconds % (24 * 60 * 60) + hours = seconds // (60 * 60) + seconds = seconds % (60 * 60) + minutes = seconds // 60 + seconds = seconds % 60 + return (f"{days} days {hours} hours {minutes} minutes {seconds} seconds") + else: + return "never" def get_ip(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) @@ -63,9 +75,21 @@ else: BASE_CONSUL_URL = 'http://' + CONSUL + ':8500' -config = {'default':'config'} -prev_config = {'default':'config'} -changed = 0 +configuration = { + 'default': { + 'config' : {'default':'config'} + , 'time' : int(time.time()) + } + , 'consul' :{ + 'config' : {} + , 'time': 0 + , 'state': { + 'status': '' + , 'time': 0 + } + } +} + SERVICE_ADDRESS = get_ip() PORT = 8080 @@ -77,17 +101,17 @@ app = Flask(__name__) @app.route('/') def home(): - global config - global prev_config - global changed - if changed == 1: - ad = f'
configuration changed. new configuration: {config} | prev config: {prev_config}' - if config != {}: - prev_config = config - changed = 0 + global configuration + message = f"Hello World,
I`m {HOSTNAME} from {SERVICE_ADDRESS} {PORT} {UUID}
my config: {configuration['default']['config']} |" + if configuration['consul']['config'] != configuration['default']['config']: + delta_time = convert_seconds(configuration['consul']['time']-configuration['default']['time']) + message += f"
configuration changed {delta_time} ago. new configuration: {configuration['consul']['config']} | default config: {configuration['default']['config']}" else: - ad = f'configuration NOT changed: {config}' - return f"Hello World,
I`m {HOSTNAME} from {SERVICE_ADDRESS} {PORT} {UUID}
my config: {config} | {ad}" + message += f'configuration NOT changed' + message += '
' + message += f"Consul request state: {configuration['consul']['state']['status']} was {convert_seconds(int(time.time()) - configuration['consul']['state']['time'])} ago" + message += f'
' + return message @app.route('/health') @@ -95,16 +119,23 @@ def hello_world(): data = { 'status': 'healthy' } - global config - global prev_config - global changed + global configuration try: _, resp = c.kv.get('PythonApp/config', wait='2s') - resp_config = resp['Value'] - if resp_config != prev_config: - changed = 1 - config = resp_config + configuration['consul'] = { + 'config' : resp['Value'] + , 'time': int(time.time()) + , 'state': { + 'status': 'OK' + , 'time': int(time.time()) + } + } except Exception as e: + configuration['consul']['state'] = { + 'status': 'Failed to fetch' + , 'time': int(time.time()) + } + # config = {} app.logger.debug(f'Get config from consul failed: {e}') return json.dumps(data)