Skip to content

Commit febcf07

Browse files
wpjunioru5surf
authored andcommitted
feat: add support for 'other' status code in traffic status display
1 parent 9c1ac62 commit febcf07

6 files changed

+25
-21
lines changed

src/ngx_http_vhost_traffic_status_display_json.c

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -113,18 +113,17 @@ ngx_http_vhost_traffic_status_display_set_server_node(
113113
if (ctx->measure_status_codes != NULL && vtsn->stat_status_code_counter != NULL) {
114114
buf = ngx_sprintf(buf, NGX_HTTP_VHOST_TRAFFIC_STATUS_JSON_FMT_SERVER_STATUS_CODE_START);
115115

116+
buf = ngx_sprintf(buf, NGX_HTTP_VHOST_TRAFFIC_STATUS_JSON_FMT_SERVER_OTHER_STATUS_CODE,
117+
vtsn->stat_status_code_counter[0]);
118+
116119
ngx_uint_t *status_codes = (ngx_uint_t *) ctx->measure_status_codes->elts;
117-
ngx_uint_t inserted = 0;
120+
118121
for (ngx_uint_t i = 0; i < ctx->measure_status_codes->nelts; i++) {
119-
if (vtsn->stat_status_code_counter[i] == 0 && ctx->measure_all_status_codes) {
122+
if (vtsn->stat_status_code_counter[i+1] == 0 && ctx->measure_all_status_codes) {
120123
continue;
121124
}
122-
if (inserted > 0) {
123-
buf = ngx_sprintf(buf, NGX_HTTP_VHOST_TRAFFIC_STATUS_JSON_FMT_SERVER_STATUS_SEPARATOR);
124-
}
125125
buf = ngx_sprintf(buf, NGX_HTTP_VHOST_TRAFFIC_STATUS_JSON_FMT_SERVER_STATUS_CODE,
126-
status_codes[i], vtsn->stat_status_code_counter[i]);
127-
inserted++;
126+
status_codes[i], vtsn->stat_status_code_counter[i+1]);
128127
}
129128

130129
buf = ngx_sprintf(buf, NGX_HTTP_VHOST_TRAFFIC_STATUS_JSON_FMT_SERVER_STATUS_CODE_END);
@@ -249,7 +248,7 @@ ngx_http_vhost_traffic_status_display_set_server(ngx_http_request_t *r,
249248
if (ctx->measure_status_codes != NULL && vtsn->stat_status_code_counter != NULL) {
250249
ngx_http_vhost_traffic_status_status_code_merge(
251250
vtscf->stats.stat_status_code_counter,
252-
vtsn->stat_status_code_counter, ctx->measure_status_codes->nelts);
251+
vtsn->stat_status_code_counter, ctx->measure_status_codes->nelts+1);
253252
}
254253

255254
vtscf->stats.stat_request_counter_oc += vtsn->stat_request_counter_oc;
@@ -938,7 +937,7 @@ ngx_http_vhost_traffic_status_display_set(ngx_http_request_t *r,
938937
ngx_http_vhost_traffic_status_node_time_queue_init(&vtscf->stats.stat_request_times);
939938

940939
if (ctx->measure_status_codes != NULL) {
941-
vtscf->stats.stat_status_code_counter = ngx_pcalloc(r->pool, sizeof(ngx_atomic_t) * ctx->measure_status_codes->nelts);
940+
vtscf->stats.stat_status_code_counter = ngx_pcalloc(r->pool, sizeof(ngx_atomic_t) * (ctx->measure_status_codes->nelts +1));
942941
vtscf->stats.stat_status_code_length = ctx->measure_status_codes->nelts;
943942
}
944943

src/ngx_http_vhost_traffic_status_display_json.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,8 @@
121121
#endif
122122

123123
#define NGX_HTTP_VHOST_TRAFFIC_STATUS_JSON_FMT_SERVER_STATUS_CODE_START "\"statusCodes\":{"
124-
#define NGX_HTTP_VHOST_TRAFFIC_STATUS_JSON_FMT_SERVER_STATUS_CODE "\"%uA\":%uA"
125-
#define NGX_HTTP_VHOST_TRAFFIC_STATUS_JSON_FMT_SERVER_STATUS_SEPARATOR ","
124+
#define NGX_HTTP_VHOST_TRAFFIC_STATUS_JSON_FMT_SERVER_STATUS_CODE ",\"%uA\":%uA"
125+
#define NGX_HTTP_VHOST_TRAFFIC_STATUS_JSON_FMT_SERVER_OTHER_STATUS_CODE "\"other\":%uA"
126126
#define NGX_HTTP_VHOST_TRAFFIC_STATUS_JSON_FMT_SERVER_STATUS_CODE_END "}, "
127127

128128
#define NGX_HTTP_VHOST_TRAFFIC_STATUS_JSON_FMT_FILTER_S "\"filterZones\":{"

src/ngx_http_vhost_traffic_status_display_prometheus.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,17 @@ ngx_http_vhost_traffic_status_display_prometheus_set_server_node(
8080

8181
if (ctx->measure_status_codes != NULL && vtsn->stat_status_code_counter != NULL) {
8282
ngx_uint_t *status_codes = (ngx_uint_t *) ctx->measure_status_codes->elts;
83+
84+
buf = ngx_sprintf(buf, NGX_HTTP_VHOST_TRAFFIC_STATUS_PROMETHEUS_FMT_SERVER_OTHER_STATUS_CODE,
85+
&server, vtsn->stat_status_code_counter[0]);
86+
8387
for (ngx_uint_t i = 0; i < ctx->measure_status_codes->nelts; i++) {
84-
if (vtsn->stat_status_code_counter[i] == 0 && ctx->measure_all_status_codes) {
88+
if (vtsn->stat_status_code_counter[i+1] == 0 && ctx->measure_all_status_codes) {
8589
continue;
8690
}
8791

8892
buf = ngx_sprintf(buf, NGX_HTTP_VHOST_TRAFFIC_STATUS_PROMETHEUS_FMT_SERVER_STATUS_CODE,
89-
&server, status_codes[i], vtsn->stat_status_code_counter[i]);
93+
&server, status_codes[i], vtsn->stat_status_code_counter[i+1]);
9094
}
9195
}
9296

@@ -174,7 +178,7 @@ ngx_http_vhost_traffic_status_display_prometheus_set_server(ngx_http_request_t *
174178

175179
if (ctx->measure_status_codes != NULL && vtsn->stat_status_code_counter != NULL) {
176180
ngx_http_vhost_traffic_status_status_code_merge(vtscf->stats.stat_status_code_counter,
177-
vtsn->stat_status_code_counter, ctx->measure_status_codes->nelts);
181+
vtsn->stat_status_code_counter, ctx->measure_status_codes->nelts+1);
178182
}
179183

180184
#if (NGX_HTTP_CACHE)
@@ -518,7 +522,7 @@ ngx_http_vhost_traffic_status_display_prometheus_set(ngx_http_request_t *r,
518522
ngx_http_vhost_traffic_status_node_time_queue_init(&vtscf->stats.stat_request_times);
519523

520524
if (ctx->measure_status_codes != NULL) {
521-
vtscf->stats.stat_status_code_counter = ngx_pcalloc(r->pool, sizeof(ngx_atomic_t) * ctx->measure_status_codes->nelts);
525+
vtscf->stats.stat_status_code_counter = ngx_pcalloc(r->pool, sizeof(ngx_atomic_t) * (ctx->measure_status_codes->nelts+1));
522526
vtscf->stats.stat_status_code_length = ctx->measure_status_codes->nelts;
523527
}
524528

src/ngx_http_vhost_traffic_status_display_prometheus.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@
5858
"nginx_vts_server_request_seconds_total{host=\"%V\"} %.3f\n" \
5959
"nginx_vts_server_request_seconds{host=\"%V\"} %.3f\n"
6060

61+
#define NGX_HTTP_VHOST_TRAFFIC_STATUS_PROMETHEUS_FMT_SERVER_OTHER_STATUS_CODE \
62+
"nginx_vts_status_code_requests_total{host=\"%V\",code=\"other\"} %uA\n"
63+
6164
#define NGX_HTTP_VHOST_TRAFFIC_STATUS_PROMETHEUS_FMT_SERVER_STATUS_CODE \
6265
"nginx_vts_status_code_requests_total{host=\"%V\",code=\"%d\"} %uA\n"
6366

src/ngx_http_vhost_traffic_status_shm.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ ngx_http_vhost_traffic_status_shm_add_node(ngx_http_request_t *r,
106106
shpool = (ngx_slab_pool_t *) vtscf->shm_zone->shm.addr;
107107

108108

109-
status_code_slot = NGX_HTTP_VHOST_TRAFFIC_STATUS_STATUS_CODE_SLOT_UNDEFINED;
109+
status_code_slot = 0;
110110
if (ctx->measure_all_status_codes) {
111111
if (r->headers_out.status >= 100 && r->headers_out.status < 600) {
112112
status_code_slot = r->headers_out.status - 100;
@@ -164,7 +164,7 @@ ngx_http_vhost_traffic_status_shm_add_node(ngx_http_request_t *r,
164164
vtsn->ignore_status = vtscf->ignore_status;
165165

166166
if (ctx->measure_status_codes != NULL) {
167-
vtsn->stat_status_code_counter = ngx_slab_alloc_locked(shpool, sizeof(ngx_atomic_t) * ctx->measure_status_codes->nelts);
167+
vtsn->stat_status_code_counter = ngx_slab_alloc_locked(shpool, sizeof(ngx_atomic_t) * (ctx->measure_status_codes->nelts + 1));
168168
if (vtsn->stat_status_code_counter == NULL) {
169169
shm_info = ngx_pcalloc(r->pool, sizeof(ngx_http_vhost_traffic_status_shm_info_t));
170170
if (shm_info == NULL) {
@@ -574,11 +574,11 @@ ngx_http_vhost_traffic_status_find_status_code_slot(ngx_uint_t status, ngx_array
574574
if (found == NULL) {
575575
ngx_log_error(NGX_LOG_DEBUG, ngx_cycle->log, 0,
576576
"Status code %ui not found in status_codes array", status);
577-
return NGX_HTTP_VHOST_TRAFFIC_STATUS_STATUS_CODE_SLOT_UNDEFINED;
577+
return 0;
578578
}
579579

580580
ngx_int_t index = (ngx_int_t)(found - (ngx_uint_t *)status_codes->elts);
581-
return index;
581+
return index + 1;
582582
}
583583

584584
#if (NGX_HTTP_CACHE)

src/ngx_http_vhost_traffic_status_shm.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ typedef struct {
1818
ngx_uint_t filter_used_node;
1919
} ngx_http_vhost_traffic_status_shm_info_t;
2020

21-
#define NGX_HTTP_VHOST_TRAFFIC_STATUS_STATUS_CODE_SLOT_UNDEFINED -1
22-
2321
ngx_int_t ngx_http_vhost_traffic_status_shm_add_server(ngx_http_request_t *r);
2422
ngx_int_t ngx_http_vhost_traffic_status_shm_add_filter(ngx_http_request_t *r);
2523
ngx_int_t ngx_http_vhost_traffic_status_shm_add_upstream(ngx_http_request_t *r);

0 commit comments

Comments
 (0)