diff --git a/consumer_api/app.py b/consumer_api/app.py index a1ceecf..dbedea3 100644 --- a/consumer_api/app.py +++ b/consumer_api/app.py @@ -18,6 +18,7 @@ sentry_sdk.init("https://0a106e104e114bc9a3fa47f9cb0db2f4@sentry.kmlabz.com/10") app = Flask(__name__) app.config['REDIS_URL'] = os.environ['REDIS_URL'] +app.config['LOCAL_UUID'] = os.environ['LOCAL_UUID'] redis_client.init_app(app) diff --git a/consumer_api/views/consumers_view.py b/consumer_api/views/consumers_view.py index feb59ef..0582bc4 100644 --- a/consumer_api/views/consumers_view.py +++ b/consumer_api/views/consumers_view.py @@ -1,7 +1,13 @@ +import json + +from db import redis_client +from flask import jsonify, current_app from flask_classful import FlaskView class ConsumersView(FlaskView): def get(self): - return "ConsumersView" + consumer_list = json.loads((redis_client.get("consumer_list") or b"{}").decode('utf-8')) + current_app.logger.warning(jsonify([v['ip'] for k, v in consumer_list.items()])) + return jsonify([v['ip'] for k, v in consumer_list.items()]) diff --git a/consumer_api/views/log_view.py b/consumer_api/views/log_view.py index fc589f4..abfff93 100644 --- a/consumer_api/views/log_view.py +++ b/consumer_api/views/log_view.py @@ -1,7 +1,9 @@ +from flask import request, current_app, Response from flask_classful import FlaskView class LogView(FlaskView): - def get(self): - return "LogView" \ No newline at end of file + def post(self): + current_app.logger.info(f"New message: {request.json['message']}") + return Response(status = 204) diff --git a/consumer_api/views/sync_view.py b/consumer_api/views/sync_view.py index 6f17796..a6f8eb5 100644 --- a/consumer_api/views/sync_view.py +++ b/consumer_api/views/sync_view.py @@ -1,7 +1,32 @@ +import json +from flask import request, current_app, jsonify from flask_classful import FlaskView +from db import redis_client # ez nagyon otvar class SyncView(FlaskView): - def get(self): - return "SyncView" + def post(self): + remote_uuid = request.json['uuid'] + remote_ip = request.remote_addr + + consumer_list = json.loads((redis_client.get("consumer_list") or b"{}").decode('utf-8')) + + # Log something about it + if remote_uuid not in consumer_list.keys(): + current_app.logger.info(f"New consumer registered (unknown UUID): {remote_uuid} at {remote_ip}") + else: # known + if consumer_list[remote_uuid]['ip'] != remote_ip: + current_app.logger.info(f"Address of consumer {remote_uuid} changed to {remote_ip}") + + consumer_list.update( + {remote_uuid: {"ip": remote_ip}} + ) + + redis_client.set("consumer_list", json.dumps(consumer_list).encode('utf-8')) + + response = { + "uuid": current_app.config['LOCAL_UUID'] + } + + return jsonify(response)