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]
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 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()
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:
def stop(self): log.trace("stopping event generation...") self._keep_running = False
# 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: