xref: /unit/src/nxt_status.c (revision 2185)
1*2185Svbart@nginx.com 
2*2185Svbart@nginx.com /*
3*2185Svbart@nginx.com  * Copyright (C) NGINX, Inc.
4*2185Svbart@nginx.com  */
5*2185Svbart@nginx.com 
6*2185Svbart@nginx.com #include <nxt_main.h>
7*2185Svbart@nginx.com #include <nxt_conf.h>
8*2185Svbart@nginx.com #include <nxt_status.h>
9*2185Svbart@nginx.com 
10*2185Svbart@nginx.com 
11*2185Svbart@nginx.com nxt_conf_value_t *
12*2185Svbart@nginx.com nxt_status_get(nxt_status_report_t *report, nxt_mp_t *mp)
13*2185Svbart@nginx.com {
14*2185Svbart@nginx.com     size_t            i;
15*2185Svbart@nginx.com     nxt_str_t         name;
16*2185Svbart@nginx.com     nxt_int_t         ret;
17*2185Svbart@nginx.com     nxt_status_app_t  *app;
18*2185Svbart@nginx.com     nxt_conf_value_t  *status, *obj, *apps, *app_obj;
19*2185Svbart@nginx.com 
20*2185Svbart@nginx.com     static nxt_str_t conns_str = nxt_string("connections");
21*2185Svbart@nginx.com     static nxt_str_t acc_str = nxt_string("accepted");
22*2185Svbart@nginx.com     static nxt_str_t active_str = nxt_string("active");
23*2185Svbart@nginx.com     static nxt_str_t idle_str = nxt_string("idle");
24*2185Svbart@nginx.com     static nxt_str_t closed_str = nxt_string("closed");
25*2185Svbart@nginx.com     static nxt_str_t reqs_str = nxt_string("requests");
26*2185Svbart@nginx.com     static nxt_str_t apps_str = nxt_string("applications");
27*2185Svbart@nginx.com     static nxt_str_t procs_str = nxt_string("processes");
28*2185Svbart@nginx.com     static nxt_str_t run_str = nxt_string("running");
29*2185Svbart@nginx.com     static nxt_str_t start_str = nxt_string("starting");
30*2185Svbart@nginx.com 
31*2185Svbart@nginx.com     status = nxt_conf_create_object(mp, 3);
32*2185Svbart@nginx.com     if (nxt_slow_path(status == NULL)) {
33*2185Svbart@nginx.com         return NULL;
34*2185Svbart@nginx.com     }
35*2185Svbart@nginx.com 
36*2185Svbart@nginx.com     obj = nxt_conf_create_object(mp, 4);
37*2185Svbart@nginx.com     if (nxt_slow_path(obj == NULL)) {
38*2185Svbart@nginx.com         return NULL;
39*2185Svbart@nginx.com     }
40*2185Svbart@nginx.com 
41*2185Svbart@nginx.com     nxt_conf_set_member(status, &conns_str, obj, 0);
42*2185Svbart@nginx.com 
43*2185Svbart@nginx.com     nxt_conf_set_member_integer(obj, &acc_str, report->accepted_conns, 0);
44*2185Svbart@nginx.com     nxt_conf_set_member_integer(obj, &active_str, report->accepted_conns
45*2185Svbart@nginx.com                                                   - report->closed_conns
46*2185Svbart@nginx.com                                                   - report->idle_conns, 1);
47*2185Svbart@nginx.com     nxt_conf_set_member_integer(obj, &idle_str, report->idle_conns, 2);
48*2185Svbart@nginx.com     nxt_conf_set_member_integer(obj, &closed_str, report->closed_conns, 3);
49*2185Svbart@nginx.com 
50*2185Svbart@nginx.com     obj = nxt_conf_create_object(mp, 0);
51*2185Svbart@nginx.com     if (nxt_slow_path(obj == NULL)) {
52*2185Svbart@nginx.com         return NULL;
53*2185Svbart@nginx.com     }
54*2185Svbart@nginx.com 
55*2185Svbart@nginx.com     nxt_conf_set_member(status, &reqs_str, obj, 1);
56*2185Svbart@nginx.com 
57*2185Svbart@nginx.com     apps = nxt_conf_create_object(mp, report->apps_count);
58*2185Svbart@nginx.com     if (nxt_slow_path(obj == NULL)) {
59*2185Svbart@nginx.com         return NULL;
60*2185Svbart@nginx.com     }
61*2185Svbart@nginx.com 
62*2185Svbart@nginx.com     nxt_conf_set_member(status, &apps_str, apps, 2);
63*2185Svbart@nginx.com 
64*2185Svbart@nginx.com     for (i = 0; i < report->apps_count; i++) {
65*2185Svbart@nginx.com         app = &report->apps[i];
66*2185Svbart@nginx.com 
67*2185Svbart@nginx.com         app_obj = nxt_conf_create_object(mp, 2);
68*2185Svbart@nginx.com         if (nxt_slow_path(app_obj == NULL)) {
69*2185Svbart@nginx.com             return NULL;
70*2185Svbart@nginx.com         }
71*2185Svbart@nginx.com 
72*2185Svbart@nginx.com         name.length = app->name.length;
73*2185Svbart@nginx.com         name.start = nxt_pointer_to(report, (uintptr_t) app->name.start);
74*2185Svbart@nginx.com 
75*2185Svbart@nginx.com         ret = nxt_conf_set_member_dup(apps, mp, &name, app_obj, i);
76*2185Svbart@nginx.com         if (nxt_slow_path(ret != NXT_OK)) {
77*2185Svbart@nginx.com             return NULL;
78*2185Svbart@nginx.com         }
79*2185Svbart@nginx.com 
80*2185Svbart@nginx.com         obj = nxt_conf_create_object(mp, 3);
81*2185Svbart@nginx.com         if (nxt_slow_path(app_obj == NULL)) {
82*2185Svbart@nginx.com             return NULL;
83*2185Svbart@nginx.com         }
84*2185Svbart@nginx.com 
85*2185Svbart@nginx.com         nxt_conf_set_member(app_obj, &procs_str, obj, 0);
86*2185Svbart@nginx.com 
87*2185Svbart@nginx.com         nxt_conf_set_member_integer(obj, &run_str, app->processes, 0);
88*2185Svbart@nginx.com         nxt_conf_set_member_integer(obj, &start_str, app->pending_processes, 1);
89*2185Svbart@nginx.com         nxt_conf_set_member_integer(obj, &idle_str, app->idle_processes, 2);
90*2185Svbart@nginx.com 
91*2185Svbart@nginx.com         obj = nxt_conf_create_object(mp, 1);
92*2185Svbart@nginx.com         if (nxt_slow_path(app_obj == NULL)) {
93*2185Svbart@nginx.com             return NULL;
94*2185Svbart@nginx.com         }
95*2185Svbart@nginx.com 
96*2185Svbart@nginx.com         nxt_conf_set_member(app_obj, &reqs_str, obj, 1);
97*2185Svbart@nginx.com 
98*2185Svbart@nginx.com         nxt_conf_set_member_integer(obj, &active_str, app->active_requests, 0);
99*2185Svbart@nginx.com     }
100*2185Svbart@nginx.com 
101*2185Svbart@nginx.com     return status;
102*2185Svbart@nginx.com }
103