[gnome-talos] Refactor code into separate files
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-talos] Refactor code into separate files
- Date: Fri, 23 Sep 2011 18:27:37 +0000 (UTC)
commit 6e8e1903f1fb147b70e34fa256fe2b109af9c4ef
Author: Colin Walters <walters verbum org>
Date: Fri Sep 23 14:22:31 2011 -0400
Refactor code into separate files
Makefile-src.am | 6 +-
src/gnome-talos-meminfo.c | 204 +++++++++++++++++++++++++++++++++++
src/gnome-talos-meminfo.h | 6 +
src/gnome-talos-meta.c | 55 ++++++++++
src/gnome-talos-meta.h | 6 +
src/gnome-talos-session.c | 257 +--------------------------------------------
6 files changed, 280 insertions(+), 254 deletions(-)
---
diff --git a/Makefile-src.am b/Makefile-src.am
index 560deb9..b1df945 100644
--- a/Makefile-src.am
+++ b/Makefile-src.am
@@ -9,7 +9,11 @@ gnome-talos-session-%.desktop: src/gnome-talos-session.desktop.in
-e s,@TYPE\@,$(patsubst gnome-talos-session-%.desktop,%,$@), $< > $ tmp && mv $ tmp $@
bin_PROGRAMS += gnome-talos-session
-gnome_talos_session_SOURCES = src/gnome-talos-session.c
+gnome_talos_session_SOURCES = src/gnome-talos-session.c \
+ src/gnome-talos-meminfo.c \
+ src/gnome-talos-meminfo.h \
+ src/gnome-talos-meta.c \
+ src/gnome-talos-meta.h
gnome_talos_session_CPPFLAGS = $(GIO_UNIX_CFLAGS)
gnome_talos_session_LDADD = $(GIO_UNIX_LIBS)
diff --git a/src/gnome-talos-meminfo.c b/src/gnome-talos-meminfo.c
new file mode 100644
index 0000000..42b1354
--- /dev/null
+++ b/src/gnome-talos-meminfo.c
@@ -0,0 +1,204 @@
+#include <gio/gio.h>
+#include <gio/gunixinputstream.h>
+
+#include <string.h>
+#include <stdio.h>
+
+typedef void (WalkProcCallback) (long pid, const char *prefix, gpointer user_data);
+
+static void
+walk_proc (WalkProcCallback callback, gpointer user_data)
+{
+ GFile *proc;
+ GFileEnumerator *iter;
+ GError *error = NULL;
+ GRegex *pid_regex;
+
+ pid_regex = g_regex_new ("[0-9]+", 0, 0, NULL);
+
+ proc = g_file_new_for_path ("/proc");
+
+ iter = g_file_enumerate_children (proc, "standard::*",
+ G_FILE_QUERY_INFO_NONE,
+ NULL,
+ &error);
+ if (!iter)
+ g_error ("%s", error->message);
+
+ while (TRUE)
+ {
+ GFileInfo *fileinfo;
+ const char *name;
+ GMatchInfo *match;
+ char *fullpath;
+
+ fileinfo = g_file_enumerator_next_file (iter, NULL, &error);
+ if (error != NULL)
+ {
+ g_clear_error (&error);
+ continue;
+ }
+ if (!fileinfo)
+ break;
+
+ fullpath = g_build_filename ("/proc", g_file_info_get_name (fileinfo), NULL);
+
+ name = g_file_info_get_display_name (fileinfo);
+
+ if (g_regex_match (pid_regex, name, 0, &match))
+ {
+ long pid = (long) g_ascii_strtoll (name, NULL, 10);
+ callback (pid, fullpath, user_data);
+ }
+
+ g_free (fullpath);
+ g_object_unref (fileinfo);
+ }
+
+ g_object_unref (iter);
+ g_object_unref (proc);
+
+ g_regex_unref (pid_regex);
+}
+
+typedef struct {
+ GVariantBuilder *builder;
+} AcquireMemData;
+
+static void
+proc_get_process_size (const char *proc_prefix,
+ gulong *vm_size,
+ gulong *rss_size)
+{
+ char *filename;
+ char *contents;
+ char *iter;
+ gsize len;
+ int i;
+
+ *vm_size = *rss_size = 0;
+
+ filename = g_build_filename (proc_prefix, "stat", NULL);
+
+ if (!g_file_get_contents (filename, &contents, &len, NULL))
+ goto out;
+
+ iter = contents;
+ /* See "man proc" for where this 22 comes from */
+ for (i = 0; i < 22; i++) {
+ iter = strchr (iter, ' ');
+ if (!iter)
+ goto out;
+ iter++;
+ }
+ sscanf (iter, " %lu", vm_size);
+ iter = strchr (iter, ' ');
+ if (iter)
+ sscanf (iter, " %lu", rss_size);
+
+ out:
+ g_free (contents);
+ g_free (filename);
+}
+
+static void
+proc_get_uidgid (const char *proc_prefix,
+ gint32 *real_uid,
+ gint32 *effective_uid,
+ gint32 *real_gid,
+ gint32 *effective_gid)
+{
+ char *filename;
+ char *contents;
+ char *uid;
+ char *gid;
+ gsize len;
+
+ filename = g_build_filename (proc_prefix, "status", NULL);
+
+ if (!g_file_get_contents (filename, &contents, &len, NULL))
+ goto out;
+
+ uid = strstr (contents, "\nUid:");
+ if (!uid)
+ goto out;
+ uid += 5;
+
+ *real_uid = (gint32) g_ascii_strtoll (uid,
+ &uid,
+ 10);
+
+ *effective_uid = (gint32) g_ascii_strtoll (uid,
+ NULL,
+ 10);
+
+ gid = strstr (contents, "\nGid:");
+ if (!gid)
+ goto out;
+
+ *real_gid = (gint32) g_ascii_strtoll (gid,
+ &gid,
+ 10);
+
+ *effective_gid = (gint32) g_ascii_strtoll (gid,
+ &gid,
+ 10);
+
+ out:
+ g_free (filename);
+}
+
+
+static void
+acquire_mem_iter (long pid,
+ const char *proc_prefix,
+ gpointer user_data)
+{
+ AcquireMemData *data = user_data;
+ GVariantBuilder *builder = data->builder;
+ gulong vm_size;
+ gulong rss_size;
+ gint32 real_uid, effective_uid, real_gid, effective_gid;
+
+ proc_get_process_size (proc_prefix, &vm_size, &rss_size);
+
+ if (vm_size == 0 && rss_size == 0) /* Probably a kernel thread */
+ return;
+
+ proc_get_uidgid (proc_prefix, &real_uid, &effective_uid, &real_gid, &effective_gid);
+
+ g_variant_builder_open (builder, G_VARIANT_TYPE ("{uv}"));
+ g_variant_builder_add (builder, "u", (guint32)pid);
+
+ g_variant_builder_open (builder, G_VARIANT_TYPE_VARIANT);
+ g_variant_builder_open (builder, G_VARIANT_TYPE_ARRAY);
+
+ g_variant_builder_add (builder, "{sv}", "real-uid", g_variant_new_int32 (real_uid));
+ if (real_uid != effective_uid)
+ g_variant_builder_add (builder, "{sv}", "effective-uid", g_variant_new_int32 (effective_uid));
+ g_variant_builder_add (builder, "{sv}", "rss", g_variant_new_int64 (rss_size));
+ g_variant_builder_add (builder, "{sv}", "vm", g_variant_new_int64 (vm_size));
+
+ g_variant_builder_close (builder);
+ g_variant_builder_close (builder);
+ g_variant_builder_close (builder);
+}
+
+GVariant *
+gnome_talos_acquire_mem (void)
+{
+ GVariantBuilder builder;
+ AcquireMemData data;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("(a{uv})"));
+ data.builder = &builder;
+
+ g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{uv}"));
+
+ walk_proc (acquire_mem_iter, &data);
+
+ g_variant_builder_close (&builder);
+
+ return g_variant_builder_end (&builder);
+}
+
diff --git a/src/gnome-talos-meminfo.h b/src/gnome-talos-meminfo.h
new file mode 100644
index 0000000..cbb297a
--- /dev/null
+++ b/src/gnome-talos-meminfo.h
@@ -0,0 +1,6 @@
+#ifndef __GNOME_TALOS_MEMINFO__
+#define __GNOME_TALOS_MEMINFO__ 1
+
+GVariant * gnome_talos_acquire_mem (void);
+
+#endif
diff --git a/src/gnome-talos-meta.c b/src/gnome-talos-meta.c
new file mode 100644
index 0000000..e9a888e
--- /dev/null
+++ b/src/gnome-talos-meta.c
@@ -0,0 +1,55 @@
+#include <gio/gio.h>
+
+#include <string.h>
+
+GVariant *
+gnome_talos_acquire_meta (void)
+{
+ GVariantBuilder builder;
+ GDBusConnection *system_bus;
+ GError *error = NULL;
+ char *checksum;
+ char *procdata;
+ gsize len;
+
+ system_bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
+ if (!system_bus)
+ g_error ("%s", error->message);
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+
+ checksum = g_compute_checksum_for_string (G_CHECKSUM_SHA256,
+ g_dbus_connection_get_guid (system_bus),
+ -1);
+ g_variant_builder_add (&builder, "{sv}",
+ "uuid",
+ g_variant_new_string (checksum));
+ g_free (checksum);
+
+ g_variant_builder_add (&builder, "{sv}",
+ "mypid",
+ g_variant_new_int64 ((gint64)getpid ()));
+ g_variant_builder_add (&builder, "{sv}",
+ "myuid",
+ g_variant_new_int32 ((gint32)getuid ()));
+
+ if (g_file_get_contents ("/proc/meminfo", &procdata, &len, NULL))
+ {
+ const char *memtotal_str = strstr (procdata, "MemTotal:");
+
+ if (memtotal_str)
+ {
+ guint64 memtotal;
+
+ memtotal = g_ascii_strtoll (memtotal_str + strlen ("MemTotal:"), NULL, 10);
+
+ memtotal *= 1024;
+
+ g_variant_builder_add (&builder, "{sv}",
+ "memtotal",
+ g_variant_new_uint64 (memtotal));
+ }
+ }
+
+ return g_variant_builder_end (&builder);
+}
diff --git a/src/gnome-talos-meta.h b/src/gnome-talos-meta.h
new file mode 100644
index 0000000..64ea139
--- /dev/null
+++ b/src/gnome-talos-meta.h
@@ -0,0 +1,6 @@
+#ifndef __GNOME_TALOS_META__
+#define __GNOME_TALOS_META__ 1
+
+GVariant * gnome_talos_acquire_meta (void);
+
+#endif
diff --git a/src/gnome-talos-session.c b/src/gnome-talos-session.c
index 3a1b5cb..7bba9c5 100644
--- a/src/gnome-talos-session.c
+++ b/src/gnome-talos-session.c
@@ -1,206 +1,9 @@
#include <gio/gio.h>
-#include <gio/gunixinputstream.h>
#include <string.h>
-#include <stdio.h>
-typedef void (WalkProcCallback) (long pid, const char *prefix, gpointer user_data);
-
-static void
-walk_proc (WalkProcCallback callback, gpointer user_data)
-{
- GFile *proc;
- GFileEnumerator *iter;
- GError *error = NULL;
- GRegex *pid_regex;
-
- pid_regex = g_regex_new ("[0-9]+", 0, 0, NULL);
-
- proc = g_file_new_for_path ("/proc");
-
- iter = g_file_enumerate_children (proc, "standard::*",
- G_FILE_QUERY_INFO_NONE,
- NULL,
- &error);
- if (!iter)
- g_error ("%s", error->message);
-
- while (TRUE)
- {
- GFileInfo *fileinfo;
- const char *name;
- GMatchInfo *match;
- char *fullpath;
-
- fileinfo = g_file_enumerator_next_file (iter, NULL, &error);
- if (error != NULL)
- {
- g_clear_error (&error);
- continue;
- }
- if (!fileinfo)
- break;
-
- fullpath = g_build_filename ("/proc", g_file_info_get_name (fileinfo), NULL);
-
- name = g_file_info_get_display_name (fileinfo);
-
- if (g_regex_match (pid_regex, name, 0, &match))
- {
- long pid = (long) g_ascii_strtoll (name, NULL, 10);
- callback (pid, fullpath, user_data);
- }
-
- g_free (fullpath);
- g_object_unref (fileinfo);
- }
-
- g_object_unref (iter);
- g_object_unref (proc);
-
- g_regex_unref (pid_regex);
-}
-
-typedef struct {
- GVariantBuilder *builder;
-} AcquireMemData;
-
-static void
-proc_get_process_size (const char *proc_prefix,
- gulong *vm_size,
- gulong *rss_size)
-{
- char *filename;
- char *contents;
- char *iter;
- gsize len;
- int i;
-
- *vm_size = *rss_size = 0;
-
- filename = g_build_filename (proc_prefix, "stat", NULL);
-
- if (!g_file_get_contents (filename, &contents, &len, NULL))
- goto out;
-
- iter = contents;
- /* See "man proc" for where this 22 comes from */
- for (i = 0; i < 22; i++) {
- iter = strchr (iter, ' ');
- if (!iter)
- goto out;
- iter++;
- }
- sscanf (iter, " %lu", vm_size);
- iter = strchr (iter, ' ');
- if (iter)
- sscanf (iter, " %lu", rss_size);
-
- out:
- g_free (contents);
- g_free (filename);
-}
-
-static void
-proc_get_uidgid (const char *proc_prefix,
- gint32 *real_uid,
- gint32 *effective_uid,
- gint32 *real_gid,
- gint32 *effective_gid)
-{
- char *filename;
- char *contents;
- char *uid;
- char *gid;
- gsize len;
-
- filename = g_build_filename (proc_prefix, "status", NULL);
-
- if (!g_file_get_contents (filename, &contents, &len, NULL))
- goto out;
-
- uid = strstr (contents, "\nUid:");
- if (!uid)
- goto out;
- uid += 5;
-
- *real_uid = (gint32) g_ascii_strtoll (uid,
- &uid,
- 10);
-
- *effective_uid = (gint32) g_ascii_strtoll (uid,
- NULL,
- 10);
-
- gid = strstr (contents, "\nGid:");
- if (!gid)
- goto out;
-
- *real_gid = (gint32) g_ascii_strtoll (gid,
- &gid,
- 10);
-
- *effective_gid = (gint32) g_ascii_strtoll (gid,
- &gid,
- 10);
-
- out:
- g_free (filename);
-}
-
-
-static void
-acquire_mem_iter (long pid,
- const char *proc_prefix,
- gpointer user_data)
-{
- AcquireMemData *data = user_data;
- GVariantBuilder *builder = data->builder;
- gulong vm_size;
- gulong rss_size;
- gint32 real_uid, effective_uid, real_gid, effective_gid;
-
- proc_get_process_size (proc_prefix, &vm_size, &rss_size);
-
- if (vm_size == 0 && rss_size == 0) /* Probably a kernel thread */
- return;
-
- proc_get_uidgid (proc_prefix, &real_uid, &effective_uid, &real_gid, &effective_gid);
-
- g_variant_builder_open (builder, G_VARIANT_TYPE ("{uv}"));
- g_variant_builder_add (builder, "u", (guint32)pid);
-
- g_variant_builder_open (builder, G_VARIANT_TYPE_VARIANT);
- g_variant_builder_open (builder, G_VARIANT_TYPE_ARRAY);
-
- g_variant_builder_add (builder, "{sv}", "real-uid", g_variant_new_int32 (real_uid));
- if (real_uid != effective_uid)
- g_variant_builder_add (builder, "{sv}", "effective-uid", g_variant_new_int32 (effective_uid));
- g_variant_builder_add (builder, "{sv}", "rss", g_variant_new_int64 (rss_size));
- g_variant_builder_add (builder, "{sv}", "vm", g_variant_new_int64 (vm_size));
-
- g_variant_builder_close (builder);
- g_variant_builder_close (builder);
- g_variant_builder_close (builder);
-}
-
-GVariant *
-acquire_mem (void)
-{
- GVariantBuilder builder;
- AcquireMemData data;
-
- g_variant_builder_init (&builder, G_VARIANT_TYPE ("(a{uv})"));
- data.builder = &builder;
-
- g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{uv}"));
-
- walk_proc (acquire_mem_iter, &data);
-
- g_variant_builder_close (&builder);
-
- return g_variant_builder_end (&builder);
-}
+#include "gnome-talos-meminfo.h"
+#include "gnome-talos-meta.h"
GVariant *
gather_snapshot (void)
@@ -212,7 +15,7 @@ gather_snapshot (void)
start_timestamp = g_get_monotonic_time ();
- mem_data = acquire_mem ();
+ mem_data = gnome_talos_acquire_mem ();
end_timestamp = g_get_monotonic_time ();
@@ -240,58 +43,6 @@ gather_snapshot (void)
return data;
}
-GVariant *
-get_system_info (void)
-{
- GVariantBuilder builder;
- GDBusConnection *system_bus;
- GError *error = NULL;
- char *checksum;
- char *procdata;
- gsize len;
-
- system_bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
- if (!system_bus)
- g_error ("%s", error->message);
-
- g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
-
- checksum = g_compute_checksum_for_string (G_CHECKSUM_SHA256,
- g_dbus_connection_get_guid (system_bus),
- -1);
- g_variant_builder_add (&builder, "{sv}",
- "uuid",
- g_variant_new_string (checksum));
- g_free (checksum);
-
- g_variant_builder_add (&builder, "{sv}",
- "mypid",
- g_variant_new_int64 ((gint64)getpid ()));
- g_variant_builder_add (&builder, "{sv}",
- "myuid",
- g_variant_new_int32 ((gint32)getuid ()));
-
- if (g_file_get_contents ("/proc/meminfo", &procdata, &len, NULL))
- {
- const char *memtotal_str = strstr (procdata, "MemTotal:");
-
- if (memtotal_str)
- {
- guint64 memtotal;
-
- memtotal = g_ascii_strtoll (memtotal_str + strlen ("MemTotal:"), NULL, 10);
-
- memtotal *= 1024;
-
- g_variant_builder_add (&builder, "{sv}",
- "memtotal",
- g_variant_new_uint64 (memtotal));
- }
- }
-
- return g_variant_builder_end (&builder);
-}
-
static void
print_variant (GVariant *variant)
{
@@ -324,7 +75,7 @@ main (int argc,
g_type_init ();
- sysinfo = get_system_info ();
+ sysinfo = gnome_talos_acquire_meta ();
print_variant (sysinfo);
g_variant_unref (sysinfo);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]