/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 Ġ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 . devops . log . mq Ċ Ċ import Ġcom . tencent . devops . common . event . dispatcher . pipeline . mq . MQ Ċ import Ġcom . tencent . devops . log . model . pojo . Log Batch Event Ċ import Ġcom . tencent . devops . log . model . pojo . Log Event Ċ import Ġcom . tencent . devops . log . model . pojo . Log Status Event Ċ import Ġcom . tencent . devops . log . service . Log Service Dispatcher Ċ import Ġcom . tencent . devops . log . utils . Log Dispatcher Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . amqp . core . Exchange Types Ċ import Ġorg . springframework . amqp . rabbit . annotation . Exchange Ċ import Ġorg . springframework . amqp . rabbit . annotation . Queue Ċ import Ġorg . springframework . amqp . rabbit . annotation . Queue Binding Ċ import Ġorg . springframework . amqp . rabbit . annotation . Rabbit Listener Ċ import Ġorg . springframework . amqp . rabbit . core . Rabbit Template Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ /** Ċ Ġ* Ġd eng Ċ Ġ* Ġ 2 0 1 9 - 0 1 - 2 3 Ċ Ġ*/ Ċ @ Component Ċ class ĠLog Listener Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġrabbit Template : ĠRabbit Template , ĊĠĠĠ Ġprivate Ġval Ġlog Service Dispatcher : ĠLog Service Dispatcher Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġlog Event ( event : ĠLog Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Service Dispatcher . log Event ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Fail Ġto Ġadd Ġthe Ġlog Ġevent Ġ[ ${ event . build Id }| ${ event . retry Time } ]", Ġignored ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! result Ġ&& Ġevent . retry Time Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Retry Ġto Ġadd Ġthe Ġlog Ġevent Ġ[ ${ event . build Id }| ${ event . retry Time }] ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Dispatcher . dispatch ( rabbit Template , ĠLog Event ( build Id , Ġlogs , Ġretry Time Ġ- Ġ 1 , ĠDelay M ills )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlog Batch Event ( event : ĠLog Batch Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Service Dispatcher . log Batch Event ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Fail Ġto Ġadd Ġthe Ġlog Ġbatch Ġevent Ġ[ ${ event . build Id }| ${ event . retry Time } ]", Ġignored ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! result Ġ&& Ġevent . retry Time Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Retry Ġto Ġadd Ġlog Ġbatch Ġevent Ġ[ ${ event . build Id }| ${ event . retry Time }] ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Dispatcher . dispatch ( rabbit Template , ĠLog Batch Event ( build Id , Ġlogs , Ġretry Time Ġ- Ġ 1 , ĠDelay M ills )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Rabbit Listener ( ĊĠĠĠĠĠĠĠ Ġbindings Ġ= Ġ[ Queue Binding ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= ĠMQ . ROUTE _ LOG _ STATUS _ BUILD _ EVENT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= ĠQueue ( value Ġ= ĠMQ . QUEUE _ LOG _ STATUS _ BUILD _ EVENT , Ġdur able Ġ= Ġ" true "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexchange Ġ= ĠExchange ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= ĠMQ . EX CHANGE _ LOG _ STATUS _ BUILD _ EVENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdur able Ġ= Ġ" true ", Ġdelayed Ġ= Ġ" true ", Ġtype Ġ= ĠExchange Types . DIRECT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ] ĊĠĠĠ Ġ) ĊĠĠĠ Ġfun Ġlog Status Event ( event : ĠLog Status Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Service Dispatcher . log Status Event ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Fail Ġto Ġadd Ġthe Ġmulti Ġlines Ġ[ ${ event . build Id }| ${ event . retry Time } ]", Ġignored ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! result Ġ&& Ġevent . retry Time Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Retry Ġto Ġadd Ġthe Ġmulti Ġlines Ġ[ ${ event . build Id }| ${ event . retry Time }] ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Dispatcher . dispatch ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrabbit Template , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Status Event ( build Id , Ġfinished , Ġtag , Ġjob Id , Ġexecute Count , Ġretry Time Ġ- Ġ 1 , ĠDelay M ills ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Log Listener :: class . java ) ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDelay M ills Ġ= Ġ 3 Ġ* Ġ 1 0 0 0 ĊĠĠĠ Ġ} Ċ }