#include "common.h"
#include "network-live.h"
-#include "lttng-index.h"
+#define NET_URL_PREFIX "net://"
+#define NET4_URL_PREFIX "net4://"
+#define NET6_URL_PREFIX "net6://"
#define DEFAULT_FILE_ARRAY_SIZE 1
const char *opt_input_path;
-static int opt_textdump;
-static int opt_child;
-static int opt_begin;
+int opt_textdump;
+int opt_child;
+int opt_begin;
int quit = 0;
void usage(FILE *fp)
{
fprintf(fp, "LTTngTop %s\n\n", VERSION);
- fprintf(fp, "Usage : lttngtop [OPTIONS] [TRACE]\n");
- fprintf(fp, " TRACE Path to the trace to analyse (no trace path for live tracing)\n");
+ fprintf(fp, "Usage : lttngtop [OPTIONS] TRACE\n");
+ fprintf(fp, " TRACE Path to the trace to analyse (-r for network live tracing, nothing for mmap live streaming)\n");
fprintf(fp, " -h, --help This help message\n");
fprintf(fp, " -t, --textdump Display live events in text-only\n");
fprintf(fp, " -p, --pid Comma-separated list of PIDs to display\n");
fprintf(fp, " -f, --child Follow threads associated with selected PIDs\n");
fprintf(fp, " -n, --hostname Comma-separated list of hostnames to display (require hostname context in trace)\n");
fprintf(fp, " -k, --kprobes Comma-separated list of kprobes to insert (same format as lttng enable-event)\n");
+ fprintf(fp, " -r, --relay-hostname Network live streaming : hostname of the lttng-relayd (default port)\n");
+ fprintf(fp, " -b, --begin Network live streaming : read the trace for the beginning of the recording\n");
}
/*
char * const paths[2] = { lpath, NULL };
int ret = -1;
+ if ((strncmp(path, NET4_URL_PREFIX, sizeof(NET4_URL_PREFIX) - 1)) == 0 ||
+ (strncmp(path, NET6_URL_PREFIX, sizeof(NET6_URL_PREFIX) - 1)) == 0 ||
+ (strncmp(path, NET_URL_PREFIX, sizeof(NET_URL_PREFIX) - 1)) == 0) {
+ ret = bt_context_add_trace(ctx,
+ path, format_str, packet_seek, NULL, NULL);
+ if (ret < 0) {
+ fprintf(stderr, "[warning] [Context] cannot open trace \"%s\" "
+ "for reading.\n", path);
+ /* Allow to skip erroneous traces. */
+ ret = 1; /* partial error */
+ }
+ return ret;
+ }
/*
* Need to copy path, because fts_open can change it.
* It is the pointer array, not the strings, that are constant.
goto end;
#else
- fprintf(stderr, "Mmap live support not compiled\n");
+ fprintf(stderr, "[ERROR] Mmap live support not compiled, specify a "
+ "trace directory or -r <relayd hostname/IP>\n");
+ usage(stdout);
+ ret = -1;
goto end;
#endif /* LTTNGTOP_MMAP_LIVE */
} else if (!opt_input_path && remote_live) {
/* network live */
+#if 0
ret = setup_network_live(opt_relay_hostname, opt_begin);
if (ret < 0) {
goto end;
if (ret < 0) {
goto end;
}
+#endif
+
+ bt_ctx = bt_context_create();
+ ret = bt_context_add_traces_recursive(bt_ctx, opt_relay_hostname,
+ "lttng-live", NULL);
+ if (ret < 0) {
+ fprintf(stderr, "[error] Opening the trace\n");
+ goto end;
+ }
} else {
//init_lttngtop();
fprintf(stderr, "[error] Opening the trace\n");
goto end;
}
- }
- ret = check_requirements(bt_ctx);
- if (ret < 0) {
- fprintf(stderr, "[error] some mandatory contexts were missing, exiting.\n");
- goto end;
- }
- if (!opt_textdump) {
- pthread_create(&display_thread, NULL, ncurses_display, (void *) NULL);
- pthread_create(&timer_thread, NULL, refresh_thread, (void *) NULL);
+ ret = check_requirements(bt_ctx);
+ if (ret < 0) {
+ fprintf(stderr, "[error] some mandatory contexts "
+ "were missing, exiting.\n");
+ goto end;
+ }
+
+ if (!opt_textdump) {
+ pthread_create(&display_thread, NULL, ncurses_display,
+ (void *) NULL);
+ pthread_create(&timer_thread, NULL, refresh_thread,
+ (void *) NULL);
+ }
+
+ iter_trace(bt_ctx);
}
- iter_trace(bt_ctx);
pthread_join(display_thread, NULL);
quit = 1;
pthread_join(timer_thread, NULL);
+ ret = 0;
+
end:
if (bt_ctx)
bt_context_put(bt_ctx);
- return 0;
+ return ret;
}