def add_listener(self, url, event_type):
        assert event_type in EventInfo.EVENT_TYPES

        url_dict = self._listeners[event_type]

        if not url in url_dict:
            url_dict[url] = ntplib.system_to_ntp_time(time.time())
            log.trace("added listener=%s for event_type=%s", url, event_type)

        return url_dict[url]
示例#2
0
    def add_listener(self, url, event_type):
        assert event_type in EventInfo.EVENT_TYPES

        url_dict = self._listeners[event_type]

        if not url in url_dict:
            url_dict[url] = ntplib.system_to_ntp_time(time.time())
            log.trace("added listener=%s for event_type=%s", url, event_type)

        return url_dict[url]
示例#3
0
 def _run(self):
     sleep(3)  # wait a bit before first event
     while self._keep_running:
         self.generate_and_notify_event()
         # sleep for a few secs regularly checking we still are running
         secs = 7
         while self._keep_running and secs > 0:
             sleep(0.3)
             secs -= 0.3
     log.trace("event generation stopped.")
 def _run(self):
     sleep(3)  # wait a bit before first event
     while self._keep_running:
         self.generate_and_notify_event()
         # sleep for a few secs regularly checking we still are running
         secs = 7
         while self._keep_running and secs > 0:
             sleep(0.3)
             secs -= 0.3
     log.trace("event generation stopped.")
示例#5
0
    def remove_listener(self, url, event_type):
        assert event_type in EventInfo.EVENT_TYPES

        url_dict = self._listeners[event_type]

        unreg_time = 0
        if url in url_dict:
            unreg_time = ntplib.system_to_ntp_time(time.time())
            del url_dict[url]
            log.trace("removed listener=%s for event_type=%s", url, event_type)

        return unreg_time
    def remove_listener(self, url, event_type):
        assert event_type in EventInfo.EVENT_TYPES

        url_dict = self._listeners[event_type]

        unreg_time = 0
        if url in url_dict:
            unreg_time = ntplib.system_to_ntp_time(time.time())
            del url_dict[url]
            log.trace("removed listener=%s for event_type=%s", url, event_type)

        return unreg_time
    def _notify_listener(self, url, event_instance):
        """
        Notifies event to given listener.
        """
        if url == "http://NO_OMS_NOTIFICATIONS":  # pragma: no cover
            # developer convenience -see ion.agents.platform.rsn.oms_event_listener
            return

        log.debug("Notifying event_instance=%s to listener=%s", str(event_instance), url)

        # include url in event instance for diagnostic/debugging purposes:
        event_instance['listener_url'] = url

        # prepare payload (JSON format):
        payload = json.dumps(event_instance, indent=2)
        log.trace("payload=\n%s", payload)
        headers = {
            "Content-type": "application/json",
            "Accept": "text/plain"
        }

        conn = None
        try:
            o = urlparse(url)
            url4conn = o.netloc
            path     = o.path

            conn = httplib.HTTPConnection(url4conn)
            conn.request("POST", path, body=payload, headers=headers)
            response = conn.getresponse()
            data = response.read()
            log.trace("RESPONSE: %s, %s, %s", response.status, response.reason, data)
        except Exception as e:
            # the actual listener is no longer there; just log a message
            log.warn("event notification HTTP request failed: %r: %s", url, e)
        finally:
            if conn:
                conn.close()
示例#8
0
    def _notify_listener(self, url, event_instance):
        """
        Notifies event to given listener.
        """
        if url == "http://NO_OMS_NOTIFICATIONS":  # pragma: no cover
            # developer convenience -see ion.agents.platform.rsn.oms_event_listener
            return

        log.debug("Notifying event_instance=%s to listener=%s",
                  str(event_instance), url)

        # include url in event instance for diagnostic/debugging purposes:
        event_instance['listener_url'] = url

        # prepare payload (JSON format):
        payload = json.dumps(event_instance, indent=2)
        log.trace("payload=\n%s", payload)
        headers = {"Content-type": "application/json", "Accept": "text/plain"}

        conn = None
        try:
            o = urlparse(url)
            url4conn = o.netloc
            path = o.path

            conn = httplib.HTTPConnection(url4conn)
            conn.request("POST", path, body=payload, headers=headers)
            response = conn.getresponse()
            data = response.read()
            log.trace("RESPONSE: %s, %s, %s", response.status, response.reason,
                      data)
        except Exception as e:
            # the actual listener is no longer there; just log a message
            log.warn("event notification HTTP request failed: %r: %s", url, e)
        finally:
            if conn:
                conn.close()
                break

            except zmq.ZMQError:
                # Socket not ready to accept send. Sleep and retry later.
                time.sleep(.5)
                delta = time.time() - start_send
                if delta >= driver_timeout:
                    raise InstDriverClientTimeoutError()

            except Exception, e:
                log.error('Driver client error writing to zmq socket: ' +
                          str(e))
                log.error('Driver client error type: ' + str(type(e)))
                raise SystemError('exception writing to zmq socket: ' + str(e))

        log.trace('Awaiting reply.')
        start_reply = time.time()
        while True:
            try:
                # Attempt reply recv. Retry if necessary.
                reply = self.zmq_cmd_socket.recv_pyobj(flags=zmq.NOBLOCK)
                # Reply recieved, break and return.
                break
            except zmq.ZMQError:
                # Socket not ready with the reply. Sleep and retry later.
                time.sleep(.5)
                delta = time.time() - start_reply
                if delta >= driver_timeout:
                    raise InstDriverClientTimeoutError()

            except Exception, e:
示例#10
0
 def stop(self):
     log.trace("stopping event generation...")
     self._keep_running = False
示例#11
0
                # Command sent, break out and wait for reply.
                break    

            except zmq.ZMQError:
                # Socket not ready to accept send. Sleep and retry later.
                time.sleep(.5)
                delta = time.time() - start_send
                if delta >= driver_timeout:
                    raise InstDriverClientTimeoutError()

            except Exception,e:
                log.error('Driver client error writing to zmq socket: ' + str(e))
                log.error('Driver client error type: ' + str(type(e)))
                raise SystemError('exception writing to zmq socket: ' + str(e))
            
        log.trace('Awaiting reply.')
        start_reply = time.time()
        while True:
            try:
                # Attempt reply recv. Retry if necessary.
                reply = self.zmq_cmd_socket.recv_pyobj(flags=zmq.NOBLOCK)
                # Reply recieved, break and return.
                break
            except zmq.ZMQError:
                # Socket not ready with the reply. Sleep and retry later.
                time.sleep(.5)
                delta = time.time() - start_reply
                if delta >= driver_timeout:
                    raise InstDriverClientTimeoutError()

            except Exception,e:
 def stop(self):
     log.trace("stopping event generation...")
     self._keep_running = False