package Ġsz . scaffold . aop . intercept ors . builtin . api . q ps Ċ Ċ import Ġsz . scaffold . aop . intercept ors . Global Interceptor Base Ċ import Ġsz . scaffold . controller . reply . Reply Base Ċ import Ġsz . scaffold . errors . builtin . Sz Errors Ċ Ċ // Ġapp . http Server . intercept ors Ġä¸ŃçļĦ éħįç½® Ċ // Ġincludes ĠåĴĮ Ġexclude s Ġ éĩĩçĶ¨ éĢļ éħį ç¬¦ åĮ¹éħį , Ġexclude s Ġæ¯ Ķ Ġincludes ĠçļĦ ä¼ĺåħĪ çº§ é«ĺ Ċ // ĠPossible Ġpatterns Ġallow Ġto Ġmatch Ġsingle Ġcharacters Ġ(' ?') Ġor Ġany Ġcount Ġof Ġcharacters Ġ(' * '). Ċ // ĠW ildcard Ġcharacters Ġcan Ġbe Ġescaped Ġ( by Ġan Ġ'\ '). ĠWhen Ġmatching Ġpath , Ġdeep Ġtree Ġwildcard Ġalso Ġcan Ġbe Ġused Ġ(' ** '). Ċ // Ġapp Ġ{ Ċ // ĠĠĠĠ Ġhttp Server Ġ{ Ċ // ĠĠĠĠĠĠ Ġintercept ors Ġ= Ġ[ Ċ // ĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName Ġ= Ġ" sz . scaffold . aop . intercept ors . builtin . api . q ps . Global Q ps Limiter " Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" name Of Limiter " Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ps Ġ= Ġ 1 5 0 Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincludes Ġ= Ġ[" /** "] Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexclude s Ġ= Ġ[] Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠ Ġ] Ċ // ĠĠĠĠ Ġ} Ċ // ĠĠ Ġ} ĊĊ Ċ @ Suppress (" Un stable Api Usage ") Ċ class ĠGlobal Q ps Limiter Ġ: ĠGlobal Interceptor Base () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlimit er Name Ġ= Ġconfig . getString (" name ") ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġwhen Match (): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlimit er Ġ= ĠQ ps Limiter Map . named Limiter Of ( limiter Name ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( limiter . try Acquire ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate . call () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreply Ġ= ĠReply Base () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreply . ret Ġ= ĠS z Errors . Ex ceed Q ps Limit . code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreply . err msg Ġ= Ġ"${ Sz Errors . Ex ceed Q ps Limit . desc }: Ġ[ max Ġ${ limiter . rate } Ġtimes / seconds ]" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreply ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }