struct lttng_live_component *lttng_live;
+ GString *hostname;
+ GString *session_name;
+
uint64_t id;
/* List of struct lttng_live_trace */
enum bt_ctf_lttng_live_iterator_status lttng_live_get_new_streams(
struct lttng_live_session *session);
-int lttng_live_add_session(struct lttng_live_component *lttng_live, uint64_t session_id);
+int lttng_live_add_session(struct lttng_live_component *lttng_live,
+ uint64_t session_id,
+ const char *hostname,
+ const char *session_name);
ssize_t lttng_live_get_one_metadata_packet(struct lttng_live_trace *trace,
FILE *fp);
}
BT_HIDDEN
-int lttng_live_add_session(struct lttng_live_component *lttng_live, uint64_t session_id)
+int lttng_live_add_session(struct lttng_live_component *lttng_live,
+ uint64_t session_id, const char *hostname,
+ const char *session_name)
{
int ret = 0;
struct lttng_live_session *s;
BT_INIT_LIST_HEAD(&s->traces);
s->lttng_live = lttng_live;
s->new_streams_needed = true;
+ s->hostname = g_string_new(hostname);
+ s->session_name = g_string_new(session_name);
- BT_LOGI("Reading from session %" PRIu64, s->id);
+ BT_LOGI("Reading from session: %" PRIu64 " hostname: %s session_name: %s",
+ s->id, hostname, session_name);
bt_list_add(&s->node, <tng_live->sessions);
goto end;
error:
lttng_live_close_trace_streams(trace);
}
bt_list_del(&session->node);
+ if (session->hostname) {
+ g_string_free(session->hostname, TRUE);
+ }
+ if (session->session_name) {
+ g_string_free(session->session_name, TRUE);
+ }
g_free(session);
}
BT_HIDDEN
int lttng_live_metadata_create_stream(struct lttng_live_session *session,
uint64_t ctf_trace_id,
- uint64_t stream_id)
+ uint64_t stream_id,
+ const char *trace_name)
{
struct lttng_live_metadata *metadata = NULL;
struct lttng_live_trace *trace;
+ const char *match;
metadata = g_new0(struct lttng_live_metadata, 1);
if (!metadata) {
}
metadata->stream_id = stream_id;
//TODO: add clock offset option
- //TODO: add (preferably unique) trace's name
+ match = strstr(trace_name, session->session_name->str);
+ if (!match) {
+ goto error;
+ }
metadata->decoder = ctf_metadata_decoder_create(stderr, 0,
- "lttng-live");
+ match);
if (!metadata->decoder) {
goto error;
}
#include "lttng-live-internal.h"
int lttng_live_metadata_create_stream(struct lttng_live_session *session,
- uint64_t ctf_trace_id,
- uint64_t stream_id);
+ uint64_t ctf_trace_id, uint64_t stream_id,
+ const char *trace_name);
enum bt_ctf_lttng_live_iterator_status lttng_live_metadata_update(
struct lttng_live_trace *trace);
lsession.session_name[LTTNG_VIEWER_NAME_MAX - 1] = '\0';
session_id = be64toh(lsession.id);
+ BT_LOGD("Adding session %" PRIu64 " hostname: %s session_name: %s",
+ session_id, lsession.hostname, lsession.session_name);
+
if ((strncmp(lsession.session_name,
viewer_connection->session_name->str,
MAXNAMLEN) == 0) && (strncmp(lsession.hostname,
viewer_connection->target_hostname->str,
MAXNAMLEN) == 0)) {
- if (lttng_live_add_session(lttng_live, session_id)) {
+ if (lttng_live_add_session(lttng_live, session_id,
+ lsession.hostname,
+ lsession.session_name)) {
goto error;
}
}
stream_id, stream.path_name,
stream.channel_name);
if (lttng_live_metadata_create_stream(session,
- ctf_trace_id, stream_id)) {
+ ctf_trace_id, stream_id,
+ stream.path_name)) {
BT_LOGE("Error creating metadata stream");
goto error;