/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠTH L ĠA 2 9 ĠLimited , Ġa ĠTencent Ġcompany . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġis Ġlicensed Ġunder Ġthe ĠMIT Ġlicense . Ċ Ġ* Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠMIT ĠLicense Ġis Ġincluded Ġin Ġthis Ġfile . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠTerms Ġof Ġthe ĠMIT ĠLicense : Ċ Ġ* Ġ------------------------------------------------ --- Ċ Ġ* Ġ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 Ġcom . tencent . bk repo . monitor . notify Ċ Ċ import Ġcom . tencent . bk repo . monitor . config . Monitor Properties Ċ import Ġde . code centric . boot . admin . server . domain . entities . Instance Ċ import Ġde . code centric . boot . admin . server . domain . entities . Instance Repository Ċ import Ġde . code centric . boot . admin . server . domain . events . Instance Event Ċ import Ġde . code centric . boot . admin . server . domain . events . Instance Status Changed Event Ċ import Ġde . code centric . boot . admin . server . notify . Abstract Status Change Notifier Ċ import Ġorg . springframework . boot . context . properties . Configuration Properties Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġorg . springframework . web . client . Rest Template Ċ import Ġreactor . core . publisher . Mono Ċ import Ġjava . time . LocalDateTime Ċ Ċ @ Component Ċ @ Configuration Properties (" spring . boot . admin . notify . wechat work ") Ċ class ĠWe Chat Work Notifier ( ĊĠĠĠ Ġrepository : ĠInstance Repository , ĊĠĠĠ Ġmonitor Properties : ĠMonitor Properties Ċ ) Ġ: ĠAbstract Status Change Notifier ( repository ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrest Template Ġ= ĠRest Template () ĊĊĠĠĠ Ġvar Ġurl Ġ= Ġ" https :// qy api . weixin . qq . com / cgi - bin / webhook / send ? key =" ĊĠĠĠ Ġvar Ġkey : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġchat Id : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġcluster Name Ġ= Ġmonitor Properties . cluster Name ĊĊĠĠĠ Ġoverride Ġfun Ġdo Notify ( event : ĠInstance Event , Ġinstance : ĠInstance ): ĠMono < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( key ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMono . empty () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrequire ( event Ġis ĠInstance Status Changed Event ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġcreate Message ( event , Ġinstance ) ĊĠĠĠĠĠĠĠ Ġreturn ĠMono . from Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrest Template . post For Object ( build Url (), Ġmessage , ĠString :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Message ( event : ĠInstance Status Changed Event , Ġinstance : ĠInstance ): ĠMap < String , ĠAny > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġmutable Map Of < String , ĠAny >() ĊĠĠĠĠĠĠĠ Ġmessage [" msg type "] Ġ= Ġ" markdown " ĊĠĠĠĠĠĠĠ Ġmessage [" markdown "] Ġ= Ġmap Of (" content " Ġto Ġcreate Content ( event , Ġinstance )) ĊĠĠĠĠĠĠĠ Ġchat Id ?. let Ġ{ Ġmessage [" chat id "] Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmessage ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Content ( event : ĠInstance Status Changed Event , Ġinstance : ĠInstance ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapplication Ġ= Ġinstance . registration . name ĊĠĠĠĠĠĠĠ Ġval Ġinstance Id Ġ= Ġinstance . id ĊĠĠĠĠĠĠĠ Ġval Ġfrom Ġ= ĠgetLast Status ( event . instance ) ĊĠĠĠĠĠĠĠ Ġval Ġto Ġ= Ġevent . status Info . status ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Date Ġ= ĠLocalDateTime . now () ĊĠĠĠĠĠĠĠ Ġval Ġdetails Ġ= Ġevent . status Info . details ĊĠĠĠĠĠĠĠ Ġreturn ĠMESSAGE _ TEMPLATE . format ( application , Ġinstance Id , Ġcluster Name , Ġfrom , Ġto , Ġcurrent Date , Ġdetails ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Url (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġurl Ġ+ Ġkey ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠMESSAGE _ TEMPLATE Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ< font Ġcolor =" warning "> ãĢĲ æıĲ é ĨĴ ãĢĳ </ font > æľįåĬ¡ å®ŀä¾ĭ [% s -% s ] çĬ¶æĢģ åıĳçĶŁ åıĺåĮĸ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ> Ġ éĽĨç¾¤ : Ġ% s ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ> Ġ çĬ¶æĢģ : Ġ% s Ġ-> Ġ% s ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ> Ġ æĹ¶éĹ´ : Ġ% s ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ> Ġ è¯¦ç»Ĩ : Ġ% s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠ Ġ} Ċ } Ċ