Add a trace archive location accessor to the session API
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 23 Aug 2018 23:03:54 +0000 (19:03 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 24 Aug 2018 01:15:18 +0000 (21:15 -0400)
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/bin/lttng-sessiond/session.c
src/bin/lttng-sessiond/session.h

index 16431ca15ca19d3cd3260ee99e6a4c5163232d35..a5b9a427835e8a580cb4faaf658b53247091a888 100644 (file)
@@ -28,6 +28,7 @@
 
 #include <common/common.h>
 #include <common/sessiond-comm/sessiond-comm.h>
+#include <lttng/location-internal.h>
 
 #include "session.h"
 #include "utils.h"
@@ -218,6 +219,48 @@ void session_get_net_consumer_ports(const struct ltt_session *session,
        *data_port = output->dst.net.data.port;
 }
 
+/*
+ * Get the location of the latest trace archive produced by a rotation.
+ *
+ * The caller must hold the session lock.
+ */
+struct lttng_trace_archive_location *session_get_trace_archive_location(
+               struct ltt_session *session)
+{
+       struct lttng_trace_archive_location *location = NULL;
+
+       if (session->rotation_state != LTTNG_ROTATION_STATE_COMPLETED) {
+               goto end;
+       }
+
+       switch (session_get_consumer_destination_type(session)) {
+       case CONSUMER_DST_LOCAL:
+               location = lttng_trace_archive_location_local_create(
+                               session->rotation_chunk.current_rotate_path);
+               break;
+       case CONSUMER_DST_NET:
+       {
+               const char *hostname;
+               uint16_t control_port, data_port;
+
+               hostname = session_get_net_consumer_hostname(session);
+               session_get_net_consumer_ports(session,
+                               &control_port,
+                               &data_port);
+               location = lttng_trace_archive_location_relay_create(
+                               hostname,
+                               LTTNG_TRACE_ARCHIVE_LOCATION_RELAY_PROTOCOL_TYPE_TCP,
+                               control_port, data_port,
+                               session->rotation_chunk.current_rotate_path);
+               break;
+       }
+       default:
+               abort();
+       }
+end:
+       return location;
+}
+
 /*
  * Allocate the ltt_sessions_ht_by_id HT.
  *
index 371b30d6be856444ac3afbcfaffe707d0a43a0cb..abbf9ece04a1a1b438287fda61f2f73f39a65f91 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <common/hashtable/hashtable.h>
 #include <lttng/rotation.h>
+#include <lttng/location.h>
 
 #include "snapshot.h"
 #include "trace-kernel.h"
@@ -224,6 +225,8 @@ const char *session_get_net_consumer_hostname(
 void session_get_net_consumer_ports(
                const struct ltt_session *session,
                uint16_t *control_port, uint16_t *data_port);
+struct lttng_trace_archive_location *session_get_trace_archive_location(
+               struct ltt_session *session);
 
 struct ltt_session *session_find_by_name(const char *name);
 struct ltt_session *session_find_by_id(uint64_t id);
This page took 0.026838 seconds and 4 git commands to generate.