Exemple #1
0
 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
Exemple #2
0
    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