#coding=utf-8 # # Copyright (c) 2021 Wind River Systems, Inc. # # SPDX-License-Identifier: Apache-2.0 # import os import json import re import requests import logging from notificationclientsdk.common.helpers.nodeinfo_helper import NodeInfoHelper LOG = logging.getLogger(__name__) from notificationclientsdk.common.helpers import log_helper log_helper.config_logger(LOG) def notify(subscriptioninfo, notification, timeout=2, retry=3): result = False while True: retry = retry - 1 try: headers = {'Content-Type': 'application/json'} data = json.dumps(notification) url = subscriptioninfo.EndpointUri response = requests.post(url, data=data, headers=headers, timeout=timeout) response.raise_for_status() result = True return response except requests.exceptions.ConnectionError as errc: if retry > 0: LOG.warning("Retry notifying due to: {0}".format(str(errc))) continue raise errc except requests.exceptions.Timeout as errt: if retry > 0: LOG.warning("Retry notifying due to: {0}".format(str(errt))) continue raise errt except requests.exceptions.RequestException as ex: LOG.warning("Failed to notify due to: {0}".format(str(ex))) raise ex except requests.exceptions.HTTPError as ex: LOG.warning("Failed to notify due to: {0}".format(str(ex))) raise ex except Exception as ex: LOG.warning("Failed to notify due to: {0}".format(str(ex))) raise ex return result def parse_resource_address(resource_address): # The format of resource address is: # /{clusterName}/{siteName}(/optional/hierarchy/..)/{nodeName}/{resource} # Assume no optional hierarchy for now clusterName = resource_address.split('/')[1] nodeName = resource_address.split('/')[2] resource_path = re.split('[/]', resource_address, 3)[3] return clusterName, nodeName, resource_path