aboutsummaryrefslogtreecommitdiffstats
path: root/catalog/packages/biz/notificationsutil.py
diff options
context:
space:
mode:
Diffstat (limited to 'catalog/packages/biz/notificationsutil.py')
-rw-r--r--catalog/packages/biz/notificationsutil.py162
1 files changed, 162 insertions, 0 deletions
diff --git a/catalog/packages/biz/notificationsutil.py b/catalog/packages/biz/notificationsutil.py
new file mode 100644
index 0000000..04bad47
--- /dev/null
+++ b/catalog/packages/biz/notificationsutil.py
@@ -0,0 +1,162 @@
+# Copyright 2019 ZTE Corporation.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+import uuid
+import requests
+from rest_framework import status
+from catalog.packages import const
+from catalog.pub.database.models import VnfPkgSubscriptionModel, NsdmSubscriptionModel
+from catalog.pub.database.models import VnfPackageModel
+import catalog.pub.utils.timeutil
+from catalog.pub.utils.values import remove_none_key
+from catalog.pub.config import config as pub_config
+import traceback
+
+logger = logging.getLogger(__name__)
+
+
+class NotificationsUtil(object):
+ def __init__(self):
+ pass
+
+ def send_notification(self, notification, filters, isvnfpkg):
+ logger.info("Send Notifications to the callbackUri")
+ subscriptions_filter = {v + "__contains": notification[k] for k, v in filters.items()}
+ logger.debug('send_notification subscriptions_filter = %s' % subscriptions_filter)
+ subscriptions_filter = remove_none_key(subscriptions_filter)
+ if isvnfpkg:
+ subscriptions = VnfPkgSubscriptionModel.objects.filter(**subscriptions_filter)
+ subscription_root_uri = const.VNFPKG_SUBSCRIPTION_ROOT_URI
+ else:
+ subscriptions = NsdmSubscriptionModel.objects.filter(**subscriptions_filter)
+ subscription_root_uri = const.NSDM_SUBSCRIPTION_ROOT_URI
+ if not subscriptions.exists():
+ logger.info("No subscriptions created for the filters %s" % notification)
+ return
+ logger.info("Start sending notifications")
+ for sub in subscriptions:
+ # set subscription id
+ if isvnfpkg:
+ notification["subscriptionId"] = sub.subscription_id
+ else:
+ notification["subscriptionId"] = sub.subscriptionid
+ notification['_links']['subscription'] = {
+ 'href': 'http://%s:%s/%s%s' % (pub_config.MSB_SERVICE_IP,
+ pub_config.MSB_SERVICE_PORT,
+ subscription_root_uri,
+ notification["subscriptionId"])
+ }
+ callbackuri = sub.callback_uri
+ """
+ auth_info = json.loads(sub.auth_info)
+ if auth_info["authType"] == const.OAUTH2_CLIENT_CREDENTIALS:
+ pass
+ """
+ self.post_notification(callbackuri, notification)
+
+ def post_notification(self, callbackuri, notification):
+ """
+ params = auth_info.get("paramsBasic", {})
+ username, password = params.get("userName"), params.get("password")
+ logger.info("Sending notification to %s, %s", callbackuri, params)
+ resp = None
+ if username:
+ resp = requests.post(callbackuri,
+ data=notification,
+ auth=HTTPBasicAuth(username, password))
+ else:
+ """
+
+ try:
+ resp = requests.post(callbackuri, data=notification, headers={'Connection': 'close'})
+ if resp.status_code != status.HTTP_204_NO_CONTENT:
+ logger.error("Sendingnotification to %s failed: %s" % (callbackuri, resp.text))
+ else:
+ logger.info("Sending notification to %s successfully.", callbackuri)
+ except:
+ logger.error("Post notification failed.")
+ logger.error(traceback.format_exc())
+
+
+def prepare_vnfpkg_notification(vnf_pkg_id, notification_type, pkg_change_type, operational_state):
+ logger.info('Start to prepare notification')
+ vnf_pkg = VnfPackageModel.objects.filter(vnfPackageId=vnf_pkg_id)
+ vnfd_id = None
+ if vnf_pkg:
+ vnfd_id = vnf_pkg[0].vnfdId
+ notification_content = {
+ 'id': str(uuid.uuid4()), # shall be the same if sent multiple times due to multiple subscriptions.
+ 'notificationType': notification_type,
+ # set 'subscriptionId' after filtering for subscribers
+ 'timeStamp': catalog.pub.utils.timeutil.now_time(),
+ 'vnfPkgId': vnf_pkg_id,
+ 'vnfdId': vnfd_id,
+ 'changeType': pkg_change_type,
+ 'operationalState': operational_state,
+ '_links': {
+ 'vnfPackage': {
+ 'href': 'http://%s:%s/%s/vnf_packages/%s' % (pub_config.MSB_SERVICE_IP,
+ pub_config.MSB_SERVICE_PORT,
+ const.PKG_URL_PREFIX,
+ vnf_pkg_id)
+ }
+ }
+ }
+ return notification_content
+
+
+def prepare_nsd_notification(nsd_info_id, nsd_id, notification_type, failure_details=None, operational_state=None):
+ logger.info('Start to prepare notification')
+ notification_content = {
+ 'id': str(uuid.uuid4()), # shall be the same if sent multiple times due to multiple subscriptions.
+ 'notificationType': notification_type,
+ # set 'subscriptionId' after filtering for subscribers
+ 'timeStamp': catalog.pub.utils.timeutil.now_time(),
+ 'nsdInfoId': nsd_info_id,
+ 'nsdId': nsd_id,
+ 'onboardingFailureDetails': failure_details,
+ 'nsdOperationalState': operational_state,
+ '_links': {
+ 'nsdInfo': {
+ 'href': 'http://%s:%s/%s/ns_descriptors/%s' % (pub_config.MSB_SERVICE_IP,
+ pub_config.MSB_SERVICE_PORT,
+ const.NSD_URL_PREFIX,
+ nsd_info_id)
+ }
+ }
+ }
+ return notification_content
+
+
+def prepare_pnfd_notification(pnfd_info_id, pnfd_id, notification_type, failure_details=None):
+ logger.info('Start to prepare notification')
+ notification_content = {
+ 'id': str(uuid.uuid4()), # shall be the same if sent multiple times due to multiple subscriptions.
+ 'notificationType': notification_type,
+ # set 'subscriptionId' after filtering for subscribers
+ 'timeStamp': catalog.pub.utils.timeutil.now_time(),
+ 'pnfdInfoIds': pnfd_info_id,
+ 'pnfdId': pnfd_id,
+ 'onboardingFailureDetails': failure_details,
+ '_links': {
+ 'pnfdInfo': {
+ 'href': 'http://%s:%s/%s/pnf_descriptors/%s' % (pub_config.MSB_SERVICE_IP,
+ pub_config.MSB_SERVICE_PORT,
+ const.NSD_URL_PREFIX,
+ pnfd_info_id)
+ }
+ }
+ }
+ return notification_content