项目文件夹

文件
2026-07-13 12:32:21 +08:00

72 行
2.1 KiB
Lua

local declarative = require "kong.db.declarative"
local bytes_to_str = require("kong.tools.string").bytes_to_str
local tonumber = tonumber
local kong = kong
local knode = (kong and kong.node) and kong.node or
require "kong.pdk.node".new()
local dbless = kong.configuration.database == "off"
local data_plane_role = kong.configuration.role == "data_plane"
return {
["/status"] = {
GET = function(self, dao, helpers)
local query = self.req.params_get
local unit = "m"
local scale
if query then
if query.unit then
unit = query.unit
end
if query.scale then
scale = tonumber(query.scale)
end
-- validate unit and scale arguments
local pok, perr = pcall(bytes_to_str, 0, unit, scale)
if not pok then
return kong.response.exit(400, { message = perr })
end
end
-- nginx stats
local status_response = {
memory = knode.get_memory_stats(unit, scale),
server = kong.nginx.get_statistics(),
database = {
reachable = true,
},
}
-- if dbless mode is enabled we provide the current hash of the
-- data-plane in the status response as this enables control planes
-- to make decisions when something changes in the data-plane (e.g.
-- if the gateway gets unexpectedly restarted and its configuration
-- has been reset to empty).
if dbless or data_plane_role then
status_response.configuration_hash = declarative.get_current_hash()
-- remove the meanless database entry when in dbless mode or data plane
status_response.database = nil
end
-- TODO: no way to bypass connection pool
local ok, err = kong.db:connect()
if not ok then
ngx.log(ngx.ERR, "failed to connect to ", kong.db.infos.strategy,
" during /status endpoint check: ", err)
status_response.database.reachable = false
end
kong.db:close() -- ignore errors
return kong.response.exit(200, status_response)
end
},
}