3838import akka .stream .javadsl .Source ;
3939import akka .util .ByteString ;
4040import akka .util .Timeout ;
41+ import com .arpnetworking .metrics .Counter ;
4142import com .arpnetworking .metrics .Metrics ;
4243import com .arpnetworking .metrics .MetricsFactory ;
4344import com .arpnetworking .metrics .Timer ;
@@ -107,7 +108,9 @@ public Flow<HttpRequest, HttpResponse, NotUsed> flow() {
107108 @ Override
108109 public CompletionStage <HttpResponse > apply (final HttpRequest request ) {
109110 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 ));
111114 // TODO(vkoskela): Add a request UUID and include in MDC. [MAI-462]
112115 LOGGER .trace ()
113116 .setEvent ("http.in.start" )
@@ -229,14 +232,16 @@ private <T> CompletionStage<T> ask(final String actorPath, final Object request,
229232 .exceptionally (throwable -> defaultValue );
230233 }
231234
232- private String createTimerName (final HttpRequest request ) {
235+ private String createMetricName (final HttpRequest request , final String actionPart ) {
233236 final StringBuilder nameBuilder = new StringBuilder ()
234- .append ("rest_service/" )
237+ .append (REST_SERVICE_METRIC_ROOT )
235238 .append (request .method ().value ());
236239 if (!request .getUri ().path ().startsWith ("/" )) {
237240 nameBuilder .append ("/" );
238241 }
239242 nameBuilder .append (request .getUri ().path ());
243+ nameBuilder .append ("/" );
244+ nameBuilder .append (actionPart );
240245 return nameBuilder .toString ();
241246 }
242247
@@ -259,6 +264,9 @@ private String createTimerName(final HttpRequest request) {
259264 private static final String APP_V1_SOURCE_PREFIX = "/metrics/v1/application" ;
260265 private static final String ACTOR_COLLECTD_V1 = "/user/" + CollectdHttpSourceV1 .ACTOR_NAME ;
261266 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" ;
262270
263271 // Ping
264272 private static final HttpHeader PING_CACHE_CONTROL_HEADER = CacheControl .create (
0 commit comments