Add --enable-embedded-help option to embed --help messages in binaries
[lttng-tools.git] / src / bin / lttng / utils.c
index d52d4622a9c3f3b1dfa34decf94d20bceaa8ecfa..06df5090ac767307eb37328d418c49b6fc7ca922 100644 (file)
@@ -15,7 +15,6 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#define _GNU_SOURCE
 #define _LGPL_SOURCE
 #include <assert.h>
 #include <stdlib.h>
 #include <signal.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
+#include <inttypes.h>
+#include <unistd.h>
 
 #include <common/error.h>
 #include <common/utils.h>
+#include <common/defaults.h>
 
 #include "conf.h"
 #include "utils.h"
@@ -401,3 +403,97 @@ error:
 error_socket:
        return ret;
 }
+
+int print_missing_or_multiple_domains(unsigned int sum)
+{
+       int ret = 0;
+
+       if (sum == 0) {
+               ERR("Please specify a domain (-k/-u/-j).");
+               ret = -1;
+       } else if (sum > 1) {
+               ERR("Multiple domains specified.");
+               ret = -1;
+       }
+
+       return ret;
+}
+
+/*
+ * Get the discarded events and lost packet counts.
+ */
+void print_session_stats(const char *session_name)
+{
+       int count, nb_domains, domain_idx, channel_idx;
+       struct lttng_domain *domains;
+       struct lttng_channel *channels;
+       uint64_t discarded_total = 0, lost_total = 0;
+
+       nb_domains = lttng_list_domains(session_name, &domains);
+       if (nb_domains < 0) {
+               goto end;
+       }
+       for (domain_idx = 0; domain_idx < nb_domains; domain_idx++) {
+               struct lttng_handle *handle = lttng_create_handle(session_name,
+                               &domains[domain_idx]);
+
+               if (!handle) {
+                       ERR("Failed to create session handle while printing session stats.");
+                       goto end;
+               }
+
+               count = lttng_list_channels(handle, &channels);
+               for (channel_idx = 0; channel_idx < count; channel_idx++) {
+                       int ret;
+                       uint64_t discarded = 0, lost = 0;
+                       struct lttng_channel *channel = &channels[channel_idx];
+
+                       ret = lttng_channel_get_discarded_event_count(channel,
+                                       &discarded);
+                       if (ret) {
+                               ERR("Failed to retrieve discarded event count from channel %s",
+                                               channel->name);
+                       }
+
+                       ret = lttng_channel_get_lost_packet_count(channel,
+                                       &lost);
+                       if (ret) {
+                               ERR("Failed to retrieve lost packet count from channel %s",
+                                               channel->name);
+                       }
+
+                       discarded_total += discarded;
+                       lost_total += lost;
+               }
+               lttng_destroy_handle(handle);
+       }
+       if (discarded_total > 0) {
+               MSG("[warning] %" PRIu64 " events discarded, please refer to "
+                               "the documentation on channel configuration.",
+                               discarded_total);
+       }
+       if (lost_total > 0) {
+               MSG("[warning] %" PRIu64 " packets lost, please refer to "
+                               "the documentation on channel configuration.",
+                               lost_total);
+       }
+
+end:
+       return;
+}
+
+int show_cmd_help(const char *cmd_name, const char *help_msg)
+{
+       int ret;
+       char page_name[32];
+
+       ret = sprintf(page_name, "lttng-%s", cmd_name);
+       assert(ret > 0 && ret < 32);
+       ret = utils_show_help(1, page_name, help_msg);
+       if (ret && !help_msg) {
+               ERR("Cannot view man page `lttng-%s(1)`", cmd_name);
+               perror("exec");
+       }
+
+       return ret;
+}
This page took 0.026772 seconds and 5 git commands to generate.