File tree Expand file tree Collapse file tree 2 files changed +21
-10
lines changed
modules/jooby-metrics/src
main/java/org/jooby/metrics
test/java/org/jooby/metrics Expand file tree Collapse file tree 2 files changed +21
-10
lines changed Original file line number Diff line number Diff line change 206206import org .jooby .Request ;
207207import org .jooby .Response ;
208208import org .jooby .Route ;
209- import org .jooby .Route .Chain ;
210209import org .jooby .Status ;
211210
212211import com .codahale .metrics .Counter ;
220219 * @author edgar
221220 * @since 0.13.0
222221 */
223- public class InstrumentedHandler implements Route .Filter {
222+ public class InstrumentedHandler implements Route .Handler {
224223
225224 @ Override
226- public void handle (final Request req , final Response rsp , final Chain chain ) throws Throwable {
225+ public void handle (final Request req , final Response rsp ) throws Throwable {
227226 MetricRegistry registry = req .require (MetricRegistry .class );
228227 Counter counter = registry .counter ("request.actives" );
229228 Timer .Context timer = registry .timer ("request" ).time ();
230- try {
231- counter .inc ();
232- chain . next ( req , rsp );
233- } finally {
229+
230+ counter .inc ();
231+
232+ rsp . complete (( ereq , ersp , x ) -> {
234233 timer .stop ();
235234 counter .dec ();
236235 Meter meter = registry .meter ("responses." + rsp .status ().orElse (Status .OK ).value ());
237236 meter .mark ();
238- }
237+ });
239238 }
240239
241240}
Original file line number Diff line number Diff line change 2222
2323public class InstrumentedHandlerTest {
2424
25+ private Block capture = unit -> {
26+ Response rsp = unit .get (Response .class );
27+ rsp .complete (unit .capture (Route .Complete .class ));
28+ };
29+
30+ private Block onComplete = unit -> {
31+ unit .captured (Route .Complete .class ).iterator ().next ()
32+ .handle (unit .get (Request .class ), unit .get (Response .class ), Optional .empty ());
33+ };
34+
2535 private Block registry = unit -> {
2636 Request request = unit .get (Request .class );
2737 expect (request .require (MetricRegistry .class ))
@@ -80,12 +90,13 @@ public void instrument() throws Exception {
8090 .expect (registry )
8191 .expect (counter )
8292 .expect (timer )
93+ .expect (capture )
8394 .expect (meter )
8495 .expect (next )
8596 .run (unit -> {
8697 new InstrumentedHandler ().handle (unit .get (Request .class ), unit .get (Response .class ),
8798 unit .get (Route .Chain .class ));
88- });
99+ }, onComplete );
89100 }
90101
91102 @ Test (expected = IOException .class )
@@ -94,12 +105,13 @@ public void instrumentWithErr() throws Exception {
94105 .expect (registry )
95106 .expect (counter )
96107 .expect (timer )
108+ .expect (capture )
97109 .expect (meter )
98110 .expect (nextErr )
99111 .run (unit -> {
100112 new InstrumentedHandler ().handle (unit .get (Request .class ), unit .get (Response .class ),
101113 unit .get (Route .Chain .class ));
102- });
114+ }, onComplete );
103115 }
104116
105117}
You can’t perform that action at this time.
0 commit comments