38
38
import akka .stream .javadsl .Source ;
39
39
import akka .util .ByteString ;
40
40
import akka .util .Timeout ;
41
+ import com .arpnetworking .metrics .Counter ;
41
42
import com .arpnetworking .metrics .Metrics ;
42
43
import com .arpnetworking .metrics .MetricsFactory ;
43
44
import com .arpnetworking .metrics .Timer ;
@@ -107,7 +108,9 @@ public Flow<HttpRequest, HttpResponse, NotUsed> flow() {
107
108
@ Override
108
109
public CompletionStage <HttpResponse > apply (final HttpRequest request ) {
109
110
final Metrics metrics = _metricsFactory .create ();
110
- final Timer timer = metrics .createTimer (createTimerName (request ));
111
+ final Timer timer = metrics .createTimer (createMetricName (request , REQUEST_METRIC ));
112
+ final Counter bodySize = metrics .createCounter (createMetricName (request , BODY_SIZE_METRIC ));
113
+ bodySize .increment (request .entity ().getContentLengthOption ().orElse (0L ));
111
114
// TODO(vkoskela): Add a request UUID and include in MDC. [MAI-462]
112
115
LOGGER .trace ()
113
116
.setEvent ("http.in.start" )
@@ -229,14 +232,16 @@ private <T> CompletionStage<T> ask(final String actorPath, final Object request,
229
232
.exceptionally (throwable -> defaultValue );
230
233
}
231
234
232
- private String createTimerName (final HttpRequest request ) {
235
+ private String createMetricName (final HttpRequest request , final String actionPart ) {
233
236
final StringBuilder nameBuilder = new StringBuilder ()
234
- .append ("rest_service/" )
237
+ .append (REST_SERVICE_METRIC_ROOT )
235
238
.append (request .method ().value ());
236
239
if (!request .getUri ().path ().startsWith ("/" )) {
237
240
nameBuilder .append ("/" );
238
241
}
239
242
nameBuilder .append (request .getUri ().path ());
243
+ nameBuilder .append ("/" );
244
+ nameBuilder .append (actionPart );
240
245
return nameBuilder .toString ();
241
246
}
242
247
@@ -259,6 +264,9 @@ private String createTimerName(final HttpRequest request) {
259
264
private static final String APP_V1_SOURCE_PREFIX = "/metrics/v1/application" ;
260
265
private static final String ACTOR_COLLECTD_V1 = "/user/" + CollectdHttpSourceV1 .ACTOR_NAME ;
261
266
private static final String ACTOR_APP_V1 = "/user/" + ClientHttpSourceV1 .ACTOR_NAME ;
267
+ private static final String REST_SERVICE_METRIC_ROOT = "rest_service/" ;
268
+ private static final String BODY_SIZE_METRIC = "body_size" ;
269
+ private static final String REQUEST_METRIC = "request" ;
262
270
263
271
// Ping
264
272
private static final HttpHeader PING_CACHE_CONTROL_HEADER = CacheControl .create (
0 commit comments