예제 #1
0
    def report(self, batch: metrics.Batch) -> None:
        # gevent events come in on another thread. we're relying on the GIL to
        # keep us from shenanigans here and we swap things out semi-safely to
        # ensure minimal lost data.
        times_blocked = self.times_blocked
        self.times_blocked = []

        for time_blocked in times_blocked:
            batch.timer("hub_blocked").send(time_blocked)
예제 #2
0
    def report(self, batch: metrics.Batch) -> None:
        threshold = time.time() - MAX_REQUEST_AGE
        stale_requests = [
            trace_id for trace_id, start_time in self.live_requests.items()
            if start_time < threshold
        ]
        for stale_request_id in stale_requests:
            self.live_requests.pop(stale_request_id, None)

        batch.gauge("active_requests").replace(len(self.live_requests))
예제 #3
0
 def report(self, batch: metrics.Batch) -> None:
     for name, reporter in self.reporters.items():
         original_namespace = batch.namespace
         try:
             batch.namespace = b".".join(
                 (batch.namespace, b"clients", name.encode()))
             reporter(batch)
         except Exception as exc:
             logger.exception("Error generating client metrics: %s: %s",
                              name, exc)
         finally:
             batch.namespace = original_namespace
예제 #4
0
 def __init__(self,
              batch: metrics.Batch,
              span: Span,
              sample_rate: float = 1.0):
     self.batch = batch
     self.timer = batch.timer(f"{span.component_name}.{span.name}")
     self.sample_rate = sample_rate
예제 #5
0
 def __init__(self,
              batch: metrics.Batch,
              span: Span,
              sample_rate: float = 1.0):
     self.batch = batch
     self.base_name = f"clients.{span.name}"
     self.timer = batch.timer(self.base_name)
     self.sample_rate = sample_rate
예제 #6
0
 def __init__(self,
              batch: metrics.Batch,
              server_span: Span,
              sample_rate: float = 1.0):
     self.batch = batch
     self.base_name = "server." + server_span.name
     self.timer = batch.timer(self.base_name)
     self.sample_rate = sample_rate
예제 #7
0
 def __init__(self,
              batch: metrics.Batch,
              span: Span,
              sample_rate: float = 1.0):
     self.batch = batch
     self.timer = batch.timer(
         typing.cast(str, span.component_name) + "." + span.name)
     self.sample_rate = sample_rate
예제 #8
0
 def report(self, batch: metrics.Batch) -> None:
     for name, reporter in self.reporters.items():
         try:
             batch.base_tags["client"] = name
             reporter(batch)
         except Exception as exc:
             logger.exception("Error generating client metrics: %s: %s",
                              name, exc)
         finally:
             del batch.base_tags["client"]
예제 #9
0
 def __init__(
     self, batch: metrics.Batch, span: Span, whitelist: Set[str], sample_rate: float = 1.0
 ):
     self.batch = batch
     self.span = span
     self.tags: Dict[str, Any] = {}
     self.timer = batch.timer("baseplate.local")
     self.whitelist = whitelist
     self.counters: Dict[str, float] = {}
     self.sample_rate = sample_rate
예제 #10
0
 def __init__(
     self, batch: metrics.Batch, server_span: Span, allowlist: Set[str], sample_rate: float = 1.0
 ):
     self.batch = batch
     self.span = server_span
     self.base_name = "baseplate.server"
     self.allowlist = allowlist
     self.tags: Dict[str, Any] = {}
     self.timer = batch.timer(f"{self.base_name}.latency")
     self.counters: Dict[str, float] = {}
     self.sample_rate = sample_rate
예제 #11
0
 def report(self, batch: metrics.Batch) -> None:
     batch.gauge("active_requests").replace(len(self.pool.greenlets))
예제 #12
0
 def __init__(self, batch: metrics.Batch, span: Span):
     self.batch = batch
     self.timer = batch.timer(
         typing.cast(str, span.component_name) + "." + span.name)
예제 #13
0
 def __init__(self, batch: metrics.Batch, span: Span):
     self.batch = batch
     self.base_name = f"clients.{span.name}"
     self.timer = batch.timer(self.base_name)
예제 #14
0
 def __init__(self, batch: metrics.Batch, server_span: Span):
     self.batch = batch
     self.base_name = "server." + server_span.name
     self.timer = batch.timer(self.base_name)
예제 #15
0
 def report(self, batch: metrics.Batch) -> None:
     for generation, stats in enumerate(gc.get_stats()):
         for name, value in stats.items():
             gauge = batch.gauge(f"gc.{name}",
                                 tags={"generation": generation})
             gauge.replace(value)
예제 #16
0
    def report(self, batch: metrics.Batch) -> None:
        gc_durations = self.gc_durations
        self.gc_durations = []

        for gc_duration in gc_durations:
            batch.timer("gc.elapsed").send(gc_duration)
예제 #17
0
 def report(self, batch: metrics.Batch) -> None:
     for generation, stats in enumerate(gc.get_stats()):
         for name, value in stats.items():
             batch.gauge(f"gc.gen{generation}.{name}").replace(value)
예제 #18
0
 def report(self, batch: metrics.Batch) -> None:
     batch.gauge("open_connections").replace(len(self.pool.greenlets))