X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FNBI.git;a=blobdiff_plain;f=osm_nbi%2Finstance_topics.py;h=14861336b3c570817b9a0d5dbda92f7a64c07f99;hp=87b186ec8c3cfafb552f69c5ea18414c990f8166;hb=5758955b7b394517ff5caf5506a4400cdc5aa372;hpb=4568a372eb5a204e04d917213de03ec51f9110c1 diff --git a/osm_nbi/instance_topics.py b/osm_nbi/instance_topics.py index 87b186e..1486133 100644 --- a/osm_nbi/instance_topics.py +++ b/osm_nbi/instance_topics.py @@ -945,6 +945,41 @@ class NsrTopic(BaseTopic): return vnfr_descriptor + def vca_status_refresh(self, session, ns_instance_content, filter_q): + """ + vcaStatus in ns_instance_content maybe stale, check if it is stale and create lcm op + to refresh vca status by sending message to LCM when it is stale. Ignore otherwise. + :param session: contains "username", "admin", "force", "public", "project_id", "set_project" + :param ns_instance_content: ns instance content + :param filter_q: dict: query parameter containing vcaStatus-refresh as true or false + :return: None + """ + time_now, time_delta = time(), time() - ns_instance_content["_admin"]["modified"] + force_refresh = isinstance(filter_q, dict) and filter_q.get('vcaStatusRefresh') == 'true' + threshold_reached = time_delta > 120 + if force_refresh or threshold_reached: + operation, _id = "vca_status_refresh", ns_instance_content["_id"] + ns_instance_content["_admin"]["modified"] = time_now + self.db.set_one(self.topic, {"_id": _id}, ns_instance_content) + nslcmop_desc = NsLcmOpTopic._create_nslcmop(_id, operation, None) + self.format_on_new(nslcmop_desc, session["project_id"], make_public=session["public"]) + nslcmop_desc["_admin"].pop("nsState") + self.msg.write("ns", operation, nslcmop_desc) + return + + def show(self, session, _id, filter_q=None, api_req=False): + """ + Get complete information on an ns instance. + :param session: contains "username", "admin", "force", "public", "project_id", "set_project" + :param _id: string, ns instance id + :param filter_q: dict: query parameter containing vcaStatusRefresh as true or false + :param api_req: True if this call is serving an external API request. False if serving internal request. + :return: dictionary, raise exception if not found. + """ + ns_instance_content = super().show(session, _id, api_req) + self.vca_status_refresh(session, ns_instance_content, filter_q) + return ns_instance_content + def edit(self, session, _id, indata=None, kwargs=None, content=None): raise EngineException( "Method edit called directly", HTTPStatus.INTERNAL_SERVER_ERROR