[gnome-talos] Attempt to write JSON by default
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-talos] Attempt to write JSON by default
- Date: Sun, 25 Sep 2011 23:08:15 +0000 (UTC)
commit 01df539a75be2c49602144c02ad9787e25d3cff0
Author: Colin Walters <walters verbum org>
Date: Sat Sep 24 15:41:26 2011 -0400
Attempt to write JSON by default
Makefile-src.am | 4 +-
configure.ac | 2 +
src/gnome-talos.c | 54 +++++++++++++++++++++++++++++++++++++++++++---------
3 files changed, 48 insertions(+), 12 deletions(-)
---
diff --git a/Makefile-src.am b/Makefile-src.am
index 7215a65..0477e82 100644
--- a/Makefile-src.am
+++ b/Makefile-src.am
@@ -14,6 +14,6 @@ gnome_talos_SOURCES = src/gnome-talos.c \
src/gnome-talos-procinfo.h \
src/gnome-talos-meta.c \
src/gnome-talos-meta.h
-gnome_talos_CPPFLAGS = $(GIO_UNIX_CFLAGS)
-gnome_talos_LDADD = $(GIO_UNIX_LIBS)
+gnome_talos_CPPFLAGS = $(GNOME_TALOS_CFLAGS)
+gnome_talos_LDADD = $(GNOME_TALOS_LIBS)
diff --git a/configure.ac b/configure.ac
index 58f80b3..8fb8ccd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -36,6 +36,8 @@ PKG_PROG_PKG_CONFIG([0.22])
PKG_CHECK_MODULES(GLIB, [glib-2.0])
PKG_CHECK_MODULES(GIO_UNIX, [gio-unix-2.0])
+PKG_CHECK_MODULES(GNOME_TALOS, [gio-unix-2.0 json-glib-1.0])
+
AM_PATH_PYTHON([2.5])
AC_SUBST(PYTHON)
diff --git a/src/gnome-talos.c b/src/gnome-talos.c
index 6cd083a..c08168e 100644
--- a/src/gnome-talos.c
+++ b/src/gnome-talos.c
@@ -22,6 +22,7 @@
#include "config.h"
#include <gio/gio.h>
+#include <json-glib/json-glib.h>
#include <string.h>
@@ -29,6 +30,7 @@
#include "gnome-talos-meta.h"
static gint timeout = 5;
+static char *log_file = NULL;
GVariant *
gather_snapshot (void)
@@ -68,16 +70,32 @@ gather_snapshot (void)
return data;
}
-static void
-print_variant (GVariant *variant)
+static gboolean
+write_variant (GVariant *variant,
+ GCancellable *cancellable,
+ GOutputStream *out,
+ GError **error)
{
- char *str;
- str = g_variant_print (variant, TRUE);
- g_print ("%s\n", str);
- g_free (str);
+ JsonNode *node;
+ JsonGenerator *generator;
+ gboolean ret;
+
+ generator = json_generator_new ();
+ json_generator_set_pretty (generator, TRUE);
+
+ node = json_gvariant_serialize (variant);
+ json_generator_set_root (generator, node);
+ ret = json_generator_to_stream (generator, out, cancellable, error);
+
+ g_object_unref (generator);
+ json_node_free (node);
+
+ return ret;
}
typedef struct {
+ GFile *out_path;
+ GFileOutputStream *out;
GMainLoop *loop;
} GnomeTalosApp;
@@ -88,11 +106,11 @@ timeout_gather_data (gpointer user_data)
GVariant *snapshot;
snapshot = gather_snapshot ();
- print_variant (snapshot);
+ write_variant (snapshot, NULL, (GOutputStream*)app->out, NULL);
g_variant_unref (snapshot);
if (timeout > 0)
- g_timeout_add_seconds (timeout, timeout_gather_data, NULL);
+ g_timeout_add_seconds (timeout, timeout_gather_data, app);
else
g_main_loop_quit (app->loop);
@@ -109,6 +127,7 @@ main (int argc,
GOptionContext *context;
static const GOptionEntry options[] = {
{ "timeout", 0, 0, G_OPTION_ARG_INT, &timeout, "Time between data snapshots, in seconds (default=5)", "seconds" },
+ { "log-file", 0, 0, G_OPTION_ARG_FILENAME, &log_file, "Log file path", "path" },
{ NULL }
};
@@ -120,12 +139,27 @@ main (int argc,
if (!g_option_context_parse (context, &argc, &argv, &error))
{
- g_printerr ("%s", error->message);
+ g_printerr ("%s\n", error->message);
+ return 1;
+ }
+ if (log_file == NULL)
+ {
+ g_printerr ("--log-file is required\n");
+ return 1;
+ }
+
+ app.out_path = g_file_new_for_path (log_file);
+ app.out = g_file_replace (app.out_path, NULL, FALSE,
+ G_FILE_CREATE_REPLACE_DESTINATION,
+ NULL, &error);
+ if (app.out == NULL)
+ {
+ g_printerr ("%s\n", error->message);
return 1;
}
sysinfo = gnome_talos_acquire_meta ();
- print_variant (sysinfo);
+ write_variant (sysinfo, NULL, (GOutputStream*)app.out, NULL);
g_variant_unref (sysinfo);
app.loop = g_main_loop_new (NULL, TRUE);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]