From 439ea30c2f13921a2d5769d5d002833965d82528 Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Mon, 10 Jul 2023 10:38:52 -0700 Subject: [PATCH] libsysprof-profile: add more system information as metadata --- src/libsysprof-profile/sysprof-recording.c | 33 +++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/libsysprof-profile/sysprof-recording.c b/src/libsysprof-profile/sysprof-recording.c index 0aa0ee8f..247a7a72 100644 --- a/src/libsysprof-profile/sysprof-recording.c +++ b/src/libsysprof-profile/sysprof-recording.c @@ -20,6 +20,8 @@ #include "config.h" +#include + #include #include "sysprof-diagnostic-private.h" @@ -114,6 +116,18 @@ add_metadata (SysprofRecording *self, -1, -1, id, value, -1); } +static inline void +add_metadata_int (SysprofRecording *self, + const char *id, + int value) +{ + char str[16]; + g_snprintf (str, sizeof str, "%d", value); + sysprof_capture_writer_add_metadata (self->writer, + SYSPROF_CAPTURE_CURRENT_TIME, + -1, -1, id, str, -1); +} + static DexFuture * sysprof_recording_fiber (gpointer user_data) { @@ -123,6 +137,7 @@ sysprof_recording_fiber (gpointer user_data) g_autoptr(DexFuture) monitor = NULL; g_autoptr(DexFuture) message = NULL; g_autoptr(GError) error = NULL; + struct utsname uts; gint64 begin_time; gint64 end_time; @@ -153,15 +168,31 @@ sysprof_recording_fiber (gpointer user_data) else monitor = dex_future_new_infinite (); - /* Track various metadata */ + /* Track various app metadata */ add_metadata (self, "org.gnome.sysprof.app-id", APP_ID_S); add_metadata (self, "org.gnome.sysprof.version", PACKAGE_VERSION); + + /* Include some host/kernel/arch information */ + add_metadata_int (self, "n-cpu", g_get_num_processors ()); + add_metadata_int (self, "page-size", sysprof_getpagesize ()); + add_metadata_int (self, "buffer-size", sysprof_capture_writer_get_buffer_size (self->writer)); + if (uname (&uts) == 0) + { + add_metadata (self, "uname.sysname", uts.sysname); + add_metadata (self, "uname.release", uts.release); + add_metadata (self, "uname.version", uts.version); + add_metadata (self, "uname.machine", uts.machine); + } + + /* Some environment variables/info for correlating */ add_metadata (self, "USER", g_get_user_name ()); add_metadata (self, "DISPLAY", g_getenv ("DISPLAY")); add_metadata (self, "WAYLAND_DISPLAY", g_getenv ("WAYLAND_DISPLAY")); add_metadata (self, "DESKTOP_SESSION", g_getenv ("DESKTOP_SESSION")); add_metadata (self, "HOSTTYPE", g_getenv ("HOSTTYPE")); add_metadata (self, "OSTYPE", g_getenv ("OSTYPE")); + + /* Save a copy of os-release for troubleshooting */ dex_await (_sysprof_recording_add_file (self, "/etc/os-release", FALSE), NULL); self->start_time = g_get_monotonic_time ();