]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: trace: add help message for -dt argument
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 7 Jan 2025 15:17:18 +0000 (16:17 +0100)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Fri, 10 Jan 2025 13:50:59 +0000 (14:50 +0100)
Traces can be activated on startup via -dt command line argument. To
facilitate its usage, display a usage description and examples when
"help" is specified.

src/haproxy.c
src/trace.c

index 96c483569d9e7ba7ab8cd9d37a51e5248717c862..91afc25d408b9175024e208bef16b27b65cf0749 100644 (file)
@@ -1513,10 +1513,18 @@ static void init_args(int argc, char **argv)
                        }
                        else if (*flag == 'd' && flag[1] == 't') {
                                if (argc > 1 && argv[1][0] != '-') {
-                                       if (trace_parse_cmd(argv[1], &err_msg)) {
-                                               ha_alert("-dt: %s.\n", err_msg);
-                                               ha_free(&err_msg);
-                                               exit(EXIT_FAILURE);
+                                       int ret = trace_parse_cmd(argv[1], &err_msg);
+                                       if (ret <= -1) {
+                                               if (ret < -1) {
+                                                       ha_alert("-dt: %s.\n", err_msg);
+                                                       ha_free(&err_msg);
+                                                       exit(EXIT_FAILURE);
+                                               }
+                                               else {
+                                                       printf("%s\n", err_msg);
+                                                       ha_free(&err_msg);
+                                                       exit(0);
+                                               }
                                        }
                                        argc--; argv++;
                                }
index 64af3705f3c71891089a2b2b899535dd82f424e3..43e36653d8f665c7adf4acec184b96e8d1a23bda 100644 (file)
@@ -977,11 +977,28 @@ int trace_parse_cmd(const char *arg_src, char **errmsg)
        char *saveptr;
 
        if (arg_src) {
+               if (strcmp(arg_src, "help") == 0) {
+                       memprintf(errmsg,
+                         "-dt activates traces on stderr output via the command-line.\n"
+                         "Without argument, all registered trace sources are activated with error level as filter.\n"
+                         "A list can be specified as argument to configure several trace sources with comma as separator.\n"
+                         "Each entry can contains the trace name, a log level and a verbosity using colon as separator.\n"
+                         "Every fields are optional and can be left empty, or with a colon to specify the next one.\n\n"
+                         "An empty name will activate all registered sources.\n"
+                         "Verbosity cannot be configured in this case except 'quiet' as their values are specific to each source.\n\n"
+                         "Examples:\n"
+                         "-dt           activate every sources on error level\n"
+                         "-dt h1        activate HTTP/1 traces on error level\n"
+                         "-dt h2:data   activate HTTP/2 traces on data level\n"
+                         "-dt quic::clean,qmux::minimal\n    activate both QUIC transport and MUX traces on error level with their custom verbosity\n");
+                       return -1;
+               }
+
                /* keep a copy of the ptr for strtok */
                oarg = arg = strdup(arg_src);
                if (!arg) {
                        memprintf(errmsg, "Can't allocate !");
-                       return 1;
+                       return -2;
                }
        }
 
@@ -1016,7 +1033,7 @@ int trace_parse_cmd(const char *arg_src, char **errmsg)
                        if (!src) {
                                memprintf(errmsg, "unknown trace source '%s'", name);
                                ha_free(&oarg);
-                               return 1;
+                               return -2;
                        }
                }
 
@@ -1039,7 +1056,7 @@ int trace_parse_cmd(const char *arg_src, char **errmsg)
                        if (level < 0) {
                                memprintf(errmsg, "no such trace level '%s', available levels are 'error', 'user', 'proto', 'state', 'data', and 'developer'", field);
                                ha_free(&oarg);
-                               return 1;
+                               return -2;
                        }
                }
 
@@ -1049,9 +1066,9 @@ int trace_parse_cmd(const char *arg_src, char **errmsg)
                /* 3. verbosity */
                field = str;
                if (strchr(field, ':')) {
-                       memprintf(errmsg, "too many double-colon separators in trace definition");
+                       memprintf(errmsg, "too many colon separators in trace definition");
                        ha_free(&oarg);
-                       return 1;
+                       return -2;
                }
 
                verbosity = trace_source_parse_verbosity(src, field);
@@ -1068,7 +1085,7 @@ int trace_parse_cmd(const char *arg_src, char **errmsg)
                        }
 
                        ha_free(&oarg);
-                       return 1;
+                       return -2;
                }
 
  parse: