package Ġed a . compute . service . middleware Ċ Ċ import Ġio . prometheus . client . Counter Ċ import Ġio . prometheus . client . Histogram Ċ import Ġspark . Request Ċ import Ġspark . Response Ċ Ċ internal Ġobject ĠMetrics Provider Ġ{ ĊĠ Ġconst Ġval ĠKey StartTime Ġ= Ġ" metrics _ start _ time " ĊĊĠ Ġprivate Ġconst Ġval ĠLabel Status Ġ= Ġ" status " ĊĠ Ġprivate Ġconst Ġval ĠLabel Path ĠĠ Ġ= Ġ" path " ĊĊĠ Ġprivate Ġval Ġrequest Counter Ġ= ĠCounter . build () ĊĠĠĠ Ġ. name (" request _ counter ") ĊĠĠĠ Ġ. help (" Count Ġof Ġhandled Ġrequests Ġby Ġreturn Ġstatus Ġcode .") ĊĠĠĠ Ġ. label Names (" status ", Ġ" path ") ĊĠĠĠ Ġ. register () ĊĊĠ Ġprivate Ġval Ġrequest Histogram Ġ= ĠHistogram . build () ĊĠĠĠ Ġ. name (" request _ times ") ĊĠĠĠ Ġ. help (" Time Ġtaken Ġfrom Ġstart Ġto Ġend Ġof Ġservice Ġrequest Ġhandling . Ġ ĠThis Ġtime Ġdoes Ġnot Ġinclude Ġtime Ġspent Ġin Ġ" Ġ+ ĊĠĠĠĠĠ Ġ" the ĠHTTP Ġframework Ġbefore Ġand Ġafter Ġan Ġendpoint Ġhas Ġbeen Ġcalled .") ĊĠĠĠ Ġ. label Names (" status ", Ġ" path ") ĊĠĠĠ Ġ. unit (" seconds ") ĊĠĠĠ Ġ. buckets ( 1 . 0 , Ġ 5 . 0 , Ġ 1 0 . 0 , Ġ 3 0 . 0 , Ġ 6 0 . 0 , Ġ 1 2 0 . 0 , Ġ 3 0 0 . 0 , Ġ 6 0 0 . 0 ) ĊĠĠĠ Ġ. register () ĊĊĠ Ġinit Ġ{ ĊĠ Ġ} ĊĊĠ Ġinternal Ġfun Ġbefore ( request : ĠRequest , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠ Ġval Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠ Ġrequest . attribute ( Key StartTime , Ġstart ) ĊĠ Ġ} ĊĊĠ Ġinternal Ġfun Ġafter ( request : ĠRequest , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠ Ġval Ġend Ġ= Ġ( System . currentTimeMillis () Ġ- Ġrequest . attribute < Long >( Key StartTime ) !! ). toDouble () ĊĠĠĠ Ġval Ġsta Ġ= Ġresponse . status (). toString () ĊĊĠĠĠ Ġrequest Counter . labels ( sta , Ġrequest . path Info ()). inc () ĊĠĠĠ Ġrequest Histogram . labels ( sta , Ġrequest . path Info ()). observe ( end Ġ/ Ġ 1 0 0 0 . 0 ) ĊĠ Ġ} Ċ }