Esempio n. 1
0
 def dispatch_request(self, msg):
     loglevel = self._get_loglevel(msg)
     logger.log(loglevel, '%s source=%s', msg.subject, msg.source)
     start = time.time()
     self.request_counts.incr(subject=msg.subject)
     channel = ReplyChannel(msg, self)
     service_name, func_name = msg.subject.rsplit('.', 1)
     try:
         service = self.container.installed_interfaces[service_name]
     except KeyError:
         logger.warning('unsupported service type: %s', service_name)
         return
     try:
         service.handle_request(func_name, channel)
     except Exception:
         logger.exception('Request error:')
         exc_info = sys.exc_info()
         extra_info = {
             'service': service_name,
             'func_name': func_name,
             'trace_id': trace.get_id(),
         }
         try:
             self.container.error_hook(exc_info, extra=extra_info)
         except:
             logger.exception('error hook failure')
         finally:
             del exc_info
         try:
             channel.nack(True)
         except:
             logger.exception('failed to send automatic NACK')
     finally:
         elapsed = time.time() - start
         logger.log(loglevel, 'subject=%s duration=%f (seconds)', msg.subject, elapsed)
Esempio n. 2
0
 def handle_request(self, channel):
     interface_name, func_name = channel.request.subject.rsplit(".", 1)
     try:
         interface = self.installed_interfaces[interface_name]
     except KeyError:
         logger.warning("unsupported service type: %s", interface_name)
         channel.nack(True)
         return
     try:
         interface.handle_request(func_name, channel)
     except Exception:
         logger.exception("Request error:")
         exc_info = sys.exc_info()
         try:
             self.error_hook(
                 exc_info,
                 extra={
                     "service": self.service_name,
                     "interface": interface_name,
                     "func_name": func_name,
                     "trace_id": trace.get_id(),
                 },
             )
         finally:
             del exc_info
         try:
             channel.nack(True)
         except:
             logger.exception("failed to send automatic NACK")
Esempio n. 3
0
 def prepare_headers(self, headers, **extra_headers):
     if headers:
         headers.update(extra_headers)
     else:
         headers = extra_headers
     headers.setdefault('trace_id', trace.get_id())
     return headers
Esempio n. 4
0
 def handle_request(self, channel):
     interface_name, func_name = channel.request.subject.rsplit('.', 1)
     version = channel.request.version
     if version:
         version = semantic_version.Version(version)
     try:
         versions = self.installed_interfaces[interface_name]
     except KeyError:
         logger.warning('Unsupported interface: %s', interface_name)
         channel.nack(True)
         return
     try:
         interface = versions[version]
     except KeyError:
         logger.warning('Unsupported version: %s@%s', interface_name, version)
         channel.nack(True)
         return
     try:
         interface.handle_request(func_name, channel)
     except Exception:
         logger.exception('Request error:')
         exc_info = sys.exc_info()
         try:
             self.error_hook(exc_info, extra={
                 'service': self.service_name,
                 'interface': interface_name,
                 'func_name': func_name,
                 'trace_id': trace.get_id(),
             })
         finally:
             del exc_info
         try:
             channel.nack(True)
         except:
             logger.exception('failed to send automatic NACK')
Esempio n. 5
0
 def handle(self, request, rule, kwargs):
     try:
         self.container.http_request_hook(request, rule, kwargs)
         handler = self.get_handler(request, rule)
         if hasattr(handler, "dispatch"):
             response = handler.dispatch(kwargs)
         else:
             response = handler(request, **kwargs)
         if not isinstance(response, Response):
             raise TypeError("%r is not a valid response - expected werkzeug.wrappers.Response instance" % response)
     except MethodNotAllowed:
         response = self.MethodNotAllowed().get_response(request.environ)
     except HTTPException as e:
         response = e.get_response(request.environ)
     except Exception as e:
         if hasattr(e, "to_http_response"):
             response = e.to_http_response(request.environ)
         else:
             if not self.container.debug:
                 logger.exception("uncaught exception")
             exc_info = sys.exc_info()
             extra_info = {"url": request.url, "trace_id": trace.get_id(), "interface": self.__class__.__name__}
             try:
                 self.container.error_hook(exc_info, extra=extra_info)
             except:
                 logger.exception("error hook failure")
             finally:
                 del exc_info
             if self.container.debug:
                 raise
             response = Response("", status=500)
     return response
Esempio n. 6
0
 def handle(self, request, rule, kwargs):
     try:
         self.container.http_request_hook(request, rule, kwargs)
         handler = self.get_handler(request, rule)
         if hasattr(handler, "dispatch"):
             response = handler.dispatch(kwargs)
         else:
             response = handler(request, **kwargs)
     except MethodNotAllowed:
         response = self.MethodNotAllowed().get_response(request.environ)
     except HTTPException as e:
         response = e.get_response(request.environ)
     except Exception as e:
         if hasattr(e, 'to_http_response'):
             response = e.to_http_response(request.environ)
         else:
             if not self.container.debug:
                 logger.exception('uncaught exception')
             exc_info = sys.exc_info()
             extra_info = {
                 'url': request.url,
                 'trace_id': trace.get_id(),
                 'interface': self.__class__.__name__,
             }
             try:
                 self.container.error_hook(exc_info, extra=extra_info)
             except:
                 logger.exception('error hook failure')
             finally:
                 del exc_info
             if self.container.debug:
                 raise
             response = Response('', status=500)
     return response
Esempio n. 7
0
 def dispatch_request(self, request):
     logger.info('%s %s', request.method, request.path)
     urls = self.url_map.bind_to_environ(request.environ)
     request.urls = urls
     try:
         rule, kwargs = request.urls.match(return_rule=True)
         handler = self.get_handler(request, rule)
         if hasattr(handler, "dispatch"):
             response = handler.dispatch(kwargs)
         else:
             response = handler(request, **kwargs)
     except HTTPException as e:
         response = e.get_response(request.environ)
     except Exception as e:
         if hasattr(e, 'to_http_response'):
             response = e.to_http_response(request.environ)
         else:
             if not self.container.debug:
                 logger.exception('uncaught exception')
             exc_info = sys.exc_info()
             extra_info = {
                 'url': request.url,
                 'trace_id': trace.get_id(),
                 'interface': self.__class__.__name__,
             }
             try:
                 self.container.error_hook(exc_info, extra=extra_info)
             except:
                 logger.exception('error hook failure')
             finally:
                 del exc_info
             if self.container.debug:
                 raise
             response = Response('', status=500)
     return response
Esempio n. 8
0
 def handle_request(self, channel):
     interface_name, func_name = channel.request.subject.rsplit('.', 1)
     try:
         interface = self.installed_interfaces[interface_name]
     except KeyError:
         logger.warning('unsupported service type: %s', interface_name)
         channel.nack(True)
         return
     try:
         interface.handle_request(func_name, channel)
     except Exception:
         logger.exception('Request error:')
         exc_info = sys.exc_info()
         try:
             self.error_hook(exc_info,
                             extra={
                                 'service': self.service_name,
                                 'interface': interface_name,
                                 'func_name': func_name,
                                 'trace_id': trace.get_id(),
                             })
         finally:
             del exc_info
         try:
             channel.nack(True)
         except:
             logger.exception('failed to send automatic NACK')
Esempio n. 9
0
 def prepare_headers(self, headers, **extra_headers):
     if headers:
         headers.update(extra_headers)
     else:
         headers = extra_headers
     headers.setdefault('trace_id', trace.get_id())
     return headers
Esempio n. 10
0
 def dispatch_request(self, request):
     logger.info('%s %s', request.method, request.path)
     urls = self.url_map.bind_to_environ(request.environ)
     request.urls = urls
     try:
         rule, kwargs = request.urls.match(return_rule=True)
         handler = self.get_handler(request, rule)
         if hasattr(handler, "dispatch"):
             response = handler.dispatch(kwargs)
         else:
             response = handler(request, **kwargs)
     except HTTPException as e:
         response = e.get_response(request.environ)
     except Exception as e:
         if hasattr(e, 'to_http_response'):
             response = e.to_http_response(request.environ)
         else:
             if not self.container.debug:
                 logger.exception('uncaught exception')
             exc_info = sys.exc_info()
             extra_info = {
                 'url': request.url,
                 'trace_id': trace.get_id(),
                 'interface': self.__class__.__name__,
             }
             try:
                 self.container.error_hook(exc_info, extra=extra_info)
             except:
                 logger.exception('error hook failure')
             finally:
                 del exc_info
             if self.container.debug:
                 raise
             response = Response('', status=500)
     return response
Esempio n. 11
0
 def emit_event(self, event_type, payload, headers=None, **kwargs):
     headers = headers or {}
     headers.setdefault('trace_id', trace.get_id())
     event = Event(event_type,
                   payload,
                   source=self.identity,
                   headers=headers)
     self.events.emit(event, **kwargs)
Esempio n. 12
0
 def dispatch_request(self, request):
     trace.set_id()
     logger.info('%s %s', request.method, request.path)
     urls = self.url_map.bind_to_environ(request.environ)
     request.urls = urls
     try:
         rule, kwargs = request.urls.match(method=request.method, return_rule=True)
     except NotFound:
         response = self.NotFound().get_response(request.environ)
     except MethodNotAllowed:
         response = self.MethodNotAllowed().get_response(request.environ)
     except HTTPException as ex:
         response = ex.get_response(request.environ)
     else:
         response = self.handle(request, rule, kwargs)
     response.headers['X-Trace-Id'] = trace.get_id()
     return response
Esempio n. 13
0
 def dispatch_request(self, request):
     trace.set_id()
     logger.info('%s %s', request.method, request.path)
     urls = self.url_map.bind_to_environ(request.environ)
     request.urls = urls
     try:
         rule, kwargs = request.urls.match(method=request.method, return_rule=True)
     except NotFound:
         response = self.NotFound().get_response(request.environ)
     except MethodNotAllowed:
         response = self.MethodNotAllowed().get_response(request.environ)
     except HTTPException as ex:
         response = ex.get_response(request.environ)
     else:
         response = self.handle(request, rule, kwargs)
     response.headers['X-Trace-Id'] = trace.get_id()
     return response
Esempio n. 14
0
 def dispatch_request(self, request):
     if self.request_trace_id_header:
         trace_id = request.headers.get(self.request_trace_id_header)
     else:
         trace_id = None
     trace.set_id(trace_id)
     logger.info("%s %s", request.method, request.path)
     urls = self.url_map.bind_to_environ(request.environ)
     request.urls = urls
     try:
         rule, kwargs = request.urls.match(method=request.method, return_rule=True)
     except NotFound:
         response = self.NotFound().get_response(request.environ)
     except MethodNotAllowed:
         response = self.MethodNotAllowed().get_response(request.environ)
     except HTTPException as ex:
         response = ex.get_response(request.environ)
     else:
         response = self.handle(request, rule, kwargs)
     response.headers[self.response_trace_id_header] = trace.get_id()
     return response
Esempio n. 15
0
 def handle(self, request, rule, kwargs):
     try:
         self.container.http_request_hook(request, rule, kwargs)
         handler = self.get_handler(request, rule)
         if hasattr(handler, "dispatch"):
             response = handler.dispatch(kwargs)
         else:
             response = handler(request, **kwargs)
         if not isinstance(response, Response):
             raise TypeError(
                 '%r is not a valid response - expected werkzeug.wrappers.Response instance'
                 % response)
     except MethodNotAllowed:
         response = self.MethodNotAllowed().get_response(request.environ)
     except HTTPException as e:
         response = e.get_response(request.environ)
     except Exception as e:
         if hasattr(e, 'to_http_response'):
             response = e.to_http_response(request.environ)
         else:
             if not self.container.debug:
                 logger.exception('uncaught exception')
             exc_info = sys.exc_info()
             extra_info = {
                 'url': request.url,
                 'trace_id': trace.get_id(),
                 'interface': self.__class__.__name__,
             }
             try:
                 self.container.error_hook(exc_info, extra=extra_info)
             except:
                 logger.exception('error hook failure')
             finally:
                 del exc_info
             if self.container.debug:
                 raise
             response = Response('', status=500)
     return response
Esempio n. 16
0
 def on_error(self, exc_info, **kwargs):
     newrelic.agent.add_custom_parameter('trace_id', trace.get_id())
     newrelic.agent.record_exception(exc_info)
Esempio n. 17
0
 def wrapped(*args, **kwargs):
     newrelic.agent.add_custom_parameter('trace_id', trace.get_id())
     return func(*args, **kwargs)
Esempio n. 18
0
 def get_trace_id(self):
     return trace.get_id()
Esempio n. 19
0
 def wrapped(*args, **kwargs):
     newrelic.agent.add_custom_parameter('trace_id', trace.get_id())
     return func(*args, **kwargs)
Esempio n. 20
0
 def on_error(self, exc_info, **kwargs):
     newrelic.agent.add_custom_parameter('trace_id', trace.get_id())
     newrelic.agent.record_exception(exc_info)
Esempio n. 21
0
 def emit_event(self, event_type, payload, headers=None, **kwargs):
     headers = headers or {}
     headers.setdefault('trace_id', trace.get_id())
     event = Event(event_type, payload, source=self.identity, headers=headers)
     self.events.emit(event, **kwargs)
Esempio n. 22
0
 def on_http_request(self, request, rule, kwargs):
     newrelic.agent.set_transaction_name("%s %s" % (request.method, rule))
     newrelic.agent.add_custom_parameter('trace_id', trace.get_id())
Esempio n. 23
0
 def get_trace_id(self):
     return trace.get_id()
Esempio n. 24
0
 def test_trace_id_propagates_via_deferred_rpc(self):
     trace_id = trace.get_id()
     self.assertEqual(trace_id, self.client.get_trace_id.defer().get())
Esempio n. 25
0
 def on_http_request(self, request, rule, kwargs):
     newrelic.agent.set_transaction_name("%s %s" % (request.method, rule))
     newrelic.agent.add_custom_parameter('trace_id', trace.get_id())
Esempio n. 26
0
 def prepare_headers(self, headers):
     headers = headers or {}
     headers.setdefault('trace_id', trace.get_id())
     return headers
Esempio n. 27
0
 def set_trace_id_to_response(response):
     response.headers[self.response_trace_id_header] = trace.get_id()
     return response
Esempio n. 28
0
File: rpc.py Progetto: alazaro/lymph
 def prepare_headers(self, headers):
     headers = headers or {}
     headers.setdefault('trace_id', trace.get_id())
     return headers
Esempio n. 29
0
 def test_trace_id_propagates_via_deferred_rpc(self):
     trace_id = trace.get_id()
     self.assertEqual(trace_id, self.client.get_trace_id.defer().get())