/* Ċ Ġ* ĠCopyright ĠOpen Search ĠContributors Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ*/ Ċ Ċ package Ġorg . opense arch . alert ing . util . destination migration Ċ Ċ import Ġorg . apache . logging . log 4 j . Log Manager Ċ import Ġorg . opense arch . Open Search Status Exception Ċ import Ġorg . opense arch . action . bulk . Backoff Policy Ċ import Ġorg . opense arch . alert ing . model . destination . Destination Ċ import Ġorg . opense arch . alert ing . opense arch api . retry For Notification Ċ import Ġorg . opense arch . alert ing . opense arch api . suspend Until Ċ import Ġorg . opense arch . client . Client Ċ import Ġorg . opense arch . client . node . Node Client Ċ import Ġorg . opense arch . common . Strings Ċ import Ġorg . opense arch . common . unit . Time Value Ċ import Ġorg . opense arch . commons . Config Constants Ċ import Ġorg . opense arch . commons . destination . message . Legacy Base Message Ċ import Ġorg . opense arch . commons . notifications . Notifications Plugin Interface Ċ import Ġorg . opense arch . commons . notifications . action . Create Notification Config Request Ċ import Ġorg . opense arch . commons . notifications . action . Create Notification Config Response Ċ import Ġorg . opense arch . commons . notifications . action . Get Notification Config Request Ċ import Ġorg . opense arch . commons . notifications . action . Get Notification Config Response Ċ import Ġorg . opense arch . commons . notifications . action . Legacy Publish Notification Request Ċ import Ġorg . opense arch . commons . notifications . action . Legacy Publish Notification Response Ċ import Ġorg . opense arch . commons . notifications . action . Send Notification Response Ċ import Ġorg . opense arch . commons . notifications . model . Channel Message Ċ import Ġorg . opense arch . commons . notifications . model . Config Type Ċ import Ġorg . opense arch . commons . notifications . model . EventSource Ċ import Ġorg . opense arch . commons . notifications . model . Notification Config Info Ċ import Ġorg . opense arch . commons . notifications . model . Severity Type Ċ import Ġorg . opense arch . rest . Rest Status Ċ Ċ class ĠNotification Api Utils Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLog Manager . getLogger ( Notification Api Utils :: class ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdefault Retry Policy Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBack off Policy . constant Backoff ( Time Value . time Value Millis ( 1 0 0 ), Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGets Ġa ĠNotification Config Info Ġobject Ġby ĠID Ġif Ġit Ġexists . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġget Notification Config Info ( client : ĠNode Client , Ġid : ĠString ): ĠNotification Config Info ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres : ĠGet Notification Config Response Ġ= Ġget Notification Config ( client , ĠGet Notification Config Request ( set Of ( id ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . search Result . object List . first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠOpen Search Status Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . status () Ġ== ĠRest Status . NOT _ FOUND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Notification Ġconfig Ġ[$ id ] Ġwas Ġnot Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Notification Config ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient : ĠNode Client , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Notification Config Request : ĠGet Notification Config Request ĊĠĠĠĠĠĠĠ Ġ): ĠGet Notification Config Response Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġget Notification Config Response : ĠGet Notification Config Response ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Str Ġ= Ġclient . thread Pool (). thread Context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Transient < String >( Config Constants . OP ENSE ARCH _ SECURITY _ USER _ INFO _ THREAD _ CONTEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . thread Pool (). thread Context . stash Context (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . thread Pool (). thread Context . put Transient ( Config Constants . OP ENSE ARCH _ SECURITY _ USER _ INFO _ THREAD _ CONTEXT , Ġuser Str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Notification Config Response Ġ= ĠNotifications Plugin Interface . suspend Until Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . get Notification Config ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Notification Config Request , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Notification Config Response ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġcreate Notification Config ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient : ĠNode Client , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Notification Config Request : ĠCreate Notification Config Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretry Policy : ĠBack off Policy Ġ= Ġdefault Retry Policy ĊĠĠĠĠĠĠĠ Ġ): ĠCreate Notification Config Response Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġcreate Notification Config Response : ĠCreate Notification Config Response ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Str Ġ= Ġclient . thread Pool (). thread Context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Transient < String >( Config Constants . OP ENSE ARCH _ SECURITY _ USER _ INFO _ THREAD _ CONTEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . thread Pool (). thread Context . stash Context (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . thread Pool (). thread Context . put Transient ( Config Constants . OP ENSE ARCH _ SECURITY _ USER _ INFO _ THREAD _ CONTEXT , Ġuser Str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretry Policy . retry For Notification ( logger ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Notification Config Response Ġ= ĠNotifications Plugin Interface . suspend Until Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . create Notification Config ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Notification Config Request , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate Notification Config Response ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠExtension Ġfunction Ġfor Ġpublishing Ġa Ġnotification Ġto Ġa Ġlegacy Ġdestination . Ċ Ġ* Ċ Ġ* ĠWe Ġnow Ġsupport Ġthe Ġnew Ġchannels Ġfrom Ġthe ĠNotification Ġplugin . ĠHowever , Ġwe Ġstill Ġneed Ġto Ġsupport Ċ Ġ* Ġthe Ġold Ġlegacy Ġdest inations Ġthat Ġhave Ġnot Ġbeen Ġmigrated Ġto ĠNotification Ġconfigs . ĠTo Ġac commod ate Ġthis Ġeven Ġafter Ġremoving Ġthe Ċ Ġ* Ġnotification Ġlogic Ġin ĠAlert ing , Ġwe Ġhave Ġa Ġseparate ĠAPI Ġin Ġthe ĠNotifications Plugin Interface Ġthat Ġallows Ċ Ġ* Ġus Ġto Ġpublish Ġthese Ġold Ġlegacy Ġones Ġdirectly . Ċ Ġ*/ Ċ suspend Ġfun ĠLegacy Base Message . publish Legacy Notification ( client : ĠClient ): ĠString Ġ{ ĊĠĠĠ Ġval Ġbase Message Ġ= Ġthis ĊĠĠĠ Ġval Ġres : ĠLegacy Publish Notification Response Ġ= ĠNotifications Plugin Interface . suspend Until Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . publish Legacy Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( client Ġas ĠNode Client ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLegacy Publish Notification Request ( base Message ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġvalidate ResponseStatus ( Rest Status . from Code ( res . destination Response . statusCode ), Ġres . destination Response . response Content ) ĊĠĠĠ Ġreturn Ġres . destination Response . response Content Ċ } Ċ Ċ /** Ċ Ġ* ĠExtension Ġfunction Ġfor Ġpublishing Ġa Ġnotification Ġto Ġa Ġchannel Ġin Ġthe ĠNotification Ġplugin . Ċ Ġ*/ Ċ suspend Ġfun ĠNotification Config Info . send Notification ( client : ĠClient , Ġtitle : ĠString , Ġcompiled Message : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġval Ġconfig Ġ= Ġthis ĊĠĠĠ Ġval Ġres : ĠSend Notification Response Ġ= ĠNotifications Plugin Interface . suspend Until Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . send Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( client Ġas ĠNode Client ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Source ( title , Ġconfig . config Id , ĠSeverity Type . INFO ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠChannel Message ( compiled Message , Ġnull , Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( config . config Id ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġvalidate ResponseStatus ( res . getStatus (), Ġres . notification Event . toString ()) ĊĠĠĠ Ġreturn Ġres . notification Event . toString () Ċ } Ċ Ċ /** Ċ Ġ* ĠFor Ġmost Ġchannel Ġtypes , Ġa Ġplaceholder ĠAlert ing Ġtitle Ġwill Ġbe Ġused Ġbut Ġthe Ġemail Ġchannel Ġwill Ċ Ġ* Ġuse Ġthe Ġsubject , Ġso Ġit Ġappears Ġas Ġthe Ġactual Ġsubject Ġof Ġthe Ġemail . Ċ Ġ*/ Ċ fun ĠNotification Config Info . getTitle ( subject : ĠString ?): ĠString Ġ{ ĊĠĠĠ Ġval Ġdefault Title Ġ= Ġ" Alert ing - Notification ĠAction " ĊĠĠĠ Ġif Ġ( this . notification Config . config Type Ġ== ĠConfig Type . EMAIL ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( subject . isNull OrEmpty ()) Ġdefault Title Ġelse Ġsubject ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġdefault Title Ċ } Ċ Ċ fun ĠNotification Config Info . create Message Content ( subject : ĠString ?, Ġmessage : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġ// ĠFor ĠEmail ĠChannels , Ġthe Ġsubject Ġis Ġnot Ġpassed Ġin Ġthe Ġmain Ġmessage Ġsince Ġit 's Ġused Ġas Ġthe Ġtitle ĊĠĠĠ Ġif Ġ( this . notification Config . config Type Ġ== ĠConfig Type . EMAIL ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġconstruct Message Content ("", Ġmessage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġconstruct Message Content ( subject , Ġmessage ) Ċ } Ċ Ċ /** Ċ Ġ* ĠSimilar Ġto ĠDest inations , Ġthis Ġis Ġa Ġgeneric Ġutility Ġmethod Ġfor Ġconstructing Ġmessage Ġcontent Ġfrom Ċ Ġ* Ġa Ġsubject Ġand Ġmessage Ġbody Ġwhen Ġsending Ġthrough ĠNotifications Ġsince Ġthe ĠAction Ġdefinition Ġin ĠMonitor s Ġcan Ġhave Ġboth . Ċ Ġ*/ Ċ private Ġfun Ġconstruct Message Content ( subject : ĠString ?, Ġmessage : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( Strings . isNull OrEmpty ( subject )) Ġmessage Ġelse Ġ"$ subject Ġ\ n \ n Ġ$ message " Ċ } Ċ Ċ /** Ċ Ġ* ĠAll Ġvalid Ġresponse Ġstatuses . Ċ Ġ*/ Ċ private Ġval ĠVALID _ RESPONSE _ STATUS Ġ= Ġset Of ( ĊĠĠĠ ĠRest Status . OK . status , ĠRest Status . CREATED . status , ĠRest Status . ACCEPT ED . status , ĊĠĠĠ ĠRest Status . NON _ AUTHOR IT ATIVE _ INFORMATION . status , ĠRest Status . NO _ CONTENT . status , ĊĠĠĠ ĠRest Status . RESET _ CONTENT . status , ĠRest Status . PAR TIAL _ CONTENT . status , ĊĠĠĠ ĠRest Status . MULTI _ STATUS . status Ċ ) Ċ Ċ @ Throws ( Open Search Status Exception :: class ) Ċ fun Ġvalidate ResponseStatus ( rest Status : ĠRest Status , Ġresponse Content : ĠString ) Ġ{ ĊĠĠĠ Ġif Ġ(! VALID _ RESPONSE _ STATUS . contains ( rest Status . status )) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠOpen Search Status Exception (" Failed : Ġ$ response Content ", Ġrest Status ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠSmall Ġdata Ġclass Ġused Ġto Ġhold Ġeither Ġa ĠDestination Ġor Ġa ĠNotification Ġchannel Ġconfig . Ċ Ġ* ĠThis Ġis Ġused Ġsince Ġan ĠID Ġbeing Ġreferenced Ġin Ġa ĠMonitor Ġaction Ġcould Ġbe Ġeither Ġconfig Ġdepending Ġon Ġif Ċ Ġ* Ġit 's Ġprior Ġto Ġor Ġafter Ġmigration . Ċ Ġ*/ Ċ data Ġclass ĠNotification Action Configs ( val Ġdestination : ĠDestination ?, Ġval Ġchannel : ĠNotification Config Info ?) Ċ