/* Ċ Ġ* Ġ ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠFre ya ĠA rb j erg Ġand Ġcontributors Ċ Ġ* Ċ Ġ* Ġ ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġ Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġ Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġ Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġ Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġ Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* Ġ ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġ Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* Ġ ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* Ġ ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* Ġ ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* Ġ ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* Ġ ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* Ġ ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* Ġ ĠSOFTWARE . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġl aval ink . server . metrics Ċ Ċ import Ġio . prometheus . client . Collector Registry Ċ import Ġio . prometheus . client . exporter . common . Text Format Ċ import Ġorg . springframework . boot . autoconfigure . condition . Conditional On Bean Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . web . bind . annotation . GetMapping Ċ import Ġorg . springframework . web . bind . annotation . RequestMapping Ċ import Ġorg . springframework . web . bind . annotation . RequestParam Ċ import Ġorg . springframework . web . bind . annotation . RestController Ċ Ċ import Ġjava . io . IOException Ċ import Ġjava . io . String Writer Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġnap ster Ġon Ġ 1 8 . 1 0 . 1 7 . Ġ- ĠCop ied Ġfrom ĠQu arter deck Ġon Ġ 2 0 . 0 5 . 2 0 1 8 Ċ Ġ* Ġ- ĠEdit ed Ġby Ġd avid ffa Ġon Ġ 0 7 . 0 5 . 2 1 . Ċ Ġ* Ġ< p > Ċ Ġ* ĠUsed Ġto Ġexpose Ġthe Ġprometheus Ġmetrics . ĠSome Ġcode Ġcopied Ġfrom Ġprometheus ' Ġown ĠMetrics Servlet Ċ Ġ*/ Ċ @ RestController Ċ @ RequestMapping ("\ ${ metrics . prometheus . endpoint :/ metrics }") Ċ @ Conditional On Bean ( Pro metheus Metrics :: class ) Ċ class ĠPrometheus Metrics Controller Ġ{ ĊĠ Ġprivate Ġval Ġregistry Ġ= ĠCollector Registry . default Registry ĊĊĠ Ġ@ GetMapping ( pro duces Ġ= Ġ[ Text Format . CONTENT _ TYPE _ 0 0 4 ]) ĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġfun Ġget Metrics (@ RequestParam ( name Ġ= Ġ" name [] ", Ġrequired Ġ= Ġfalse ) Ġincluded Param : ĠArray < String >? ): ĊĠ ĠResponseEntity < String > Ġ{ ĊĠĠĠ Ġreturn Ġbuild Answer ( included Param ) ĊĠ Ġ} ĊĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġprivate Ġfun Ġ Ġbuild Answer ( included Param : ĠArray < String >? ): ĠResponseEntity < String > Ġ{ ĊĠĠĠ Ġval Ġparams : ĠSet < String > Ġ= Ġif Ġ( included Param Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġset Of () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġhash Set Of (* included Param ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġwriter Ġ= ĠString Writer () ĊĠĠĠ Ġwriter . use Ġ{ ĊĠĠĠĠĠ ĠText Format . write 0 0 4 ( it , Ġthis . registry . filtered Metric Family Samples ( params )) ĊĠĠĠĠĠ Ġit . flush () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠResponseEntity < String >( writer . toString (), ĠHttpStatus . OK ) ĊĠ Ġ} Ċ } Ċ