On Mon, 2011-03-28 at 07:22 +0200, Willy Tarreau wrote:

> On Sun, Mar 27, 2011 at 09:28:15PM -0400, Roy Smith wrote:
> > Thanks!  Looks like "capture request header" does exactly what I want.
> > 
> > Well, mostly.  This gets me logging if the header exists.  Now I need to 
> > figure out how to insert the header if it doesn't (taking us back to the 
> > conversation we had in January).
> 
> Then maybe you just have to change the code in the early processing,
> just before the header captures ?


OK, this looks like it works.   I still need to do something smarter
about generating the unique ids (some combination of hostid, pid, and
time, and counter should do it), and adding a way to control this from
the config file.  Before I get too deep into this, does the following
patch (against haproxy-1.4.11) look reasonable for the basics?


--- a/src/proto_http.c  Sat Mar 26 12:38:10 2011 -0400
+++ b/src/proto_http.c  Mon Mar 28 13:41:04 2011 -0400
@@ -2713,6 +2713,19 @@
        /* transfer length unknown*/
        txn->flags &= ~TX_REQ_XFER_LEN;
 
+        /* 4b: Insert header for tracing, if needed */
+       ctx.idx = 0;
+        {
+                const char hdr[] = "X-Unique-Id";
+                const size_t hdr_len = sizeof(hdr);
+                if (! http_find_header(hdr, msg->sol, &txn->hdr_idx, &ctx)) {
+                        static int id_counter = 0;
+                        char hdr_val[hdr_len + sizeof(": 1234567890") + 1];
+                        snprintf(hdr_val, sizeof(hdr_val), "%s: %d", hdr, 
id_counter++);
+                        http_header_add_tail(req, &txn->req, &txn->hdr_idx, 
hdr_val);
+                }
+        }
+
        /* 5: we may need to capture headers */
        if (unlikely((s->logs.logwait & LW_REQHDR) && s->fe->req_cap))
                capture_headers(msg->sol, &txn->hdr_idx,
@@ -2757,7 +2770,6 @@
         */
 
        use_close_only = 0;
-       ctx.idx = 0;
        /* set TE_CHNK and XFER_LEN only if "chunked" is seen last */
        while ((txn->flags & TX_REQ_VER_11) &&
               http_find_header2("Transfer-Encoding", 17, msg->sol, 
&txn->hdr_idx, &ctx)) {


Reply via email to