[tracker] libtracker-common: Added D-Bus client lookup for logging



commit 33797efda9f393edfe0edc3cc0bc4ebb5d5b5358
Author: Martyn Russell <martyn lanedo com>
Date:   Mon Jan 11 18:51:33 2010 +0000

    libtracker-common: Added D-Bus client lookup for logging
    
    If verbosity is > 0 for tracker-store, the log will show:
    
    <--- [%d|%s] Hello World
    
    Where %d is the request ID and %s is the basename of the command that
    sent the D-Bus request in. For example "tracker-stats".

 src/libtracker-common/tracker-dbus.c        |  358 ++++++++++++++++++++++++---
 src/libtracker-common/tracker-dbus.h        |   10 +-
 src/libtracker-miner/tracker-miner.c        |   38 ++--
 src/plugins/kmail/tracker-kmail-registrar.c |   48 ++--
 src/tracker-extract/tracker-extract.c       |   59 +++--
 src/tracker-store/tracker-backup.c          |    6 +-
 src/tracker-store/tracker-main.c            |   24 ++
 src/tracker-store/tracker-resources.c       |   60 +++--
 src/tracker-store/tracker-statistics.c      |    4 +-
 tests/libtracker-common/tracker-dbus-test.c |    8 +-
 10 files changed, 490 insertions(+), 125 deletions(-)
---
diff --git a/src/libtracker-common/tracker-dbus.c b/src/libtracker-common/tracker-dbus.c
index fc642fa..a6925bf 100644
--- a/src/libtracker-common/tracker-dbus.c
+++ b/src/libtracker-common/tracker-dbus.c
@@ -21,17 +21,43 @@
 
 #include <gio/gio.h>
 
+#include <dbus/dbus-glib-bindings.h>
+
 #include "tracker-dbus.h"
 #include "tracker-log.h"
 
+/* How long clients can exist since last D-Bus call before being
+ * cleaned up.
+ */
+#define CLIENT_CLEAN_UP_TIME  300
+
+/* How often we check for stale client cache (in seconds) */
+#define CLIENT_CLEAN_UP_CHECK 60
+
 struct TrackerDBusRequestHandler {
 	TrackerDBusRequestFunc new;
 	TrackerDBusRequestFunc done;
 	gpointer               user_data;
 };
 
-static GSList   *hooks;
-static gboolean  block_hooks;
+typedef struct {
+	gchar *sender;
+	gchar *binary;
+	gulong pid;
+	GTimeVal last_time;
+} ClientData;
+
+static GSList *hooks;
+static gboolean block_hooks;
+
+static gboolean client_lookup_enabled;
+static DBusGConnection *freedesktop_connection;
+static DBusGProxy *freedesktop_proxy;
+static GHashTable *clients;
+static guint clients_clean_up_id;
+
+static void     client_data_free    (gpointer data);
+static gboolean clients_clean_up_cb (gpointer data);
 
 static void
 request_handler_call_for_new (guint request_id)
@@ -73,6 +99,226 @@ request_handler_call_for_done (guint request_id)
 	}
 }
 
+static gboolean
+clients_init (void)
+{
+	GError *error = NULL;
+	DBusGConnection *conn;
+
+	conn = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
+
+	if (!conn) {
+		g_critical ("Could not connect to the D-Bus session bus, %s",
+		            error ? error->message : "no error given.");
+		g_error_free (error);
+		return FALSE;
+	}
+
+	freedesktop_connection = dbus_g_connection_ref (conn);
+
+	freedesktop_proxy =
+		dbus_g_proxy_new_for_name (freedesktop_connection,
+		                           DBUS_SERVICE_DBUS,
+		                           DBUS_PATH_DBUS,
+		                           DBUS_INTERFACE_DBUS);
+
+	if (!freedesktop_proxy) {
+		g_critical ("Could not create a proxy for the Freedesktop service, %s",
+		            error ? error->message : "no error given.");
+		g_error_free (error);
+		return FALSE;
+	}
+
+	clients = g_hash_table_new_full (g_str_hash,
+	                                 g_str_equal,
+	                                 NULL,
+	                                 client_data_free);
+	clients_clean_up_id =
+		g_timeout_add_seconds (CLIENT_CLEAN_UP_CHECK, clients_clean_up_cb, NULL);
+
+	return TRUE;
+}
+
+static gboolean
+clients_shutdown (void)
+{
+	if (freedesktop_proxy) {
+		g_object_unref (freedesktop_proxy);
+		freedesktop_proxy = NULL;
+	}
+
+	if (freedesktop_connection) {
+		dbus_g_connection_unref (freedesktop_connection);
+		freedesktop_connection = NULL;
+	}
+
+	if (clients_clean_up_id != 0) {
+		g_source_remove (clients_clean_up_id);
+		clients_clean_up_id = 0;
+	}
+
+	if (clients) {
+		g_hash_table_unref (clients);
+		clients = NULL;
+	}
+
+	return TRUE;
+}
+
+static void
+client_data_free (gpointer data)
+{
+	ClientData *cd = data;
+
+	if (!cd) {
+		return;
+	}
+
+	g_free (cd->sender);
+	g_free (cd->binary);
+
+	g_slice_free (ClientData, cd);
+}
+
+static ClientData *
+client_data_new (gchar *sender)
+{
+	ClientData *cd;
+	GError *error = NULL;
+	guint pid;
+	gboolean get_binary = TRUE;
+
+	cd = g_slice_new0 (ClientData);
+	cd->sender = sender;
+
+	if (org_freedesktop_DBus_get_connection_unix_process_id (freedesktop_proxy,
+	                                                         sender,
+	                                                         &pid,
+	                                                         &error)) {
+		cd->pid = pid;
+	}
+
+	if (get_binary) {
+		gchar *filename;
+		gchar *pid_str;
+		gchar *contents = NULL;
+		GError *error = NULL;
+		gchar **strv;
+
+		pid_str = g_strdup_printf ("%ld", cd->pid);
+		filename = g_build_filename (G_DIR_SEPARATOR_S,
+		                             "proc",
+		                             pid_str,
+		                             "cmdline",
+		                             NULL);
+		g_free (pid_str);
+
+		if (!g_file_get_contents (filename, &contents, NULL, &error)) {
+			g_warning ("Could not get process name from id %ld, %s",
+			           cd->pid,
+			           error ? error->message : "no error given");
+			g_clear_error (&error);
+			g_free (filename);
+			return FALSE;
+		}
+
+		g_free (filename);
+
+		strv = g_strsplit (contents, "^@", 2);
+		if (strv && strv[0]) {
+			cd->binary = g_path_get_basename (strv[0]);
+		}
+
+		g_strfreev (strv);
+		g_free (contents);
+	}
+
+	return cd;
+}
+
+static gboolean
+clients_clean_up_cb (gpointer data)
+{
+	GTimeVal now;
+	GHashTableIter iter;
+	gpointer key, value;
+
+	g_get_current_time (&now);
+
+	g_hash_table_iter_init (&iter, clients);
+	while (g_hash_table_iter_next (&iter, &key, &value)) {
+		ClientData *cd;
+		glong diff;
+
+		cd = value;
+
+		diff = now.tv_sec - cd->last_time.tv_sec;
+
+		/* 5 Minutes */
+		if (diff >= CLIENT_CLEAN_UP_TIME) {
+			g_debug ("Removing D-Bus client data for '%s' with id:'%s'",
+			         cd->binary, cd->sender);
+			g_hash_table_iter_remove (&iter);
+		}
+	}
+
+	if (g_hash_table_size (clients) < 1) {
+		/* This must be before the clients_shutdown which will
+		 * attempt to clean up the the timeout too.
+		 */
+		clients_clean_up_id = 0;
+
+		/* Clean everything else up. */
+		clients_shutdown ();
+
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+static ClientData *
+client_get_for_context (DBusGMethodInvocation *context)
+{
+	ClientData *cd;
+	gchar *sender;
+
+	if (!client_lookup_enabled) {
+		return NULL;
+	}
+
+	/* Only really done with tracker-extract where we use
+	 * functions from the command line with dbus code in them.
+	 */
+	if (!context) {
+		return NULL;
+	}
+
+	/* Shame we have to allocate memory in any condition here,
+	 * sucky glib D-Bus API is to blame here :/
+	 */
+	sender = dbus_g_method_get_sender (context);
+
+	if (G_UNLIKELY (!clients)) {
+		clients_init ();
+
+		cd = client_data_new (sender);
+		g_hash_table_insert (clients, sender, cd);
+	} else {
+		cd = g_hash_table_lookup (clients, sender);
+
+		if (G_UNLIKELY (!cd)) {
+			cd = client_data_new (sender);
+			g_hash_table_insert (clients, sender, cd);
+		} else {
+			g_get_current_time (&cd->last_time);
+			g_free (sender);
+		}
+	}
+
+	return cd;
+}
+
 GValue *
 tracker_dbus_gvalue_slice_new (GType type)
 {
@@ -276,19 +522,25 @@ tracker_dbus_request_remove_hook (TrackerDBusRequestHandler *handler)
 }
 
 void
-tracker_dbus_request_new (gint          request_id,
-                          const gchar  *format,
+tracker_dbus_request_new (gint                   request_id,
+                          DBusGMethodInvocation *context,
+                          const gchar           *format,
                           ...)
 {
-	gchar   *str;
-	va_list  args;
+	ClientData *cd;
+	gchar *str;
+	va_list args;
 
 	va_start (args, format);
 	str = g_strdup_vprintf (format, args);
 	va_end (args);
 
-	g_debug ("<--- [%d] %s",
+	cd = client_get_for_context (context);
+
+	g_debug ("<--- [%d%s%s] %s",
 	         request_id,
+	         cd ? "|" : "",
+	         cd ? cd->binary : "",
 	         str);
 
 	g_free (str);
@@ -297,22 +549,31 @@ tracker_dbus_request_new (gint          request_id,
 }
 
 void
-tracker_dbus_request_success (gint request_id)
+tracker_dbus_request_success (gint                   request_id,
+                              DBusGMethodInvocation *context)
 {
+	ClientData *cd;
+
 	request_handler_call_for_done (request_id);
 
-	g_debug ("---> [%d] Success, no error given",
-	         request_id);
+	cd = client_get_for_context (context);
+
+	g_debug ("---> [%d%s%s] Success, no error given",
+	         request_id,
+	         cd ? "|" : "",
+	         cd ? cd->binary : "");
 }
 
 void
-tracker_dbus_request_failed (gint          request_id,
-                             GError      **error,
-                             const gchar  *format,
+tracker_dbus_request_failed (gint                    request_id,
+                             DBusGMethodInvocation  *context,
+                             GError                **error,
+                             const gchar            *format,
                              ...)
 {
-	gchar   *str;
-	va_list  args;
+	ClientData *cd;
+	gchar *str;
+	va_list args;
 
 	request_handler_call_for_done (request_id);
 
@@ -329,62 +590,84 @@ tracker_dbus_request_failed (gint          request_id,
 		g_warning ("Unset error and no error message.");
 	}
 
-	g_message ("---> [%d] Failed, %s",
+	cd = client_get_for_context (context);
+
+	g_message ("---> [%d%s%s] Failed, %s",
 	           request_id,
+	           cd ? "|" : "",
+	           cd ? cd->binary : "",
 	           str);
 	g_free (str);
 }
 
 void
-tracker_dbus_request_info (gint                 request_id,
-                           const gchar *format,
+tracker_dbus_request_info (gint                   request_id,
+                           DBusGMethodInvocation *context,
+                           const gchar           *format,
                            ...)
 {
-	gchar   *str;
-	va_list  args;
+	ClientData *cd;
+	gchar *str;
+	va_list args;
 
 	va_start (args, format);
 	str = g_strdup_vprintf (format, args);
 	va_end (args);
 
-	tracker_info ("---- [%d] %s",
+	cd = client_get_for_context (context);
+
+	tracker_info ("---- [%d%s%s] %s",
 	              request_id,
+	              cd ? "|" : "",
+	              cd ? cd->binary : "",
 	              str);
 	g_free (str);
 }
 
 void
-tracker_dbus_request_comment (gint         request_id,
-                              const gchar *format,
+tracker_dbus_request_comment (gint                   request_id,
+                              DBusGMethodInvocation *context,
+                              const gchar           *format,
                               ...)
 {
-	gchar   *str;
-	va_list  args;
+	ClientData *cd;
+	gchar *str;
+	va_list args;
 
 	va_start (args, format);
 	str = g_strdup_vprintf (format, args);
 	va_end (args);
 
-	g_message ("---- [%d] %s",
+	cd = client_get_for_context (context);
+
+	g_message ("---- [%d%s%s] %s",
 	           request_id,
+	           cd ? "|" : "",
+	           cd ? cd->binary : "",
 	           str);
 	g_free (str);
 }
 
 void
-tracker_dbus_request_debug (gint         request_id,
-                            const gchar *format,
+tracker_dbus_request_debug (gint                   request_id,
+                            DBusGMethodInvocation *context,
+                            const gchar           *format,
                             ...)
 {
-	gchar   *str;
-	va_list  args;
+	ClientData *cd;
+	gchar *str;
+	va_list args;
 
 	va_start (args, format);
 	str = g_strdup_vprintf (format, args);
 	va_end (args);
 
-	g_debug ("---- [%d] %s",
+	cd = client_get_for_context (context);
+
+	g_debug ("---- [%d%s%s] %s",
 	         request_id,
+	         cd ? "|" : "",
+	         cd ? cd->binary : "",
 	         str);
 	g_free (str);
 }
@@ -400,3 +683,16 @@ tracker_dbus_request_unblock_hooks (void)
 {
 	block_hooks = FALSE;
 }
+
+void
+tracker_dbus_enable_client_lookup (gboolean enabled)
+{
+	/* If this changed and we disabled everything, simply shut it
+	 * all down.
+	 */
+	if (client_lookup_enabled != enabled && !enabled) {
+		clients_shutdown ();
+	}
+
+	client_lookup_enabled = enabled;
+}
diff --git a/src/libtracker-common/tracker-dbus.h b/src/libtracker-common/tracker-dbus.h
index 16c8a2a..c00909f 100644
--- a/src/libtracker-common/tracker-dbus.h
+++ b/src/libtracker-common/tracker-dbus.h
@@ -120,25 +120,33 @@ tracker_dbus_request_add_hook       (TrackerDBusRequestFunc      new,
 void             tracker_dbus_request_remove_hook    (TrackerDBusRequestHandler  *handler);
 
 void             tracker_dbus_request_new            (gint                        request_id,
+                                                      DBusGMethodInvocation      *context,
                                                       const gchar                *format,
                                                       ...);
-void             tracker_dbus_request_success        (gint                        request_id);
+void             tracker_dbus_request_success        (gint                        request_id,
+                                                      DBusGMethodInvocation      *context);
 void             tracker_dbus_request_failed         (gint                        request_id,
+                                                      DBusGMethodInvocation      *context,
                                                       GError                    **error,
                                                       const gchar                *format,
                                                       ...);
 void             tracker_dbus_request_comment        (gint                        request_id,
+                                                      DBusGMethodInvocation      *context,
                                                       const gchar                *format,
                                                       ...);
 void             tracker_dbus_request_info           (gint                        request_id,
+                                                      DBusGMethodInvocation      *context,
                                                       const gchar                *format,
                                                       ...);
 void             tracker_dbus_request_debug          (gint                        request_id,
+                                                      DBusGMethodInvocation      *context,
                                                       const gchar                *format,
                                                       ...);
 void             tracker_dbus_request_block_hooks    (void);
 void             tracker_dbus_request_unblock_hooks  (void);
 
+void             tracker_dbus_enable_client_lookup   (gboolean                    enable);
+
 G_END_DECLS
 
 #endif /* __LIBTRACKER_COMMON_DBUS_H__ */
diff --git a/src/libtracker-miner/tracker-miner.c b/src/libtracker-miner/tracker-miner.c
index 2c1635b..e0cc478 100644
--- a/src/libtracker-miner/tracker-miner.c
+++ b/src/libtracker-miner/tracker-miner.c
@@ -1308,11 +1308,10 @@ tracker_miner_dbus_get_status (TrackerMiner           *miner,
 
 	tracker_dbus_async_return_if_fail (miner != NULL, context);
 
-	tracker_dbus_request_new (request_id, "%s()", __PRETTY_FUNCTION__);
+	tracker_dbus_request_new (request_id, context, "%s()", __PRETTY_FUNCTION__);
 
+	tracker_dbus_request_success (request_id, context);
 	dbus_g_method_return (context, miner->private->status);
-
-	tracker_dbus_request_success (request_id);
 }
 
 void
@@ -1326,11 +1325,11 @@ tracker_miner_dbus_get_progress (TrackerMiner           *miner,
 
 	tracker_dbus_async_return_if_fail (miner != NULL, context);
 
-	tracker_dbus_request_new (request_id, "%s()", __PRETTY_FUNCTION__);
+	tracker_dbus_request_new (request_id, context, "%s()", __PRETTY_FUNCTION__);
 
 	dbus_g_method_return (context, miner->private->progress);
 
-	tracker_dbus_request_success (request_id);
+	tracker_dbus_request_success (request_id, context);
 }
 
 void
@@ -1348,7 +1347,7 @@ tracker_miner_dbus_get_pause_details (TrackerMiner           *miner,
 
 	tracker_dbus_async_return_if_fail (miner != NULL, context);
 
-	tracker_dbus_request_new (request_id, "%s()", __PRETTY_FUNCTION__);
+	tracker_dbus_request_new (request_id, context, "%s()", __PRETTY_FUNCTION__);
 
 	applications = NULL;
 	reasons = NULL;
@@ -1367,10 +1366,9 @@ tracker_miner_dbus_get_pause_details (TrackerMiner           *miner,
 	applications_strv = tracker_gslist_to_string_list (applications);
 	reasons_strv = tracker_gslist_to_string_list (reasons);
 
+	tracker_dbus_request_success (request_id, context);
 	dbus_g_method_return (context, applications_strv, reasons_strv);
 
-	tracker_dbus_request_success (request_id);
-
 	g_strfreev (applications_strv);
 	g_strfreev (reasons_strv);
 
@@ -1395,7 +1393,8 @@ tracker_miner_dbus_pause (TrackerMiner           *miner,
 	tracker_dbus_async_return_if_fail (application != NULL, context);
 	tracker_dbus_async_return_if_fail (reason != NULL, context);
 
-	tracker_dbus_request_new (request_id, "%s(application:'%s', reason:'%s')",
+	tracker_dbus_request_new (request_id, context,
+	                          "%s(application:'%s', reason:'%s')",
 	                          __PRETTY_FUNCTION__,
 	                          application,
 	                          reason);
@@ -1404,19 +1403,19 @@ tracker_miner_dbus_pause (TrackerMiner           *miner,
 	if (cookie == -1) {
 		GError *actual_error = NULL;
 
+		dbus_g_method_return_error (context, actual_error);
 		tracker_dbus_request_failed (request_id,
+		                             context,
 		                             &actual_error,
 		                             local_error ? local_error->message : NULL);
-		dbus_g_method_return_error (context, actual_error);
 		g_error_free (actual_error);
 		g_error_free (local_error);
 
 		return;
 	}
 
+	tracker_dbus_request_success (request_id, context);
 	dbus_g_method_return (context, cookie);
-
-	tracker_dbus_request_success (request_id);
 }
 
 void
@@ -1432,26 +1431,28 @@ tracker_miner_dbus_resume (TrackerMiner           *miner,
 
 	tracker_dbus_async_return_if_fail (miner != NULL, context);
 
-	tracker_dbus_request_new (request_id, "%s(cookie:%d)",
+	tracker_dbus_request_new (request_id,
+	                          context,
+	                          "%s(cookie:%d)",
 	                          __PRETTY_FUNCTION__,
 	                          cookie);
 
 	if (!tracker_miner_resume (miner, cookie, &local_error)) {
 		GError *actual_error = NULL;
 
+		dbus_g_method_return_error (context, actual_error);
 		tracker_dbus_request_failed (request_id,
+		                             context,
 		                             &actual_error,
 		                             local_error ? local_error->message : NULL);
-		dbus_g_method_return_error (context, actual_error);
 		g_error_free (actual_error);
 		g_error_free (local_error);
 
 		return;
 	}
 
+	tracker_dbus_request_success (request_id, context);
 	dbus_g_method_return (context);
-
-	tracker_dbus_request_success (request_id);
 }
 
 void
@@ -1466,11 +1467,10 @@ tracker_miner_dbus_writeback (TrackerMiner           *miner,
 
 	tracker_dbus_async_return_if_fail (miner != NULL, context);
 
-	tracker_dbus_request_new (request_id, "%s()", __PRETTY_FUNCTION__);
+	tracker_dbus_request_new (request_id, context, "%s()", __PRETTY_FUNCTION__);
 
 	tracker_miner_writeback (miner, subjects);
 
+	tracker_dbus_request_success (request_id, context);
 	dbus_g_method_return (context);
-
-	tracker_dbus_request_success (request_id);
 }
diff --git a/src/plugins/kmail/tracker-kmail-registrar.c b/src/plugins/kmail/tracker-kmail-registrar.c
index b44f421..c8bc685 100644
--- a/src/plugins/kmail/tracker-kmail-registrar.c
+++ b/src/plugins/kmail/tracker-kmail-registrar.c
@@ -404,6 +404,7 @@ tracker_kmail_registrar_set (TrackerKMailRegistrar *object,
 	request_id = tracker_dbus_get_next_request_id ();
 
 	tracker_dbus_request_new (request_id,
+	                          context,
 	                          "D-Bus request to set one: 'KMail' ");
 
 	dbus_async_return_if_fail (subject != NULL, context);
@@ -420,9 +421,8 @@ tracker_kmail_registrar_set (TrackerKMailRegistrar *object,
 	                            GUINT_TO_POINTER (modseq),
 	                            NULL);
 
+	tracker_dbus_request_success (request_id, context);
 	dbus_g_method_return (context);
-
-	tracker_dbus_request_success (request_id);
 }
 
 void
@@ -445,12 +445,14 @@ tracker_kmail_registrar_set_many (TrackerKMailRegistrar *object,
 
 	len = g_strv_length (subjects);
 
-	dbus_async_return_if_fail (len == predicates->len, context);
-	dbus_async_return_if_fail (len == values->len, context);
+	dbus_async_return_if_fail (predicates->len == len, context);
+	dbus_async_return_if_fail (values->len == len, context);
 
 	tracker_dbus_request_new (request_id,
-	                          "D-Bus request to set many: 'KMail' "
-	                          "'%d'", len);
+	                          context,
+	                          "%s(len:%d)",
+	                          __FUNCTION__,
+	                          len);
 
 	while (subjects[i] != NULL) {
 		perform_set (object,
@@ -464,9 +466,8 @@ tracker_kmail_registrar_set_many (TrackerKMailRegistrar *object,
 	                            GUINT_TO_POINTER (modseq),
 	                            NULL);
 
+	tracker_dbus_request_success (request_id, context);
 	dbus_g_method_return (context);
-
-	tracker_dbus_request_success (request_id);
 }
 
 
@@ -482,12 +483,14 @@ tracker_kmail_registrar_unset_many (TrackerKMailRegistrar *object,
 
 	request_id = tracker_dbus_get_next_request_id ();
 
-	tracker_dbus_request_new (request_id,
-	                          "D-Bus request to unset many: 'KMail' "
-	                          "'%d'", g_strv_length (subjects));
-
 	dbus_async_return_if_fail (subjects != NULL, context);
 
+	tracker_dbus_request_new (request_id,
+	                          context,
+	                          "%s(len:%d)",
+	                          __FUNCTION__,
+	                          g_strv_length (subjects));
+
 	while (subjects[i] != NULL) {
 		perform_unset (object, subjects[i]);
 		i++;
@@ -495,9 +498,8 @@ tracker_kmail_registrar_unset_many (TrackerKMailRegistrar *object,
 
 	tracker_store_queue_commit (on_commit, NULL, GUINT_TO_POINTER (modseq), NULL);
 
+	tracker_dbus_request_success (request_id, context);
 	dbus_g_method_return (context);
-
-	tracker_dbus_request_success (request_id);
 }
 
 void
@@ -511,18 +513,19 @@ tracker_kmail_registrar_unset (TrackerKMailRegistrar *object,
 
 	request_id = tracker_dbus_get_next_request_id ();
 
-	tracker_dbus_request_new (request_id,
-	                          "D-Bus request to unset one: 'KMail'");
-
 	dbus_async_return_if_fail (subject != NULL, context);
 
+	tracker_dbus_request_new (request_id,
+	                          context,
+	                          "%s()",
+	                          __FUNCTION__);
+
 	perform_unset (object, subject);
 
 	tracker_store_queue_commit (on_commit, NULL, GUINT_TO_POINTER (modseq), NULL);
 
+	tracker_dbus_request_success (request_id, context);
 	dbus_g_method_return (context);
-
-	tracker_dbus_request_success (request_id);
 }
 
 void
@@ -536,7 +539,9 @@ tracker_kmail_registrar_cleanup (TrackerKMailRegistrar *object,
 	request_id = tracker_dbus_get_next_request_id ();
 
 	tracker_dbus_request_new (request_id,
-	                          "D-Bus request to cleanup: 'KMail'");
+	                          context,
+	                          "%s()",
+	                          __FUNCTION__);
 
 	perform_cleanup (object);
 
@@ -544,9 +549,8 @@ tracker_kmail_registrar_cleanup (TrackerKMailRegistrar *object,
 	                            GUINT_TO_POINTER (modseq),
 	                            NULL);
 
+	tracker_dbus_request_success (request_id, context);
 	dbus_g_method_return (context);
-
-	tracker_dbus_request_success (request_id);
 }
 
 
diff --git a/src/tracker-extract/tracker-extract.c b/src/tracker-extract/tracker-extract.c
index de9b085..113de4e 100644
--- a/src/tracker-extract/tracker-extract.c
+++ b/src/tracker-extract/tracker-extract.c
@@ -225,10 +225,11 @@ tracker_extract_new (gboolean disable_shutdown,
 }
 
 static TrackerSparqlBuilder *
-get_file_metadata (TrackerExtract *extract,
-                   guint           request_id,
-                   const gchar    *uri,
-                   const gchar    *mime)
+get_file_metadata (TrackerExtract        *extract,
+                   guint                  request_id,
+                   DBusGMethodInvocation *context,
+                   const gchar           *uri,
+                   const gchar           *mime)
 {
 	TrackerExtractPrivate *priv;
 	TrackerSparqlBuilder *statements;
@@ -289,6 +290,7 @@ get_file_metadata (TrackerExtract *extract,
 
 		if (error || !info) {
 			tracker_dbus_request_comment (request_id,
+			                              context,
 			                              "  Could not create GFileInfo for file size check, %s",
 			                              error ? error->message : "no error given");
 			g_error_free (error);
@@ -305,6 +307,7 @@ get_file_metadata (TrackerExtract *extract,
 		mime_used = g_strdup (g_file_info_get_content_type (info));
 
 		tracker_dbus_request_comment (request_id,
+		                              context,
 		                              "  Guessing mime type as '%s' for uri:'%s'",
 		                              mime_used,
 		                              uri);
@@ -330,6 +333,7 @@ get_file_metadata (TrackerExtract *extract,
 				gint items;
 
 				tracker_dbus_request_comment (request_id,
+				                              context,
 				                              "  Extracting with module:'%s'",
 				                              g_module_name ((GModule*) mdata.module));
 
@@ -338,6 +342,7 @@ get_file_metadata (TrackerExtract *extract,
 				items = tracker_sparql_builder_get_length (statements);
 
 				tracker_dbus_request_comment (request_id,
+				                              context,
 				                              "  Found %d metadata items",
 				                              items);
 				if (items == 0) {
@@ -363,6 +368,7 @@ get_file_metadata (TrackerExtract *extract,
 				gint items;
 
 				tracker_dbus_request_comment (request_id,
+				                              context,
 				                              "  Extracting with module:'%s'",
 				                              g_module_name ((GModule*) mdata.module));
 
@@ -371,6 +377,7 @@ get_file_metadata (TrackerExtract *extract,
 				items = tracker_sparql_builder_get_length (statements);
 
 				tracker_dbus_request_comment (request_id,
+				                              context,
 				                              "  Found %d metadata items",
 				                              items);
 				if (items == 0) {
@@ -388,9 +395,11 @@ get_file_metadata (TrackerExtract *extract,
 		g_free (mime_used);
 
 		tracker_dbus_request_comment (request_id,
+		                              context,
 		                              "  Could not find any extractors to handle metadata type");
 	} else {
 		tracker_dbus_request_comment (request_id,
+		                              context,
 		                              "  No mime available, not extracting data");
 	}
 
@@ -404,7 +413,7 @@ tracker_extract_get_metadata_by_cmdline (TrackerExtract *object,
                                          const gchar    *uri,
                                          const gchar    *mime)
 {
-	guint       request_id;
+	guint request_id;
 	TrackerSparqlBuilder *statements = NULL;
 
 	request_id = tracker_dbus_get_next_request_id ();
@@ -412,27 +421,30 @@ tracker_extract_get_metadata_by_cmdline (TrackerExtract *object,
 	g_return_if_fail (uri != NULL);
 
 	tracker_dbus_request_new (request_id,
-	                          "Command line request to extract metadata, "
-	                          "uri:'%s', mime:%s",
+	                          NULL,
+	                          "%s(uri:'%s', mime:%s)",
+	                          __FUNCTION__,
 	                          uri,
 	                          mime);
 
 	/* NOTE: Don't reset the timeout to shutdown here */
-	statements = get_file_metadata (object, request_id, uri, mime);
+	statements = get_file_metadata (object, request_id, NULL, uri, mime);
 
 	if (statements) {
-		tracker_dbus_request_info (request_id, "%s",
+		tracker_dbus_request_info (request_id,
+		                           NULL,
+		                           "%s",
 		                           tracker_sparql_builder_get_result (statements));
 		g_object_unref (statements);
 	}
 
-	tracker_dbus_request_success (request_id);
+	tracker_dbus_request_success (request_id, NULL);
 }
 
 void
-tracker_extract_get_pid (TrackerExtract                 *object,
+tracker_extract_get_pid (TrackerExtract         *object,
                          DBusGMethodInvocation  *context,
-                         GError                        **error)
+                         GError                **error)
 {
 	guint request_id;
 	pid_t value;
@@ -440,15 +452,18 @@ tracker_extract_get_pid (TrackerExtract                 *object,
 	request_id = tracker_dbus_get_next_request_id ();
 
 	tracker_dbus_request_new (request_id,
-	                          "D-Bus request to get PID");
+	                          context,
+	                          "%s()",
+	                          __FUNCTION__);
 
 	value = getpid ();
 	tracker_dbus_request_debug (request_id,
-	                            "PID is %d", value);
+	                            context,
+	                            "PID is %d",
+	                            value);
 
+	tracker_dbus_request_success (request_id, context);
 	dbus_g_method_return (context, value);
-
-	tracker_dbus_request_success (request_id);
 }
 
 void
@@ -467,12 +482,14 @@ tracker_extract_get_metadata (TrackerExtract         *object,
 	tracker_dbus_async_return_if_fail (uri != NULL, context);
 
 	tracker_dbus_request_new (request_id,
-	                          "D-Bus request to extract metadata, "
-	                          "uri:'%s', mime:%s",
+	                          context,
+	                          "%s(uri:'%s', mime:%s)",
+	                          __FUNCTION__,
 	                          uri,
 	                          mime);
 
 	tracker_dbus_request_debug (request_id,
+	                            context,
 	                            "  Resetting shutdown timeout");
 
 	priv = TRACKER_EXTRACT_GET_PRIVATE (object);
@@ -482,9 +499,11 @@ tracker_extract_get_metadata (TrackerExtract         *object,
 		alarm (MAX_EXTRACT_TIME);
 	}
 
-	sparql = get_file_metadata (object, request_id, uri, mime);
+	sparql = get_file_metadata (object, request_id, context, uri, mime);
 
 	if (sparql) {
+		tracker_dbus_request_success (request_id, context);
+
 		if (tracker_sparql_builder_get_length (sparql) > 0) {
 			/* tracker_info ("%s", tracker_sparql_builder_get_result (sparql)); */
 			dbus_g_method_return (context, tracker_sparql_builder_get_result (sparql));
@@ -492,11 +511,11 @@ tracker_extract_get_metadata (TrackerExtract         *object,
 			dbus_g_method_return (context, "");
 		}
 		g_object_unref (sparql);
-		tracker_dbus_request_success (request_id);
 	} else {
 		GError *actual_error = NULL;
 
 		tracker_dbus_request_failed (request_id,
+		                             context,
 		                             &actual_error,
 		                             "Could not get any metadata for uri:'%s' and mime:'%s'",
 		                             uri,
diff --git a/src/tracker-store/tracker-backup.c b/src/tracker-store/tracker-backup.c
index b9d7f45..de3594b 100644
--- a/src/tracker-store/tracker-backup.c
+++ b/src/tracker-store/tracker-backup.c
@@ -79,6 +79,7 @@ backup_callback (GError *error, gpointer user_data)
 
 	if (error) {
 		tracker_dbus_request_failed (info->request_id,
+		                             info->context,
 		                             &error,
 		                             NULL);
 		dbus_g_method_return_error (info->context, error);
@@ -91,7 +92,8 @@ backup_callback (GError *error, gpointer user_data)
 
 	dbus_g_method_return (info->context);
 
-	tracker_dbus_request_success (info->request_id);
+	tracker_dbus_request_success (info->request_id,
+	                              info->context);
 }
 
 static void
@@ -121,6 +123,7 @@ tracker_backup_save (TrackerBackup          *object,
 	request_id = tracker_dbus_get_next_request_id ();
 
 	tracker_dbus_request_new (request_id,
+	                          context,
 	                          "D-Bus request to save backup into '%s'",
 	                          destination_uri);
 
@@ -154,6 +157,7 @@ tracker_backup_restore (TrackerBackup          *object,
 	request_id = tracker_dbus_get_next_request_id ();
 
 	tracker_dbus_request_new (request_id,
+	                          context,
 	                          "D-Bus request to restore backup from '%s'",
 	                          backup_uri);
 
diff --git a/src/tracker-store/tracker-main.c b/src/tracker-store/tracker-main.c
index 5271c4e..d672f64 100644
--- a/src/tracker-store/tracker-main.c
+++ b/src/tracker-store/tracker-main.c
@@ -317,6 +317,22 @@ get_writeback_predicates (void)
 	return predicates_to_signal;
 }
 
+static void
+config_verbosity_changed_cb (GObject    *object,
+                             GParamSpec *spec,
+                             gpointer    user_data)
+{
+	gint verbosity;
+
+	verbosity = tracker_config_get_verbosity (TRACKER_CONFIG (object));
+
+	g_message ("Log verbosity is set to %d, %s D-Bus client lookup",
+	           verbosity,
+	           verbosity > 0 ? "enabling" : "disabling");
+
+	tracker_dbus_enable_client_lookup (verbosity > 0);
+}
+
 gint
 main (gint argc, gchar *argv[])
 {
@@ -393,9 +409,16 @@ main (gint argc, gchar *argv[])
 	/* Initialize major subsystems */
 	config = tracker_config_new ();
 
+	g_signal_connect (config, "notify::verbosity",
+	                  G_CALLBACK (config_verbosity_changed_cb),
+	                  NULL);
+
 	/* Daemon command line arguments */
 	if (verbosity > -1) {
 		tracker_config_set_verbosity (config, verbosity);
+	} else {
+		/* Make sure we enable/disable the dbus client lookup */
+		config_verbosity_changed_cb (G_OBJECT (config), NULL, NULL);
 	}
 
 	if (low_memory) {
@@ -485,6 +508,7 @@ main (gint argc, gchar *argv[])
 	tracker_data_manager_shutdown ();
 	tracker_log_shutdown ();
 
+	g_signal_handlers_disconnect_by_func (config, config_verbosity_changed_cb, NULL);
 	g_object_unref (config);
 
 	g_print ("\nOK\n\n");
diff --git a/src/tracker-store/tracker-resources.c b/src/tracker-store/tracker-resources.c
index 4a61559..d716856 100644
--- a/src/tracker-store/tracker-resources.c
+++ b/src/tracker-store/tracker-resources.c
@@ -143,15 +143,16 @@ turtle_import_callback (GError *error, gpointer user_data)
 
 	if (error) {
 		tracker_dbus_request_failed (info->request_id,
+		                             info->context,
 		                             &error,
 		                             NULL);
 		dbus_g_method_return_error (info->context, error);
 		return;
 	}
 
+	tracker_dbus_request_success (info->request_id,
+	                              info->context);
 	dbus_g_method_return (info->context);
-
-	tracker_dbus_request_success (info->request_id);
 }
 
 void
@@ -169,8 +170,9 @@ tracker_resources_load (TrackerResources         *object,
 	tracker_dbus_async_return_if_fail (uri != NULL, context);
 
 	tracker_dbus_request_new (request_id,
-	                          "D-Bus request to load turtle file "
-	                          "'%s'",
+	                          context,
+	                          "%s(): uri:'%s'",
+	                          __FUNCTION__,
 	                          uri);
 
 	file = g_file_new_for_uri (uri);
@@ -193,7 +195,7 @@ tracker_resources_sparql_query (TrackerResources         *self,
                                 GError                  **error)
 {
 	TrackerDBResultSet   *result_set;
-	GError                       *actual_error = NULL;
+	GError               *actual_error = NULL;
 	guint                 request_id;
 	GPtrArray            *values;
 
@@ -202,14 +204,16 @@ tracker_resources_sparql_query (TrackerResources         *self,
 	tracker_dbus_async_return_if_fail (query != NULL, context);
 
 	tracker_dbus_request_new (request_id,
-	                          "D-Bus request for SPARQL Query, "
-	                          "query:'%s'",
+	                          context,
+	                          "%s(): '%s'",
+	                          __FUNCTION__,
 	                          query);
 
 	result_set = tracker_store_sparql_query (query, &actual_error);
 
 	if (actual_error) {
 		tracker_dbus_request_failed (request_id,
+		                             context,
 		                             &actual_error,
 		                             NULL);
 		dbus_g_method_return_error (context, actual_error);
@@ -219,6 +223,7 @@ tracker_resources_sparql_query (TrackerResources         *self,
 
 	values = tracker_dbus_query_result_to_ptr_array (result_set);
 
+	tracker_dbus_request_success (request_id, context);
 	dbus_g_method_return (context, values);
 
 	tracker_dbus_results_ptr_array_free (&values);
@@ -226,15 +231,13 @@ tracker_resources_sparql_query (TrackerResources         *self,
 	if (result_set) {
 		g_object_unref (result_set);
 	}
-
-	tracker_dbus_request_success (request_id);
 }
 
 void
 tracker_resources_sparql_update (TrackerResources        *self,
                                  const gchar             *update,
                                  DBusGMethodInvocation   *context,
-                                 GError                         **error)
+                                 GError                 **error)
 {
 	TrackerResourcesPrivate *priv;
 	GError                       *actual_error = NULL;
@@ -247,14 +250,16 @@ tracker_resources_sparql_update (TrackerResources        *self,
 	tracker_dbus_async_return_if_fail (update != NULL, context);
 
 	tracker_dbus_request_new (request_id,
-	                          "D-Bus request for SPARQL Update, "
-	                          "update:'%s'",
+	                          context,
+	                          "%s(): '%s'",
+	                          __FUNCTION__,
 	                          update);
 
 	tracker_store_sparql_update (update, &actual_error);
 
 	if (actual_error) {
 		tracker_dbus_request_failed (request_id,
+		                             context,
 		                             &actual_error,
 		                             NULL);
 		dbus_g_method_return_error (context, actual_error);
@@ -262,13 +267,12 @@ tracker_resources_sparql_update (TrackerResources        *self,
 		return;
 	}
 
+	tracker_dbus_request_success (request_id, context);
 	dbus_g_method_return (context);
-
-	tracker_dbus_request_success (request_id);
 }
 
 void
-tracker_resources_sparql_update_blank (TrackerResources               *self,
+tracker_resources_sparql_update_blank (TrackerResources       *self,
                                        const gchar            *update,
                                        DBusGMethodInvocation  *context,
                                        GError                **error)
@@ -285,14 +289,16 @@ tracker_resources_sparql_update_blank (TrackerResources               *self,
 	tracker_dbus_async_return_if_fail (update != NULL, context);
 
 	tracker_dbus_request_new (request_id,
-	                          "D-Bus request for SPARQL Update, "
-	                          "update:'%s'",
+	                          context,
+	                          "%s(): '%s'",
+	                          __FUNCTION__,
 	                          update);
 
 	blank_nodes = tracker_store_sparql_update_blank (update, &actual_error);
 
 	if (actual_error) {
 		tracker_dbus_request_failed (request_id,
+		                             context,
 		                             &actual_error,
 		                             NULL);
 		dbus_g_method_return_error (context, actual_error);
@@ -300,6 +306,7 @@ tracker_resources_sparql_update_blank (TrackerResources               *self,
 		return;
 	}
 
+	tracker_dbus_request_success (request_id, context);
 	dbus_g_method_return (context, blank_nodes);
 
 	if (blank_nodes) {
@@ -311,8 +318,6 @@ tracker_resources_sparql_update_blank (TrackerResources               *self,
 		}
 		g_ptr_array_free (blank_nodes, TRUE);
 	}
-
-	tracker_dbus_request_success (request_id);
 }
 
 static void
@@ -322,15 +327,16 @@ batch_update_callback (GError *error, gpointer user_data)
 
 	if (error) {
 		tracker_dbus_request_failed (info->request_id,
+		                             info->context,
 		                             &error,
 		                             NULL);
 		dbus_g_method_return_error (info->context, error);
 		return;
 	}
 
+	tracker_dbus_request_success (info->request_id,
+	                              info->context);
 	dbus_g_method_return (info->context);
-
-	tracker_dbus_request_success (info->request_id);
 }
 
 void
@@ -351,8 +357,9 @@ tracker_resources_batch_sparql_update (TrackerResources          *self,
 	tracker_dbus_async_return_if_fail (update != NULL, context);
 
 	tracker_dbus_request_new (request_id,
-	                          "D-Bus request for batch SPARQL Update, "
-	                          "update:'%s'",
+	                          context,
+	                          "%s(): '%s'",
+	                          __FUNCTION__,
 	                          update);
 
 	info = g_slice_new (TrackerDBusMethodInfo);
@@ -373,8 +380,9 @@ batch_commit_callback (gpointer user_data)
 {
 	TrackerDBusMethodInfo *info = user_data;
 
+	tracker_dbus_request_success (info->request_id,
+	                              info->context);
 	dbus_g_method_return (info->context);
-	tracker_dbus_request_success (info->request_id);
 }
 
 void
@@ -392,7 +400,9 @@ tracker_resources_batch_commit (TrackerResources         *self,
 	request_id = tracker_dbus_get_next_request_id ();
 
 	tracker_dbus_request_new (request_id,
-	                          "D-Bus request for batch commit");
+	                          context,
+	                          "%s()",
+	                          __FUNCTION__);
 
 	info = g_slice_new (TrackerDBusMethodInfo);
 
diff --git a/src/tracker-store/tracker-statistics.c b/src/tracker-store/tracker-statistics.c
index aac5c75..58fa1ff 100644
--- a/src/tracker-store/tracker-statistics.c
+++ b/src/tracker-store/tracker-statistics.c
@@ -212,7 +212,7 @@ tracker_statistics_get (TrackerStatistics      *object,
 	request_id = tracker_dbus_get_next_request_id ();
 
 	tracker_dbus_request_block_hooks ();
-	tracker_dbus_request_new (request_id, __FUNCTION__);
+	tracker_dbus_request_new (request_id, context, "%s()", __FUNCTION__);
 
 	priv = TRACKER_STATISTICS_GET_PRIVATE (object);
 
@@ -246,7 +246,7 @@ tracker_statistics_get (TrackerStatistics      *object,
 	g_ptr_array_foreach (values, (GFunc) g_strfreev, NULL);
 	g_ptr_array_free (values, TRUE);
 
-	tracker_dbus_request_success (request_id);
+	tracker_dbus_request_success (request_id, context);
 	tracker_dbus_request_unblock_hooks ();
 }
 
diff --git a/tests/libtracker-common/tracker-dbus-test.c b/tests/libtracker-common/tracker-dbus-test.c
index fa5b876..d7b99d2 100644
--- a/tests/libtracker-common/tracker-dbus-test.c
+++ b/tests/libtracker-common/tracker-dbus-test.c
@@ -157,14 +157,14 @@ test_dbus_request_failed (void)
 
 	/* Default case: we set the error */
 	if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) {
-		tracker_dbus_request_failed (1, &error, "Test Error message");
+		tracker_dbus_request_failed (1, NULL, &error, "Test Error message");
 	}
 	g_test_trap_assert_stderr ("*Test Error message*");
 
 	/* Second common case: we have already the error and want only the log line */
 	error = g_error_new (1000, -1, "The indexer founded an error");
 	if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) {
-		tracker_dbus_request_failed (1, &error, NULL);
+		tracker_dbus_request_failed (1, NULL, &error, NULL);
 	}
 	g_test_trap_assert_stderr ("*The indexer founded an error*");
 	g_error_free (error);
@@ -173,7 +173,7 @@ test_dbus_request_failed (void)
 	/* Wrong use: error set and we add a new message */
 	error = g_error_new (1000, -1, "The indexer founded an error");
 	if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) {
-		tracker_dbus_request_failed (1, &error, "Dont do this");
+		tracker_dbus_request_failed (1, NULL, &error, "Dont do this");
 	}
 	g_test_trap_assert_stderr ("*GError set over the top of a previous GError or uninitialized memory*");
 	g_error_free (error);
@@ -181,7 +181,7 @@ test_dbus_request_failed (void)
 	error = NULL;
 	/* Wrong use: no error, no message */
 	if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) {
-		tracker_dbus_request_failed (1, &error, NULL);
+		tracker_dbus_request_failed (1, NULL, &error, NULL);
 	}
 
 	g_test_trap_assert_stderr ("*Unset error and no error message*");



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]