mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-29 14:06:36 +08:00
aa4faddade
Result: {"status":"keep","total_issues":8,"golint_canonicalheader":0,"golint_errname":0,"golint_errorlint":1,"golint_exhaustive":0,"golint_forcetypeassert":0,"golint_gosec":0,"golint_intrange":0,"golint_modernize":3,"golint_nilnil":3,"golint_perfsprint":0,"golint_prealloc":0,"golint_recvcheck":1,"golint_usestdlibvars":0,"golint_wastedassign":0,"golint_total":8,"golint_test_testifylint":0,"golint_test_thelper":0,"golint_test_usetesting":0,"golint_test_total":0,"golint_vetx_total":0,"eslint_problems":0,"eslint_errors":0,"eslint_warnings":0,"tsc_errors":0,"vitest_failed":0,"vitest_total":116,"measure_s":81}
68 lines
2.2 KiB
Go
68 lines
2.2 KiB
Go
// Copyright 2026 Arctel.net
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package nginx
|
|
|
|
import "github.com/Rain-kl/Wavelet/internal/apps/agent/protocol"
|
|
|
|
// Local OpenResty observability endpoint (target model):
|
|
// GET /openflare/observability returns instantaneous health/connections only.
|
|
// Business traffic is collected exclusively from access.log.
|
|
|
|
const openRestyObservabilityInitLua = `return
|
|
`
|
|
|
|
// log.lua no longer accumulates business counters (access.log is the authority).
|
|
const openRestyObservabilityLogLua = `return
|
|
`
|
|
|
|
// read.lua exposes stub_status-style connection gauges as JSON.
|
|
const openRestyObservabilityReadLua = `local cjson = require "cjson.safe"
|
|
|
|
local function read_stub_status()
|
|
local res = ngx.location.capture("/openflare/stub_status")
|
|
if not res or res.status ~= 200 or not res.body then
|
|
return nil
|
|
end
|
|
local body = res.body
|
|
local active = tonumber(string.match(body, "Active connections:%s*(%d+)")) or 0
|
|
local reading = tonumber(string.match(body, "Reading:%s*(%d+)")) or 0
|
|
local writing = tonumber(string.match(body, "Writing:%s*(%d+)")) or 0
|
|
local waiting = tonumber(string.match(body, "Waiting:%s*(%d+)")) or 0
|
|
return {
|
|
active = active,
|
|
reading = reading,
|
|
writing = writing,
|
|
waiting = waiting
|
|
}
|
|
end
|
|
|
|
local connections = read_stub_status()
|
|
local payload = {
|
|
ok = connections ~= nil,
|
|
captured_at_unix = ngx.time(),
|
|
connections = connections or {
|
|
active = 0,
|
|
reading = 0,
|
|
writing = 0,
|
|
waiting = 0
|
|
}
|
|
}
|
|
|
|
ngx.header.content_type = "application/json"
|
|
ngx.status = ngx.HTTP_OK
|
|
ngx.say(cjson.encode(payload))
|
|
`
|
|
|
|
// ManagedObservabilityLuaFiles returns embedded Lua assets for OpenResty observability.
|
|
func ManagedObservabilityLuaFiles() []protocol.SupportFile {
|
|
return []protocol.SupportFile{
|
|
{Path: "init.lua", Content: openRestyObservabilityInitLua},
|
|
{Path: "log.lua", Content: openRestyObservabilityLogLua},
|
|
{Path: "read.lua", Content: openRestyObservabilityReadLua},
|
|
{Path: "observability/init.lua", Content: openRestyObservabilityInitLua},
|
|
{Path: "observability/log.lua", Content: openRestyObservabilityLogLua},
|
|
{Path: "observability/read.lua", Content: openRestyObservabilityReadLua},
|
|
}
|
|
}
|