]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[MINOR] stats: make stats_dump_raw_to_buffer() use buffer_feed_chunk
authorWilly Tarreau <w@1wt.eu>
Sun, 4 Oct 2009 09:54:04 +0000 (11:54 +0200)
committerWilly Tarreau <w@1wt.eu>
Sun, 4 Oct 2009 10:17:54 +0000 (12:17 +0200)
Same as previous change. A remaining call to stats_dump_proxy()
still prevents us from completing the update.

include/proto/dumpstats.h
src/dumpstats.c

index 990c620d56a5c3597e1dfebd8331e8de2ea4bbf8..0ba3ae0b4c02b7f440790efc47cf31bed4a1ad65 100644 (file)
@@ -46,8 +46,7 @@
 
 int stats_sock_parse_request(struct stream_interface *si, char *line);
 void stats_io_handler(struct stream_interface *si);
-int stats_dump_raw(struct session *s, struct buffer *rep, struct uri_auth *uri);
-void stats_dump_raw_to_buffer(struct session *s, struct buffer *req);
+int stats_dump_raw_to_buffer(struct session *s, struct buffer *rep);
 int stats_dump_http(struct session *s, struct buffer *rep, struct uri_auth *uri);
 int stats_dump_proxy(struct session *s, struct proxy *px, struct uri_auth *uri);
 int stats_dump_sess_to_buffer(struct session *s, struct buffer *rep);
index d39bbcd3d7823c4d1ff78f3eaefd621b402bd798..25a0bcab01e951c628f75a41ca0026b629ce54b5 100644 (file)
@@ -417,9 +417,7 @@ void stats_io_handler(struct stream_interface *si)
                                        si->st0 = 1; // send prompt
                                break;
                        case 3: /* stats/info dump, should be split later ? */
-                               stats_dump_raw_to_buffer(s, res);
-                               si->ib->flags |= BF_READ_PARTIAL; /* remove this once we use buffer_feed */
-                               if (s->ana_state == STATS_ST_CLOSE)
+                               if (stats_dump_raw_to_buffer(s, res))
                                        si->st0 = 1; // end of command, send prompt
                                break;
                        case 4: /* sessions dump */
@@ -519,15 +517,14 @@ void stats_io_handler(struct stream_interface *si)
        }
 }
 
-/*
- * Produces statistics data for the session <s>. Expects to be called with
- * client socket shut down on input. It *may* make use of informations from
- * <uri>. s->data_ctx must have been zeroed first, and the flags properly set.
- * It returns 0 if it had to stop writing data and an I/O is needed, 1 if the
- * dump is finished and the session must be closed, or -1 in case of any error.
- * It automatically clears the HIJACK bit from the response buffer.
+/* This function is called to send output to the response buffer.
+ * It dumps statistics onto the output buffer <rep> owned by session <s>.
+ * s->data_ctx must have been zeroed first, and the flags properly set.
+ * It returns 0 as long as it does not complete, non-zero upon completion.
+ * Some states are not used but it makes the code more similar to other
+ * functions which handle stats too.
  */
-int stats_dump_raw(struct session *s, struct buffer *rep, struct uri_auth *uri)
+int stats_dump_raw_to_buffer(struct session *s, struct buffer *rep)
 {
        struct proxy *px;
        struct chunk msg;
@@ -537,16 +534,14 @@ int stats_dump_raw(struct session *s, struct buffer *rep, struct uri_auth *uri)
 
        switch (s->data_state) {
        case DATA_ST_INIT:
-               /* the function had not been called yet, let's prepare the
-                * buffer for a response.
-                */
+               /* the function had not been called yet */
                s->data_state = DATA_ST_HEAD;
                /* fall through */
 
        case DATA_ST_HEAD:
                if (s->data_ctx.stats.flags & STAT_SHOW_STAT) {
                        print_csv_header(&msg);
-                       if (buffer_write_chunk(rep, &msg) >= 0)
+                       if (buffer_feed_chunk(rep, &msg) >= 0)
                                return 0;
                }
 
@@ -590,7 +585,7 @@ int stats_dump_raw(struct session *s, struct buffer *rep, struct uri_auth *uri)
                                     nb_tasks_cur, run_queue_cur,
                                     global.node, global.desc?global.desc:""
                                     );
-                       if (buffer_write_chunk(rep, &msg) >= 0)
+                       if (buffer_feed_chunk(rep, &msg) >= 0)
                                return 0;
                }
 
@@ -610,9 +605,11 @@ int stats_dump_raw(struct session *s, struct buffer *rep, struct uri_auth *uri)
                                px = s->data_ctx.stats.px;
                                /* skip the disabled proxies and non-networked ones */
                                if (px->state != PR_STSTOPPED &&
-                                   (px->cap & (PR_CAP_FE | PR_CAP_BE)))
+                                   (px->cap & (PR_CAP_FE | PR_CAP_BE))) {
+                                       rep->flags |= BF_READ_PARTIAL; /* remove this once stats_dump_proxy uses buffer_feed */
                                        if (stats_dump_proxy(s, px, NULL) == 0)
                                                return 0;
+                               }
 
                                s->data_ctx.stats.px = px->next;
                                s->data_ctx.stats.px_st = DATA_ST_PX_INIT;
@@ -628,32 +625,16 @@ int stats_dump_raw(struct session *s, struct buffer *rep, struct uri_auth *uri)
                /* fall through */
 
        case DATA_ST_FIN:
-               buffer_stop_hijack(rep);
                return 1;
 
        default:
                /* unknown state ! */
-               buffer_stop_hijack(rep);
-               return -1;
+               s->data_state = DATA_ST_FIN;
+               return 1;
        }
 }
 
 
-/* This function is called to send output to the response buffer. It simply
- * calls stats_dump_raw(), and releases the buffer's hijack bit when the dump
- * is finished.
- */
-void stats_dump_raw_to_buffer(struct session *s, struct buffer *rep)
-{
-       if (s->ana_state != STATS_ST_REP)
-               return;
-
-       if (stats_dump_raw(s, rep, NULL) != 0)
-               s->ana_state = STATS_ST_CLOSE;
-       return;
-}
-
-
 /*
  * Produces statistics data for the session <s>. Expects to be called with
  * client socket shut down on input. It stops by itself by unsetting the