Add trace_creation_datetime to the metadata env field babeltrace_trace_merging
authorJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Tue, 23 Apr 2019 16:14:03 +0000 (12:14 -0400)
committerJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Wed, 1 May 2019 21:22:48 +0000 (17:22 -0400)
This enable a viewer to get more information regarding the creation time
of a trace. This information is normally inferred from the trace
hierarchy.

The ABI expects an ISO8601 compliant string value. We leave the
formatting to the trace controller.

Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
lttng-abi.c
lttng-abi.h
lttng-events.c
lttng-events.h

index b9c173219d96db1b993e2f6c6c2a5d9bb4e9ab87..dc8b92365fa0067d6e307eeb684fd2d5f8f2a9ef 100644 (file)
@@ -508,6 +508,23 @@ int lttng_abi_session_set_name(struct lttng_session *session,
        return 0;
 }
 
+static
+int lttng_abi_session_set_creation_time(struct lttng_session *session,
+               struct lttng_kernel_session_creation_time *time)
+{
+       size_t len;
+
+       len = strnlen(time->iso8601, LTTNG_KERNEL_SESSION_CREATION_TIME_ISO8601_LEN);
+
+       if (len == LTTNG_KERNEL_SESSION_CREATION_TIME_ISO8601_LEN) {
+               /* Time is too long/malformed */
+               return -EINVAL;
+       }
+
+       strcpy(session->creation_time, time->iso8601);
+       return 0;
+}
+
 /**
  *     lttng_session_ioctl - lttng session fd ioctl
  *
@@ -627,6 +644,16 @@ long lttng_session_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                        return -EFAULT;
                return lttng_abi_session_set_name(session, &name);
        }
+       case LTTNG_KERNEL_SESSION_SET_CREATION_TIME:
+       {
+               struct lttng_kernel_session_creation_time time;
+
+               if (copy_from_user(&time,
+                               (struct lttng_kernel_session_creation_time __user *) arg,
+                               sizeof(struct lttng_kernel_session_creation_time)))
+                       return -EFAULT;
+               return lttng_abi_session_set_creation_time(session, &time);
+       }
        default:
                return -ENOIOCTLCMD;
        }
index 35070a5593ea2dc4dbbd883f9151f7eb7401c885..f61a6a15cdbd3195e4cc5b850696fef0b8908b64 100644 (file)
@@ -21,6 +21,7 @@
 
 #define LTTNG_KERNEL_SYM_NAME_LEN      256
 #define LTTNG_KERNEL_SESSION_NAME_LEN  256
+#define LTTNG_KERNEL_SESSION_CREATION_TIME_ISO8601_LEN 26
 
 enum lttng_kernel_instrumentation {
        LTTNG_KERNEL_TRACEPOINT = 0,
@@ -124,6 +125,10 @@ struct lttng_kernel_session_name {
        char name[LTTNG_KERNEL_SESSION_NAME_LEN];
 } __attribute__((packed));
 
+struct lttng_kernel_session_creation_time {
+       char iso8601[LTTNG_KERNEL_SESSION_CREATION_TIME_ISO8601_LEN];
+} __attribute__((packed));
+
 enum lttng_kernel_calibrate_type {
        LTTNG_KERNEL_CALIBRATE_KRETPROBE,
 };
@@ -238,6 +243,8 @@ struct lttng_kernel_filter_bytecode {
 #define LTTNG_KERNEL_SESSION_STATEDUMP         _IO(0xF6, 0x5C)
 #define LTTNG_KERNEL_SESSION_SET_NAME          \
        _IOR(0xF6, 0x5D, struct lttng_kernel_session_name)
+#define LTTNG_KERNEL_SESSION_SET_CREATION_TIME         \
+       _IOR(0xF6, 0x5E, struct lttng_kernel_session_creation_time)
 
 /* Channel FD ioctl */
 #define LTTNG_KERNEL_STREAM                    _IO(0xF6, 0x62)
index 2e7670b8c9d4b59d05c2fb02568326921da7bc3f..cf5302b494226f4826343ed153eeeea13543acba 100644 (file)
@@ -2514,15 +2514,16 @@ error:
 }
 
 static
-int print_metadata_session_name(struct lttng_session *session)
+int print_metadata_escaped_field(struct lttng_session *session, const char *field,
+               const char *field_value)
 {
        int ret;
 
-       ret = lttng_metadata_printf(session, "  trace_name = \"");
+       ret = lttng_metadata_printf(session, "  %s = \"", field);
        if (ret)
                goto error;
 
-       ret = print_escaped_ctf_string(session, session->name);
+       ret = print_escaped_ctf_string(session, field_value);
        if (ret)
                goto error;
 
@@ -2530,8 +2531,10 @@ int print_metadata_session_name(struct lttng_session *session)
 
 error:
        return ret;
+
 }
 
+
 /*
  * Output metadata into this session's metadata buffers.
  * Must be called with sessions_mutex held.
@@ -2619,7 +2622,11 @@ int _lttng_session_metadata_statedump(struct lttng_session *session)
        if (ret)
                goto end;
 
-       ret = print_metadata_session_name(session);
+       ret = print_metadata_escaped_field(session, "trace_name", session->name);
+       if (ret)
+               goto end;
+       ret = print_metadata_escaped_field(session, "trace_creation_datetime",
+                       session->creation_time);
        if (ret)
                goto end;
 
index 549f9002f7288a2c574790a8e44d76fd41d8315a..cdb520e8dd91fe07ae3f121a02f5fefe8ba52704 100644 (file)
@@ -522,6 +522,7 @@ struct lttng_session {
        /* Hash table of events */
        struct lttng_event_ht events_ht;
        char name[LTTNG_KERNEL_SESSION_NAME_LEN];
+       char creation_time[LTTNG_KERNEL_SESSION_CREATION_TIME_ISO8601_LEN];
 };
 
 struct lttng_metadata_cache {
This page took 0.029938 seconds and 5 git commands to generate.