/** Ċ < s late _ header > Ċ url : Ġwww . s late kit . com Ċ git : Ġwww . github . com / code - helix / s late kit Ċ org : Ġwww . code helix . co Ċ author : ĠK ish ore ĠRed dy Ċ copyright : Ġ 2 0 1 6 ĠCode Hel ix ĠSolutions ĠInc . Ċ license : Ġrefer Ġto Ġwebsite Ġand / or Ġgithub Ċ about : ĠA ĠKotlin Ġutility Ġlibrary , Ġtool - kit Ġand Ġserver Ġbackend . Ċ man tra : ĠSimp licity Ġabove Ġall Ġelse Ċ </ s late _ header > Ċ Ġ*/ Ċ package Ġs late kit . telemetry Ċ Ċ import Ġs late kit . common . Identity Ċ import Ġs late kit . results . Failure Ċ import Ġjava . util . concurrent . atomic . Atomic Reference Ċ Ċ /** Ċ Ġ* ĠUsed Ġto Ġtrack Ġthe Ġlast Ġrequest Ġ Ġand Ġresults Ġof Ġcalling Ġsome Ġfunction / target Ġidentified Ġby Ġ@ param Ġid Ċ Ġ* ĠNOTE : ĠThis Ġis Ġparticularly Ġhelpful Ġfor Ġfunctions / operations Ġsuch Ġas Ġscheduled Ġtasks , Ġsync s , Ġone - off Ġcommands . Ċ Ġ* ĠThis Ġserves Ġto Ġtrack Ġthe Ġfollowing : Ċ Ġ* Ċ Ġ* Ġ 1 . Ġtotal Ġrequests Ġ Ġ( Ġprocessed Ġ) Ċ Ġ* Ġ 2 . Ġtotal Ġsuc cesses Ġ Ġe . g . Ġpassed Ċ Ġ* Ġ 3 . Ġtotal Ġdenied ĠĠĠĠ Ġe . g . Ġsecurity / auth Ġfailure Ċ Ġ* Ġ 4 . Ġtotal Ġinvalid ĠĠĠ Ġe . g . Ġinvalid Ġ/ Ġbad Ġrequest Ċ Ġ* Ġ 5 . Ġtotal Ġignored ĠĠĠ Ġe . g . Ġin el igible Ġrequest Ċ Ġ* Ġ 6 . Ġtotal Ġerro red ĠĠĠ Ġe . g . Ġfailed Ġvalidation Ċ Ġ* Ġ 7 . Ġtotal Ġunexpected Ġe . g . Ġunexpected Ġerror Ċ Ġ* Ċ Ġ* Ġ@ param ĠT Request Ġ: ĠType Ġof Ġthe Ġrequest Ġ Ġ/ Ġinput Ġto Ġthe Ġoperation Ċ Ġ* Ġ@ param ĠT Response : ĠType Ġof Ġthe Ġresponse Ġ/ Ġoutput Ġof Ġthe Ġoperation Ċ Ġ* Ġ@ param ĠT Failure Ġ: ĠType Ġof Ġthe Ġerror Ġof Ġthe Ġoperation Ċ Ġ*/ Ċ open Ġclass ĠLast s < T Request , ĠT Response , ĠT Failure >( val Ġid : ĠIdentity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags : List < Tag > Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcustom : List < String >? Ġ= Ġnull ) Ġ: ĠTag ged , ĠEvents < T Request , ĠT Response , ĠT Failure >( tags ) Ġ{ ĊĊĠĠĠ Ġ// ĠLast Ġvalues ĊĠĠĠ Ġprivate Ġval Ġ_ last Request ĠĠĠĠ Ġ= ĠAtomic Reference < T Request >( null ) ĊĠĠĠ Ġprivate Ġval Ġ_ last Pending ĠĠĠĠ Ġ= ĠAtomic Reference < T Request >( null ) ĊĠĠĠ Ġprivate Ġval Ġ_ last Success ĠĠĠĠ Ġ= ĠAtomic Reference < Triple < Any , ĠT Request , ĠT Response >>( null ) ĊĠĠĠ Ġprivate Ġval Ġ_ last Denied ĠĠĠĠĠ Ġ= ĠAtomic Reference < Triple < Any , ĠT Request Ġ, Failure < T Failure >> >( null ) ĊĠĠĠ Ġprivate Ġval Ġ_ last Invalid ĠĠĠĠ Ġ= ĠAtomic Reference < Triple < Any , ĠT Request , ĠFailure < T Failure >> >( null ) ĊĠĠĠ Ġprivate Ġval Ġ_ last Ignored ĠĠĠĠ Ġ= ĠAtomic Reference < Triple < Any , ĠT Request , ĠFailure < T Failure >> >( null ) ĊĠĠĠ Ġprivate Ġval Ġ_ last Er rored ĠĠĠĠ Ġ= ĠAtomic Reference < Triple < Any , ĠT Request , ĠFailure < T Failure >> >( null ) ĊĠĠĠ Ġprivate Ġval Ġ_ last Unexpected Ġ Ġ= ĠAtomic Reference < Triple < Any , ĠT Request , ĠFailure < T Failure >> >( null ) ĊĠĠĠ Ġprivate Ġval Ġ_ custom Last s Ġ= Ġcustom ?. let Ġ{ Ġ Ġc Ġ-> Ġc . map Ġ{ Ġ Ġit Ġto ĠAtomic Reference < Triple < Any , ĠT Request , ĠFailure < T Failure >> >() Ġ}. toMap () Ġ} Ġ?: Ġmap Of () ĊĊĠĠĠ Ġoverride Ġfun Ġrequested Ġ( sender : Any , Ġrequest : ĠT Request ) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġ_ last Request . set ( request ) ĊĠĠĠ Ġoverride Ġfun Ġsucceeded Ġ( sender : Any , Ġrequest : ĠT Request , Ġres : ĠT Response ) ĠĠĠĠĠĠĠĠĠĠ Ġ= Ġ_ last Success . set ( Triple ( sender , Ġrequest , Ġres )) ĊĠĠĠ Ġoverride Ġfun Ġdenied ĠĠĠ Ġ( sender : Any , Ġrequest : ĠT Request , Ġerror : Failure < T Failure >) Ġ Ġ= Ġ_ last Denied . set Ġ( Triple ( sender , Ġrequest , Ġerror )) ĊĠĠĠ Ġoverride Ġfun Ġinvalid ĠĠ Ġ( sender : Any , Ġrequest : ĠT Request , Ġerror : Failure < T Failure >) Ġ Ġ= Ġ_ last Invalid . set ( Triple ( sender , Ġrequest , Ġerror )) ĊĠĠĠ Ġoverride Ġfun Ġignored ĠĠ Ġ( sender : Any , Ġrequest : ĠT Request , Ġerror : Failure < T Failure >) Ġ Ġ= Ġ_ last Ignored . set ( Triple ( sender , Ġrequest , Ġerror )) ĊĠĠĠ Ġoverride Ġfun Ġerro red ĠĠ Ġ( sender : Any , Ġrequest : ĠT Request , Ġerror : Failure < T Failure >) Ġ Ġ= Ġ_ last Er rored . set ( Triple ( sender , Ġrequest , Ġerror )) ĊĠĠĠ Ġoverride Ġfun Ġunexpected ( sender : Any , Ġrequest : ĠT Request , Ġerror : Failure < T Failure >) Ġ Ġ= Ġ_ last Unexpected . set ( Triple ( sender , Ġrequest , Ġerror )) ĊĠĠĠ Ġoverride Ġfun Ġcustom ĠĠĠ Ġ( sender : Any , Ġname : String , Ġreq : ĠT Request , Ġerror : Failure < T Failure >) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Custom ( name )?. let Ġ{ Ġc Ġ-> Ġc . set ( Triple ( sender , Ġreq , Ġerror )) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlast Processed Ġ(): T Request ? ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġ_ last Request . get () ĊĠĠĠ Ġfun Ġlast Success ĠĠ Ġ(): Triple < Any , ĠT Request , ĠT Response >? Ġ= Ġ_ last Success . get () ĊĠĠĠ Ġfun Ġlast Invalid ĠĠ Ġ(): Triple < Any , ĠT Request , ĠFailure < T Failure >> ? Ġ= Ġ_ last Invalid . get () ĊĠĠĠ Ġfun Ġlast Ignored ĠĠ Ġ(): Triple < Any , ĠT Request , ĠFailure < T Failure >> ? Ġ= Ġ_ last Ignored . get () ĊĠĠĠ Ġfun Ġlast Denied ĠĠĠ Ġ(): Triple < Any , ĠT Request , ĠFailure < T Failure >> ? Ġ= Ġ_ last Denied . get () ĊĠĠĠ Ġfun Ġlast Er rored ĠĠ Ġ(): Triple < Any , ĠT Request , ĠFailure < T Failure >> ? Ġ= Ġ_ last Er rored . get () ĊĠĠĠ Ġfun Ġlast Unexpected (): Triple < Any , ĠT Request , ĠFailure < T Failure >> ? Ġ= Ġ_ last Unexpected . get () ĊĠĠĠ Ġfun Ġlast Custom ( name : String ): Triple < Any , ĠT Request , ĠFailure < T Failure >> ? Ġ= Ġget Custom ( name )?. get () ĊĊĠĠĠ Ġfun Ġclear (){ ĊĠĠĠĠĠĠĠ Ġ_ last Request . set ( null ) ĊĠĠĠĠĠĠĠ Ġ_ last Pending . set ( null ) ĊĠĠĠĠĠĠĠ Ġ_ last Success . set ( null ) ĊĠĠĠĠĠĠĠ Ġ_ last Denied . set ( null ) ĊĠĠĠĠĠĠĠ Ġ_ last Invalid . set ( null ) ĊĠĠĠĠĠĠĠ Ġ_ last Ignored . set ( null ) ĊĠĠĠĠĠĠĠ Ġ_ last Er rored . set ( null ) ĊĠĠĠĠĠĠĠ Ġ_ last Unexpected . set ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Custom ( name : String ): Atomic Reference < Triple < Any , ĠT Request Ġ, ĠFailure < T Failure >>> ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif (_ custom Last s . contains ( name )) Ġ_ custom Last s [ name ] Ġelse Ġnull ĊĠĠĠ Ġ} Ċ } Ċ