コード例 #1
0
class brcdBwSensor(PollingSensor):
    def __init__(self, sensor_service, config=None, poll_interval=5):
        super(brcdBwSensor, self).__init__(sensor_service=sensor_service,
                                           config=config,
                                           poll_interval=poll_interval)
        self._logger = self.sensor_service.get_logger(
            name=self.__class__.__name__)
        self._stop = False
        self._bw_tracker = None
        self._bsd = None
        self._manage = None
        self._minimum = 10
        self._headroom = 10
        self._roundup = 10
        self._track = 10
        self._warn = 10

    def setup(self):
        self._bsd = Bsd(self._config, self._logger)
        self._bw_tracker = None

    def poll(self):
        self._get_configs()
        bandwidth = self._bsd.getBandwidth()
        bw_tracker = self._get_bw_tracker()
        if self._manage is not None:
            self._manage_bandwidth(bw_tracker, bandwidth)
        else:
            bw_tracker = {}
        self._monitor_bandwidth(bandwidth)
        self._set_bw_tracker(bw_tracker)

    def _get_configs(self):
        self._logger.debug(self._config)
        if "brcd_bw_minimum" in self._config and self._config[
                "brcd_bw_minimum"] is not None:
            self._minimum = int(self._config["brcd_bw_minimum"])
        if "brcd_bw_roundup" in self._config and self._config[
                "brcd_bw_roundup"] is not None:
            self._roundup = int(self._config["brcd_bw_roundup"])
        if "brcd_bw_headroom" in self._config and self._config[
                "brcd_bw_headroom"] is not None:
            self._headroom = int(self._config["brcd_bw_headroom"])
        if "brcd_bw_track" in self._config and self._config[
                "brcd_bw_track"] is not None:
            self._track = int(self._config["brcd_bw_track"])
        if "brcd_bw_warn" in self._config and self._config[
                "brcd_bw_warn"] is not None:
            self._warn = int(self._config["brcd_bw_warn"])
        if "brcd_bw_manage" in self._config and self._config[
                "brcd_bw_manage"] is not None:
            manage = str(self._config["brcd_bw_manage"])
            if manage.lower() == "all":
                self._manage = ["__ALL__"]
            else:
                self._manage = manage.split(',')

    def _manage_bandwidth(self, bw_tracker, bandwidth):
        for instance in bandwidth.keys():
            instData = bandwidth[instance]
            tag = instData["tag"]
            if "__ALL__" in self._manage or instance in self._manage or tag in self._manage:
                tracked = instData["current"]
                tracked += self._roundup - (tracked % self._roundup)
                if tracked < self._minimum:
                    tracked = self._minimum
                if instance not in bw_tracker:
                    bw_tracker[instance] = instData
                    bw_tracker[instance]["tracking"] = []
                while len(bw_tracker[instance]["tracking"]) >= self._track:
                    bw_tracker[instance]["tracking"].pop(0)
                bw_tracker[instance]["tracking"].append(tracked)
                bw_tracker[instance]["current"] = instData["current"]
                bw_tracker[instance]["peak"] = instData["peak"]
                self._issue_update(instance, tracked, instData, bw_tracker,
                                   bandwidth)
            else:
                if instance in bw_tracker:
                    bw_tracker.pop(instance)

    def _issue_update(self, instance, tracked, instData, bw_tracker,
                      bandwidth):
        average = sum(bw_tracker[instance]["tracking"]) / len(
            bw_tracker[instance]["tracking"])
        assign = average if tracked < average else tracked
        assign = int(assign + self._headroom)
        if assign != instData["assigned"]:
            bw_tracker[instance]["assigned"] = assign
            payload = {
                "action": "update",
                "instance": instance,
                "tag": instData["tag"],
                "bandwidth": assign,
                "current": instData["current"],
                "average": average
            }
            self.sensor_service.dispatch(trigger="vadc.bsd_bandwidth_event",
                                         payload=payload)

    def _monitor_bandwidth(self, bandwidth):
        for instance in bandwidth.keys():
            instData = bandwidth[instance]
            tag = instData["tag"]
            if instData["assigned"] - instData["current"] - self._warn <= 0:
                payload = {
                    "action": "alert",
                    "instance": instance,
                    "tag": tag,
                    "bandwidth": instData["assigned"],
                    "current": instData["current"]
                }
                self.sensor_service.dispatch(
                    trigger="vadc.bsd_bandwidth_event", payload=payload)

    def _get_bw_tracker(self):
        if not self._bw_tracker and hasattr(self._sensor_service, 'get_value'):
            bw_tracker = self._sensor_service.get_value(name='bw_tracker')
            if bw_tracker is not None:
                self._bw_tracker = json.loads(bw_tracker, encoding="utf-8")
            else:
                self._bw_tracker = {}
        return self._bw_tracker

    def _set_bw_tracker(self, bw_tracker):
        self._bw_tracker = bw_tracker

        if hasattr(self._sensor_service, 'set_value'):
            self._sensor_service.set_value(name='bw_tracker',
                                           value=json.dumps(bw_tracker,
                                                            encoding="utf-8"))

    def cleanup(self):
        # This is called when the st2 system goes down. You can perform cleanup operations like
        # closing the connections to external system here.
        pass

    def add_trigger(self, trigger):
        # This method is called when trigger is created
        pass

    def update_trigger(self, trigger):
        # This method is called when trigger is updated
        pass

    def remove_trigger(self, trigger):
        # This method is called when trigger is deleted
        pass
コード例 #2
0
    def run(self, vtm, stringify):

        bsd = Bsd(self.config, self.logger)
        result = bsd.getBandwidth(vtm, stringify)
        return result
コード例 #3
0
    def run(self, vtm, stringify):

        bsd = Bsd(self.config, self.logger)
        result = bsd.getBandwidth(vtm, stringify)
        return result
コード例 #4
0
ファイル: brcd_bw_sensor.py プロジェクト: Pulsant/st2contrib
class brcdBwSensor(PollingSensor):

    def __init__(self, sensor_service, config=None, poll_interval=5):
        super(brcdBwSensor, self).__init__(sensor_service=sensor_service, config=config,
            poll_interval=poll_interval)
        self._logger = self.sensor_service.get_logger(name=self.__class__.__name__)
        self._stop = False
        self._bw_tracker = None
        self._bsd = None
        self._manage = None
        self._minimum = 10
        self._headroom = 10
        self._roundup = 10
        self._track = 10
        self._warn = 10

    def setup(self):
        self._bsd = Bsd(self._config, self._logger)
        self._bw_tracker = None

    def poll(self):
        self._get_configs()
        bandwidth = self._bsd.getBandwidth()
        bw_tracker = self._get_bw_tracker()
        if self._manage is not None:
            self._manage_bandwidth(bw_tracker, bandwidth)
        else:
            bw_tracker = {}
        self._monitor_bandwidth(bandwidth)
        self._set_bw_tracker(bw_tracker)

    def _get_configs(self):
        self._logger.debug(self._config)
        if "brcd_bw_minimum" in self._config and self._config["brcd_bw_minimum"] is not None:
            self._minimum = int(self._config["brcd_bw_minimum"])
        if "brcd_bw_roundup" in self._config and self._config["brcd_bw_roundup"] is not None:
            self._roundup = int(self._config["brcd_bw_roundup"])
        if "brcd_bw_headroom" in self._config and self._config["brcd_bw_headroom"] is not None:
            self._headroom = int(self._config["brcd_bw_headroom"])
        if "brcd_bw_track" in self._config and self._config["brcd_bw_track"] is not None:
            self._track = int(self._config["brcd_bw_track"])
        if "brcd_bw_warn" in self._config and self._config["brcd_bw_warn"] is not None:
            self._warn = int(self._config["brcd_bw_warn"])
        if "brcd_bw_manage" in self._config and self._config["brcd_bw_manage"] is not None:
            manage = str(self._config["brcd_bw_manage"])
            if manage.lower() == "all":
                self._manage = ["__ALL__"]
            else:
                self._manage = manage.split(',')

    def _manage_bandwidth(self, bw_tracker, bandwidth):
        for instance in bandwidth.keys():
            instData = bandwidth[instance]
            tag = instData["tag"]
            if "__ALL__" in self._manage or instance in self._manage or tag in self._manage:
                tracked = instData["current"]
                tracked += self._roundup - (tracked % self._roundup)
                if tracked < self._minimum:
                    tracked = self._minimum
                if instance not in bw_tracker:
                    bw_tracker[instance] = instData
                    bw_tracker[instance]["tracking"] = []
                while len(bw_tracker[instance]["tracking"]) >= self._track:
                    bw_tracker[instance]["tracking"].pop(0)
                bw_tracker[instance]["tracking"].append(tracked)
                bw_tracker[instance]["current"] = instData["current"]
                bw_tracker[instance]["peak"] = instData["peak"]
                self._issue_update(instance, tracked, instData, bw_tracker, bandwidth)
            else:
                if instance in bw_tracker:
                    bw_tracker.pop(instance)

    def _issue_update(self, instance, tracked, instData, bw_tracker, bandwidth):
            average = sum(bw_tracker[instance]["tracking"]) / len(bw_tracker[instance]["tracking"])
            assign = average if tracked < average else tracked
            assign = int(assign + self._headroom)
            if assign != instData["assigned"]:
                bw_tracker[instance]["assigned"] = assign
                payload = {"action": "update", "instance": instance, "tag": instData["tag"],
                    "bandwidth": assign, "current": instData["current"], "average": average}
                self.sensor_service.dispatch(trigger="vadc.bsd_bandwidth_event", payload=payload)

    def _monitor_bandwidth(self, bandwidth):
        for instance in bandwidth.keys():
            instData = bandwidth[instance]
            tag = instData["tag"]
            if instData["assigned"] - instData["current"] - self._warn <= 0:
                payload = {"action": "alert", "instance": instance, "tag": tag,
                    "bandwidth": instData["assigned"], "current": instData["current"]}
                self.sensor_service.dispatch(trigger="vadc.bsd_bandwidth_event", payload=payload)

    def _get_bw_tracker(self):
        if not self._bw_tracker and hasattr(self._sensor_service, 'get_value'):
            bw_tracker = self._sensor_service.get_value(name='bw_tracker')
            if bw_tracker is not None:
                self._bw_tracker = json.loads(bw_tracker, encoding="utf-8")
            else:
                self._bw_tracker = {}
        return self._bw_tracker

    def _set_bw_tracker(self, bw_tracker):
        self._bw_tracker = bw_tracker

        if hasattr(self._sensor_service, 'set_value'):
            self._sensor_service.set_value(name='bw_tracker', value=json.dumps(bw_tracker,
                encoding="utf-8"))

    def cleanup(self):
        # This is called when the st2 system goes down. You can perform cleanup operations like
        # closing the connections to external system here.
        pass

    def add_trigger(self, trigger):
        # This method is called when trigger is created
        pass

    def update_trigger(self, trigger):
        # This method is called when trigger is updated
        pass

    def remove_trigger(self, trigger):
        # This method is called when trigger is deleted
        pass