def test_working(self): GCCollector(registry=self.registry) self.registry.collect() before = self.registry.get_sample_value( 'python_gc_objects_collected_total', labels={"generation": "0"}) # add targets for gc a = [] a.append(a) del a b = [] b.append(b) del b gc.collect(0) self.registry.collect() after = self.registry.get_sample_value( 'python_gc_objects_collected_total', labels={"generation": "0"}) self.assertEqual(2, after - before) self.assertEqual( 0, self.registry.get_sample_value( 'python_gc_objects_uncollectable_total', labels={"generation": "0"}))
def test_working(self): collector = GCCollector(registry=self.registry, gc=self.gc) self.gc.start_gc({'generation': 0}) self.gc.stop_gc({'generation': 0, 'collected': 10, 'uncollectable': 2}) self.assertEqual(1, self.registry.get_sample_value( 'python_gc_duration_seconds_count', labels={"generation": "0"})) self.assertEqual(1, self.registry.get_sample_value( 'python_gc_collected_objects_count', labels={"generation": "0"})) self.assertEqual(1, self.registry.get_sample_value( 'python_gc_uncollectable_objects_count', labels={"generation": "0"})) self.assertEqual(10, self.registry.get_sample_value( 'python_gc_collected_objects_sum', labels={"generation": "0"})) self.assertEqual(2, self.registry.get_sample_value( 'python_gc_uncollectable_objects_sum', labels={"generation": "0"}))
def test_empty(self): GCCollector(registry=self.registry) self.registry.collect() before = self.registry.get_sample_value( 'python_gc_objects_collected_total', labels={"generation": "0"}) gc.collect(0) self.registry.collect() after = self.registry.get_sample_value( 'python_gc_objects_collected_total', labels={"generation": "0"}) self.assertEqual(0, after - before)
info.info({'name': 'jeffrey4l', 'email': '*****@*****.**'}) h = Histogram('random_integer', 'Request size (bytes)', buckets=[0, 2, 4, 6, 8, INF], registry=None) e = Enum('task_state', 'Description of enum', states=['starting', 'running', 'stopped']) platform_collector = PlatformCollector(registry=None) p_collector = ProcessCollector(registry=None) collectors = [c, s, info, h, e, platform_collector, p_collector] global_registry = CollectorRegistry() gc_collector = GCCollector(registry=global_registry) class MyHandler(BaseHTTPRequestHandler): @s.time() def do_GET(self): c.inc() e.state(random.choice(['starting', 'running', 'stopped'])) h.observe(random.randint(1, 11)) registry = CollectorRegistry(auto_describe=True) for i in collectors: registry.register(i) encoder, content_type = choose_encoder(self.headers.get('Accept')) output = encoder(registry) output2 = encoder(global_registry)
def setup_monitoring( app: web.Application, app_name: str, *, enter_middleware_cb: Optional[EnterMiddlewareCB] = None, exit_middleware_cb: Optional[ExitMiddlewareCB] = None, **app_info_kwargs, ): # app-scope registry target_info = {"application_name": app_name} target_info.update(app_info_kwargs) app[kCOLLECTOR_REGISTRY] = reg = CollectorRegistry( auto_describe=False, target_info=target_info ) # automatically collects process metrics see [https://github.com/prometheus/client_python] app[kPROCESS_COLLECTOR] = ProcessCollector(registry=reg) # automatically collects python_info metrics see [https://github.com/prometheus/client_python] app[kPLATFORM_COLLECTOR] = PlatformCollector(registry=reg) # automatically collects python garbage collector metrics see [https://github.com/prometheus/client_python] # prefixed with python_gc_ app[kGC_COLLECTOR] = GCCollector(registry=reg) # Total number of requests processed app[kREQUEST_COUNT] = Counter( name="http_requests", documentation="Total requests count", labelnames=["app_name", "method", "endpoint", "http_status"], registry=reg, ) app[kINFLIGHTREQUESTS] = Gauge( name="http_in_flight_requests", documentation="Number of requests in process", labelnames=["app_name", "method", "endpoint"], registry=reg, ) app[kRESPONSELATENCY] = Summary( name="http_request_latency_seconds", documentation="Time processing a request", labelnames=["app_name", "method", "endpoint"], registry=reg, ) # WARNING: ensure ERROR middleware is over this one # # non-API request/response (e.g /metrics, /x/* ...) # | # API request/response (/v0/*) | # | | # | | # v | # ===== monitoring-middleware ===== # == rest-error-middlewarer ==== | # == ... == | # == rest-envelope-middleware == v # # # ensures is first layer but cannot guarantee the order setup is applied app.middlewares.insert( 0, middleware_factory( app_name, enter_middleware_cb=enter_middleware_cb, exit_middleware_cb=exit_middleware_cb, ), ) app.router.add_get("/metrics", metrics_handler) return True