Exemplo n.º 1
0
 def decorated(service, *args, **kwargs):
     service_name = service.__class__.__name__
     endpoint_name = '/_ah/spi/%s.%s' % (service_name, method_name)
     start_time = time_fn()
     response_status = 0
     flush_thread = None
     time_now = time_fn()
     if need_to_flush_metrics(time_now):
         flush_thread = threading.Thread(target=_flush_metrics,
                                         args=(time_now, ))
         flush_thread.start()
     try:
         ret = fn(service, *args, **kwargs)
         response_status = 200
         return ret
     except endpoints.ServiceException as e:
         response_status = e.http_status
         raise
     except Exception:
         response_status = 500
         raise
     finally:
         if flush_thread:
             flush_thread.join()
         elapsed_ms = int((time_fn() - start_time) * 1000)
         http_metrics.update_http_server_metrics(
             endpoint_name, response_status, elapsed_ms)
Exemplo n.º 2
0
    def process_response(self, request, response):
        try:
            state = getattr(request, self.STATE_ATTR)
        except AttributeError:
            return response

        if state['flush_thread'] is not None:
            state['flush_thread'].join()

        duration_secs = self._time_fn() - state['start_time']

        request_size = 0
        if hasattr(request, 'body'):
            request_size = len(request.body)

        response_size = 0
        if hasattr(response, 'content'):
            response_size = len(response.content)

        http_metrics.update_http_server_metrics(state['name'],
                                                response.status_code,
                                                duration_secs * 1000,
                                                request_size=request_size,
                                                response_size=response_size,
                                                user_agent=request.META.get(
                                                    'HTTP_USER_AGENT', None))
        return response
Exemplo n.º 3
0
 def decorated(service, *args, **kwargs):
   service_name = service.__class__.__name__
   endpoint_name = '/_ah/spi/%s.%s' % (service_name, method_name)
   start_time = time_fn()
   response_status = 0
   interface.state.store.initialize_context()
   flush_thread = None
   time_now = time_fn()
   if need_to_flush_metrics(time_now):
     flush_thread = threading.Thread(target=_flush_metrics, args=(time_now,))
     flush_thread.start()
   try:
     ret = fn(service, *args, **kwargs)
     response_status = 200
     return ret
   except endpoints.ServiceException as e:
     response_status = e.http_status
     raise
   except Exception:
     response_status = 500
     raise
   finally:
     if flush_thread:
       flush_thread.join()
     elapsed_ms = int((time_fn() - start_time) * 1000)
     http_metrics.update_http_server_metrics(
         endpoint_name, response_status, elapsed_ms)
Exemplo n.º 4
0
  def process_response(self, request, response):
    try:
      state = getattr(request, self.STATE_ATTR)
    except AttributeError:
      return response

    if state['flush_thread'] is not None:
      state['flush_thread'].join()

    duration_secs = self._time_fn() - state['start_time']

    request_size = 0
    if hasattr(request, 'body'):
      request_size = len(request.body)

    response_size = 0
    if hasattr(response, 'content'):
      response_size = len(response.content)

    http_metrics.update_http_server_metrics(
        state['name'],
        response.status_code,
        duration_secs * 1000,
        request_size=request_size,
        response_size=response_size,
        user_agent=request.META.get('HTTP_USER_AGENT', None))
    return response
 def test_update_http_server_metrics_no_sizes(self):
   http_metrics.update_http_server_metrics('/', 200, 125.4)
   fields = {'status': 200, 'name': '/', 'is_robot': False}
   self.assertEqual(1, http_metrics.server_response_status.get(fields))
   self.assertEqual(125.4, http_metrics.server_durations.get(fields).sum)
   self.assertIsNone(http_metrics.server_request_bytes.get(fields))
   self.assertIsNone(http_metrics.server_response_bytes.get(fields))
 def test_update_http_server_metrics(self):
   http_metrics.update_http_server_metrics(
       '/', 200, 125.4,
       request_size=100, response_size=200, user_agent='Chrome')
   fields = {'status': 200, 'name': '/', 'is_robot': False}
   self.assertEqual(1, http_metrics.server_response_status.get(fields))
   self.assertEqual(125.4, http_metrics.server_durations.get(fields).sum)
   self.assertEqual(100, http_metrics.server_request_bytes.get(fields).sum)
   self.assertEqual(200, http_metrics.server_response_bytes.get(fields).sum)
Exemplo n.º 7
0
                def log(self, request):
                    server.Site.log(self, request)

                    durationMsec = 1000 * (time.time() - request.startTime)

                    requestLength = request.getHeader('content-length')
                    if requestLength is not None:
                        requestLength = int(requestLength)

                    http_metrics.update_http_server_metrics(
                        request.resourceClassName, request.code, durationMsec,
                        requestLength, request.sentLength,
                        request.getHeader('user-agent') or '')
Exemplo n.º 8
0
def _instrumented_dispatcher(dispatcher, request, response, time_fn=time.time):
    start_time = time_fn()
    response_status = 0
    interface.state.store.initialize_context()
    flush_thread = None
    time_now = time_fn()
    if need_to_flush_metrics(time_now):
        flush_thread = threading.Thread(target=_flush_metrics,
                                        args=(time_now, ))
        flush_thread.start()
    try:
        ret = dispatcher(request, response)
    except webapp2.HTTPException as ex:
        response_status = ex.code
        raise
    except Exception:
        response_status = 500
        raise
    else:
        if isinstance(ret, webapp2.Response):
            response = ret
        response_status = response.status_int
    finally:
        if flush_thread:
            flush_thread.join()
        elapsed_ms = int((time_fn() - start_time) * 1000)

        # Use the route template regex, not the request path, to prevent an
        # explosion in possible field values.
        name = request.route.template if request.route is not None else ''

        http_metrics.update_http_server_metrics(
            name,
            response_status,
            elapsed_ms,
            request_size=request.content_length,
            response_size=response.content_length,
            user_agent=request.user_agent)

    return ret
Exemplo n.º 9
0
def _instrumented_dispatcher(dispatcher, request, response, time_fn=time.time):
  start_time = time_fn()
  response_status = 0
  interface.state.store.initialize_context()
  flush_thread = None
  time_now = time_fn()
  if need_to_flush_metrics(time_now):
    flush_thread = threading.Thread(target=_flush_metrics, args=(time_now,))
    flush_thread.start()
  try:
    ret = dispatcher(request, response)
  except webapp2.HTTPException as ex:
    response_status = ex.code
    raise
  except Exception:
    response_status = 500
    raise
  else:
    if isinstance(ret, webapp2.Response):
      response = ret
    response_status = response.status_int
  finally:
    if flush_thread:
      flush_thread.join()
    elapsed_ms = int((time_fn() - start_time) * 1000)

    # Use the route template regex, not the request path, to prevent an
    # explosion in possible field values.
    name = request.route.template if request.route is not None else ''

    http_metrics.update_http_server_metrics(
        name, response_status, elapsed_ms,
        request_size=request.content_length,
        response_size=response.content_length,
        user_agent=request.user_agent)

  return ret