package Ġsolver . pro log Ċ Ċ import Ġmodel . Alert Ċ import Ġmodel . State Ċ Ċ type alias ĠAlert Mapper Ġ= Ġ() Ġ-> ĠString Ċ Ċ class ĠPro log Alert ( private Ġval Ġalert : ĠAlert ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġalert sTo Rules Ġ= Ġmap Of < String , ĠAlert Mapper >( ĊĠĠĠĠĠĠĠ Ġ" micro chaos . 5 xx _ response " Ġto Ġ:: internal Server Err Mapper , ĊĠĠĠĠĠĠĠ Ġ" micro chaos . high _ latency " Ġto Ġ:: high Latency Mapper , ĊĠĠĠĠĠĠĠ Ġ" micro chaos . high _ cpu _ usage " Ġto Ġ:: high Cpu Usage Mapper , ĊĠĠĠĠĠĠĠ Ġ" micro chaos . high _ memory _ usage " Ġto Ġ:: high Memory Usage Mapper , ĊĠĠĠĠĠĠĠ Ġ" micro chaos . network _ failure " Ġto Ġ:: network Failure Mapper , ĊĠĠĠĠĠĠĠ Ġ" micro chaos . traffic - spike " Ġto Ġ:: traffic Spi ke Mapper , ĊĠĠĠĠĠĠĠ Ġ" micro chaos . application _ shutdown " Ġto Ġ:: process Terminated Mapper , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġto Fact (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġalert sTo Rules [ alert . name ]?. let Ġ{ Ġmapper Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alert . state Ġ== ĠState . ALERT ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapper () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠIllegalStateException (" Unsupported Ġalert : Ġ'${ alert . name }' ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnetwork Failure Mapper () Ġ= ĊĠĠĠĠĠĠĠ ĠFact Builder (" network Failure ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Explanation ( this . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Parameters ( serviceName Param ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Time Window ( alert . timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Terminated Mapper () Ġ= ĊĠĠĠĠĠĠĠ ĠFact Builder (" process Terminated ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Explanation ( this . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Parameters ( serviceName Param ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Time Window ( alert . timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġprivate Ġfun Ġtraffic Spi ke Mapper () Ġ= ĊĠĠĠĠĠĠĠ ĠFact Builder (" traffic Spi ke ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Explanation ( this . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Parameters ( serviceName Param ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Time Window ( alert . timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġprivate Ġfun Ġhigh Cpu Usage Mapper () Ġ= ĊĠĠĠĠĠĠĠ ĠFact Builder (" high Cpu Usage Alert ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Explanation ( this . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Parameters ( serviceName Param ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Time Window ( alert . timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġprivate Ġfun Ġhigh Memory Usage Mapper () Ġ= ĊĠĠĠĠĠĠĠ ĠFact Builder (" high Memory Usage ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Explanation ( this . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Parameters ( serviceName Param ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Time Window ( alert . timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġprivate Ġfun Ġhigh Latency Mapper () Ġ= ĊĠĠĠĠĠĠĠ ĠFact Builder (" high Latency Internal ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Explanation ( this . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Parameters ( serviceName Param (), Ġendpoint Param ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Time Window ( alert . timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġprivate Ġfun Ġinternal Server Err Mapper () Ġ= ĊĠĠĠĠĠĠĠ ĠFact Builder (" functional Failure ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Explanation ( this . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Parameters ( serviceName Param (), Ġendpoint Param ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Time Window ( alert . timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġprivate Ġfun ĠserviceName Param () Ġ= Ġalert . subjects [ 0 ] ĊĊĠĠĠ Ġprivate Ġfun Ġendpoint Param () Ġ= Ġ"' ${ alert . subjects [ 1 ]} '" ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġendpoint Info Ġ= Ġalert . subjects . get OrNull ( 1 )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġendpoint Ġ\" ${ alert . subjects [ 1 ] }\ "" ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġreturn Ġ"${ alert . name }, Ġon Ġservice Ġ\" ${ serviceName Param ()} \" $ endpoint Info Ġat Ġ${ alert . timestamp }" ĊĠĠĠ Ġ} Ċ Ċ }