-
Notifications
You must be signed in to change notification settings - Fork 4.8k
/
nginx.lua
98 lines (82 loc) · 3.09 KB
/
nginx.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
--- Nginx information module.
--
-- A set of functions for retrieving Nginx-specific implementation
-- details and meta information.
-- @module kong.nginx
local ffi = require "ffi"
local C = ffi.C
local arch = ffi.arch
local ngx = ngx
local tonumber = tonumber
if arch == "x64" or arch == "arm64" then
ffi.cdef[[
uint64_t *ngx_stat_active;
uint64_t *ngx_stat_reading;
uint64_t *ngx_stat_writing;
uint64_t *ngx_stat_waiting;
uint64_t *ngx_stat_requests;
uint64_t *ngx_stat_accepted;
uint64_t *ngx_stat_handled;
]]
elseif arch == "x86" or arch == "arm" then
ffi.cdef[[
uint32_t *ngx_stat_active;
uint32_t *ngx_stat_reading;
uint32_t *ngx_stat_writing;
uint32_t *ngx_stat_waiting;
uint32_t *ngx_stat_requests;
uint32_t *ngx_stat_accepted;
uint32_t *ngx_stat_handled;
]]
else
kong.log.err("Unsupported arch: " .. arch)
end
local function new(self)
local _NGINX = {}
---
-- Returns the current Nginx subsystem this function is called from. Can be
-- one of `"http"` or `"stream"`.
--
-- @function kong.nginx.get_subsystem
-- @phases any
-- @treturn string Subsystem, either `"http"` or `"stream"`.
-- @usage
-- kong.nginx.get_subsystem() -- "http"
function _NGINX.get_subsystem()
return ngx.config.subsystem
end
---
-- Returns various connection and request metrics exposed by
-- Nginx, similar to those reported by the
-- [ngx_http_stub_status_module](https://nginx.org/en/docs/http/ngx_http_stub_status_module.html#data).
--
-- The following fields are included in the returned table:
-- * `connections_active` - the current number of active client connections including `connections_waiting`.
-- * `connections_reading` - the current number of connections where nginx is reading the request header.
-- * `connections_writing` - the current number of connections where nginx is writing the response back to the client.
-- * `connections_waiting` - the current number of idle client connections waiting for a request.
-- * `connections_accepted` - the total number of accepted client connections.
-- * `connections_handled` - the total number of handled connections. Same as `connections_accepted` unless some resource limits have been reached
-- (for example, the [`worker_connections`](https://nginx.org/en/docs/ngx_core_module.html#worker_connections) limit).
-- * `total_requests` - the total number of client requests.
--
-- @function kong.nginx.get_statistics
-- @treturn table Nginx connections and requests statistics
-- @usage
-- local nginx_statistics = kong.nginx.get_statistics()
function _NGINX.get_statistics()
return {
connections_active = tonumber(C.ngx_stat_active[0]),
connections_reading = tonumber(C.ngx_stat_reading[0]),
connections_writing = tonumber(C.ngx_stat_writing[0]),
connections_waiting = tonumber(C.ngx_stat_waiting[0]),
connections_accepted = tonumber(C.ngx_stat_accepted[0]),
connections_handled = tonumber(C.ngx_stat_handled[0]),
total_requests = tonumber(C.ngx_stat_requests[0])
}
end
return _NGINX
end
return {
new = new,
}