furt/src/routes/health.lua

81 lines
2.5 KiB
Lua
Raw Normal View History

-- src/routes/health.lua
-- Health monitoring and diagnostic routes for Furt API-Gateway
-- Dragons@Work Digital Sovereignty Project
local found_cjson, cjson = pcall(require, 'cjson')
if not found_cjson then
cjson = require('dkjson')
end
local config = require("config.server")
local HealthRoute = {}
-- Get version information from merkwerk integration
function HealthRoute.get_version_info()
-- Load merkwerk integration
local success, merkwerk = pcall(require, "integrations.lua-api")
if not success then
print("WARNING: merkwerk integration not available, using fallback")
return {
service = "furt-lua",
version = "?.?.?",
content_hash = "unknown",
vcs_info = { type = "none", hash = "", branch = "" },
source = "fallback-no-merkwerk"
}
end
-- Get merkwerk health info
local health_info = merkwerk.get_health_info()
-- Ensure compatibility with old VERSION-only expectations
if not health_info.version then
health_info.version = "?.?.?"
end
return health_info
end
-- Handle /health endpoint - system health check
function HealthRoute.handle_health(request, server)
local version_info = HealthRoute.get_version_info()
local response_data = {
status = "healthy",
service = version_info.service or "furt-lua",
version = version_info.version,
content_hash = version_info.content_hash,
vcs_info = version_info.vcs_info,
timestamp = os.time(),
source = version_info.source,
features = {
smtp_configured = config.smtp_default and config.smtp_default.host ~= nil,
auth_enabled = true,
rate_limiting = true,
rate_limits = config.security and config.security.rate_limits,
merkwerk_integrated = version_info.source == "merkwerk"
}
}
return server:create_response(200, response_data, nil, nil, request)
end
-- Handle /test endpoint - development testing (configurable)
function HealthRoute.handle_test(request, server)
local response_data = {
message = "Test endpoint working",
received_data = request.body,
headers_count = 0,
warning = "This is a development endpoint (enabled via config)"
}
-- Count headers
for _ in pairs(request.headers) do
response_data.headers_count = response_data.headers_count + 1
end
return server:create_response(200, response_data, nil, nil, request)
end
return HealthRoute