From 5ed491cee7bae1f8dfd46efade615d3933ada759 Mon Sep 17 00:00:00 2001 From: Lin Yang Date: Sat, 11 Jan 2025 23:12:58 +0800 Subject: [PATCH] build(deps): bump fgw to 1.5.3 (#628) * build(deps): bump fgw to 1.5.3 Signed-off-by: Lin Yang * fix: make package-scripts Signed-off-by: Lin Yang * fix: make package-scripts Signed-off-by: Lin Yang --------- Signed-off-by: Lin Yang --- charts/fsm/components/scripts.tar.gz | Bin 29176 -> 29683 bytes .../filters/http/ExternalRateLimit.js | 47 ++++++++++++++++++ .../gateways/filters/http/RateLimit.js | 3 +- .../filters/http/RequestTermination.js | 14 ++++++ 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 charts/fsm/components/scripts/gateways/filters/http/ExternalRateLimit.js create mode 100644 charts/fsm/components/scripts/gateways/filters/http/RequestTermination.js diff --git a/charts/fsm/components/scripts.tar.gz b/charts/fsm/components/scripts.tar.gz index 8e5e9a8ea620479c3283c1e51aa4a72eabe0b74f..ecf40e737e9b90142f4f1a3b24bc2242c34683a0 100644 GIT binary patch literal 29683 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 WS4hoy+%4M;6`O&W`auZh!~X|3KOyG; literal 29176 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êV+12?NbOgCgK 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 diff --git a/charts/fsm/components/scripts/gateways/filters/http/ExternalRateLimit.js b/charts/fsm/components/scripts/gateways/filters/http/ExternalRateLimit.js new file mode 100644 index 000000000..2cfdf3781 --- /dev/null +++ b/charts/fsm/components/scripts/gateways/filters/http/ExternalRateLimit.js @@ -0,0 +1,47 @@ +export default function (config) { + var host = config.externalRateLimit.throttleHost + var passHeaders = config.externalRateLimit.passHeaders + + var $throttleResponse + var $throttleResolve + + var errorResponse = new Message({ status: 503 }, 'Throttle service down') + + return pipeline($=>$ + .fork().to($=>$ + .replaceData() + .replaceMessageStart( + req => { + if (passHeaders instanceof Array && passHeaders.length > 0) { + var head = req.head + var headers = head.headers + var selectedHeaders = Object.fromEntries( + passHeaders.map(k => [k, headers?.[k]]) + ) + return new MessageStart({ + method: head.method, + path: head.path, + headers: selectedHeaders, + }) + } else { + return req + } + } + ) + .muxHTTP(() => 1, { version: 2 }).to($=>$ + .connect(host) + ) + .handleMessage( + res => { + $throttleResponse = res?.head ? res : errorResponse + $throttleResolve(true) + } + ) + ) + .wait(() => new Promise(r => { $throttleResolve = r })) + .pipe(() => $throttleResponse.head.status === 200 ? 'pass' : 'reject', { + 'pass': $=>$.pipeNext(), + 'reject': $=>$.replaceData().replaceMessage(() => $throttleResponse) + }) + ) +} diff --git a/charts/fsm/components/scripts/gateways/filters/http/RateLimit.js b/charts/fsm/components/scripts/gateways/filters/http/RateLimit.js index af085b68d..087e16a73 100644 --- a/charts/fsm/components/scripts/gateways/filters/http/RateLimit.js +++ b/charts/fsm/components/scripts/gateways/filters/http/RateLimit.js @@ -4,6 +4,7 @@ export default function (config) { var interval = Number.parseFloat(config.rateLimit.interval) var burst = Number.parseInt(config.rateLimit.burst) var backlog = Number.parseInt(config.rateLimit.backlog) + var blocking = config.rateLimit.blocking === 'true' var response = new Message( { @@ -36,7 +37,7 @@ export default function (config) { } }, { 'pass': ($=>$ - .throttleMessageRate(rateQuota) + .throttleMessageRate(rateQuota, { blockInput: blocking }) .pipeNext() .handleMessageStart(() => { if (backlog) { diff --git a/charts/fsm/components/scripts/gateways/filters/http/RequestTermination.js b/charts/fsm/components/scripts/gateways/filters/http/RequestTermination.js new file mode 100644 index 000000000..7e63cde64 --- /dev/null +++ b/charts/fsm/components/scripts/gateways/filters/http/RequestTermination.js @@ -0,0 +1,14 @@ +export default function (config) { + var abortMessage = new Message( + { + status: config.requestTermination.response?.status || 503, + headers: config.requestTermination.response?.headers, + }, + config.requestTermination.response?.body || 'Service unavailable' + ) + + return pipeline($=>$ + .replaceData() + .replaceMessage(abortMessage) + ) +}