package Ġcom . github . nik it av bv . servic emon itor . alert Ċ Ċ import Ġcom . fasterxml . jackson . annotation . JsonIgnore Ċ import Ġcom . github . nik it av bv . servic emon itor . metric . Metric Ċ import Ġorg . apache . http . client . methods . HttpGet Ċ import Ġorg . apache . http . impl . client . HttpClient s Ċ import Ġjava . util . Date Ċ import Ġjavax . persistence . Entity Ċ import Ġjavax . persistence . Fetch Type Ċ import Ġjavax . persistence . GeneratedValue Ċ import Ġjavax . persistence . Generation Type Ċ import Ġjavax . persistence . Id Ċ import Ġjavax . persistence . JoinColumn Ċ import Ġjavax . persistence . ManyToOne Ċ Ċ private Ġconst Ġval ĠAL ERT _ MIN _ TIME _ DI FFER ENCE Ġ= Ġ 5 Ġ* Ġ 6 0 Ġ* Ġ 1 0 0 0 L Ċ Ċ @ Entity Ċ data Ġclass ĠAlert ( ĊĠĠĠ Ġ@ Id Ġ@ GeneratedValue ( strategy Ġ= ĠGeneration Type . IDENTITY ) ĊĠĠĠ Ġvar Ġid : ĠLong ? Ġ= Ġnull , ĊĊĠĠĠ Ġval Ġparam Name : ĠString , ĊĠĠĠ Ġval Ġalert Condition : ĠString , ĊĠĠĠ Ġval Ġlevel : ĠString , ĊĠĠĠ Ġval Ġaction : ĠString , ĊĊĠĠĠ Ġvar Ġtriggered : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġvar Ġtriggered At : ĠDate ? Ġ= Ġnull , ĊĠĠĠ Ġvar Ġaction Executed : ĠBoolean Ġ= Ġfalse , ĊĊĠĠĠ Ġ@ ManyToOne ( fetch Ġ= ĠFetch Type . LA ZY ) ĊĠĠĠ Ġ@ JoinColumn ( name Ġ= Ġ" metric _ id ") ĊĠĠĠ Ġ@ JsonIgnore ĊĠĠĠ Ġval Ġmetric : ĠMetric Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġrun Check ( data : ĠMutable Map < *, Ġ* >, Ġalert Repository : ĠAlert Repository ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġcheck If Trigger ( data ) Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ&& Ġ! action Executed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Time And Run Action ( state , Ġalert Repository ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( state Ġ!= Ġtriggered ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriggered At Ġ= ĠDate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Executed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtriggered Ġ= Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert Repository . save ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Time And Run Action ( state : ĠBoolean , Ġalert Repository : ĠAlert Repository ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtrigger Date Ġ= Ġtriggered At ĊĠĠĠĠĠĠĠ Ġif Ġ( trigger Date Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Difference Ġ= ĠDate (). time Ġ- Ġtrigger Date . time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Difference Ġ> ĠAL ERT _ MIN _ TIME _ DI FFER ENCE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Action ( action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Executed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriggered Ġ= Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert Repository . save ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtriggered At Ġ= ĠDate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert Repository . save ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Action ( action : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠhttpClient Ġ= ĠHttpClient s . create Default () ĊĠĠĠĠĠĠĠ Ġval Ġhttp Get Ġ= ĠHttp Get ( action ) ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠhttpClient . execute ( http Get ) ĊĠĠĠĠĠĠĠ Ġres . close () ĊĠĠĠĠĠĠĠ ĠhttpClient . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck If Trigger ( data : ĠMutable Map < *, Ġ* >): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparameter Value Ġ= ĠgetValue By Param Expression ( data , Ġparam Name ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġcompare Value To Level ( parameter Value , Ġalert Condition , Ġlevel ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetValue By Param Expression ( data : ĠMap < *, Ġ* >, Ġexpression : ĠString ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Part Ġ= Ġwhen Ġ( expression . contains (". ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġexpression . substring ( 0 , Ġexpression . indexOf ('. ')) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġexpression ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġaction : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġkey To Get Ġ= Ġwhen Ġ( key Part . contains (': ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsplit Index Ġ= Ġkey Part . indexOf (": ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= Ġkey Part . substring ( split Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Part . substring ( 0 , Ġsplit Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġkey Part ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdata Value Ġ= Ġdata [ key To Get ] ĊĠĠĠĠĠĠĠ Ġif Ġ( data Value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Metric Ġmap Ġdoes Ġnot Ġcontain Ġkey : Ġ$ key To Get ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġdata Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġapply Action ( data Value , Ġaction ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Action ( data Value : ĠAny , Ġaction : ĠString ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" size " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( data Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠList < *> Ġ-> Ġdata Value . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMap < *, Ġ*> Ġ-> Ġdata Value . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Unknown Ġclass Ġto Ġapply Ġsize Ġfor : Ġ${ data Value . java Class }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Unknown Ġaction Ġto Ġapply Ġto Ġdata Ġin Ġalert : Ġ$ action ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompare Value To Level ( value : ĠAny , Ġcondition : ĠString , Ġlevel : ĠString ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( condition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"< " Ġ-> Ġcompare LessThan ( value , Ġlevel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" >" Ġ-> Ġcompare Big ger Than ( value , Ġlevel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Unknown Ġalert Ġcondition : Ġ$ condition ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompare LessThan ( value : ĠAny , Ġlevel : ĠString ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġvalue . toDouble () Ġ< Ġlevel . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> Ġvalue Ġ< Ġlevel . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Unknown Ġtype Ġfor Ġ\" < \" Ġcomparison : Ġ${ value . java Class }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompare Big ger Than ( value : ĠAny , Ġlevel : ĠString ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġvalue . toDouble () Ġ> Ġlevel . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> Ġvalue Ġ> Ġlevel . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Unknown Ġtype Ġfor Ġ\ "> \" Ġcomparison : Ġ${ value . java Class }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ