计算貘输出大小

问题描述 投票:0回答:1

我正在为 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)
)
scala akka-http tapir
1个回答
0
投票

EndpointOuput
是对输出形状的描述 - 元数据 - 它不包括调用端点时实际生成的任何值。不过,您可以通过其他方式获得所需的结果。

EndpointMetric
类包含
onResponseBody
回调:

onResponseBody: Option[(AnyEndpoint, ServerResponse[_]) => F[Unit]] = None,

虽然

AnyEndpoint
是形状,但
SeverResponse
是端点产生的实际响应。它包含状态代码、标头和正文,对于 Akka 解释器,正文类型参数是
Either[Flow[Message, Message, Any], ResponseEntity]
;在
ServerResponse
中,它还被包裹在
Option
中。

如果您有非流式端点,您将获得右侧,即

ResponseEntity
,您可以从中计算响应大小(如果可用)。

© www.soinside.com 2019 - 2024. All rights reserved.