def post(self): """ Add subscription """ data = request.get_json() app_name = request.headers["x-leek-app-name"] subscription = SubscriptionSchema.validate(data) subscription.update({ "org_name": g.org_name, "app_name": app_name, "app_key": settings.LEEK_AGENT_API_SECRET, "api_url": settings.LEEK_API_URL }) name = subscription.pop("name") # Check if there is already a subscription with the same name with open(SUBSCRIPTIONS_FILE) as s: subscriptions = json.load(s) s = subscriptions.get(name) if s: return responses.subscription_already_exist # Ensure connection try: connection = Connection(subscription["broker"]) connection.ensure_connection(max_retries=2) connection.release() except AccessRefused: return responses.wrong_access_refused except Exception: return responses.broker_not_reachable # Add subscription subscriptions[name] = subscription with open(SUBSCRIPTIONS_FILE, 'w') as f: json.dump(subscriptions, f, indent=4, sort_keys=False) return {"name": name, **subscription}, 200
def post(self): """ Add subscription """ data = request.get_json() subscription = SubscriptionSchema.validate(data) if subscription["batch_max_number_of_messages"] > subscription[ "prefetch_count"]: raise SchemaError( "Batch max number of messages should be <= prefetch count!") subscription.update({ "org_name": g.org_name, "app_name": g.app_name, "app_key": settings.LEEK_AGENT_API_SECRET, "api_url": settings.LEEK_API_URL }) # Check subscription already exist exist, _ = utils.lookup_subscription(subscription["app_name"], subscription["app_env"]) if exist: return responses.subscription_already_exist # Ensure connection try: connection = Connection(subscription["broker"]) connection.ensure_connection(max_retries=2) connection.release() except AccessRefused: return responses.wrong_access_refused except Exception: return responses.broker_not_reachable # Add subscription with open(SUBSCRIPTIONS_FILE, "r+") as subscriptions_file: subscriptions = json.load(subscriptions_file) subscriptions.append(subscription) subscriptions_file.seek(0) json.dump(subscriptions, subscriptions_file) return { "name": utils.infer_subscription_name(subscription), **subscription }, 200