/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 Ġ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 . op data . registry . consul Ċ Ċ import Ġcom . tencent . bk repo . common . api . exception . NotFoundException Ċ import Ġcom . tencent . bk repo . common . api . util . read Json String Ċ import Ġcom . tencent . bk repo . op data . message . Op Data Message Code . Service Instance NotFound Ċ import Ġcom . tencent . bk repo . op data . pojo . registry . Instance Info Ċ import Ġcom . tencent . bk repo . op data . pojo . registry . Instance Status Ċ import Ġcom . tencent . bk repo . op data . pojo . registry . Service Info Ċ import Ġcom . tencent . bk repo . op data . registry . Registry Client Ċ import Ġcom . tencent . bk repo . op data . registry . consul . exception . Cons ul ApiException Ċ import Ġcom . tencent . bk repo . op data . registry . consul . pojo . Cons ul Instance Check Ċ import Ġcom . tencent . bk repo . op data . registry . consul . pojo . Cons ul Instance Check . Companion . STATUS _ PASS ING Ċ import Ġcom . tencent . bk repo . op data . registry . consul . pojo . Cons ul Instance Health Ċ import Ġcom . tencent . bk repo . op data . registry . consul . pojo . Cons ul InstanceId Ċ import Ġcom . tencent . bk repo . op data . util . parse Res And Throw Exception On Request Failed Ċ import Ġcom . tencent . bk repo . op data . util . request Builder Ċ import Ġcom . tencent . bk repo . op data . util . throw Exception On Request Failed Ċ import Ġokhttp 3 . Http Url Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . internal . Util . EMPTY _ REQUEST Ċ import Ġorg . springframework . cloud . consul . Cons ul Properties Ċ Ċ class ĠCons ul Registry Client Ġconstructor ( ĊĠĠĠ Ġprivate Ġval ĠhttpClient : ĠOk HttpClient , ĊĠĠĠ Ġprivate Ġval Ġcons ul Properties : ĠCons ul Properties Ċ ) Ġ: ĠRegistry Client Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġservices (): ĠList < Service Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġurl Builder (). add Path Segments ( CONS UL _ LIST _ SERVICES _ PATH ). build () ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġurl . request Builder (). build () ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠhttpClient . new Call ( req ). execute () ĊĠĠĠĠĠĠĠ Ġreturn Ġres . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparse Res And Throw Exception On Request Failed ( res ) Ġ{ Ġres Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . body () !!. string (). read Json String < Map < String , ĠList < String >>> (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠService Info ( it . key , Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinstances ( serviceName : ĠString ): ĠList < Instance Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlist Cons ul Instance Health ( serviceName ). map Ġ{ ĠconvertTo Instance Info ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdere gister ( serviceName : ĠString , Ġinstance Id : ĠString ): ĠInstance Info Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ æ³¨ éĶĢ æľįåĬ¡ å®ŀä¾ĭ ĊĠĠĠĠĠĠĠ Ġval Ġurl Builder Ġ= ĠHttp Url . Builder (). add Path Segments ( CONS UL _ DER EG ISTER _ PATH ) ĊĠĠĠĠĠĠĠ Ġreturn Ġchange Instance Status ( url Builder , ĠserviceName , Ġinstance Id , ĠInstance Status . DER EG ISTER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinstance Info ( serviceName : ĠString , Ġinstance Id : ĠString ): ĠInstance Info Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcons ul Instance Health Ġ= Ġcons ul Instance Health ( serviceName , Ġinstance Id ) ĊĠĠĠĠĠĠĠ Ġreturn ĠconvertTo Instance Info ( consul Instance Health ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmaintenance ( serviceName : ĠString , Ġinstance Id : ĠString , Ġenable : ĠBoolean ): ĠInstance Info Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ æľįåĬ¡ æīĢåľ¨ èĬĤçĤ¹ ĊĠĠĠĠĠĠĠ Ġval Ġurl Builder Ġ= ĠHttp Url . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Path Segments ( CONS UL _ MA INTEN ANCE _ PATH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add QueryParameter ( CONS UL _ QUERY _ PARAM _ ENABLE , Ġenable . toString ()) ĊĠĠĠĠĠĠĠ Ġval Ġtarget Status Ġ= Ġif Ġ( enable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInstance Status . DER EG ISTER ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInstance Status . RUNNING ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġchange Instance Status ( url Builder , ĠserviceName , Ġinstance Id , Ġtarget Status ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Instance Status ( ĊĠĠĠĠĠĠĠ Ġurl Builder : ĠHttp Url . Builder , ĊĠĠĠĠĠĠĠ ĠserviceName : ĠString , ĊĠĠĠĠĠĠĠ Ġinstance Id : ĠString , ĊĠĠĠĠĠĠĠ Ġtarget Status : ĠInstance Status ĊĠĠĠ Ġ): ĠInstance Info Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcons ul InstanceId Ġ= ĠCons ul InstanceId . create ( instanceId ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ æľįåĬ¡ æīĢåľ¨ èĬĤçĤ¹ ĊĠĠĠĠĠĠĠ Ġval Ġcons ul Instance Health Ġ= Ġcons ul Instance Health ( serviceName , Ġinstance Id ) ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġurl Builder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. scheme ( consul Properties . scheme Ġ?: ĠCON S UL _ DEFAULT _ SCHEME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. host ( consul Instance Health . consul Node . address ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. port ( consul Properties . port ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Path Segment ( consul InstanceId . service Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġurl . request Builder (). put ( EMPTY _ REQUEST ). build () ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠhttpClient . new Call ( req ). execute () ĊĠĠĠĠĠĠĠ Ġres . use Ġ{ Ġthrow Exception On Request Failed ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠconvertTo Instance Info ( consul Instance Health ). copy ( status Ġ= Ġtarget Status ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcons ul Instance Health ( serviceName : ĠString , Ġinstance Id : ĠString ): ĠCons ul Instance Health Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcons ul Instances Ġ= Ġlist Cons ul Instance Health ( serviceName , Ġinstance Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( consul Instances . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCons ul ApiException (" more Ġthan Ġ 1 Ġinstance Ġfound , ĠserviceName : Ġ$ serviceName , Ġinstance Id : Ġ$ instanceId ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( consul Instances . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNotFound Exception ( Service Instance NotFound , ĠserviceName , Ġinstance Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcons ul Instances [ 0 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlist Cons ul Instance Health ( ĊĠĠĠĠĠĠĠ ĠserviceName : ĠString , ĊĠĠĠĠĠĠĠ Ġinstance Id : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠList < Cons ul Instance Health > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcons ul InstanceId Ġ= Ġinstance Id ?. let Ġ{ ĠCons ul InstanceId . create ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠåĪĽå»º è¯·æ±Ĥ ĊĠĠĠĠĠĠĠ Ġval Ġurl Builder Ġ= Ġurl Builder (). add Path Segments ( CONS UL _ LIST _ SERVICE _ HE ALTH _ PATH ). add Path Segment ( serviceName ) ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġcons ul InstanceId ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter Expression Ġ= Ġbuild Filter Expression ( it . service Id , Ġit . nodeName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Builder . add QueryParameter ( CONS UL _ QUERY _ PARAM _ FILTER , Ġfilter Expression ). build () ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġurl Builder . build () ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġurl . request Builder (). build () ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠhttpClient . new Call ( req ). execute () ĊĊĠĠĠĠĠĠĠ Ġ// Ġ è§£æŀĲ è¯·æ±Ĥ ç»ĵæŀľ ĊĠĠĠĠĠĠĠ Ġres . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcons ul Instances Ġ= Ġparse Res And Throw Exception On Request Failed < List < Cons ul Instance Health >>( res ) Ġ{ Ġres Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . body () !!. string (). read Json String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( consul InstanceId Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcons ul Instances ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ä½İ çīĪæľ¬ consul ä¸į æĶ¯æĮģ filter è¡¨è¾¾å¼ı è¿ĩæ»¤ ï¼Į è¯·æ±Ĥ åĪ° ç»ĵæŀľ åĲİ æīĭåĬ¨ è¿ĩæ»¤ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcons ul Instances . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . consul Instance . id Ġ== Ġcons ul InstanceId . service Id Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . consul Node . nodeName Ġ== Ġcons ul InstanceId . nodeName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Filter Expression ( service Id : ĠString , ĠnodeName : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ CONS UL _ FILTER _ SELECT OR _ SERVICE _ ID Ġ== Ġ\"$ service Id \" Ġand " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ$ CONS UL _ FILTER _ SELECT OR _ NODE _ NAME Ġ== Ġ\"$ nodeName \"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠconvertTo Instance Info ( consul Instance Health : ĠCons ul Instance Health ): ĠInstance Info Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcons ul Instance Ġ= Ġcons ul Instance Health . consul Instance ĊĠĠĠĠĠĠĠ Ġval Ġcons ul Node Ġ= Ġcons ul Instance Health . consul Node ĊĠĠĠĠĠĠĠ Ġ// Ġ è¿ĩæ»¤ éĿŀ æľįåĬ¡ å®ŀä¾ĭ çļĦ åģ ¥ åº· æ£ĢæŁ¥ ä¿¡æģ¯ ĊĠĠĠĠĠĠĠ Ġval Ġcons ul Instance Status List Ġ= Ġcons ul Instance Health . consul Instance Checks . filter Ġ{ Ġit . serviceName . isNotEmpty () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcons ul InstanceId Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCons ul InstanceId . create ( consul Node . datac enter , Ġcons ul Node . nodeName , Ġcons ul Instance . id ) ĊĠĠĠĠĠĠĠ Ġreturn ĠInstance Info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġcons ul InstanceId . instanceId Str (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠserviceName Ġ= Ġcons ul Instance . service , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost Ġ= Ġcons ul Instance . address , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġport Ġ= Ġcons ul Instance . port , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠconvertTo Instance Status ( consul Instance Status List ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæľįåĬ¡ çļĦ åħ¨éĥ¨ æ£ĢæŁ¥ éĢļè¿ĩ æīį ç®Ĺ æŃ£å¸¸ è¿Ĳè¡Į ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġinstance Status ĠæľįåĬ¡ checks åĪĹè¡¨ ï¼Į åĪĹè¡¨ ä¸ºç©º æĹ¶ è¿ĶåĽŀ ä¸º RUNNING çĬ¶æĢģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠconvertTo Instance Status ( instance Status : ĠList < Cons ul Instance Check >): ĠInstance Status Ġ{ ĊĠĠĠĠĠĠĠ Ġinstance Status . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . check Id Ġ== Ġmaintenance Mode Check Id ( it . service Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠInstance Status . DER EG ISTER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . status Ġ!= ĠSTATUS _ PASS ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠInstance Status . OFF LINE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠInstance Status . RUNNING ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmaintenance Mode Check Id ( service Id : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"_ service _ maintenance :$ service Id " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġurl Builder () Ġ= ĠHttp Url . Builder () ĊĠĠĠĠĠĠĠ Ġ. scheme ( consul Properties . scheme Ġ?: ĠCON S UL _ DEFAULT _ SCHEME ) ĊĠĠĠĠĠĠĠ Ġ. host ( consul Properties . host ) ĊĠĠĠĠĠĠĠ Ġ. port ( consul Properties . port ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCON S UL _ DEFAULT _ SCHEME Ġ= Ġ" http " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCON S UL _ QUERY _ PARAM _ ENABLE Ġ= Ġ" enable " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCON S UL _ QUERY _ PARAM _ FILTER Ġ= Ġ" filter " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCON S UL _ FILTER _ SELECT OR _ SERVICE _ ID Ġ= Ġ" Service . ID " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCON S UL _ FILTER _ SELECT OR _ NODE _ NAME Ġ= Ġ" Node . Node " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCON S UL _ LIST _ SERVICES _ PATH Ġ= Ġ" v 1 / catalog / services " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCON S UL _ LIST _ SERVICE _ HE ALTH _ PATH Ġ= Ġ" v 1 / health / service " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCON S UL _ DER EG ISTER _ PATH Ġ= Ġ" v 1 / agent / service / dere gister " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCON S UL _ MA INTEN ANCE _ PATH Ġ= Ġ" v 1 / agent / service / maintenance " ĊĠĠĠ Ġ} Ċ } Ċ