From 3f19f49290d595f561850ca9bcdbfcd4b3733297 Mon Sep 17 00:00:00 2001 From: Atul Agarwal Date: Thu, 18 Mar 2021 08:22:17 +0000 Subject: [PATCH] Feature 10339 - Enhanced Alarm Mgmt. (SOL005 FM Interface) Change-Id: I5b23f0e4b80808919e0a0cb864d9c700cffcdea4 Signed-off-by: Atul Agarwal --- osmclient/scripts/osm.py | 101 +++++++++++++++++++++++++++++++++++++++ osmclient/sol005/ns.py | 53 ++++++++++++++++++++ 2 files changed, 154 insertions(+) diff --git a/osmclient/scripts/osm.py b/osmclient/scripts/osm.py index 12f0576..0ce20c4 100755 --- a/osmclient/scripts/osm.py +++ b/osmclient/scripts/osm.py @@ -5288,6 +5288,107 @@ def vnf_scale( # exit(1) +@cli_osm.command(name="alarm-show", short_help="show alarm details") +@click.argument("uuid") +@click.pass_context +def alarm_show(ctx, uuid): + """Show alarm's detail information""" + + check_client_version(ctx.obj, ctx.command.name) + resp = ctx.obj.ns.get_alarm(uuid=uuid) + alarm_filter = [ + "uuid", + "name", + "metric", + "statistic", + "threshold", + "operation", + "ns-id", + "vnf-id", + "vdu_name", + "action", + "status", + ] + table = PrettyTable(["key", "attribute"]) + try: + # Arrange and return the response data + resp = resp.replace("ObjectId", "") + alarm = eval(resp) + for key in alarm_filter: + if key == "uuid": + value = alarm.get(key) + key = "alarm-id" + elif key == "name": + value = alarm.get(key) + key = "alarm-name" + elif key == "ns-id": + value = alarm["tags"].get("ns_id") + elif key == "vdu_name": + value = alarm["tags"].get("vdu_name") + elif key == "status": + value = alarm["alarm_status"] + else: + value = alarm[key] + table.add_row([key, wrap_text(text=json.dumps(value, indent=2), width=100)]) + table.align = "l" + print(table) + except Exception: + print(resp) + + +# List alarm +@cli_osm.command(name="alarm-list", short_help="list all alarms") +@click.option( + "--ns_id", default=None, required=False, help="List out alarm for given ns id" +) +@click.pass_context +def alarm_list(ctx, ns_id): + """list all alarm""" + + check_client_version(ctx.obj, ctx.command.name) + project_name = os.getenv("OSM_PROJECT", "admin") + resp = ctx.obj.ns.get_alarm(project_name=project_name, ns_id=ns_id) + + table = PrettyTable( + ["alarm-id", "metric", "threshold", "operation", "action", "status"] + ) + if resp: + # return the response data in a table + resp = resp.replace("ObjectId", "") + resp = eval(resp) + for alarm in resp: + table.add_row( + [ + wrap_text(text=str(alarm["uuid"]), width=38), + alarm["metric"], + alarm["threshold"], + alarm["operation"], + wrap_text(text=alarm["action"], width=25), + alarm["alarm_status"], + ] + ) + table.align = "l" + print(table) + + +# Update alarm +@cli_osm.command(name="alarm-update", short_help="Update a alarm") +@click.argument("uuid") +@click.option("--threshold", default=None, help="Alarm threshold") +@click.option("--is_enable", default=None, type=bool, help="enable or disable alarm") +@click.pass_context +def alarm_update(ctx, uuid, threshold, is_enable): + """ + Update alarm + + """ + if not threshold and is_enable is None: + raise ClientException( + "Please provide option to update i.e threshold or is_enable" + ) + ctx.obj.ns.update_alarm(uuid, threshold, is_enable) + + ############################## # Role Management Operations # ############################## diff --git a/osmclient/sol005/ns.py b/osmclient/sol005/ns.py index b6ccb9f..a5a5c79 100644 --- a/osmclient/sol005/ns.py +++ b/osmclient/sol005/ns.py @@ -532,6 +532,59 @@ class Ns(object): message = "failed to delete alarm: alarm {}\n{}".format(name, str(exc)) raise ClientException(message) + def get_alarm(self, project_name=None, ns_id=None, uuid=None): + self._client.get_token() + try: + self._apiName = "/nsfm" + self._apiResource = "/alarms" + self._apiBase = "{}{}{}".format( + self._apiName, self._apiVersion, self._apiResource + ) + if uuid: + # if request is for any uuid + http_code, resp = self._http.get2_cmd( + "{}/{}".format(self._apiBase, uuid) + ) + if not uuid: + http_code, resp = self._http.get2_cmd( + "{}/{}/{}/{}".format(self._apiBase, uuid, project_name, ns_id) + ) + if http_code == 200: + if resp: + resp = json.loads(resp) + return resp + else: + raise ClientException("unexpected response from server") + else: + msg = resp or "" + raise ClientException(msg) + except ClientException as exc: + message = "failed to get alarm :\nerror:\n{}".format(str(exc)) + raise ClientException(message) + + def update_alarm(self, uuid, threshold=None, is_enable=None, wait=None): + self._client.get_token() + try: + op_data = {} + op_data["uuid"] = uuid + op_data["threshold"] = threshold + op_data["is_enable"] = is_enable + self._apiName = "/nsfm" + self._apiResource = "/alarms" + self._apiBase = "{}{}{}".format( + self._apiName, self._apiVersion, self._apiResource + ) + http_code, resp = self._http.patch_cmd( + endpoint="{}".format(self._apiBase), postfields_dict=op_data + ) + if resp: + resp = json.loads(resp) + print(resp) + return resp + except ClientException as exc: + message = "failed to update alarm :\nerror:\n{}".format(str(exc)) + raise ClientException(message) + def export_metric(self, metric): self._logger.debug("") self._client.get_token() -- 2.17.1