[tracker] TrackerWriteback: Add logging infrastructure.
- From: Carlos Garnacho <carlosg src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker] TrackerWriteback: Add logging infrastructure.
- Date: Fri, 27 Nov 2009 11:50:34 +0000 (UTC)
commit 8b48dfdbf268b7ff38fb96bfd4158bcf5c3f4db1
Author: Carlos Garnacho <carlos lanedo com>
Date: Fri Nov 27 12:38:30 2009 +0100
TrackerWriteback: Add logging infrastructure.
There is now a separate config file for tracker-writeback, at the moment it
just contains the Verbosity parameter. tracker-writeback now also takes
command line parameters for it.
src/tracker-writeback/Makefile.am | 2 +
src/tracker-writeback/tracker-config.c | 365 ++++++++++++++++++++++++++++++++
src/tracker-writeback/tracker-config.h | 61 ++++++
src/tracker-writeback/tracker-main.c | 80 +++++++
4 files changed, 508 insertions(+), 0 deletions(-)
---
diff --git a/src/tracker-writeback/Makefile.am b/src/tracker-writeback/Makefile.am
index ae99e11..ce219dd 100644
--- a/src/tracker-writeback/Makefile.am
+++ b/src/tracker-writeback/Makefile.am
@@ -45,6 +45,8 @@ libexec_PROGRAMS = tracker-writeback
tracker_writeback_SOURCES = \
$(marshal_sources) \
$(dbus_sources) \
+ tracker-config.c \
+ tracker-config.h \
tracker-writeback-consumer.c \
tracker-writeback-consumer.h \
tracker-writeback-dispatcher.c \
diff --git a/src/tracker-writeback/tracker-config.c b/src/tracker-writeback/tracker-config.c
new file mode 100644
index 0000000..0c31855
--- /dev/null
+++ b/src/tracker-writeback/tracker-config.c
@@ -0,0 +1,365 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2009, Nokia (urho konttori nokia com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <glib.h>
+#include <gio/gio.h>
+
+#include <libtracker-common/tracker-keyfile-object.h>
+#include <libtracker-common/tracker-file-utils.h>
+#include <libtracker-common/tracker-type-utils.h>
+
+#include "tracker-config.h"
+
+#define TRACKER_CONFIG_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TRACKER_TYPE_CONFIG, TrackerConfigPrivate))
+
+/* GKeyFile defines */
+#define GROUP_GENERAL "General"
+
+/* Default values */
+#define DEFAULT_VERBOSITY 0
+
+typedef struct {
+ /* General */
+ gint verbosity;
+} TrackerConfigPrivate;
+
+typedef struct {
+ GType type;
+ const gchar *property;
+ const gchar *group;
+ const gchar *key;
+} ObjectToKeyFile;
+
+static void config_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void config_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void config_finalize (GObject *object);
+static void config_constructed (GObject *object);
+static void config_changed (TrackerConfigFile *file);
+static void config_load (TrackerConfig *config);
+static gboolean config_save (TrackerConfig *config);
+static void config_create_with_defaults (TrackerConfig *config,
+ GKeyFile *key_file,
+ gboolean overwrite);
+
+enum {
+ PROP_0,
+
+ /* General */
+ PROP_VERBOSITY,
+};
+
+static ObjectToKeyFile conversions[] = {
+ /* General */
+ { G_TYPE_INT, "verbosity", GROUP_GENERAL, "Verbosity" }
+};
+
+G_DEFINE_TYPE (TrackerConfig, tracker_config, TRACKER_TYPE_CONFIG_FILE);
+
+static void
+tracker_config_class_init (TrackerConfigClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ TrackerConfigFileClass *config_file_class = TRACKER_CONFIG_FILE_CLASS (klass);
+
+ object_class->set_property = config_set_property;
+ object_class->get_property = config_get_property;
+ object_class->finalize = config_finalize;
+ object_class->constructed = config_constructed;
+
+ config_file_class->changed = config_changed;
+
+ /* General */
+ g_object_class_install_property (object_class,
+ PROP_VERBOSITY,
+ g_param_spec_int ("verbosity",
+ "Log verbosity",
+ " Log verbosity (0=errors, 1=minimal, 2=detailed, 3=debug)",
+ 0,
+ 3,
+ DEFAULT_VERBOSITY,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+ g_type_class_add_private (object_class, sizeof (TrackerConfigPrivate));
+}
+
+static void
+tracker_config_init (TrackerConfig *object)
+{
+}
+
+static void
+config_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ switch (param_id) {
+ /* General */
+ case PROP_VERBOSITY:
+ tracker_config_set_verbosity (TRACKER_CONFIG (object),
+ g_value_get_int (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+config_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ TrackerConfigPrivate *priv;
+
+ priv = TRACKER_CONFIG_GET_PRIVATE (object);
+
+ switch (param_id) {
+ /* General */
+ case PROP_VERBOSITY:
+ g_value_set_int (value, priv->verbosity);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+config_finalize (GObject *object)
+{
+ TrackerConfigPrivate *priv;
+
+ priv = TRACKER_CONFIG_GET_PRIVATE (object);
+
+ (G_OBJECT_CLASS (tracker_config_parent_class)->finalize) (object);
+}
+
+static void
+config_constructed (GObject *object)
+{
+ (G_OBJECT_CLASS (tracker_config_parent_class)->constructed) (object);
+
+ config_load (TRACKER_CONFIG (object));
+}
+
+static void
+config_changed (TrackerConfigFile *file)
+{
+ /* Reload config */
+ config_load (TRACKER_CONFIG (file));
+}
+
+static void
+config_create_with_defaults (TrackerConfig *config,
+ GKeyFile *key_file,
+ gboolean overwrite)
+{
+ gint i;
+
+ g_message ("Loading defaults into GKeyFile...");
+
+ for (i = 0; i < G_N_ELEMENTS (conversions); i++) {
+ gboolean has_key;
+
+ has_key = g_key_file_has_key (key_file,
+ conversions[i].group,
+ conversions[i].key,
+ NULL);
+ if (!overwrite && has_key) {
+ continue;
+ }
+
+ switch (conversions[i].type) {
+ case G_TYPE_INT:
+ g_key_file_set_integer (key_file,
+ conversions[i].group,
+ conversions[i].key,
+ tracker_keyfile_object_default_int (config,
+ conversions[i].property));
+ break;
+
+ case G_TYPE_BOOLEAN:
+ g_key_file_set_boolean (key_file,
+ conversions[i].group,
+ conversions[i].key,
+ tracker_keyfile_object_default_boolean (config,
+ conversions[i].property));
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+
+ g_key_file_set_comment (key_file,
+ conversions[i].group,
+ conversions[i].key,
+ tracker_keyfile_object_blurb (config,
+ conversions[i].property),
+ NULL);
+ }
+}
+
+static void
+config_load (TrackerConfig *config)
+{
+ TrackerConfigFile *file;
+ gint i;
+
+ file = TRACKER_CONFIG_FILE (config);
+ config_create_with_defaults (config, file->key_file, FALSE);
+
+ if (!file->file_exists) {
+ tracker_config_file_save (file);
+ }
+
+ for (i = 0; i < G_N_ELEMENTS (conversions); i++) {
+ gboolean has_key;
+
+ has_key = g_key_file_has_key (file->key_file,
+ conversions[i].group,
+ conversions[i].key,
+ NULL);
+
+ switch (conversions[i].type) {
+ case G_TYPE_INT:
+ tracker_keyfile_object_load_int (G_OBJECT (file),
+ conversions[i].property,
+ file->key_file,
+ conversions[i].group,
+ conversions[i].key);
+ break;
+
+ case G_TYPE_BOOLEAN:
+ tracker_keyfile_object_load_boolean (G_OBJECT (file),
+ conversions[i].property,
+ file->key_file,
+ conversions[i].group,
+ conversions[i].key);
+ break;
+ }
+ }
+}
+
+static gboolean
+config_save (TrackerConfig *config)
+{
+ TrackerConfigFile *file;
+ gint i;
+
+ file = TRACKER_CONFIG_FILE (config);
+
+ if (!file->key_file) {
+ g_critical ("Could not save config, GKeyFile was NULL, has the config been loaded?");
+
+ return FALSE;
+ }
+
+ g_message ("Setting details to GKeyFile object...");
+
+ for (i = 0; i < G_N_ELEMENTS (conversions); i++) {
+ switch (conversions[i].type) {
+ case G_TYPE_INT:
+ tracker_keyfile_object_save_int (file,
+ conversions[i].property,
+ file->key_file,
+ conversions[i].group,
+ conversions[i].key);
+ break;
+
+ case G_TYPE_BOOLEAN:
+ tracker_keyfile_object_save_boolean (file,
+ conversions[i].property,
+ file->key_file,
+ conversions[i].group,
+ conversions[i].key);
+ break;
+
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+ }
+
+ return tracker_config_file_save (file);
+}
+
+TrackerConfig *
+tracker_config_new (void)
+{
+ return g_object_new (TRACKER_TYPE_CONFIG, NULL);
+}
+
+
+TrackerConfig *
+tracker_config_new_with_domain (const gchar *domain)
+{
+ return g_object_new (TRACKER_TYPE_CONFIG, "domain", domain, NULL);
+}
+
+gboolean
+tracker_config_save (TrackerConfig *config)
+{
+ g_return_val_if_fail (TRACKER_IS_CONFIG (config), FALSE);
+
+ return config_save (config);
+}
+
+gint
+tracker_config_get_verbosity (TrackerConfig *config)
+{
+ TrackerConfigPrivate *priv;
+
+ g_return_val_if_fail (TRACKER_IS_CONFIG (config), DEFAULT_VERBOSITY);
+
+ priv = TRACKER_CONFIG_GET_PRIVATE (config);
+
+ return priv->verbosity;
+}
+
+void
+tracker_config_set_verbosity (TrackerConfig *config,
+ gint value)
+{
+ TrackerConfigPrivate *priv;
+
+ g_return_if_fail (TRACKER_IS_CONFIG (config));
+
+ if (!tracker_keyfile_object_validate_int (config, "verbosity", value)) {
+ return;
+ }
+
+ priv = TRACKER_CONFIG_GET_PRIVATE (config);
+
+ priv->verbosity = value;
+ g_object_notify (G_OBJECT (config), "verbosity");
+}
diff --git a/src/tracker-writeback/tracker-config.h b/src/tracker-writeback/tracker-config.h
new file mode 100644
index 0000000..89a53e8
--- /dev/null
+++ b/src/tracker-writeback/tracker-config.h
@@ -0,0 +1,61 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2009%, Nokia (urho konttori nokia com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __TRACKER_WRITEBACK_CONFIG_H__
+#define __TRACKER_WRITEBACK_CONFIG_H__
+
+#include <glib-object.h>
+
+#include <libtracker-common/tracker-config-file.h>
+
+G_BEGIN_DECLS
+
+#define TRACKER_TYPE_CONFIG (tracker_config_get_type ())
+#define TRACKER_CONFIG(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TRACKER_TYPE_CONFIG, TrackerConfig))
+#define TRACKER_CONFIG_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), TRACKER_TYPE_CONFIG, TrackerConfigClass))
+#define TRACKER_IS_CONFIG(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TRACKER_TYPE_CONFIG))
+#define TRACKER_IS_CONFIG_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TRACKER_TYPE_CONFIG))
+#define TRACKER_CONFIG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TRACKER_TYPE_CONFIG, TrackerConfigClass))
+
+typedef struct TrackerConfig TrackerConfig;
+typedef struct TrackerConfigClass TrackerConfigClass;
+
+struct TrackerConfig {
+ TrackerConfigFile parent;
+};
+
+struct TrackerConfigClass {
+ TrackerConfigFileClass parent_class;
+};
+
+GType tracker_config_get_type (void) G_GNUC_CONST;
+
+TrackerConfig *tracker_config_new (void);
+TrackerConfig *tracker_config_new_with_domain (const gchar *domain);
+
+gboolean tracker_config_save (TrackerConfig *config);
+
+gint tracker_config_get_verbosity (TrackerConfig *config);
+void tracker_config_set_verbosity (TrackerConfig *config,
+ gint value);
+
+G_END_DECLS
+
+#endif /* __TRACKER_WRITEBACK_CONFIG_H__ */
diff --git a/src/tracker-writeback/tracker-main.c b/src/tracker-writeback/tracker-main.c
index e22737e..0c1eec2 100644
--- a/src/tracker-writeback/tracker-main.c
+++ b/src/tracker-writeback/tracker-main.c
@@ -21,9 +21,38 @@
#include "config.h"
#include <stdlib.h>
+#include <libtracker-common/tracker-log.h>
+#include <glib/gi18n.h>
#include "tracker-writeback-dispatcher.h"
#include "tracker-writeback-consumer.h"
+#include "tracker-config.h"
+
+#define ABOUT \
+ "Tracker " PACKAGE_VERSION "\n"
+
+#define LICENSE \
+ "This program is free software and comes without any warranty.\n" \
+ "It is licensed under version 2 or later of the General Public " \
+ "License which can be viewed at:\n" \
+ "\n" \
+ " http://www.gnu.org/licenses/gpl.txt\n"
+
+static gboolean version;
+static gint verbosity = -1;
+
+static GOptionEntry entries[] = {
+ { "version", 'V', 0,
+ G_OPTION_ARG_NONE, &version,
+ N_("Displays version information"),
+ NULL },
+ { "verbosity", 'v', 0,
+ G_OPTION_ARG_INT, &verbosity,
+ N_("Logging, 0 = errors only, "
+ "1 = minimal, 2 = detailed and 3 = debug (default=0)"),
+ NULL },
+ { NULL }
+};
typedef struct {
gchar *subject;
@@ -107,18 +136,65 @@ dispatcher_thread_func (gpointer data)
return NULL;
}
+static void
+sanity_check_option_values (TrackerConfig *config)
+{
+ g_message ("General options:");
+ g_message (" Verbosity ............................ %d",
+ tracker_config_get_verbosity (config));
+}
+
int
main (int argc,
char *argv[])
{
+ TrackerConfig *config;
+ GOptionContext *context;
GMainLoop *loop;
GError *error = NULL;
+ gchar *log_filename;
g_thread_init (NULL);
dbus_g_thread_init ();
g_type_init ();
+ /* Set up locale */
+ setlocale (LC_ALL, "");
+
+ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+
+ /* Translators: this messagge will apper immediately after the
+ * usage string - Usage: COMMAND <THIS_MESSAGE>
+ */
+ context = g_option_context_new (_("- start the tracker writeback service"));
+
+ g_option_context_add_main_entries (context, entries, NULL);
+ g_option_context_parse (context, &argc, &argv, &error);
+ g_option_context_free (context);
+
+ if (version) {
+ g_print ("\n" ABOUT "\n" LICENSE "\n");
+ return EXIT_SUCCESS;
+ }
+
+ /* Initialize logging */
+ config = tracker_config_new ();
+
+ if (verbosity > -1) {
+ tracker_config_set_verbosity (config, verbosity);
+ }
+
+ tracker_log_init (tracker_config_get_verbosity (config),
+ &log_filename);
+ g_print ("Starting log:\n File:'%s'\n", log_filename);
+ g_free (log_filename);
+
+ sanity_check_option_values (config);
+
+
consumer = tracker_writeback_consumer_new ();
/* Create dispatcher thread data here, GType
@@ -143,8 +219,12 @@ main (int argc,
loop = g_main_loop_new (NULL, FALSE);
g_main_loop_run (loop);
+ tracker_log_shutdown ();
+
g_object_unref (consumer);
g_main_loop_unref (loop);
+ g_object_unref (config);
+
return EXIT_SUCCESS;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]