[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r1326 - gnunet-gtk/src/plugins/stats
From: |
grothoff |
Subject: |
[GNUnet-SVN] r1326 - gnunet-gtk/src/plugins/stats |
Date: |
Fri, 8 Jul 2005 16:16:05 -0700 (PDT) |
Author: grothoff
Date: 2005-07-08 16:16:02 -0700 (Fri, 08 Jul 2005)
New Revision: 1326
Modified:
gnunet-gtk/src/plugins/stats/Makefile.am
gnunet-gtk/src/plugins/stats/statistics.c
Log:
stats hacking
Modified: gnunet-gtk/src/plugins/stats/Makefile.am
===================================================================
--- gnunet-gtk/src/plugins/stats/Makefile.am 2005-07-08 23:15:50 UTC (rev
1325)
+++ gnunet-gtk/src/plugins/stats/Makefile.am 2005-07-08 23:16:02 UTC (rev
1326)
@@ -10,10 +10,12 @@
libgnunetgtkmodule_stats.la
libgnunetgtkmodule_stats_la_SOURCES = \
+ functions.c functions.h \
statistics.c
libgnunetgtkmodule_stats_la_LIBADD = \
$(top_builddir)/src/common/libgnunetgtk_common.la \
-lgnunetutil \
+ -lgnunetgetoption_api \
-lgnunetstats_api
libgnunetgtkmodule_stats_la_LDFLAGS = \
-export-dynamic -avoid-version -module
Modified: gnunet-gtk/src/plugins/stats/statistics.c
===================================================================
--- gnunet-gtk/src/plugins/stats/statistics.c 2005-07-08 23:15:50 UTC (rev
1325)
+++ gnunet-gtk/src/plugins/stats/statistics.c 2005-07-08 23:16:02 UTC (rev
1326)
@@ -19,494 +19,20 @@
Portions of this code were adopted from the
gnome-system-monitor v2.0.5, (C) 2001 Kevin Vandersloot
-
-
- Todo:
- - add any more StatEntries, update menu accordingly.
*/
#include "platform.h"
#include "gnunetgtk_common.h"
#include <GNUnet/gnunet_stats_lib.h>
+#include <GNUnet/gnunet_getoption_lib.h>
+#include "functions.h"
-#define UPDATE_INTERVAL (30 * cronSECONDS)
-#define STAT_CONNECTIVITY 0
-#define STAT_CPU_LOAD 1
-#define STAT_IN_TRAFFIC 2
-#define STAT_OUT_TRAFFIC 3
+#define MAX_COLOR 4
+#define GNOME_PAD_SMALL 2
+#define FRAME_WIDTH 0
typedef struct {
- char * statName;
- long long value;
- long long lvalue;
- cron_t delta;
-} StatPair;
-
-static StatPair * lastStatValues;
-static unsigned int lsv_size;
-static cron_t lastUpdate;
-static Mutex lock;
-
-static void updateStatValues(GNUNET_TCP_SOCKET * sock) {
- STATS_CS_MESSAGE * statMsg;
- CS_HEADER csHdr;
- unsigned int count;
- unsigned int i;
- int j;
- int mpos;
- int found;
- char * optName;
- cron_t now;
- cron_t prev;
-
- cronTime(&now);
- MUTEX_LOCK(&lock);
- if (now - lastUpdate < UPDATE_INTERVAL) {
- MUTEX_UNLOCK(&lock);
- return;
- }
- prev = lastUpdate;
- lastUpdate = now;
- csHdr.size
- = htons(sizeof(CS_HEADER));
- csHdr.tcpType
- = htons(STATS_CS_PROTO_GET_STATISTICS);
- if (SYSERR == writeToSocket(sock,
- &csHdr)) {
- MUTEX_UNLOCK(&lock);
- return;
- }
- statMsg
- = MALLOC(MAX_BUFFER_SIZE);
- statMsg->totalCounters
- = htonl(1); /* to ensure we enter the loop */
- count = 0;
- while ( count < ntohl(statMsg->totalCounters) ) {
- if (SYSERR == readFromSocket(sock,
- (CS_HEADER**)&statMsg)) {
- FREE(statMsg);
- MUTEX_UNLOCK(&lock);
- return;
- }
- if (ntohs(statMsg->header.size) < sizeof(STATS_CS_MESSAGE)) {
- BREAK();
- break;
- }
- mpos = sizeof(unsigned long long) * ntohl(statMsg->statCounters);
- if ( ((char*)(((STATS_CS_MESSAGE_GENERIC*)statMsg)->values))
- [ntohs(statMsg->header.size) - sizeof(STATS_CS_MESSAGE) - 1] != '\0') {
- BREAK();
- break;
- }
- for (i=0;i<ntohl(statMsg->statCounters);i++) {
- optName = &((char*)(((STATS_CS_MESSAGE_GENERIC*)statMsg)->values))[mpos];
- if ( (mpos > ntohs(statMsg->header.size) - sizeof(STATS_CS_MESSAGE)) ||
- (mpos + strlen(optName) + 1 >
- ntohs(statMsg->header.size) - sizeof(STATS_CS_MESSAGE)) ) {
- BREAK();
- break; /* out of bounds! */
- }
- found = -1;
- for (j=0;j<lsv_size;j++)
- if (0 == strcmp(optName,
- lastStatValues[j].statName))
- found = j;
- if (found == -1) {
- found = lsv_size;
- GROW(lastStatValues,
- lsv_size,
- lsv_size+1);
- lastStatValues[found].statName
- = STRDUP(optName);
- }
- lastStatValues[found].lvalue
- = lastStatValues[found].value;
- lastStatValues[found].value
- = ntohll(((STATS_CS_MESSAGE_GENERIC*)statMsg)->values[i]);
- lastStatValues[found].delta
- = now-prev;
- mpos += strlen(optName)+1;
- }
- count += ntohl(statMsg->statCounters);
- } /* end while */
- FREE(statMsg);
- MUTEX_UNLOCK(&lock);
-}
-
-static int getStatValue(long long * value,
- long long * lvalue,
- cron_t * dtime,
- GNUNET_TCP_SOCKET * sock,
- const char * optName) {
- unsigned int i;
-
- *value = 0;
- if (lvalue != NULL)
- *lvalue = 0;
- updateStatValues(sock);
- MUTEX_LOCK(&lock);
- for (i=0;i<lsv_size;i++) {
- if (0 == strcmp(optName,
- lastStatValues[i].statName)) {
- *value = lastStatValues[i].value;
- if (lvalue != NULL)
- *lvalue = lastStatValues[i].lvalue;
- if (dtime != NULL)
- *dtime = lastStatValues[i].delta;
- MUTEX_UNLOCK(&lock);
- return OK;
- }
- }
- MUTEX_UNLOCK(&lock);
- return SYSERR;
-}
-
-/**
- * Callback function to obtain the latest stats
- * data for this stat display.
- */
-typedef int (*UpdateData)(GNUNET_TCP_SOCKET * sock,
- const void * closure,
- gfloat ** data);
-
-static int getConnectedNodesStat(GNUNET_TCP_SOCKET * sock,
- const void * closure,
- gfloat ** data) {
- long long val;
- char * cmh;
- long cval;
-
- cmh = getConfigurationOptionValue(sock,
- "gnunetd",
- "connection-max-hosts");
- if (cmh == NULL)
- return SYSERR;
- cval = atol(cmh);
- FREE(cmh);
- if (OK != getStatValue(&val,
- NULL,
- NULL,
- sock,
- _("# currently connected nodes")))
- return SYSERR;
- data[0][0] = 0.8 * val / cval;
- return OK;
-}
-
-static int getCPULoadStat(GNUNET_TCP_SOCKET * sock,
- const void * closure,
- gfloat ** data) {
- long long val;
-
- if (OK != getStatValue(&val,
- NULL,
- NULL,
- sock,
- _("% of allowed cpu load")))
- return SYSERR;
- data[0][0] = val / 125.0;
- return OK;
-}
-
-static const unsigned short afs_protocol_messages_queries[] = {
- AFS_p2p_PROTO_QUERY,
- AFS_p2p_PROTO_NSQUERY,
- 0,
-};
-
-static const unsigned short afs_protocol_messages_content[] = {
- AFS_p2p_PROTO_3HASH_RESULT,
- AFS_p2p_PROTO_CHK_RESULT,
- AFS_p2p_PROTO_SBLOCK_RESULT,
- 0,
-};
-
-static int getTrafficRecvStats(GNUNET_TCP_SOCKET * sock,
- const void * closure,
- gfloat ** data) {
- long long total;
- long long noise;
- long long content;
- long long queries;
- long long ltotal;
- long long lnoise;
- long long lcontent;
- long long lqueries;
- long long band;
- long long tmp;
- long long ltmp;
- cron_t dtime;
- char * available;
- char * buffer;
- int i;
-
- MUTEX_LOCK(&lock);
- if (OK != getStatValue(&total,
- <otal,
- &dtime,
- sock,
- _("# bytes decrypted")))
- return SYSERR;
- if (OK != getStatValue(&noise,
- &lnoise,
- NULL,
- sock,
- _("# bytes of noise received")))
- return SYSERR;
- i = 0;
- content = lcontent = 0;
- buffer = MALLOC(512);
- while (afs_protocol_messages_content[i] != 0) {
- SNPRINTF(buffer,
- 512,
- _("# bytes received of type %d"),
- afs_protocol_messages_content[i++]);
- if (OK == getStatValue(&tmp,
- <mp,
- NULL,
- sock,
- buffer)) {
- content += tmp;
- lcontent += ltmp;
- }
- }
- i = 0;
- while (afs_protocol_messages_queries[i] != 0) {
- SNPRINTF(buffer,
- 512,
- _("# bytes received of type %d"),
- afs_protocol_messages_queries[i++]);
- if (OK == getStatValue(&tmp,
- <mp,
- NULL,
- sock,
- buffer)) {
- queries += tmp;
- lqueries += ltmp;
- }
- }
- FREE(buffer);
- MUTEX_UNLOCK(&lock);
- available = getConfigurationOptionValue(sock,
- "LOAD",
- "MAXNETDOWNBPSTOTAL");
- if (available == NULL)
- return SYSERR;
- band = atol(available) * dtime / cronSECONDS;
- FREE(available);
- total -= ltotal;
- noise -= lnoise;
- queries -= lqueries;
- content -= lcontent;
- if (band <= 0) {
- data[0][0] = 0.0;
- data[0][1] = 0.0;
- data[0][2] = 0.0;
- data[0][3] = 0.0;
- return OK;
- }
- data[0][0] = 0.8 * noise / band; /* red */
- data[0][1] = 0.8 * (content+noise) / band; /* green */
- data[0][2] = 0.8 * (queries+content+noise) / band; /* yellow */
- data[0][3] = 0.8 * total / band; /* blue */
- /*printf("I: %f %f %f\n",
- data[0][0],
- data[0][1],
- data[0][2]);*/
-
- return OK;
-}
-
-
- static int getTrafficSendStats(GNUNET_TCP_SOCKET * sock,
- const void * closure,
- gfloat ** data) {
- long long total;
- long long noise;
- long long content;
- long long queries;
- long long ltotal;
- long long lnoise;
- long long lcontent;
- long long lqueries;
- long long band;
- long long tmp;
- long long ltmp;
- cron_t dtime;
- char * available;
- char * buffer;
- int i;
-
- MUTEX_LOCK(&lock);
- if (OK != getStatValue(&total,
- <otal,
- &dtime,
- sock,
- _("# encrypted bytes sent")))
- return SYSERR;
- if (OK != getStatValue(&noise,
- &lnoise,
- NULL,
- sock,
- _("# bytes noise sent")))
- return SYSERR;
- i = 0;
- content = lcontent = 0;
- buffer = MALLOC(512);
- while (afs_protocol_messages_content[i] != 0) {
- SNPRINTF(buffer,
- 512,
- _("# bytes transmitted of type %d"),
- afs_protocol_messages_content[i++]);
- if (OK == getStatValue(&tmp,
- <mp,
- NULL,
- sock,
- buffer)) {
- content += tmp;
- lcontent += ltmp;
- }
- }
- i = 0;
- while (afs_protocol_messages_queries[i] != 0) {
- SNPRINTF(buffer,
- 512,
- _("# bytes received of type %d"),
- afs_protocol_messages_queries[i++]);
- if (OK == getStatValue(&tmp,
- <mp,
- NULL,
- sock,
- buffer)) {
- queries += tmp;
- lqueries += ltmp;
- }
- }
- FREE(buffer);
- MUTEX_UNLOCK(&lock);
- available = getConfigurationOptionValue(sock,
- "LOAD",
- "MAXNETUPBPSTOTAL");
- if (available == NULL)
- return SYSERR;
- band = atol(available) * dtime / cronSECONDS;
- FREE(available);
- total -= ltotal;
- noise -= lnoise;
- queries -= lqueries;
- content -= lcontent;
- if (band <= 0) {
- data[0][0] = 0.0;
- data[0][1] = 0.0;
- data[0][2] = 0.0;
- data[0][3] = 0.0;
- return OK;
- }
- data[0][0] = 0.8 * noise / band; /* red */
- data[0][1] = 0.8 * (noise + content) / band; /* green */
- data[0][2] = 0.8 * (noise + content + queries) / band; /* yellow */
- data[0][3] = 0.8 * total / band; /* yellow */
- /* printf("O: %f %f %f\n",
- data[0][0],
- data[0][1],
- data[0][2]);*/
-
- return OK;
-}
-
-
-
-typedef struct SE_ {
- char * paneName;
- char * frameName;
- UpdateData getData;
- void * get_closure;
- unsigned int count;
- int fill; /* YES / NO */
-} StatEntry;
-
-#define STATS_COUNT 4
-
-static StatEntry stats[] = {
- {
- gettext_noop("Connectivity"),
- gettext_noop("# connected nodes (100% = connection table size)"),
- &getConnectedNodesStat,
- NULL,
- 1,
- NO,
- },
- {
- gettext_noop("CPU load"),
- gettext_noop("CPU load (in percent of allowed load)"),
- &getCPULoadStat,
- NULL,
- 1,
- NO,
- },
- {
- gettext_noop("Inbound Traffic"),
- gettext_noop("Noise (red), Content (green), Queries (yellow), other
(blue)"),
- &getTrafficRecvStats,
- NULL,
- 4,
- YES,
- },
- {
- gettext_noop("Outbound Traffic"),
- gettext_noop("Noise (red), Content (green), Queries (yellow), other
(blue)"),
- &getTrafficSendStats,
- NULL,
- 4,
- YES,
- },
- {
- NULL,
- NULL,
- NULL,
- NULL,
- 1,
- NO,
- },
-};
-
-
-/**
- * Remove the active page from the notebook.
- */
-static void statClose(void) {
- gint pagenr;
-
- pagenr = gtk_notebook_get_current_page(notebook);
- gtk_notebook_remove_page(notebook, pagenr);
- /* Need to refresh the widget --
- This forces the widget to redraw itself. */
- gtk_widget_draw(GTK_WIDGET(notebook), NULL);
-}
-
-
-/**
- */
-static void addClosePopupMenu(GtkWidget * widget) {
- GtkWidget * menu;
- GtkItemFactory * popupFactory;
-
- popupFactory = gtk_item_factory_new(GTK_TYPE_MENU, "<main>",
- NULL);
- gtk_item_factory_create_items(popupFactory,
- statWindowMenuItems,
- statWindowMenu,
- NULL);
- menu = gtk_item_factory_get_widget(popupFactory, "<main>");
- gtk_signal_connect(GTK_OBJECT(widget),
- "button_press_event",
- GTK_SIGNAL_FUNC(popupCallback),
- menu);
-}
-
-
-typedef struct {
gint type;
guint count;
guint speed;
@@ -524,29 +50,15 @@
GdkGC *gc;
int timer_index;
gboolean draw;
- GNUNET_TCP_SOCKET * sock;
int statIdx;
} LoadGraph;
-#define MAX_COLOR 4
-
typedef struct {
- gint graph_update_interval;
GdkColor bg_color;
GdkColor frame_color;
GdkColor mem_color[MAX_COLOR];
} ProcConfig;
-typedef struct ProcData {
- ProcConfig config;
- LoadGraph *mem_graph;
- int statIdx;
-} ProcData;
-
-#define GNOME_PAD_SMALL 2
-#define FRAME_WIDTH 0
-
-
/**
* Redraws the backing pixmap for the load graph and updates the window
*/
@@ -606,7 +118,11 @@
0, y1, g->draw_width, y1);
}
- gdk_gc_set_line_attributes (g->gc, 2, GDK_LINE_SOLID, GDK_CAP_ROUND,
GDK_JOIN_MITER );
+ gdk_gc_set_line_attributes(g->gc,
+ 2,
+ GDK_LINE_SOLID,
+ GDK_CAP_ROUND,
+ GDK_JOIN_MITER);
delx = (float)g->draw_width / ( g->num_points - 1);
for (j=0;j<g->count;j++) {
@@ -652,7 +168,10 @@
}
}
- gdk_gc_set_line_attributes (g->gc, 1, GDK_LINE_SOLID, GDK_CAP_ROUND,
GDK_JOIN_MITER );
+ gdk_gc_set_line_attributes (g->gc, 1,
+ GDK_LINE_SOLID,
+ GDK_CAP_ROUND,
+ GDK_JOIN_MITER );
gdk_draw_pixmap (g->disp->window,
g->disp->style->fg_gc [GTK_WIDGET_STATE(g->disp)],
@@ -665,7 +184,8 @@
/* Updates the load graph when the timeout expires */
-static int load_graph_update(LoadGraph *g) {
+static gboolean load_graph_update(gpointer ptr) {
+ LoadGraph *g = ptr;
guint i;
guint j;
@@ -673,8 +193,7 @@
memcpy(g->odata[i],
g->data[i],
g->data_size * g->count);
- stats[g->statIdx].getData(g->sock,
- stats[g->statIdx].get_closure,
+ stats[g->statIdx].getData(stats[g->statIdx].get_closure,
g->data);
for (i=0;i<g->num_points-1;i++)
for (j=0;j<g->count;j++)
@@ -684,7 +203,7 @@
return TRUE;
}
-static void load_graph_unalloc (LoadGraph *g) {
+static void load_graph_unalloc(LoadGraph *g) {
int i;
if (!g->allocated)
return;
@@ -733,24 +252,24 @@
}
if (!c->pixmap)
- c->pixmap = gdk_pixmap_new (widget->window,
- widget->allocation.width,
- widget->allocation.height,
- gtk_widget_get_visual (c->disp)->depth);
- gdk_draw_rectangle (c->pixmap,
- widget->style->black_gc,
- TRUE, 0,0,
- widget->allocation.width,
- widget->allocation.height);
- gdk_draw_pixmap (widget->window,
- c->disp->style->fg_gc [GTK_WIDGET_STATE(widget)],
- c->pixmap,
- 0, 0,
- 0, 0,
- c->disp->allocation.width,
- c->disp->allocation.height);
+ c->pixmap = gdk_pixmap_new(widget->window,
+ widget->allocation.width,
+ widget->allocation.height,
+ gtk_widget_get_visual (c->disp)->depth);
+ gdk_draw_rectangle(c->pixmap,
+ widget->style->black_gc,
+ TRUE, 0,0,
+ widget->allocation.width,
+ widget->allocation.height);
+ gdk_draw_pixmap(widget->window,
+ c->disp->style->fg_gc[GTK_WIDGET_STATE(widget)],
+ c->pixmap,
+ 0, 0,
+ 0, 0,
+ c->disp->allocation.width,
+ c->disp->allocation.height);
- load_graph_draw (c);
+ load_graph_draw(c);
return TRUE;
}
@@ -759,18 +278,18 @@
gpointer data_ptr) {
LoadGraph *g = (LoadGraph *) data_ptr;
- gdk_draw_pixmap (widget->window,
- widget->style->fg_gc [GTK_WIDGET_STATE(widget)],
- g->pixmap,
- event->area.x, event->area.y,
- event->area.x, event->area.y,
- event->area.width, event->area.height);
+ gdk_draw_pixmap(widget->window,
+ widget->style->fg_gc [GTK_WIDGET_STATE(widget)],
+ g->pixmap,
+ event->area.x, event->area.y,
+ event->area.x, event->area.y,
+ event->area.width, event->area.height);
return FALSE;
}
static void load_graph_stop (LoadGraph *g) {
if (g->timer_index != -1) {
- gtk_timeout_remove (g->timer_index);
+ gtk_timeout_remove(g->timer_index);
g->timer_index = -1;
}
if (!g)
@@ -784,139 +303,135 @@
load_graph_stop(g);
if (g->timer_index != -1)
gtk_timeout_remove (g->timer_index);
- if (g->sock != NULL)
- releaseClientSocket(g->sock);
load_graph_unalloc(g);
FREE(g->colors);
FREE(g);
}
-static LoadGraph * load_graph_new(ProcData *procdata) {
+static LoadGraph * load_graph_new(int statIdx,
+ const ProcConfig * config) {
LoadGraph *g;
unsigned int i;
- if ( (procdata->statIdx < 0) ||
- (procdata->statIdx >= STATS_COUNT) ) {
+ if (stats[statIdx].count > MAX_COLOR) {
BREAK();
return NULL;
}
- if (stats[procdata->statIdx].count > MAX_COLOR) {
- BREAK();
- return NULL;
- }
g = MALLOC(sizeof(LoadGraph));
- g->sock = getClientSocket();
- g->statIdx = procdata->statIdx;
- g->count = stats[g->statIdx].count;
- g->speed = procdata->config.graph_update_interval;
+ g->statIdx = statIdx;
+ g->count = stats[statIdx].count;
+ g->speed = UPDATE_INTERVAL / cronMILLIS;
g->num_points = 600;
g->colors = MALLOC(sizeof(GdkColor) * (2+g->count));
- g->colors[0] = procdata->config.bg_color;
- g->colors[1] = procdata->config.frame_color;
+ g->colors[0] = config->bg_color;
+ g->colors[1] = config->frame_color;
for (i=0;i<g->count;i++)
- g->colors[2+i] = procdata->config.mem_color[i];
+ g->colors[2+i] = config->mem_color[i];
g->timer_index = -1;
g->draw = FALSE;
g->main_widget = gtk_vbox_new (FALSE, FALSE);
- gtk_widget_show (g->main_widget);
+ gtk_widget_show(g->main_widget);
g->disp = gtk_drawing_area_new();
gtk_widget_show (g->disp);
- gtk_signal_connect (GTK_OBJECT (g->disp),
- "expose_event",
- GTK_SIGNAL_FUNC (load_graph_expose), g);
- gtk_signal_connect (GTK_OBJECT(g->disp),
- "configure_event",
- GTK_SIGNAL_FUNC (load_graph_configure), g);
- gtk_signal_connect (GTK_OBJECT(g->disp),
- "destroy",
- GTK_SIGNAL_FUNC (load_graph_destroy), g);
- gtk_widget_add_events(g->disp, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
- gtk_box_pack_start(GTK_BOX (g->main_widget), g->disp, TRUE, TRUE, 0);
+ gtk_signal_connect(GTK_OBJECT (g->disp),
+ "expose_event",
+ GTK_SIGNAL_FUNC (load_graph_expose), g);
+ gtk_signal_connect(GTK_OBJECT(g->disp),
+ "configure_event",
+ GTK_SIGNAL_FUNC (load_graph_configure), g);
+ gtk_signal_connect(GTK_OBJECT(g->disp),
+ "destroy",
+ GTK_SIGNAL_FUNC (load_graph_destroy), g);
+ gtk_widget_add_events(g->disp,
+ GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
+ gtk_box_pack_start(GTK_BOX(g->main_widget),
+ g->disp,
+ TRUE,
+ TRUE,
+ 0);
load_graph_alloc(g);
- gtk_widget_show_all (g->main_widget);
+ gtk_widget_show_all(g->main_widget);
g->timer_index = gtk_timeout_add(g->speed,
- (GtkFunction) load_graph_update, g);
+ &load_graph_update, g);
return g;
}
-static void load_graph_start(LoadGraph *g) {
- if (!g)
- return;
-
- if (g->timer_index == -1)
- g->timer_index = gtk_timeout_add(g->speed,
- (GtkFunction) load_graph_update, g);
-
- g->draw = TRUE;
-}
-
-static GtkWidget * create_sys_view(ProcData * procdata) {
+static GtkWidget * create_sys_view(int statIdx,
+ const ProcConfig * config) {
GtkWidget * mem_frame;
LoadGraph * mem_graph;
- mem_graph = load_graph_new(procdata);
- procdata->mem_graph = mem_graph;
+ mem_graph = load_graph_new(statIdx,
+ config);
if (mem_graph == NULL)
return NULL; /* oops */
- mem_frame = gtk_frame_new(_(stats[procdata->statIdx].frameName));
+ mem_frame = gtk_frame_new(_(stats[statIdx].frameName));
gtk_container_add(GTK_CONTAINER(mem_frame),
mem_graph->main_widget);
gtk_container_set_border_width(GTK_CONTAINER(mem_graph->main_widget),
GNOME_PAD_SMALL);
- gtk_container_set_border_width (GTK_CONTAINER(mem_frame),
- GNOME_PAD_SMALL);
+ gtk_container_set_border_width(GTK_CONTAINER(mem_frame),
+ GNOME_PAD_SMALL);
gtk_widget_show(mem_frame);
- addClosePopupMenu(mem_frame);
+ if (mem_graph->timer_index == -1)
+ mem_graph->timer_index
+ = gtk_timeout_add(mem_graph->speed,
+ &load_graph_update,
+ mem_graph);
+ mem_graph->draw = TRUE;
return mem_frame;
}
-static GtkWidget * create_main_window(int stat) {
- GtkWidget *sys_box;
- ProcData procdata;
-
- memset(&procdata, 0, sizeof(ProcData));
- procdata.config.graph_update_interval
- = UPDATE_INTERVAL / cronMILLIS;
- procdata.statIdx = stat;
+
+
+void init_stats() {
+ GtkWidget * sys_box;
+ GtkWidget * label;
+ GtkWidget * notebook;
+ ProcConfig config;
+ int i;
+
+ init_functions();
+ notebook
+ = glade_xml_get_widget(getMainXML(),
+ "downloadNotebook");
+ memset(&config,
+ 0,
+ sizeof(ProcConfig));
gdk_color_parse("black",
- &procdata.config.bg_color);
+ &config.bg_color);
gdk_color_parse("gray",
- &procdata.config.frame_color);
+ &config.frame_color);
gdk_color_parse("red",
- &procdata.config.mem_color[0]);
+ &config.mem_color[0]);
gdk_color_parse("green",
- &procdata.config.mem_color[1]);
+ &config.mem_color[1]);
gdk_color_parse("yellow",
- &procdata.config.mem_color[2]);
+ &config.mem_color[2]);
gdk_color_parse("blue",
- &procdata.config.mem_color[3]);
+ &config.mem_color[3]);
GNUNET_ASSERT(MAX_COLOR == 4);
- sys_box = create_sys_view(&procdata);
- if (sys_box == NULL)
- return NULL;
- load_graph_start(procdata.mem_graph);
- return sys_box;
+ i = -1;
+ while (stats[++i].paneName != NULL) {
+ sys_box = create_sys_view(i,
+ &config);
+ if (sys_box == NULL)
+ continue; /* oops */
+
+ label = gtk_label_new(gettext(stats[i].paneName));
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+ sys_box,
+ label);
+ }
+ gtk_widget_show(notebook);
}
-
-
-
-
-void init_stats() {
- MUTEX_CREATE_RECURSIVE(&lock);
- wid = create_main_window(dptr);
- if (wid != NULL)
- addToNotebook(_(stats[dptr].paneName),
- wid);
-
-}
-
void done_stats() {
- MUTEX_DESTROY(&lock);
+ done_functions();
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r1326 - gnunet-gtk/src/plugins/stats,
grothoff <=