Skip to content

Commit

Permalink
Add unit section to status endpoint
Browse files Browse the repository at this point in the history
Added unit section to /status endpoint. Unit section is about web-server version, config last load time and config update generation
Response example below:
{"unit":{"version":"1.32.0","load_time":"2024-01-25T13:24:08.000Z","generation":0},"connections":{"accepted":0,"active":0,"idle":0,"closed":0},"requests":{"total":0},"applications":{"laravel":{"processes":{"running":1,"starting":0,"idle":1},"requests":{"active":0}}}}
Closes: nginx#928
  • Loading branch information
Pavlusha311245 committed Jan 26, 2024
1 parent 02d1984 commit 2cb99ca
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 10 deletions.
18 changes: 15 additions & 3 deletions src/nxt_controller.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@
#include <nxt_conf.h>
#include <nxt_status.h>
#include <nxt_cert.h>
#include <nxt_script.h>


typedef struct {
nxt_conf_value_t *root;
Expand Down Expand Up @@ -1633,7 +1631,7 @@ nxt_controller_status_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg,
req = data;

if (msg->port_msg.type == NXT_PORT_MSG_RPC_READY) {
status = nxt_status_get((nxt_status_report_t *) msg->buf->mem.pos,
status = nxt_status_get(task, (nxt_status_report_t *) msg->buf->mem.pos,
req->conn->mem_pool);
} else {
status = NULL;
Expand Down Expand Up @@ -2432,6 +2430,9 @@ nxt_controller_conf_store(nxt_task_t *task, nxt_conf_value_t *conf)
nxt_buf_t *b;
nxt_port_t *main_port;
nxt_runtime_t *rt;
time_t rawtime;
u_char buffer[25];
struct tm *timeinfo;

rt = task->thread->runtime;

Expand Down Expand Up @@ -2466,6 +2467,17 @@ nxt_controller_conf_store(nxt_task_t *task, nxt_conf_value_t *conf)
NXT_PORT_MSG_CONF_STORE | NXT_PORT_MSG_CLOSE_FD,
fd, 0, -1, b);

rt->conf_gen++;

time(&rawtime);
timeinfo = gmtime(&rawtime); //convert to UTC
strftime((char*)buffer, 25, "%Y-%m-%dT%H:%M:%S.000Z", timeinfo);

rt->conf_ltime.length = nxt_strlen(buffer);
rt->conf_ltime.start = nxt_malloc(rt->conf_ltime.length + 1);

nxt_cpystr(rt->conf_ltime.start, buffer);

return;

fail:
Expand Down
13 changes: 13 additions & 0 deletions src/nxt_runtime.c
Original file line number Diff line number Diff line change
Expand Up @@ -777,6 +777,9 @@ nxt_runtime_conf_init(nxt_task_t *task, nxt_runtime_t *rt)
nxt_sockaddr_t *sa;
nxt_file_name_str_t file_name;
const nxt_event_interface_t *interface;
time_t rawtime;
u_char buffer[25];
struct tm *timeinfo;

rt->daemon = 1;
rt->engine_connections = 256;
Expand All @@ -789,6 +792,16 @@ nxt_runtime_conf_init(nxt_task_t *task, nxt_runtime_t *rt)
rt->state = NXT_STATEDIR;
rt->control = NXT_CONTROL_SOCK;
rt->tmp = NXT_TMPDIR;
rt->conf_gen = 0;

time(&rawtime);
timeinfo = gmtime(&rawtime); //convert to UTC
strftime((char*)buffer, 25, "%Y-%m-%dT%H:%M:%S.000Z", timeinfo);

rt->conf_ltime.length = nxt_strlen(buffer);
rt->conf_ltime.start = nxt_malloc(rt->conf_ltime.length + 1);

nxt_cpystr(rt->conf_ltime.start, buffer);

nxt_memzero(&rt->capabilities, sizeof(nxt_capabilities_t));

Expand Down
3 changes: 3 additions & 0 deletions src/nxt_runtime.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,9 @@ struct nxt_runtime_s {
const char *control;
const char *tmp;

nxt_int_t conf_gen;
nxt_str_t conf_ltime;

nxt_str_t certs;
nxt_str_t scripts;

Expand Down
32 changes: 26 additions & 6 deletions src/nxt_status.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,20 @@


nxt_conf_value_t *
nxt_status_get(nxt_status_report_t *report, nxt_mp_t *mp)
nxt_status_get(nxt_task_t *task, nxt_status_report_t *report, nxt_mp_t *mp)
{
size_t i;
nxt_str_t name;
nxt_runtime_t *rt;
nxt_int_t ret;
nxt_str_t name;
nxt_status_app_t *app;
nxt_str_t version;
nxt_conf_value_t *status, *obj, *apps, *app_obj;

static nxt_str_t unit_str = nxt_string("unit");
static nxt_str_t ver_str = nxt_string("version");
static nxt_str_t gen_str = nxt_string("generation");
static nxt_str_t lconf_str = nxt_string("last_configured");
static nxt_str_t conns_str = nxt_string("connections");
static nxt_str_t acc_str = nxt_string("accepted");
static nxt_str_t active_str = nxt_string("active");
Expand All @@ -29,17 +35,31 @@ nxt_status_get(nxt_status_report_t *report, nxt_mp_t *mp)
static nxt_str_t run_str = nxt_string("running");
static nxt_str_t start_str = nxt_string("starting");

status = nxt_conf_create_object(mp, 3);
rt = task->thread->runtime;

status = nxt_conf_create_object(mp, 4);
if (nxt_slow_path(status == NULL)) {
return NULL;
}

obj = nxt_conf_create_object(mp, 3);
if (nxt_slow_path(obj == NULL)) {
return NULL;
}

nxt_conf_set_member(status, &unit_str, obj, 0);

nxt_str_set(&version, NXT_VERSION);
nxt_conf_set_member_string(obj, &ver_str, &version, 0);
nxt_conf_set_member_string(obj, &lconf_str, &rt->conf_ltime, 1);
nxt_conf_set_member_integer(obj, &gen_str, rt->conf_gen, 2);

obj = nxt_conf_create_object(mp, 4);
if (nxt_slow_path(obj == NULL)) {
return NULL;
}

nxt_conf_set_member(status, &conns_str, obj, 0);
nxt_conf_set_member(status, &conns_str, obj, 1);

nxt_conf_set_member_integer(obj, &acc_str, report->accepted_conns, 0);
nxt_conf_set_member_integer(obj, &active_str, report->accepted_conns
Expand All @@ -53,7 +73,7 @@ nxt_status_get(nxt_status_report_t *report, nxt_mp_t *mp)
return NULL;
}

nxt_conf_set_member(status, &reqs_str, obj, 1);
nxt_conf_set_member(status, &reqs_str, obj, 2);

nxt_conf_set_member_integer(obj, &total_str, report->requests, 0);

Expand All @@ -62,7 +82,7 @@ nxt_status_get(nxt_status_report_t *report, nxt_mp_t *mp)
return NULL;
}

nxt_conf_set_member(status, &apps_str, apps, 2);
nxt_conf_set_member(status, &apps_str, apps, 3);

for (i = 0; i < report->apps_count; i++) {
app = &report->apps[i];
Expand Down
2 changes: 1 addition & 1 deletion src/nxt_status.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ typedef struct {
} nxt_status_report_t;


nxt_conf_value_t *nxt_status_get(nxt_status_report_t *report, nxt_mp_t *mp);
nxt_conf_value_t *nxt_status_get(nxt_task_t *task, nxt_status_report_t *report, nxt_mp_t *mp);


#endif /* _NXT_STATUS_H_INCLUDED_ */

0 comments on commit 2cb99ca

Please sign in to comment.