/* Ċ Ġ* Ġ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 . dispatch . docker . service Ċ Ċ import Ġcom . tencent . devops . common . service . gray . Gray Ċ import Ġcom . tencent . devops . dispatch . docker . dao . Pipeline Docker IP Info Dao Ċ import Ġcom . tencent . devops . dispatch . docker . dao . Pipeline Docker Task Simple Dao Ċ import Ġcom . tencent . devops . dispatch . docker . pojo . Docker Host Load Config Ċ import Ġcom . tencent . devops . dispatch . docker . pojo . Docker Ip Info VO Ċ import Ġcom . tencent . devops . dispatch . docker . pojo . Docker Ip List Page Ċ import Ġcom . tencent . devops . dispatch . docker . pojo . Docker Ip Update VO Ċ import Ġcom . tencent . devops . dispatch . docker . pojo . enums . Docker Host Cluster Type Ċ import Ġcom . tencent . devops . dispatch . docker . utils . Common Utils Ċ import Ġcom . tencent . devops . dispatch . docker . utils . Docker Host Utils Ċ import Ġorg . jooq . DSL Context Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjavax . ws . rs . BadRequest Exception Ċ Ċ @ Suppress (" ALL ") Ċ @ Service Ċ class ĠDispatch Docker Service Ġ@ Autowired Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġd sl Context : ĠDSL Context , ĊĠĠĠ Ġprivate Ġval Ġgray : ĠGray , ĊĠĠĠ Ġprivate Ġval Ġpipeline Docker IP Info Dao : ĠPipeline Docker IP Info Dao , ĊĠĠĠ Ġprivate Ġval Ġpipeline Docker Task Simple Dao : ĠPipeline Docker Task Simple Dao , ĊĠĠĠ Ġprivate Ġval Ġdocker Host Utils : ĠDocker Host Utils Ċ ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Dispatch Docker Service :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlist ( userId : ĠString , Ġpage : ĠInt ?, ĠpageSize : ĠInt ?): ĠDocker Ip List Page < Docker Ip Info VO > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpage NotNull Ġ= Ġpage Ġ?: Ġ 1 ĊĠĠĠĠĠĠĠ Ġval ĠpageSize NotNull Ġ= ĠpageSize Ġ?: Ġ 1 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġdocker Ip List Ġ= Ġpipeline Docker IP Info Dao . get Docker Ip List ( dsl Context , Ġpage NotNull , ĠpageSize NotNull ) ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġpipeline Docker IP Info Dao . get Docker Ip Count ( dsl Context ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( docker Ip List . size Ġ== Ġ 0 Ġ|| Ġcount Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDocker Ip List Page ( page NotNull , ĠpageSize NotNull , Ġ 0 , Ġempty List ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdocker Ip Info VO List Ġ= Ġmutable ListOf < Docker Ip Info VO >() ĊĠĠĠĠĠĠĠ Ġdocker Ip List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocker Ip Info VO List . add ( Docker Ip Info VO ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġit . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocker Ip Ġ= Ġit . docker Ip , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocker Host Port Ġ= Ġit . docker Host Port , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Ġ= Ġit . capacity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġused Num Ġ= Ġit . used Num , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaverage Cpu Load Ġ= Ġit . cpu Load , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaverage Mem Load Ġ= Ġit . mem Load , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaverage Disk Load Ġ= Ġit . disk Load , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaverage Disk I OL o ad Ġ= Ġit . disk Io Load , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Ġ= Ġit . enable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgray Env Ġ= Ġit . gray Env , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspecial On Ġ= Ġit . special On , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcluster Type Ġ= ĠDocker Host Cluster Type . valueOf ( it . cluster Name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcreateTime Ġ= Ġit . gmt Create . format ( DateTime Formatter . of Pattern (" yyyy - MM - dd ĠHH : mm : ss ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠDocker Ip List Page ( page NotNull , ĠpageSize NotNull , Ġcount , Ġdocker Ip Info VO List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate ( userId : ĠString , Ġdocker Ip Info VO s : ĠList < Docker Ip Info VO >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info ("$ userId Ġcreate Ġdocker ĠIP Ġ$ docker Ip Info VO s ") ĊĠĠĠĠĠĠĠ Ġdocker Ip Info VO s . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Common Utils . verify Ip ( it . docker Ip . trim ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Dispatch Ġcreate Ġdocker Ip Ġerror , Ġinvalid ĠIP Ġformat : Ġ${ it . docker Ip }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠBadRequest Exception (" Dispatch Ġcreate Ġdocker Ip Ġerror , Ġinvalid ĠIP Ġformat : Ġ${ it . docker Ip }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdocker Ip Info VO s . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline Docker IP Info Dao . create OrUpdate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Context Ġ= Ġd sl Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocker Ip Ġ= Ġit . docker Ip . trim (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocker Host Port Ġ= Ġit . docker Host Port , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Ġ= Ġit . capacity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġused Ġ= Ġit . used Num , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcpu Load Ġ= Ġit . average Cpu Load , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmem Load Ġ= Ġit . average Mem Load , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisk Load Ġ= Ġit . average Disk Load , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisk I OL o ad Ġ= Ġit . average Disk I OL o ad , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Ġ= Ġit . enable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgray Env Ġ= Ġit . gray Env Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspecial On Ġ= Ġit . special On Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcluster Name Ġ= Ġit . cluster Type ?. name Ġ?: ĠDocker Host Cluster Type . COMMON . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate ( userId : ĠString , Ġdocker Ip : ĠString , Ġdocker Ip Update VO : ĠDocker Ip Update VO ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info ("$ userId Ġupdate ĠDocker ĠIP : Ġ$ docker Ip Ġdocker Ip Update VO : Ġ$ docker Ip Update VO ") ĊĠĠĠĠĠĠĠ Ġpipeline Docker IP Info Dao . update ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Context Ġ= Ġd sl Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocker Ip Ġ= Ġdocker Ip , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocker Host Port Ġ= Ġdocker Ip Update VO . docker Host Port , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Ġ= Ġdocker Ip Update VO . enable , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgray Env Ġ= Ġdocker Ip Update VO . gray Env , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspecial On Ġ= Ġdocker Ip Update VO . special On , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcluster Name Ġ= Ġdocker Ip Update VO . cluster Type . name ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate All Dispatch Docker Enable ( userId : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info ("$ userId Ġupdate Ġall Ġdocker Ġenable .") ĊĠĠĠĠĠĠĠ Ġval Ġdocker Unavailable List Ġ= Ġpipeline Docker IP Info Dao . get Docker Ip List ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Context Ġ= Ġd sl Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgray Env Ġ= Ġgray . is Gray () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġdocker Unavailable List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline Docker IP Info Dao . update Docker Ip Status ( dsl Context , Ġit . docker Ip , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Docker Ip Load ( userId : ĠString , Ġdocker Ip : ĠString , Ġdocker Ip Info VO : ĠDocker Ip Info VO ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġlogger . info ("$ userId Ġupdate ĠDocker ĠIP Ġstatus Ġenable : Ġ$ docker Ip , Ġdocker Ip Info VO : Ġ$ docker Ip Info VO ") ĊĠĠĠĠĠĠĠ Ġpipeline Docker IP Info Dao . update Docker Ip Load ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Context Ġ= Ġd sl Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocker Ip Ġ= Ġdocker Ip , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocker Host Port Ġ= Ġdocker Ip Info VO . docker Host Port , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġused Ġ= Ġdocker Ip Info VO . used Num , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcpu Load Ġ= Ġdocker Ip Info VO . average Cpu Load , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmem Load Ġ= Ġdocker Ip Info VO . average Mem Load , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisk Load Ġ= Ġdocker Ip Info VO . average Disk Load , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisk I OL o ad Ġ= Ġdocker Ip Info VO . average Disk I OL o ad , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Ġ= Ġdocker Ip Info VO . enable ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete ( userId : ĠString , Ġdocker Ip : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info ("$ userId Ġdelete ĠDocker ĠIP : Ġ$ docker Ip ") ĊĠĠĠĠĠĠĠ Ġif Ġ( docker Ip . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠBadRequest Exception (" Docker ĠIP Ġis Ġnull Ġor Ġ'' ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpipeline Docker IP Info Dao . delete ( dsl Context , Ġdocker Ip ) ĊĠĠĠĠĠĠĠ Ġ// Ġæ¸ ħ ç©º ä¸İ ä¹ĭ åħ³èģĶ æŀĦå»º åĪĨéħį ĊĠĠĠĠĠĠĠ Ġ// Ġpipeline Docker Task Simple Dao . delete By Docker Ip ( dsl Context , Ġdocker Ip ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Docker Build Binding ( userId : ĠString , Ġpipeline Id : ĠString , Ġvm Seq Id : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info ("$ userId Ġremove Ġdocker Build Binding Ġpipeline Id : Ġ$ pipeline Id Ġvm Seq Id : Ġ$ vm Seq Id ") ĊĠĠĠĠĠĠĠ Ġpipeline Docker Task Simple Dao . delete By Pipeline Id And Vm Seq Id ( dsl Context , Ġpipeline Id , Ġvm Seq Id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Docker Host Load Config ( userId : ĠString ): ĠMap < String , ĠDocker Host Load Config > Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info ("$ userId Ġget Docker Host Load Config Ġ... ") ĊĠĠĠĠĠĠĠ Ġval Ġtriple Load Config Ġ= Ġdocker Host Utils . get Load Config () ĊĠĠĠĠĠĠĠ Ġval Ġdocker Host Load ConfigMap Ġ= Ġmutable Map Of < String , ĠDocker Host Load Config >() ĊĠĠĠĠĠĠĠ Ġdocker Host Load ConfigMap [" first "] Ġ= Ġtriple Load Config . first ĊĠĠĠĠĠĠĠ Ġdocker Host Load ConfigMap [" second "] Ġ= Ġtriple Load Config . second ĊĠĠĠĠĠĠĠ Ġdocker Host Load ConfigMap [" third "] Ġ= Ġtriple Load Config . third ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdocker Host Load ConfigMap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Docker Host Load Config ( ĊĠĠĠĠĠĠĠ ĠuserId : ĠString , ĊĠĠĠĠĠĠĠ Ġdocker Host Load ConfigMap : ĠMap < String , ĠDocker Host Load Config > ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info ("$ userId Ġcreate Docker Host Load Config Ġ$ docker Host Load ConfigMap ") ĊĠĠĠĠĠĠĠ Ġif Ġ( docker Host Load ConfigMap . size Ġ!= Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Parameter Ġdocker Host Load ConfigMap ` size Ġis Ġnot Ġ 3 .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdocker Host Utils . create Load Config ( docker Host Load ConfigMap ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Docker D rift Threshold ( userId : ĠString ): ĠMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info ("$ userId Ġget Docker D rift Threshold Ġ... ") ĊĠĠĠĠĠĠĠ Ġreturn Ġmap Of (" threshold " Ġto Ġdocker Host Utils . get Docker D rift Threshold (). toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Docker D rift Threshold ( userId : ĠString , Ġthreshold Map : ĠMap < String , ĠString >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info ("$ userId Ġupdate Docker D rift Threshold Ġ$ threshold Map ") ĊĠĠĠĠĠĠĠ Ġval Ġthreshold Ġ= Ġ( threshold Map [" threshold "] Ġ?: Ġerror (" Parameter Ġthreshold Ġmust Ġin Ġ( 0 - 1 0 0 ). ")). toInt () ĊĠĠĠĠĠĠĠ Ġif Ġ( threshold Ġ< Ġ 0 Ġ|| Ġthreshold Ġ> Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Parameter Ġthreshold Ġmust Ġin Ġ( 0 - 1 0 0 ). ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdocker Host Utils . update Docker D rift Threshold ( threshold ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ