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