+ logger.debug("")
+ # try:
+ ns_instance = ctx.obj.ns.get(ns)
+ metric_data = {}
+ metric_data["ns_id"] = ns_instance["_id"]
+ metric_data["correlation_id"] = ns_instance["_id"]
+ metric_data["vnf_member_index"] = vnf
+ metric_data["vdu_name"] = vdu
+ metric_data["metric_name"] = metric
+ metric_data["collection_unit"] = "WEEK"
+ metric_data["collection_period"] = 1
+ check_client_version(ctx.obj, ctx.command.name)
+ if not interval:
+ print("{}".format(ctx.obj.ns.export_metric(metric_data)))
+ else:
+ i = 1
+ while True:
+ print("{} {}".format(ctx.obj.ns.export_metric(metric_data), i))
+ time.sleep(int(interval))
+ i += 1
+ # except ClientException as e:
+ # print(str(e))
+ # exit(1)
+
+
+#################
+# Subscription operations
+#################
+
+
+@cli_osm.command(
+ name="subscription-create",
+ short_help="creates a new subscription to a specific event",
+)
+@click.option(
+ "--event_type",
+ # type=click.Choice(['ns', 'nspkg', 'vnfpkg'], case_sensitive=False))
+ type=click.Choice(["ns"], case_sensitive=False),
+ help="event type to be subscribed (for the moment, only ns is supported)",
+)
+@click.option("--event", default=None, help="specific yaml configuration for the event")
+@click.option(
+ "--event_file", default=None, help="specific yaml configuration file for the event"
+)
+@click.pass_context
+def subscription_create(ctx, event_type, event, event_file):
+ """creates a new subscription to a specific event"""
+ logger.debug("")
+ check_client_version(ctx.obj, ctx.command.name)
+ if event_file:
+ if event:
+ raise ClientException(
+ '"--event" option is incompatible with "--event_file" option'
+ )
+ with open(event_file, "r") as cf:
+ event = cf.read()
+ ctx.obj.subscription.create(event_type, event)
+
+
+@cli_osm.command(name="subscription-delete", short_help="deletes a subscription")
+@click.option(
+ "--event_type",
+ # type=click.Choice(['ns', 'nspkg', 'vnfpkg'], case_sensitive=False))
+ type=click.Choice(["ns"], case_sensitive=False),
+ help="event type to be subscribed (for the moment, only ns is supported)",
+)
+@click.argument("subscription_id")
+@click.option(
+ "--force", is_flag=True, help="forces the deletion bypassing pre-conditions"
+)
+@click.pass_context
+def subscription_delete(ctx, event_type, subscription_id, force):
+ """deletes a subscription
+
+ SUBSCRIPTION_ID: ID of the subscription to be deleted
+ """
+ logger.debug("")
+ check_client_version(ctx.obj, ctx.command.name)
+ ctx.obj.subscription.delete(event_type, subscription_id, force)
+
+
+@cli_osm.command(name="subscription-list", short_help="list all subscriptions")
+@click.option(
+ "--event_type",
+ # type=click.Choice(['ns', 'nspkg', 'vnfpkg'], case_sensitive=False))
+ type=click.Choice(["ns"], case_sensitive=False),
+ help="event type to be subscribed (for the moment, only ns is supported)",
+)
+@click.option(
+ "--filter",
+ default=None,
+ multiple=True,
+ help="restricts the list to the subscriptions matching the filter",
+)
+@click.pass_context
+def subscription_list(ctx, event_type, filter):
+ """list all subscriptions"""
+ logger.debug("")
+ check_client_version(ctx.obj, ctx.command.name)
+ if filter:
+ filter = "&".join(filter)
+ resp = ctx.obj.subscription.list(event_type, filter)
+ table = PrettyTable(["id", "filter", "CallbackUri"])
+ for sub in resp:
+ table.add_row(
+ [
+ sub["_id"],
+ wrap_text(text=json.dumps(sub["filter"], indent=2), width=70),
+ sub["CallbackUri"],
+ ]
+ )
+ table.align = "l"
+ print(table)
+
+
+@cli_osm.command(
+ name="subscription-show", short_help="shows the details of a subscription"
+)
+@click.argument("subscription_id")
+@click.option(
+ "--event_type",
+ # type=click.Choice(['ns', 'nspkg', 'vnfpkg'], case_sensitive=False))
+ type=click.Choice(["ns"], case_sensitive=False),
+ help="event type to be subscribed (for the moment, only ns is supported)",
+)
+@click.option(
+ "--filter",
+ multiple=True,
+ help="restricts the information to the fields in the filter",
+)
+@click.pass_context
+def subscription_show(ctx, event_type, subscription_id, filter):
+ """shows the details of a subscription
+
+ SUBSCRIPTION_ID: ID of the subscription
+ """
+ logger.debug("")
+ # try:
+ resp = ctx.obj.subscription.get(subscription_id)
+ table = PrettyTable(["key", "attribute"])
+ for k, v in list(resp.items()):
+ if not filter or k in filter:
+ table.add_row([k, wrap_text(text=json.dumps(v, indent=2), width=100)])
+ table.align = "l"
+ print(table)