import json import time from flask import request, current_app, jsonify from flask_classful import FlaskView from db import redis_client class SyncView(FlaskView): def post(self): remote_uuid = request.json['uuid'] remote_ip = request.remote_addr cust_key = f"consumer_{remote_uuid}" last_known_info = json.loads((redis_client.get(cust_key) or b"{}").decode('utf-8')) if not last_known_info: current_app.logger.info(f"New consumer registered (unknown UUID): {remote_uuid} at {remote_ip}") else: if last_known_info['ip'] != remote_ip: current_app.logger.info(f"Address of consumer {remote_uuid} changed to {remote_ip}") info = { "uuid": remote_uuid, "ip": remote_ip, "last_seen": time.time() } redis_client.set(cust_key, json.dumps(info).encode('utf-8')) redis_client.expire(cust_key, current_app.config["CUSTOMER_TIMEOUT"]) # return with the current UUID response = { "uuid": current_app.config['LOCAL_UUID'] } return jsonify(response)