]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: log: add the %Td log-format specifier
authorWilly Tarreau <w@1wt.eu>
Tue, 17 May 2016 15:55:27 +0000 (17:55 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 17 May 2016 16:04:30 +0000 (18:04 +0200)
As suggested by Pavlos, it's too bad that we didn't have a %Td log
format tag given that there are a few mentions of Td corresponding
to the data transmission time already in the doc, so this is now done.
Just like the other specifiers, we report -1 if the connection failed
before reaching the data transmission state.

doc/configuration.txt
include/types/log.h
src/log.c

index 80b9c017f6462da1943d239aa679e3bb8bf2ae78..1099695dff86c9e4b8c5f72931c0b47044df46bf 100644 (file)
@@ -14699,6 +14699,7 @@ Please refer to the table below for currently defined variables :
   |   | %ST  | status_code                                   | numeric     |
   |   | %T   | gmt_date_time                                 | date        |
   |   | %Tc  | Tc                                            | numeric     |
+  |   | %Td  | Td = Tt - (Tq + Tw + Tc + Tr)                 | numeric     |
   |   | %Tl  | local_date_time                               | date        |
   | H | %Tq  | Tq                                            | numeric     |
   | H | %Tr  | Tr                                            | numeric     |
index e9740869ac2c5c8eeeae97064cf0d9ec2f6d9d54..25d872edc6a8ea8612f55adb314673b05126a6b2 100644 (file)
@@ -81,6 +81,7 @@ enum {
        LOG_FMT_TW,
        LOG_FMT_TC,
        LOG_FMT_TR,
+       LOG_FMT_TD,
        LOG_FMT_TT,
        LOG_FMT_STATUS,
        LOG_FMT_CCLIENT,
index 2d022470420a4dd35bc95a55c909b37c04123faa..99c89f34d4ec8b7f359603e7f706a4ff6edaf704 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -127,6 +127,7 @@ static const struct logformat_type logformat_keywords[] = {
        { "Tl", LOG_FMT_DATELOCAL, PR_MODE_TCP, LW_INIT, NULL },   /* date local timezone */
        { "Tq", LOG_FMT_TQ, PR_MODE_HTTP, LW_BYTES, NULL },       /* Tq */
        { "Tr", LOG_FMT_TR, PR_MODE_HTTP, LW_BYTES, NULL },       /* Tr */
+       { "Td", LOG_FMT_TD, PR_MODE_TCP, LW_BYTES, NULL },       /* Td = Tt - (Tq + Tw + Tc + Tr) */
        { "Ts", LOG_FMT_TS, PR_MODE_TCP, LW_INIT, NULL },   /* timestamp GMT */
        { "Tt", LOG_FMT_TT, PR_MODE_TCP, LW_BYTES, NULL },       /* Tt */
        { "Tw", LOG_FMT_TW, PR_MODE_TCP, LW_BYTES, NULL },       /* Tw */
@@ -1655,6 +1656,19 @@ int build_logline(struct stream *s, char *dst, size_t maxsize, struct list *list
                                last_isspace = 0;
                                break;
 
+                       case LOG_FMT_TD: // %Td
+                               if (s->be->mode == PR_MODE_HTTP)
+                                       ret = ltoa_o((s->logs.t_data >= 0) ? s->logs.t_close - s->logs.t_data : -1,
+                                                    tmplog, dst + maxsize - tmplog);
+                               else
+                                       ret = ltoa_o((s->logs.t_connect >= 0) ? s->logs.t_close - s->logs.t_connect : -1,
+                                                    tmplog, dst + maxsize - tmplog);
+                               if (ret == NULL)
+                                       goto out;
+                               tmplog = ret;
+                               last_isspace = 0;
+                               break;
+
                        case LOG_FMT_TT:  // %Tt
                                if (!(fe->to_log & LW_BYTES))
                                        LOGCHAR('+');