예제 #1
0
class CollectionThread(threading.Thread):
    def __init__(self, vcenter):
        threading.Thread.__init__(self)
        self.vcenter = vcenter
        self._lock = threading.Lock()

    def run(self):
        self.vmware = VMWare(self.vcenter)

        self.discovery_thread = threading.Thread(target=self._discovery)
        self.discovery_thread.daemon = True
        self.discovery_thread.setName(self.vcenter['host'] + "_" + "Discovery")
        self.discovery_thread.start()

        while True:
            try:
                self._lock.acquire()
                self.vmware.collect()
                self._lock.release()

                time.sleep(float(
                    self.vcenter.get("pollInterval", 1000) / 1000))
            except StandardError as se:
                util.sendEvent("Plugin vmware: Unknown Error",
                               "Unknown error occurred: [" + str(se) + "]",
                               "critical")
                if self._lock.locked:
                    self._lock.release
                sys.exit(-1)

    def _discovery(self):
        while True:
            try:
                self._lock.acquire()
                util.sendEvent(
                    "Plugin vmware: Discovery Cycle for " +
                    self.vcenter['host'], "Running discovery cycle for " +
                    self.vcenter['host'] + " started.", "info")
                self.vmware.discovery()
                self._lock.release()
                util.sendEvent(
                    "Plugin vmware: Discovery Cycle for " +
                    self.vcenter['host'], "Running discovery cycle for " +
                    self.vcenter['host'] + " completed.", "info")

                time.sleep(
                    self.vcenter.get("discoveryInterval", 10800000) / 1000)
            except StandardError as se:
                util.sendEvent("Unknown Error",
                               "Unknown error occurred: [" + str(se) + "]",
                               "error")
                if self._lock.locked:
                    self._lock.release
                sys.exit(-1)
예제 #2
0
class CollectionThread(threading.Thread):

    def __init__(self, vcenter):
        threading.Thread.__init__(self)
        self.vcenter = vcenter
        self._lock = threading.Lock()

    def run(self):
        self.vmware = VMWare(self.vcenter)

        self.discovery_thread = threading.Thread(target=self._discovery)
        self.discovery_thread.daemon = True
        self.discovery_thread.setName(self.vcenter['host'] + "_" + "Discovery")
        self.discovery_thread.start()

        while True:
            try:
                self._lock.acquire()
                self.vmware.collect()
                self._lock.release()

                time.sleep(float(self.vcenter.get("pollInterval", 1000) / 1000))
            except StandardError as se:
                util.sendEvent("Plugin vmware: Unknown Error", "Unknown error occurred: [" + str(se) + "]", "critical")
                if self._lock.locked:
                    self._lock.release
                sys.exit(-1)

    def _discovery(self):
        while True:
            try:
                self._lock.acquire()
                util.sendEvent("Plugin vmware: Discovery Cycle for " + self.vcenter['host'], "Running discovery cycle for " + self.vcenter['host'] + " started.", "info")
                self.vmware.discovery()
                self._lock.release()
                util.sendEvent("Plugin vmware: Discovery Cycle for " + self.vcenter['host'], "Running discovery cycle for " + self.vcenter['host'] + " completed.", "info")

                time.sleep(self.vcenter.get("discoveryInterval", 10800000) / 1000)
            except StandardError as se:
                util.sendEvent("Unknown Error", "Unknown error occurred: [" + str(se) + "]", "error")
                if self._lock.locked:
                    self._lock.release
                sys.exit(-1)
예제 #3
0
class CollectionThread(threading.Thread):
    def __init__(self, vcenter):
        threading.Thread.__init__(self)
        self.vcenter = vcenter
        self._lock = threading.Lock()

    def run(self):
        self.start()

    def _discovery(self):
        # while True:
        try:
            # self._lock.acquire()
            # util.sendEvent("Plugin vmware: Discovery Cycle for " + self.vcenter['host'], "Running discovery cycle for " + self.vcenter['host'] + " started.", "info")
            self.vmware.discovery(self)
            # self._lock.release()
            # util.sendEvent("Plugin vmware: Discovery Cycle for " + self.vcenter['host'], "Running discovery cycle for " + self.vcenter['host'] + " completed.", "info")

            # time.sleep(self.vcenter.get("discoveryInterval", 10800000) / 1000)
        except Exception as se:
            util.sendEvent("Plugin vmware: Discovery error", "Unknown error occurred: [" + str(se) + "]", "error")
            if self._lock.locked:
                self._lock.release
                # sys.exit(-1)

    def terminate_thread(self, thread):
        """Terminates a python thread from another thread.

        :param thread: a threading.Thread instance
        """
        if not thread.isAlive():
            return

        exc = ctypes.py_object(SystemExit)
        res = ctypes.pythonapi.PyThreadState_SetAsyncExc(
                ctypes.c_long(thread.ident), exc)
        if res == 0:
            # raise ValueError("nonexistent thread id")
            print("Non existent thread id")
        elif res > 1:
            # """if it returns a number greater than one, you're in trouble,
            # and you should call it again with exc=NULL to revert the effect"""
            ctypes.pythonapi.PyThreadState_SetAsyncExc(thread.ident, None)
            # raise SystemError("PyThreadState_SetAsyncExc failed")
            print("PyThreadState_SetAsyncExc failed")

    def start(self):
        self.vmware = VMWare(self.vcenter)
        self.discovery_thread = threading.Thread(target=self._discovery)
        self.discovery_thread.daemon = True
        self.discovery_thread.setName(self.vcenter['host'] + "_" + "Discovery")
        self.discovery_thread.start()

        while True:
            try:
                self._lock.acquire()
                self.vmware.collect()
                self._lock.release()
                time.sleep(float(self.vcenter.get("pollInterval", 1000) / 1000))
            except Exception as se:
                self._lock.release()
                util.sendEvent("Plugin vmware: Unknown Error", "Unknown error occurred: [" + str(se) + "]", "critical")
                time.sleep(float(self.vcenter.get("pollInterval", 1000) / 1000))
                self.terminate_thread(self.discovery_thread)  # Killing old discovery thread
                util.sendEvent("Plugin vmware", "Trying to re-connect to vCenter: [" + self.vcenter['host'] + "]",
                               "info")
                self.vmware = VMWare(self.vcenter)
                self.discovery_thread = threading.Thread(target=self._discovery)
                self.discovery_thread.daemon = True
                self.discovery_thread.setName(self.vcenter['host'] + "_" + "Discovery")
                self.discovery_thread.start()
예제 #4
0
class CollectionThread(threading.Thread):
    def __init__(self, vcenter):
        threading.Thread.__init__(self)
        self.vcenter = vcenter
        self._lock = threading.Lock()

    def run(self):
        self.start()

    def _discovery(self):
        # while True:
        try:
            # self._lock.acquire()
            # util.sendEvent("Plugin vmware: Discovery Cycle for " + self.vcenter['host'], "Running discovery cycle for " + self.vcenter['host'] + " started.", "info")
            self.vmware.discovery(self)
            # self._lock.release()
            # util.sendEvent("Plugin vmware: Discovery Cycle for " + self.vcenter['host'], "Running discovery cycle for " + self.vcenter['host'] + " completed.", "info")

            # time.sleep(self.vcenter.get("discoveryInterval", 10800000) / 1000)
        except Exception as se:
            util.sendEvent("Plugin vmware: Discovery error", "Unknown error occurred: [" + str(se) + "]", "error")
            if self._lock.locked:
                self._lock.release
                # sys.exit(-1)

    def terminate_thread(self, thread):
        """Terminates a python thread from another thread.

        :param thread: a threading.Thread instance
        """
        if not thread.isAlive():
            return

        exc = ctypes.py_object(SystemExit)
        res = ctypes.pythonapi.PyThreadState_SetAsyncExc(
                ctypes.c_long(thread.ident), exc)
        if res == 0:
            # raise ValueError("nonexistent thread id")
            print("Non existent thread id")
        elif res > 1:
            # """if it returns a number greater than one, you're in trouble,
            # and you should call it again with exc=NULL to revert the effect"""
            ctypes.pythonapi.PyThreadState_SetAsyncExc(thread.ident, None)
            # raise SystemError("PyThreadState_SetAsyncExc failed")
            print("PyThreadState_SetAsyncExc failed")

    def start(self):
        self.vmware = VMWare(self.vcenter)
        self.discovery_thread = threading.Thread(target=self._discovery)
        self.discovery_thread.daemon = True
        self.discovery_thread.setName(self.vcenter['host'] + "_" + "Discovery")
        self.discovery_thread.start()

        while True:
            try:
                self._lock.acquire()
                self.vmware.collect()
                self._lock.release()
                time.sleep(float(self.vcenter.get("pollInterval", 1000) / 1000))
            except Exception as se:
                self._lock.release()
                util.sendEvent("Plugin vmware: Unknown Error", "Unknown error occurred: [" + str(se) + "]", "critical")
                time.sleep(float(self.vcenter.get("pollInterval", 1000) / 1000))
                self.terminate_thread(self.discovery_thread)  # Killing old discovery thread
                util.sendEvent("Plugin vmware", "Trying to re-connect to vCenter: [" + self.vcenter['host'] + "]",
                               "info")
                self.vmware = VMWare(self.vcenter)
                self.discovery_thread = threading.Thread(target=self._discovery)
                self.discovery_thread.daemon = True
                self.discovery_thread.setName(self.vcenter['host'] + "_" + "Discovery")
                self.discovery_thread.start()