def test_request_size_no_cl(): app = create_app() Instrumentator(excluded_handlers=["/metrics"]).add( metrics.request_size()).instrument(app).expose(app) client = TestClient(app) client.get("/") response = get_response(client, "/metrics") assert b"http_request_size_bytes" in response.content assert b"http_request_size_bytes_count{" in response.content
def test_request_size_no_labels(): app = create_app() Instrumentator().add( metrics.request_size( should_include_handler=False, should_include_method=False, should_include_status=False, )).instrument(app) client = TestClient(app) client.get("/", data="some data") assert REGISTRY.get_sample_value("http_request_size_bytes_sum", {}) == 9
def test_request_size_all_labels(): app = create_app() Instrumentator().add(metrics.request_size()).instrument(app) client = TestClient(app) client.get("/", data="some data") assert (REGISTRY.get_sample_value( "http_request_size_bytes_sum", { "handler": "/", "method": "GET", "status": "2xx" }, ) == 9)
def test_namespace_subsystem(): app = create_app() Instrumentator().add( metrics.request_size( should_include_handler=False, should_include_method=False, should_include_status=False, metric_namespace="namespace", metric_subsystem="subsystem", )).instrument(app).expose(app) client = TestClient(app) response = get_response(client, "/metrics") assert b" http_request_size_bytes" not in response.content assert b" namespace_subsystem_http_request_size_bytes" in response.content
def instrumentation(info: Info) -> None: if info.modified_handler == "/predict": predicted_quality = info.response.headers.get("X-model-score") if predicted_quality: METRIC.observe(float(predicted_quality)) return instrumentation # ----- add metrics ----- instrumentator.add( metrics.request_size( should_include_handler=True, should_include_method=True, should_include_status=True, metric_namespace=NAMESPACE, metric_subsystem=SUBSYSTEM, )) instrumentator.add( metrics.response_size( should_include_handler=True, should_include_method=True, should_include_status=True, metric_namespace=NAMESPACE, metric_subsystem=SUBSYSTEM, )) instrumentator.add( metrics.latency( should_include_handler=True, should_include_method=True,
instrumentator = Instrumentator( should_group_status_codes=False, should_ignore_untemplated=True, should_respect_env_var=True, should_instrument_requests_inprogress=True, excluded_handlers=[".*admin.*", "/metrics"], env_var_name="ENABLE_METRICS", inprogress_name="inprogress", inprogress_labels=True, ) instrumentator.add( metrics.request_size( should_include_handler=True, should_include_method=False, should_include_status=True, metric_namespace="a", metric_subsystem="b", )).add( metrics.response_size( should_include_handler=True, should_include_method=False, should_include_status=True, metric_namespace="namespace", metric_subsystem="subsystem", )) @app.exception_handler(UnicornException) async def unicorn_exception_handler(request: Request, exc: UnicornException): return JSONResponse(