package Ġnorth . under tow . example . filters Ċ Ċ import Ġcom . co da h ale . metrics . Metric Registry Ċ import Ġnorth . under tow . Response Filter Ċ import Ġnorth . under tow . matched Path Template Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ object ĠMetrics Filter Ġ{ ĊĠĠĠ Ġfun Ġfilter ( metric Registry : ĠMetric Registry ): ĠResponse Filter Ġ= Ġ{ Ġexchange Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġmatched Path Template Ġ= Ġexchange . matched Path Template ĊĠĠĠĠĠĠĠ Ġif Ġ( matched Path Template Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest StartTime Ġ= Ġexchange . request StartTime ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request StartTime Ġ== Ġ- 1 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" You Ġneed Ġto Ġenable ĠUnder tow Options . RECORD _ REQUEST _ START _ TIME Ġto Ġbe Ġable Ġto Ġgather Ġtimer Ġmetrics .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration Ġ= ĠSystem . nano Time () Ġ- Ġrequest StartTime ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstatusCode Ġ= Ġexchange . statusCode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Part Ġ= Ġmatched Path Template . substring After ('/ '). replace ('/', Ġ'.') ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetric Registry ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. timer ("$ statusCode .$ path Part ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. update ( duration , ĠTimeUnit . NAN O SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Metrics Filter :: class . java ) !! Ċ } Ċ