76 lines
2.1 KiB
Lua
76 lines
2.1 KiB
Lua
local lapis = require "lapis"
|
|
local api_helpers = require "kong.api.api_helpers"
|
|
local hooks = require "kong.hooks"
|
|
local load_module_if_exists = require "kong.tools.module".load_module_if_exists
|
|
|
|
|
|
local ngx = ngx
|
|
local kong = kong
|
|
local pairs = pairs
|
|
|
|
|
|
local app = lapis.Application()
|
|
|
|
|
|
app.default_route = api_helpers.default_route
|
|
app.handle_404 = api_helpers.handle_404
|
|
app.handle_error = api_helpers.handle_error
|
|
app:before_filter(api_helpers.before_filter)
|
|
|
|
-- Hooks for running before_filter similar to kong/api
|
|
assert(hooks.run_hook("status_api:init:pre", app))
|
|
|
|
|
|
ngx.log(ngx.DEBUG, "Loading Status API endpoints")
|
|
|
|
|
|
-- Load core health route
|
|
api_helpers.attach_routes(app, require "kong.api.routes.health")
|
|
api_helpers.attach_routes(app, require "kong.status.ready")
|
|
api_helpers.attach_routes(app, require "kong.api.routes.dns")
|
|
|
|
|
|
if kong.configuration.database == "off" then
|
|
-- Load core upstream readonly routes
|
|
-- Customized routes in upstreams doesn't call `parent`, otherwise we will need
|
|
-- api/init.lua:customize_routes to pass `parent`.
|
|
local upstream_routes = {}
|
|
for route_path, definition in pairs(require "kong.api.routes.upstreams") do
|
|
local method_handlers = {}
|
|
local has_methods
|
|
for method_name, method_handler in pairs(definition) do
|
|
if method_name:upper() == "GET" then
|
|
has_methods = true
|
|
method_handlers[method_name] = method_handler
|
|
end
|
|
end
|
|
|
|
if has_methods then
|
|
upstream_routes[route_path] = {
|
|
schema = kong.db.upstreams.schema,
|
|
methods = method_handlers,
|
|
}
|
|
end
|
|
end
|
|
|
|
api_helpers.attach_new_db_routes(app, upstream_routes)
|
|
end
|
|
|
|
-- Load plugins status routes
|
|
if kong.configuration and kong.configuration.loaded_plugins then
|
|
for k in pairs(kong.configuration.loaded_plugins) do
|
|
local loaded, mod = load_module_if_exists("kong.plugins." ..
|
|
k .. ".status_api")
|
|
|
|
if loaded then
|
|
ngx.log(ngx.DEBUG, "Loading Status API endpoints for plugin: ", k)
|
|
api_helpers.attach_routes(app, mod)
|
|
else
|
|
ngx.log(ngx.DEBUG, "No Status API endpoints loaded for plugin: ", k)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
return app
|