/* Ċ Ġ* Ġ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 . service . impl Ċ Ċ import Ġcom . google . common . cache . Cache Builder Ċ import Ġcom . tencent . devops . common . api . pojo . Page Ċ import Ġcom . tencent . devops . common . event . pojo . pipeline . Pipeline Build Finish Broad Cast Event Ċ import Ġcom . tencent . devops . common . log . pojo . End Page Query Logs Ċ import Ġcom . tencent . devops . common . log . pojo . Log Batch Event Ċ import Ġcom . tencent . devops . common . log . pojo . Log Event Ċ import Ġcom . tencent . devops . common . log . pojo . Log Line Ċ import Ġcom . tencent . devops . common . log . pojo . Log Status Event Ċ import Ġcom . tencent . devops . common . log . pojo . Page Query Logs Ċ import Ġcom . tencent . devops . common . log . pojo . Query Logs Ċ import Ġcom . tencent . devops . common . log . pojo . enums . Log Status Ċ import Ġcom . tencent . devops . common . log . pojo . enums . Log Type Ċ import Ġcom . tencent . devops . common . log . pojo . message . Log Message Ċ import Ġcom . tencent . devops . common . log . pojo . message . Log Message With Line No Ċ import Ġcom . tencent . devops . common . log . utils . Log MQ EventDispatcher Ċ import Ġcom . tencent . devops . common . redis . Redis Lock Ċ import Ġcom . tencent . devops . common . redis . Redis Operation Ċ import Ġcom . tencent . devops . log . client . Log Client Ċ import Ġcom . tencent . devops . log . j mx . v 2 . Create Index Bean V 2 Ċ import Ġcom . tencent . devops . log . j mx . v 2 . Log Bean V 2 Ċ import Ġcom . tencent . devops . log . service . Index Service Ċ import Ġcom . tencent . devops . log . service . Log Service Ċ import Ġcom . tencent . devops . log . service . Log Status Service Ċ import Ġcom . tencent . devops . log . service . Log Tag Service Ċ import Ġcom . tencent . devops . log . util . Constants Ċ import Ġcom . tencent . devops . log . util . ES Index Utils Ċ import Ġorg . elasticsearch . Elasticsearch Status Exception Ċ import Ġorg . elasticsearch . action . admin . indices . open . Open Index Request Ċ import Ġorg . elasticsearch . action . bulk . Bulk Request Ċ import Ġorg . elasticsearch . action . index . Index Request Ċ import Ġorg . elasticsearch . action . search . Search Request Ċ import Ġorg . elasticsearch . action . search . Search Scroll Request Ċ import Ġorg . elasticsearch . client . Http Async Response Consumer Factory . Heap Buffered Response Consumer Factory Ċ import Ġorg . elasticsearch . client . RequestOptions Ċ import Ġorg . elasticsearch . client . core . Count Request Ċ import Ġorg . elasticsearch . client . indices . Create Index Request Ċ import Ġorg . elasticsearch . client . indices . Get Index Request Ċ import Ġorg . elasticsearch . common . unit . Time Value Ċ import Ġorg . elasticsearch . index . query . Bool QueryBuilder Ċ import Ġorg . elasticsearch . index . query . Operator Ċ import Ġorg . elasticsearch . index . query . Query Builders Ċ import Ġorg . elasticsearch . search . builder . Search Source Builder Ċ import Ġorg . elasticsearch . search . fetch . sub phase . highlight . Highlight Builder Ċ import Ġorg . elasticsearch . search . sort . SortOrder Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . IOException Ċ import Ġjava . sql . Date Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjavax . ws . rs . core . MediaType Ċ import Ġjavax . ws . rs . core . Response Ċ import Ġjavax . ws . rs . core . Streaming Output Ċ import Ġkotlin . math . ceil Ċ Ċ @ Suppress (" ALL ") Ċ class ĠLog Service ES Impl Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġlog Client : ĠLog Client , ĊĠĠĠ Ġprivate Ġval Ġindex Service : ĠIndex Service , ĊĠĠĠ Ġprivate Ġval Ġlog Status Service : ĠLog Status Service , ĊĠĠĠ Ġprivate Ġval Ġlog Tag Service : ĠLog Tag Service , ĊĠĠĠ Ġprivate Ġval Ġcreate Index Bean V 2 : ĠCreate Index Bean V 2 , ĊĠĠĠ Ġprivate Ġval Ġlog Bean V 2 : ĠLog Bean V 2 , ĊĠĠĠ Ġprivate Ġval Ġredis Operation : ĠRedis Operation , ĊĠĠĠ Ġprivate Ġval Ġlog MQ EventDispatcher : ĠLog MQ EventDispatcher Ċ ) Ġ: ĠLog Service Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Log Service ES Impl :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġindex Cache Ġ= ĠCache Builder . newBuilder () ĊĠĠĠĠĠĠĠ Ġ. maximum Size ( 1 0 0 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ. expire After Access ( 3 0 , ĠTimeUnit . MIN UTES ) ĊĠĠĠĠĠĠĠ Ġ. build < String /* Build Id */, ĠBoolean /* Has Ġcreate Ġthe Ġindex */ >() ĊĊĠĠĠ Ġoverride Ġfun Ġpipeline Finish ( event : ĠPipeline Build Finish Broad Cast Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" [$ projectId |$ pipeline Id |$ build Id ] Ġbuild Ġfinish ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Service . flush Line Num 2 DB ( build Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Log Event ( event : ĠLog Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠlogMessage Ġ= Ġadd Line No ( event . build Id , Ġevent . logs ) ĊĠĠĠĠĠĠĠ Ġif Ġ( log Message . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog MQ EventDispatcher . dispatch ( Log Batch Event ( event . build Id , ĠlogMessage )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Batch Log Event ( event : ĠLog Batch Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Epoch Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprepare Index ( event . build Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Messages Ġ= Ġevent . logs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= Ġmutable ListOf < Log Message With Line No >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Messages . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( buf . size Ġ== ĠConstants . B UL K _ BUFFER _ SIZE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( do Add Multi Lines ( buf , Ġevent . build Id ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" None Ġof Ġlines Ġis Ġinserted Ġsuccessfully Ġto ĠES Ġ[ ${ event . build Id }| ${ event . retry Time }] " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( buf . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( do Add Multi Lines ( buf , Ġevent . build Id ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" None Ġof Ġlines Ġis Ġinserted Ġsuccessfully Ġto ĠES Ġ[ ${ event . build Id }| ${ event . retry Time }] " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġel apse Ġ= ĠSystem . currentTimeMillis () Ġ- Ġcurrent Epoch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Bean V 2 . batch Write ( el apse , Ġsuccess ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Log Status ( event : ĠLog Status Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" [$ build Id |$ tag |$ sub Tag |$ jobId |$ execute Count |$ finished ] ĠStart Ġto Ġupdate Ġlog Ġstatus ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Status Service . finish ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Ġ= Ġfinished ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġquery Init Logs ( ĊĠĠĠĠĠĠĠ Ġbuild Id : ĠString , ĊĠĠĠĠĠĠĠ Ġis Analysis : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġkeywords Str : ĠString ?, ĊĠĠĠĠĠĠĠ Ġtag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġsub Tag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġjob Id : ĠString ?, ĊĠĠĠĠĠĠĠ Ġexecute Count : ĠInt ? ĊĠĠĠ Ġ): ĠQuery Logs Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Epoch Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġindex Service . getIndex Name ( build Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdo Query Init Logs ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġindex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġlog Status Success ( result . status ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Bean V 2 . query ( System . currentTimeMillis () Ġ- Ġcurrent Epoch , Ġsuccess ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġquery Logs Between Lines ( ĊĠĠĠĠĠĠĠ Ġbuild Id : ĠString , ĊĠĠĠĠĠĠĠ Ġnum : ĠInt , ĊĠĠĠĠĠĠĠ Ġfrom Start : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġstart : ĠLong , ĊĠĠĠĠĠĠĠ Ġend : ĠLong , ĊĠĠĠĠĠĠĠ Ġtag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġsub Tag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġjob Id : ĠString ?, ĊĠĠĠĠĠĠĠ Ġexecute Count : ĠInt ? ĊĠĠĠ Ġ): ĠQuery Logs Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Epoch Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġindex Service . getIndex Name ( build Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Logs Ġ= ĠQuery Logs ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id , Ġget Log Status ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġget Query ( build Id , Ġtag , Ġsub Tag , Ġjob Id , Ġexecute Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. must ( Query Builders . range Query (" line No "). gte ( start ). lte ( end )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsort Order Ġ= Ġif Ġ( from Start ) ĠSort Order . ASC Ġelse ĠSort Order . DESC ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Request Ġ= ĠSearch Request ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. source ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Source Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. highlighter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHighlight Builder (). pre Tags ("\ u 0 0 1 b [ 3 1 m "). post Tags ("\ u 0 0 1 b [ 0 m ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. field (" message "). fragment Size ( 1 0 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. doc Value Field (" line No ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. doc Value Field (" timestamp ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( num ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sort (" timestamp ", Ġsort Order ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sort (" line No ", Ġsort Order ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. timeout ( Time Value . time Value Seconds ( 6 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Response Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Client . hash Client ( build Id ). rest Client . search ( search Request , ĠRequest Options . DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Client . hash Client ( build Id ). rest Client . search ( search Request , Ġgen Large Search Options ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Response . hits . forEach Ġ{ Ġsearch Hit Fields Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Map Ġ= Ġsearch Hit Fields . source As Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Line Ġ= ĠLog Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline No Ġ= Ġsource Map [" line No "]. toString (). to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġsource Map [" timestamp "]. toString (). to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġsource Map [" message "]. toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpriority Ġ= ĠConstants . DEFAULT _ PRIORITY _ NOT _ DELETED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġsource Map [" tag "]. toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsource Map [" sub Tag "]. toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġsource Map [" jobId "]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . logs . add ( log Line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! from Start ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . logs . reverse () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( query Logs . logs . isEmpty ()) Ġquery Logs . status Ġ= ĠLog Status . EMPTY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠElasticsearch Status Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . status () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġex String Ġ= Ġe . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ex String . contains (" index _ closed _ exception ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" [$ build Id ] ĠCan 't Ġsearch Ġbecause Ġof Ġindex _ closed _ exception ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . status Ġ= ĠLog Status . CLOSED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Query Ġmore Ġlogs Ġbetween Ġlines Ġfailed Ġbecause Ġof Ġ${ e . java Class }. Ġbuild Id : Ġ$ build Id ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġquery Logs ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Bean V 2 . query ( System . currentTimeMillis () Ġ- Ġstart Epoch , Ġsuccess ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġquery Logs After Line ( ĊĠĠĠĠĠĠĠ Ġbuild Id : ĠString , ĊĠĠĠĠĠĠĠ Ġstart : ĠLong , ĊĠĠĠĠĠĠĠ Ġtag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġsub Tag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġjob Id : ĠString ?, ĊĠĠĠĠĠĠĠ Ġexecute Count : ĠInt ? ĊĠĠĠ Ġ): ĠQuery Logs Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Epoch Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġindex Service . getIndex Name ( build Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdo Query Logs After Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġindex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġstart , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġlog Status Success ( result . status ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Bean V 2 . query ( System . currentTimeMillis () Ġ- Ġstart Epoch , Ġsuccess ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġquery Logs Before Line ( ĊĠĠĠĠĠĠĠ Ġbuild Id : ĠString , ĊĠĠĠĠĠĠĠ Ġend : ĠLong , ĊĠĠĠĠĠĠĠ Ġsize : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġtag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġsub Tag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġjob Id : ĠString ?, ĊĠĠĠĠĠĠĠ Ġexecute Count : ĠInt ? ĊĠĠĠ Ġ): ĠQuery Logs Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Epoch Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġindex Service . getIndex Name ( build Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdo Query Logs Before Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġindex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġsize Ġ?: ĠConstants . NORMAL _ MAX _ LINES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . time Used Ġ= ĠSystem . currentTimeMillis () Ġ- Ġstart Epoch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġlog Status Success ( result . status ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Bean V 2 . query ( System . currentTimeMillis () Ġ- Ġstart Epoch , Ġsuccess ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdownload Logs ( ĊĠĠĠĠĠĠĠ Ġpipeline Id : ĠString , ĊĠĠĠĠĠĠĠ Ġbuild Id : ĠString , ĊĠĠĠĠĠĠĠ Ġtag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġsub Tag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġjob Id : ĠString ?, ĊĠĠĠĠĠĠĠ Ġexecute Count : ĠInt ?, ĊĠĠĠĠĠĠĠ ĠfileName : ĠString ? ĊĠĠĠ Ġ): ĠResponse Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġindex Service . getIndex Name ( build Id ) ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġget Query ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġscroll Client Ġ= Ġlog Client . hash Client ( build Id ) ĊĠĠĠĠĠĠĠ Ġval Ġsearch Request Ġ= ĠSearch Request ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. source ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Source Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. doc Value Field (" line No ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. doc Value Field (" timestamp ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( Constants . SCROLL _ MAX _ LINES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sort (" timestamp ", ĠSort Order . ASC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sort (" line No ", ĠSort Order . ASC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. scroll ( Time Value ( 1 0 0 0 Ġ* Ġ 6 4 )) ĊĊĠĠĠĠĠĠĠ Ġvar Ġscroll Resp Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Client . rest Client . search ( search Request , ĠRequest Options . DEFAULT ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Client . rest Client . search ( search Request , Ġgen Large Search Options ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsdf Ġ= ĠSimpleDateFormat (" yyyy - MM - dd ĠHH : mm : ss : SS S ") ĊĠĠĠĠĠĠĠ Ġ// Ġä¸Ģ è¾¹ è¯» ä¸Ģ è¾¹ æµģ å¼ı ä¸ĭè½½ ĊĠĠĠĠĠĠĠ Ġval Ġfile Stream Ġ= ĠStreaming Output Ġ{ Ġoutput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Resp . hits . hits . forEach Ġ{ Ġsearch Hit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Map Ġ= Ġsearch Hit . source As Map ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Line Ġ= ĠLog Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Map [" line No "]. toString (). to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Map [" timestamp "]. toString (). to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Map [" message "]. toString (). remove Prefix ("\ u 0 0 1 b [ 3 1 m "). remove Prefix ("\ u 0 0 1 b [ 1 m "). replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ u 0 0 1 B [ m ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). remove Suffix ("\ u 0 0 1 b [ m "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . DEFAULT _ PRIORITY _ NOT _ DELETED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdateTime Ġ= Ġsdf . format ( Date ( log Line . timestamp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġ"$ dateTime Ġ: Ġ${ log Line . message }" Ġ+ ĠSystem . line Separator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . write ( sb . toString (). toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . flush () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Resp Ġ= Ġscroll Client . rest Client . scroll ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Scroll Request ( scroll Resp . scroll Id ). scroll ( Time Value ( 1 0 0 0 Ġ* Ġ 6 4 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Options . DEFAULT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( scroll Resp . hits . hits . isNotEmpty ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Name Ġ= ĠfileName Ġ?: Ġ"$ pipeline Id -$ build Id - log " ĊĠĠĠĠĠĠĠ Ġreturn ĠResponse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ok ( file Stream , ĠMediaType . APPLICATION _ OCT ET _ STREAM _ TYPE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" content - dis position ", Ġ" attachment ; Ġfilename Ġ= Ġ$ result Name . log ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Cache - Control ", Ġ" no - cache ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget End Logs Page ( ĊĠĠĠĠĠĠĠ Ġpipeline Id : ĠString , ĊĠĠĠĠĠĠĠ Ġbuild Id : ĠString , ĊĠĠĠĠĠĠĠ Ġtag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġsub Tag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġjob Id : ĠString ?, ĊĠĠĠĠĠĠĠ Ġexecute Count : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġsize : ĠInt ĊĠĠĠ Ġ): ĠEnd Page Query Logs Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Epoch Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġquery Logs Ġ= ĠEnd Page Query Logs ( build Id ) ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdo Get End Logs ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġlog Status Success ( result . status ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . start Line No Ġ= Ġresult . logs . last OrNull ()?. line No Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . end Line No Ġ= Ġresult . logs . first OrNull ()?. line No Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . logs Ġ= Ġresult . logs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . time Used Ġ= ĠSystem . currentTimeMillis () Ġ- Ġstart Epoch ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Bean V 2 . query ( System . currentTimeMillis () Ġ- Ġstart Epoch , Ġsuccess ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġquery Logs ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Bottom Logs ( ĊĠĠĠĠĠĠĠ Ġpipeline Id : ĠString , ĊĠĠĠĠĠĠĠ Ġbuild Id : ĠString , ĊĠĠĠĠĠĠĠ Ġtag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġsub Tag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġjob Id : ĠString ?, ĊĠĠĠĠĠĠĠ Ġexecute Count : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġsize : ĠInt ? ĊĠĠĠ Ġ): ĠQuery Logs Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Epoch Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdo Get End Logs ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġsize Ġ?: ĠConstants . NORMAL _ MAX _ LINES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġlog Status Success ( result . status ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . time Used Ġ= ĠSystem . currentTimeMillis () Ġ- Ġstart Epoch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Bean V 2 . query ( System . currentTimeMillis () Ġ- Ġstart Epoch , Ġsuccess ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġquery Init Logs Page ( ĊĠĠĠĠĠĠĠ Ġbuild Id : ĠString , ĊĠĠĠĠĠĠĠ Ġis Analysis : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġkeywords Str : ĠString ?, ĊĠĠĠĠĠĠĠ Ġtag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġsub Tag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġjob Id : ĠString ?, ĊĠĠĠĠĠĠĠ Ġexecute Count : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġpage : ĠInt , ĊĠĠĠĠĠĠĠ ĠpageSize : ĠInt ĊĠĠĠ Ġ): ĠPage Query Logs Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Epoch Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġquery Logs Ġ= ĠQuery Logs ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id , Ġget Log Status ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġvar Ġlog Size Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġindex Service . getIndex Name ( build Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs Ġ= Ġquery Init Logs Page ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Ġ= Ġpage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpageSize Ġ= ĠpageSize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Size Ġ= Ġget Log Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġindex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġlog Status Success ( query Logs . status ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( query Logs . logs . isEmpty ()) Ġquery Logs . status Ġ= ĠLog Status . EMPTY ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠElasticsearch Status Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġex String Ġ= Ġe . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ex String . contains (" index _ closed _ exception ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" [$ build Id ] ĠCan 't Ġsearch Ġbecause Ġof Ġindex _ closed _ exception ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . status Ġ= ĠLog Status . CLOSED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Query Ġinit Ġlogs Ġfailed Ġbecause Ġof Ġ${ e . java Class }. Ġbuild Id : Ġ$ build Id ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . status Ġ= ĠLog Status . FAIL ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Bean V 2 . query ( System . currentTimeMillis () Ġ- Ġstart Epoch , Ġsuccess ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPage Query Logs ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġquery Logs . build Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinished Ġ= Ġquery Logs . finished , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogs Ġ= ĠPage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ= Ġlog Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Ġ= Ġpage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpageSize Ġ= ĠpageSize , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Pages Ġ= Ġceil (( log Size Ġ+ Ġ 0 . 0 ) Ġ/ ĠpageSize ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecords Ġ= Ġquery Logs . logs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Used Ġ= Ġquery Logs . time Used , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġquery Logs . status ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreopen Index ( build Id : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" Re open ĠIndex Ġ- Ġ$ build Id ") ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġindex Service . getIndex Name ( build Id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġopen Index ( build Id , Ġindex ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlog Status Success ( log Status : ĠLog Status ) Ġ= ĊĠĠĠĠĠĠĠ Ġ( log Status Ġ== ĠLog Status . EMPTY Ġ|| Ġlog Status Ġ== ĠLog Status . SU CCE ED ) ĊĊĠĠĠ Ġprivate Ġfun Ġopen Index ( build Id : ĠString , Ġindex : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" [$ build Id |$ index ] ĠStart Ġto Ġopen Ġthe Ġindex ") ĊĠĠĠĠĠĠĠ Ġreturn Ġlog Client . hash Client ( build Id ). rest Client . indices () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. open ( Open Index Request ( index ), ĠRequest Options . DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. is Ack nowled ged ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġquery Init Logs Page ( ĊĠĠĠĠĠĠĠ Ġbuild Id : ĠString , ĊĠĠĠĠĠĠĠ Ġtag : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġsub Tag : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġjob Id : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġexecute Count : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġpage : ĠInt , ĊĠĠĠĠĠĠĠ ĠpageSize : ĠInt ĊĠĠĠ Ġ): ĠQuery Logs Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Logs Ġ= ĠQuery Logs ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id , Ġget Log Status ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġindex Service . getIndex Name ( build Id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbool Query Ġ= ĠQuery Builders . bool Query () ĊĠĠĠĠĠĠĠ Ġif Ġ( page Ġ!= Ġ- 1 Ġ&& ĠpageSize Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Line No Ġ= ĠpageSize Ġ* Ġpage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbegin Line No Ġ= Ġend Line No Ġ- ĠpageSize Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbool Query . must ( Query Builders . range Query (" line No "). gte ( begin Line No ). lte ( end Line No )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġget Query ( build Id , Ġtag , Ġsub Tag , Ġjob Id , Ġexecute Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. must ( bool Query ) ĊĊĠĠĠĠĠĠĠ Ġval Ġscroll Client Ġ= Ġlog Client . hash Client ( build Id ) ĊĠĠĠĠĠĠĠ Ġval Ġsearch Request Ġ= ĠSearch Request ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. source ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Source Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. doc Value Field (" line No ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. doc Value Field (" timestamp ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( pageSize ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sort (" timestamp ", ĠSort Order . ASC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sort (" line No ", ĠSort Order . ASC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. timeout ( Time Value . time Value Seconds ( 6 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. scroll ( Time Value ( 1 0 0 0 Ġ* Ġ 6 4 )) ĊĊĠĠĠĠĠĠĠ Ġvar Ġsearch Response Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Client . hash Client ( build Id ). rest Client . search ( search Request , ĠRequest Options . DEFAULT ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Client . hash Client ( build Id ). rest Client . search ( search Request , Ġgen Large Search Options ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Response . hits . hits . forEach Ġ{ Ġsearch Hit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Map Ġ= Ġsearch Hit . source As Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Type Ġ= Ġsource Map [" log Type "]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Line Ġ= ĠLog Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Map [" line No "]. toString (). to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Map [" timestamp "]. toString (). to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( log Type Ġ== ĠLog Type . LOG . name ) Ġsource Map [" message "]. toString () Ġelse Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . DEFAULT _ PRIORITY _ NOT _ DELETED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . logs . add ( log Line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Response Ġ= Ġscroll Client . rest Client . scroll ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Scroll Request ( search Response . scroll Id ). scroll ( Time Value ( 1 0 0 0 Ġ* Ġ 6 4 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Options . DEFAULT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( search Response . hits . hits . isNotEmpty ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( query Logs . logs . isEmpty ()) Ġquery Logs . status Ġ= ĠLog Status . EMPTY ĊĠĠĠĠĠĠĠ Ġreturn Ġquery Logs ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Get End Logs ( ĊĠĠĠĠĠĠĠ Ġbuild Id : ĠString , ĊĠĠĠĠĠĠĠ Ġtag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġsub Tag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġjob Id : ĠString ?, ĊĠĠĠĠĠĠĠ Ġexecute Count : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġsize : ĠInt ĊĠĠĠ Ġ): ĠQuery Logs Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" [$ build Id |$ tag |$ sub Tag |$ jobId |$ execute Count ] Ġdo Get End Logs ") ĊĠĠĠĠĠĠĠ Ġval Ġlog Status Ġ= Ġif Ġ( tag Ġ== Ġnull Ġ&& Ġjob Id Ġ!= Ġnull ) Ġget Log Status ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠ Ġ) Ġelse Ġget Log Status ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġquery Logs Ġ= ĠQuery Logs ( build Id , Ġlog Status ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġindex Service . getIndex Name ( build Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Size Ġ= Ġget Log Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġindex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( log Size Ġ== Ġ 0 L ) Ġreturn Ġquery Logs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġif Ġ( log Size Ġ> Ġsize . to Long ()) Ġlog Size Ġ- Ġsize . to Long () Ġelse Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġget Query ( build Id , Ġtag , Ġsub Tag , Ġjob Id , Ġexecute Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. must ( Query Builders . range Query (" line No "). gte ( start )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Request Ġ= ĠSearch Request ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. source ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Source Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. doc Value Field (" line No ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. doc Value Field (" timestamp ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sort (" timestamp ", ĠSort Order . ASC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sort (" line No ", ĠSort Order . ASC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. timeout ( Time Value . time Value Seconds ( 6 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scroll ( Time Value ( 1 0 0 0 Ġ* Ġ 3 2 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Response Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Client . hash Client ( build Id ). rest Client . search ( search Request , ĠRequest Options . DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Client . hash Client ( build Id ). rest Client . search ( search Request , Ġgen Large Search Options ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogs Ġ= Ġmutable ListOf < Log Line >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Response . hits . hits . forEach Ġ{ Ġsearch Hit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Map Ġ= Ġsearch Hit . source As Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Line Ġ= ĠLog Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline No Ġ= Ġsource Map [" line No "]. toString (). to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġsource Map [" timestamp "]. toString (). to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġsource Map [" message "]. toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpriority Ġ= ĠConstants . DEFAULT _ PRIORITY _ NOT _ DELETED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġsource Map [" tag "]. toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsource Map [" sub Tag "]. toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġsource Map [" jobId "]. toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġsource Map [" execute Count "] ?. toString ()?. toInt () Ġ?: Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogs . add ( log Line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . logs Ġ= Ġlogs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . hasMore Ġ= Ġlog Size Ġ> Ġquery Logs . logs . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġquery Logs ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠElasticsearch Status Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġex String Ġ= Ġe . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ex String . contains (" index _ closed _ exception ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" [$ build Id ] ĠCan 't Ġsearch Ġbecause Ġof Ġindex _ closed _ exception ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . status Ġ= ĠLog Status . CLOSED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Query Ġend Ġlogs Ġfailed Ġbecause Ġof Ġ${ e . java Class }. Ġbuild Id : Ġ$ build Id ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . status Ġ= ĠLog Status . FAIL ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġquery Logs ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Query Init Logs ( ĊĠĠĠĠĠĠĠ Ġbuild Id : ĠString , ĊĠĠĠĠĠĠĠ Ġindex : ĠString , ĊĠĠĠĠĠĠĠ Ġtag : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġsub Tag : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġjob Id : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġexecute Count : ĠInt ? ĊĠĠĠ Ġ): ĠQuery Logs Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" [$ index |$ build Id |$ tag |$ sub Tag |$ jobId |$ execute Count ] Ġdo Query Init Logs ") ĊĠĠĠĠĠĠĠ Ġval Ġlog Status Ġ= Ġif Ġ( tag Ġ== Ġnull Ġ&& Ġjob Id Ġ!= Ġnull ) Ġget Log Status ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠ Ġ) Ġelse Ġget Log Status ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsub Tags Ġ= Ġif Ġ( tag . isNull Or Blank ()) Ġnull Ġelse Ġlog Tag Service . getSub Tags ( build Id , Ġtag !! ) ĊĠĠĠĠĠĠĠ Ġval Ġquery Logs Ġ= ĠQuery Logs ( build Id Ġ= Ġbuild Id , Ġfinished Ġ= Ġlog Status , Ġsub Tags Ġ= Ġsub Tags ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Size Ġ= Ġget Log Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġindex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( log Size Ġ== Ġ 0 L ) Ġreturn Ġquery Logs ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstartTime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbool QueryBuilder Ġ= Ġget Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Get Ġthe Ġquery Ġbuilder : Ġ$ bool QueryBuilder ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Request Ġ= ĠSearch Request ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. source ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Source Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query ( bool QueryBuilder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. doc Value Field (" line No ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. doc Value Field (" timestamp ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( Constants . NORMAL _ MAX _ LINES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sort (" timestamp ", ĠSort Order . ASC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sort (" line No ", ĠSort Order . ASC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. timeout ( Time Value . time Value Seconds ( 6 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Response Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Client . hash Client ( build Id ). rest Client . search ( search Request , ĠRequest Options . DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Client . hash Client ( build Id ). rest Client . search ( search Request , Ġgen Large Search Options ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Response . hits . forEach Ġ{ Ġsearch Hit Fields Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Map Ġ= Ġsearch Hit Fields . source As Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġln Ġ= Ġsource Map [" line No "]. toString (). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġsource Map [" tag "] ?. toString () Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Line Ġ= ĠLog Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline No Ġ= Ġln , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġsource Map [" timestamp "]. toString (). to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġsource Map [" message "]. toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpriority Ġ= ĠConstants . DEFAULT _ PRIORITY _ NOT _ DELETED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsource Map [" sub Tag "] ?. toString () Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġsource Map [" jobId "] ?. toString () Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġsource Map [" execute Count "] ?. toString ()?. toInt () Ġ?: Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . logs . add ( log Line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" logs Ġquery Ġtime Ġcost : Ġ${ System . currentTimeMillis () Ġ- ĠstartTime }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( query Logs . logs . isEmpty ()) Ġquery Logs . status Ġ= ĠLog Status . EMPTY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . hasMore Ġ= Ġlog Size Ġ> Ġquery Logs . logs . size ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠElasticsearch Status Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġex String Ġ= Ġe . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ex String . contains (" index _ closed _ exception ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" [$ build Id ] ĠCan 't Ġsearch Ġbecause Ġof Ġindex _ closed _ exception ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . status Ġ= ĠLog Status . CLOSED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Query Ġinit Ġlogs Ġfailed Ġbecause Ġof Ġ${ e . java Class }. Ġbuild Id : Ġ$ build Id ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . status Ġ= ĠLog Status . FAIL ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġquery Logs ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Query Logs After Line ( ĊĠĠĠĠĠĠĠ Ġbuild Id : ĠString , ĊĠĠĠĠĠĠĠ Ġindex : ĠString , ĊĠĠĠĠĠĠĠ Ġstart : ĠLong , ĊĠĠĠĠĠĠĠ Ġtag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġsub Tag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġjob Id : ĠString ?, ĊĠĠĠĠĠĠĠ Ġexecute Count : ĠInt ? ĊĠĠĠ Ġ): ĠQuery Logs Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" [$ index |$ build Id |$ tag |$ sub Tag |$ jobId |$ execute Count ] Ġdo Query Logs After Line ") ĊĠĠĠĠĠĠĠ Ġval Ġlog Status Ġ= Ġif Ġ( tag Ġ== Ġnull Ġ&& Ġjob Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Log Status ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Log Status ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsub Tags Ġ= Ġif Ġ( tag . isNull Or Blank ()) Ġnull Ġelse Ġlog Tag Service . getSub Tags ( build Id , Ġtag !! ) ĊĠĠĠĠĠĠĠ Ġval Ġquery Logs Ġ= ĠQuery Logs ( build Id Ġ= Ġbuild Id , Ġfinished Ġ= Ġlog Status , Ġsub Tags Ġ= Ġsub Tags ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstartTime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Size Ġ= Ġget Log Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġindex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġstart ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( log Size Ġ== Ġ 0 L ) Ġreturn Ġquery Logs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbool QueryBuilder Ġ= Ġget Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). must ( Query Builders . range Query (" line No "). gte ( start )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Request Ġ= ĠSearch Request ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. source ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Source Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query ( bool QueryBuilder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. doc Value Field (" line No ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. doc Value Field (" timestamp ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( Constants . SCROLL _ MAX _ LINES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sort (" timestamp ", ĠSort Order . ASC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sort (" line No ", ĠSort Order . ASC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scroll ( Time Value ( 1 0 0 0 Ġ* Ġ 6 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscroll Client Ġ= Ġlog Client . hash Client ( build Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠåĪĿå§ĭåĮĸ è¯·æ±Ĥ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Response Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Client . rest Client . search ( search Request , ĠRequest Options . DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Client . rest Client . search ( search Request , Ġgen Large Search Options ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġscroll Id Ġ= Ġsearch Response . scroll Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhits Ġ= Ġsearch Response . hits ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¼Ģå§ĭ æ»ļ åĬ¨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtimes Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhits . forEach Ġ{ Ġsearch Hit Fields Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Map Ġ= Ġsearch Hit Fields . source As Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġln Ġ= Ġsource Map [" line No "]. toString (). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġsource Map [" tag "] ?. toString () Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Line Ġ= ĠLog Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline No Ġ= Ġln , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġsource Map [" timestamp "]. toString (). to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġsource Map [" message "]. toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpriority Ġ= ĠConstants . DEFAULT _ PRIORITY _ NOT _ DELETED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsource Map [" sub Tag "] ?. toString () Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġsource Map [" jobId "] ?. toString () Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġsource Map [" execute Count "] ?. toString ()?. toInt () Ġ?: Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . logs . add ( log Line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimes ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscroll Request Ġ= ĠSearch Scroll Request ( scroll Id ). scroll ( Time Value ( 1 0 0 0 Ġ* Ġ 6 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Scroll Response Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Client . rest Client . scroll ( scroll Request , ĠRequest Options . DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Client . rest Client . scroll ( scroll Request , Ġgen Large Search Options ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Id Ġ= Ġsearch Scroll Response . scroll Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhits Ġ= Ġsearch Scroll Response . hits ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( hits . hits . isNotEmpty () Ġ&& Ġtimes Ġ<= ĠConstants . SCROLL _ MAX _ TIMES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . hasMore Ġ= Ġlog Size Ġ> Ġquery Logs . logs . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" logs Ġquery Ġtime Ġcost : Ġ${ System . currentTimeMillis () Ġ- ĠstartTime }") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠElasticsearch Status Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġex String Ġ= Ġe . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ex String . contains (" index _ closed _ exception ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" [$ build Id ] ĠCan 't Ġsearch Ġbecause Ġof Ġindex _ closed _ exception ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . status Ġ= ĠLog Status . CLOSED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Query Ġafter Ġlogs Ġfailed Ġbecause Ġof Ġ${ e . java Class }. Ġbuild Id : Ġ$ build Id ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . status Ġ= ĠLog Status . FAIL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . finished Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . hasMore Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġquery Logs ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Query Logs Before Line ( ĊĠĠĠĠĠĠĠ Ġbuild Id : ĠString , ĊĠĠĠĠĠĠĠ Ġindex : ĠString , ĊĠĠĠĠĠĠĠ Ġend : ĠLong , ĊĠĠĠĠĠĠĠ Ġsize : ĠInt , ĊĠĠĠĠĠĠĠ Ġtag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġsub Tag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġjob Id : ĠString ?, ĊĠĠĠĠĠĠĠ Ġexecute Count : ĠInt ? ĊĠĠĠ Ġ): ĠQuery Logs Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" [$ index |$ build Id |$ tag |$ sub Tag |$ jobId |$ execute Count ] Ġdo Query Logs Before Line ") ĊĠĠĠĠĠĠĠ Ġval Ġlog Status Ġ= Ġif Ġ( tag Ġ== Ġnull Ġ&& Ġjob Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Log Status ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Log Status ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsub Tags Ġ= Ġif Ġ( tag . isNull Or Blank ()) Ġnull Ġelse Ġlog Tag Service . getSub Tags ( build Id , Ġtag !! ) ĊĠĠĠĠĠĠĠ Ġval Ġquery Logs Ġ= ĠQuery Logs ( build Id Ġ= Ġbuild Id , Ġfinished Ġ= Ġlog Status , Ġsub Tags Ġ= Ġsub Tags ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstartTime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Size Ġ= Ġget Log Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġindex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġend ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( log Size Ġ== Ġ 0 L ) Ġreturn Ġquery Logs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ>= Ġsize Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ- Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Size Ġ>= Ġsize Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Size Ġ- Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbool QueryBuilder Ġ= Ġget Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). must ( Query Builders . range Query (" line No "). gte ( start )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. must ( Query Builders . range Query (" line No "). lte ( end )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Request Ġ= ĠSearch Request ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. source ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Source Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query ( bool QueryBuilder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. doc Value Field (" line No ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. doc Value Field (" timestamp ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sort (" timestamp ", ĠSort Order . ASC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sort (" line No ", ĠSort Order . ASC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. timeout ( Time Value . time Value Seconds ( 6 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Response Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Client . hash Client ( build Id ). rest Client . search ( search Request , ĠRequest Options . DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Client . hash Client ( build Id ). rest Client . search ( search Request , Ġgen Large Search Options ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Response . hits . forEach Ġ{ Ġsearch Hit Fields Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Map Ġ= Ġsearch Hit Fields . source As Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġln Ġ= Ġsource Map [" line No "]. toString (). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġsource Map [" tag "] ?. toString () Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Line Ġ= ĠLog Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline No Ġ= Ġln , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġsource Map [" timestamp "]. toString (). to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġsource Map [" message "]. toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpriority Ġ= ĠConstants . DEFAULT _ PRIORITY _ NOT _ DELETED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsource Map [" sub Tag "] ?. toString () Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġsource Map [" jobId "] ?. toString () Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġsource Map [" execute Count "] ?. toString ()?. toInt () Ġ?: Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . logs . add ( log Line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . hasMore Ġ= Ġlog Size Ġ> Ġquery Logs . logs . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" logs Ġquery Ġtime Ġcost : Ġ${ System . currentTimeMillis () Ġ- ĠstartTime }") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠElasticsearch Status Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġex String Ġ= Ġe . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ex String . contains (" index _ closed _ exception ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" [$ build Id ] ĠCan 't Ġsearch Ġbecause Ġof Ġindex _ closed _ exception ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . status Ġ= ĠLog Status . CLOSED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Query Ġbefore Ġlogs Ġfailed Ġbecause Ġof Ġ${ e . java Class }. Ġbuild Id : Ġ$ build Id ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . status Ġ= ĠLog Status . FAIL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . finished Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Logs . hasMore Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġquery Logs ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Log Status ( ĊĠĠĠĠĠĠĠ Ġbuild Id : ĠString , ĊĠĠĠĠĠĠĠ Ġtag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġsub Tag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġjob Id : ĠString ?, ĊĠĠĠĠĠĠĠ Ġexecute Count : ĠInt ? ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlog Status Service . is Finish ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġsub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġjob Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġexecute Count ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Log Size ( ĊĠĠĠĠĠĠĠ Ġindex : ĠString , ĊĠĠĠĠĠĠĠ Ġbuild Id : ĠString , ĊĠĠĠĠĠĠĠ Ġtag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġsub Tag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġjob Id : ĠString ?, ĊĠĠĠĠĠĠĠ Ġexecute Count : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġstart : ĠLong ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġend : ĠLong ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġget Query ( build Id , Ġtag , Ġsub Tag , Ġjob Id , Ġexecute Count ) ĊĠĠĠĠĠĠĠ Ġif Ġ( start Ġ!= Ġnull ) Ġquery . must ( Query Builders . range Query (" line No "). gte ( start )) ĊĠĠĠĠĠĠĠ Ġif Ġ( end Ġ!= Ġnull ) Ġquery . must ( Query Builders . range Query (" line No "). lte ( end )) ĊĠĠĠĠĠĠĠ Ġval Ġcount Request Ġ= ĠCount Request ( index ). source ( Search Source Builder (). query ( query )) ĊĠĠĠĠĠĠĠ Ġval Ġcount Response Ġ= Ġlog Client . hash Client ( build Id ). rest Client . count ( count Request , ĠRequest Options . DEFAULT ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcount Response . count ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Add Multi Lines ( log Messages : ĠList < Log Message With Line No >, Ġbuild Id : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Epoch Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġindex Service . getIndex Name ( build Id ) ĊĠĠĠĠĠĠĠ Ġval Ġbulk Client Ġ= Ġlog Client . hash Client ( build Id ) ĊĠĠĠĠĠĠĠ Ġvar Ġlines Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġbulk Lines Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġbulk Request Ġ= ĠBulk Request () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. timeout ( Time Value . time Value Millis ( bulk Client . request Timeout )) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġlog Messages . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠlogMessage Ġ= Ġlog Messages [ i ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Request Ġ= Ġgen Index Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlogMessage Ġ= ĠlogMessage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Request Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbulk Request . add ( index Request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbulk Response Ġ= Ġbulk Client . rest Client . bulk ( bulk Request , ĠRequest Options . DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbulk Lines Ġ= Ġbulk Response . count () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( bulk Response . has Failures ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException ( bulk Response . build Failure Message ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbulk Lines ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġex String Ġ= Ġex . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ex String . contains (" circuit _ breaking _ exception ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ("$ build Id | Add Ġbulk Ġlines Ġfailed |$ ex String , Ġattempting Ġto Ġadd Ġindex . Ġ[$ log Messages ]", Ġex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbulk Response Ġ= Ġbulk Client . rest Client ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. bulk ( bulk Request . timeout ( Time Value . time Value Seconds ( 6 0 )), Ġgen Large Search Options ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbulk Lines Ġ= Ġbulk Response . count () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( bulk Response . has Failures ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( bulk Response . build Failure Message ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbulk Lines ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" [$ build Id ] ĠAdd Ġbulk Ġlines Ġfailed Ġbecause Ġof Ġunknown ĠException . Ġ[$ log Messages ]", Ġex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bulk Lines Ġ!= Ġlines ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" [$ build Id ] ĠPart Ġof Ġbulk Ġlines Ġfailed , Ġlines :$ lines , Ġbulk Lines :$ bulk Lines ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Bean V 2 . bulk Request ( System . currentTimeMillis () Ġ- Ġcurrent Epoch , Ġbulk Lines Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgen Index Request ( ĊĠĠĠĠĠĠĠ Ġbuild Id : ĠString , ĊĠĠĠĠĠĠĠ ĠlogMessage : ĠLog Message With Line No , ĊĠĠĠĠĠĠĠ Ġindex : ĠString ĊĠĠĠ Ġ): ĠIndex Request ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠES Index Utils . getDocument Object ( build Id , ĠlogMessage ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIndex Request ( index ). source ( builder ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" [$ build Id ] ĠConvert ĠlogMessage Ġto Ġes Ġdocument Ġfailure ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Line No ( build Id : ĠString , Ġlog Messages : ĠList < Log Message >): ĠList < Log Message With Line No > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġline Num Ġ= Ġindex Service . get And Add Line Num ( build Id , Ġlog Messages . size ) ĊĠĠĠĠĠĠĠ Ġif Ġ( lineNum Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Got Ġnull Ġlog Index Ġfrom Ġindex Service , Ġbuild Id : Ġ$ build Id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġstart Line Num : ĠLong Ġ= Ġline Num ĊĠĠĠĠĠĠĠ Ġreturn Ġlog Messages . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= Ġif Ġ( it . timestamp Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . timestamp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . sub Tag . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Tag Service . save Sub Tag ( build Id , Ġit . tag , Ġit . sub Tag !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Message With Line No ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġit . tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Tag Ġ= Ġit . sub Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Id Ġ= Ġit . jobId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġit . message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġtimestamp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Type Ġ= Ġit . log Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline No Ġ= Ġstart Line Num ++, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Count Ġ= Ġit . execute Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare Index ( build Id : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġindex Service . getIndex Name ( build Id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! check Index Create ( build Id , Ġindex )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Index ( build Id , Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Cache . put ( index , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Index Create ( build Id : ĠString , Ġindex : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( index Cache . get If Present ( index ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġredis Lock Ġ= ĠRedis Lock ( redis Operation , Ġ" LOG : index : create : lock : key :$ index ", Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġredis Lock . lock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Cache . get If Present ( index ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġfrom ĠES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Exist Index ( build Id , Ġindex )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" [$ build Id |$ index ] Ġthe Ġindex Ġis Ġalready Ġcreated ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Cache . put ( index , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġredis Lock . unlock () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Index ( build Id : ĠString , Ġindex : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" [$ index ] ĠCreate Ġindex ") ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġstart Epoch Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġcreate Client Ġ= Ġlog Client . hash Client ( build Id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ ${ create Client . cluster Name } ][$ index ]| create Index |: Ġsh ards [ ${ create Client . shards }] " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġreplicas [ ${ create Client . replicas }] Ġsh ards Per Node [ ${ create Client . shards Per Node }] ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠCreate Index Request ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. settings ( ES Index Utils . getIndex Settings ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsh ards Ġ= Ġcreate Client . shards , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreplicas Ġ= Ġcreate Client . replicas , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsh ards Per Node Ġ= Ġcreate Client . shards Per Node ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. mapping ( ES Index Utils . getType Mappings ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . setTimeout ( Time Value . time Value Seconds ( 3 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġcreate Client . rest Client . indices () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( request , ĠRequest Options . DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . is Shards Ack nowled ged ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ("[ ${ create Client . cluster Name }] ĠCreate Ġindex Ġ$ index Ġfailure ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Index Bean V 2 . execute ( System . currentTimeMillis () Ġ- Ġstart Epoch , Ġsuccess ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Exist Index ( build Id : ĠString , Ġindex : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠGet Index Request ( index ) ĊĠĠĠĠĠĠĠ Ġrequest . setTimeout ( Time Value . time Value Seconds ( 3 0 )) ĊĠĠĠĠĠĠĠ Ġreturn Ġlog Client . hash Client ( build Id ). rest Client . indices () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. exists ( request , ĠRequest Options . DEFAULT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Query ( ĊĠĠĠĠĠĠĠ Ġbuild Id : ĠString , ĊĠĠĠĠĠĠĠ Ġtag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġsub Tag : ĠString ?, ĊĠĠĠĠĠĠĠ Ġjob Id : ĠString ?, ĊĠĠĠĠĠĠĠ Ġexecute Count : ĠInt ? ĊĠĠĠ Ġ): ĠBool QueryBuilder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠQuery Builders . bool Query () ĊĠĠĠĠĠĠĠ Ġif Ġ(! tag . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery . must ( Query Builders . match Query (" tag ", Ġtag ). operator ( Operator . AND )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! sub Tag . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery . must ( Query Builders . match Query (" sub Tag ", Ġsub Tag ). operator ( Operator . AND )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! jobId . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery . must ( Query Builders . match Query (" jobId ", Ġjob Id ). operator ( Operator . AND )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġquery . must ( Query Builders . match Query (" execute Count ", Ġexecute Count Ġ?: Ġ 1 ). operator ( Operator . AND )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. must ( Query Builders . match Query (" build Id ", Ġbuild Id ). operator ( Operator . AND )) ĊĠĠĠĠĠĠĠ Ġreturn Ġquery ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgen Large Search Options (): ĠRequest Options Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠRequest Options . DEFAULT . to Builder () ĊĠĠĠĠĠĠĠ Ġbuilder . set Http Async Response Consumer Factory ( Heap Buffered Response Consumer Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . RESPONSE _ ENTITY _ MAX _ SIZE )) ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . build () ĊĠĠĠ Ġ} Ċ } Ċ