static rstatus_t stats_make_rsp(struct stats *st) { rstatus_t status; uint32_t i; status = stats_add_header(st); if (status != NC_OK) { return status; } for (i = 0; i < array_n(&st->sum); i++) { struct stats_pool *stp = array_get(&st->sum, i); uint32_t j; status = stats_begin_nesting(st, &stp->name); if (status != NC_OK) { return status; } /* copy pool metric from sum(c) to buffer */ status = stats_copy_metric(st, &stp->metric); if (status != NC_OK) { return status; } for (j = 0; j < array_n(&stp->server); j++) { struct stats_server *sts = array_get(&stp->server, j); status = stats_begin_nesting(st, &sts->name); if (status != NC_OK) { return status; } /* copy server metric from sum(c) to buffer */ status = stats_copy_metric(st, &sts->metric); if (status != NC_OK) { return status; } status = stats_end_nesting(st); if (status != NC_OK) { return status; } } status = stats_end_nesting(st); if (status != NC_OK) { return status; } } status = stats_add_footer(st); if (status != NC_OK) { return status; } return NC_OK; }
static rstatus_t stats_make_rsp(struct stats *st) { rstatus_t status; uint32_t i; /* "service":"nutcracker", "source":"s10-2-20-2.hx", "version":"0.4.1", "uptime":25, "timestamp":1467272574, "total_connections":1, "curr_connections":1, */ status = stats_add_header(st); if (status != NC_OK) { return status; } /* 计算每个大server对应的相关统计项 */ for (i = 0; i < array_n(&st->sum); i++) { struct stats_pool *stp = array_get(&st->sum, i); uint32_t j; status = stats_begin_nesting(st, &stp->name); //把大server名,例如alpha delta放入st->buf中 if (status != NC_OK) { return status; } /* copy pool metric from sum(c) to buffer */ status = stats_copy_metric(st, &stp->metric); if (status != NC_OK) { return status; } for (j = 0; j < array_n(&stp->server); j++) {/* 一个大server,例如alpha对应的后端多个服务器的统计信息 */ struct stats_server *sts = array_get(&stp->server, j); status = stats_begin_nesting(st, &sts->name); if (status != NC_OK) { return status; } /* copy server metric from sum(c) to buffer */ status = stats_copy_metric(st, &sts->metric); if (status != NC_OK) { return status; } status = stats_end_nesting(st); if (status != NC_OK) { return status; } } status = stats_end_nesting(st); if (status != NC_OK) { return status; } } status = stats_add_footer(st); if (status != NC_OK) { return status; } return NC_OK; }