Add support for X-Debug-Mode header
diff --git a/conf.d/api_gateway_logging.conf b/conf.d/api_gateway_logging.conf
index d8524fc..c6b4253 100644
--- a/conf.d/api_gateway_logging.conf
+++ b/conf.d/api_gateway_logging.conf
@@ -32,4 +32,5 @@
'ua="$http_user_agent" xfwdf="$http_x_forwarded_for" '
'upadd="$upstream_addr" upstat=$upstream_status uprt=$upstream_response_time '
'tenantId="$tenant" tenantNamespace="$tenantNamespace" tenantInstance="$tenantInstance" '
+ 'requestHeaders="$requestHeaders" requestBody="$requestBody" responseHeaders="$responseHeaders" responseBody="$responseBody" '
'apiId="$apiId" apiKey="$apiKey" analyticsUri="$analyticsUri" reqid="$requestId"';
diff --git a/conf.d/managed_endpoints.conf b/conf.d/managed_endpoints.conf
index 9a612d6..3d375e9 100644
--- a/conf.d/managed_endpoints.conf
+++ b/conf.d/managed_endpoints.conf
@@ -72,6 +72,10 @@
set $analyticsUri '';
set $cors_origins '';
set $cors_methods '';
+ set $requestHeaders '';
+ set $requestBody '';
+ set $responseHeaders '';
+ set $responseBody '';
access_by_lua_block {
local routing = require "routing"
@@ -79,13 +83,21 @@
}
proxy_pass $upstream;
- header_filter_by_lua_block {
+ header_filter_by_lua_block {
local cors = require "cors"
cors.replaceHeaders()
}
+
+ body_filter_by_lua_block {
+ local routing = require "routing"
+ if ngx.req.get_headers()["x-debug-mode"] == "true" then
+ routing.setResponseLogs()
+ end
+ }
}
location = /health {
+ access_log off;
proxy_pass http://0.0.0.0:9000/v1/health-check;
}
}
diff --git a/conf.d/management_apis.conf b/conf.d/management_apis.conf
index 6f1e953..c8297fc 100644
--- a/conf.d/management_apis.conf
+++ b/conf.d/management_apis.conf
@@ -62,6 +62,7 @@
}
location /v1/health-check {
+ access_log off;
access_by_lua_block {
local requestMethod = ngx.req.get_method()
if requestMethod == "GET" then
diff --git a/scripts/lua/routing.lua b/scripts/lua/routing.lua
index 94cf3bd..e031bc6 100644
--- a/scripts/lua/routing.lua
+++ b/scripts/lua/routing.lua
@@ -47,6 +47,9 @@
local gatewayPath = ngx.var.gatewayPath
local i, j = ngx.var.request_uri:find("/api/([^/]+)")
ngx.var.analyticsUri = ngx.var.request_uri:sub(j+1)
+ if ngx.req.get_headers()["x-debug-mode"] == "true" then
+ setRequestLogs()
+ end
local resourceKeys = redis.getAllResourceKeys(red, tenantId)
local redisKey = _M.findRedisKey(resourceKeys, tenantId, gatewayPath)
if redisKey == nil then
@@ -99,6 +102,9 @@
local u = url.parse(cfUrl)
cfRedisKey = utils.concatStrings({"resources:", tenant, ":", path, u.path})
ngx.var.analyticsUri = (u.path == "") and "/" or u.path
+ if u.query ~= nil and u.query ~= "" then
+ ngx.var.analyticsUri = utils.concatStrings({ngx.var.analyticsUri, '?', u.query})
+ end
end
for _, key in pairs(resourceKeys) do
if key == redisKey or key == cfRedisKey then
@@ -198,4 +204,19 @@
end
end
+function setRequestLogs()
+ ngx.var.requestHeaders = cjson.encode(ngx.req.get_headers())
+ ngx.req.read_body()
+ ngx.var.requestBody = ngx.req.get_body_data()
+end
+
+function _M.setResponseLogs()
+ ngx.var.responseHeaders = cjson.encode(ngx.resp.get_headers())
+ local resp_body = ngx.arg[1]
+ ngx.ctx.buffered = (ngx.ctx.buffered or '') .. resp_body
+ if ngx.arg[2] then
+ ngx.var.responseBody = ngx.ctx.buffered
+ end
+end
+
return _M