我正在为 Tapir + Akka http 实现自定义指标。基于 Tapir 可观测性,我能够获取端点方法、状态代码和时间。 但是,我正在寻求获得输出按摩大小。我知道对于某些情况来说这并不容易/不可能。但是,我的端点仅返回由 Circe 编码的简单字符串。知道如何从 EndpointOutput 类或其他方式实现这一点吗?添加一些上下文,这就是我从 EndpointMetric 类记录 EndpointOutput 时得到的内容:
Pair(
Empty(sttp.tapir.Codec$$anon$4@6b7de12,Info(None,List(),false,AttributeMap(Map()))),
Body(StringBody(UTF-8),sttp.tapir.Codec$$anon$8@4e6dda7e,Info(None,List(),false,AttributeMap(Map()))),sttp.tapir.internal.package$$$Lambda$13005/0x00000001015c45a0@3204b602,sttp.tapir.internal.package$$$Lambda$13006/0x00000001015c4b50@6441d5a1)
)
EndpointOuput
是对输出形状的描述 - 元数据 - 它不包括调用端点时实际生成的任何值。不过,您可以通过其他方式获得所需的结果。
EndpointMetric
类包含onResponseBody
回调:
onResponseBody: Option[(AnyEndpoint, ServerResponse[_]) => F[Unit]] = None,
虽然
AnyEndpoint
是形状,但 SeverResponse
是端点产生的实际响应。它包含状态代码、标头和正文,对于 Akka 解释器,正文类型参数是 Either[Flow[Message, Message, Any], ResponseEntity]
;在 ServerResponse
中,它还被包裹在 Option
中。
如果您有非流式端点,您将获得右侧,即
ResponseEntity
,您可以从中计算响应大小(如果可用)。