[netperf-dev] netperf4 commit notice r224 -
branches/gobject_migration/src
raj at netperf.org
raj at netperf.org
Thu Mar 22 10:54:19 PST 2007
Author: raj
Date: 2007-03-22 10:54:16 -0800 (Thu, 22 Mar 2007)
New Revision: 224
Modified:
branches/gobject_migration/src/netperf-test.c
branches/gobject_migration/src/netperf-test.h
branches/gobject_migration/src/netperf4.c
Log:
retrieve and clear stats via interactive command
Modified: branches/gobject_migration/src/netperf-test.c
===================================================================
--- branches/gobject_migration/src/netperf-test.c 2007-03-22 00:28:59 UTC (rev 223)
+++ branches/gobject_migration/src/netperf-test.c 2007-03-22 18:54:16 UTC (rev 224)
@@ -105,6 +105,8 @@
dependant has finished initializing */
LAUNCH_THREAD, /* ask the object to launch a thread to run the
actual test code */
+ GET_STATS, /* ask the object to retrieve stats */
+ CLEAR_STATS, /* ask the object to clear stats */
LAST_SIGNAL /* this should always be the last in the list so
we can use it to size the array correctly. */
};
@@ -113,6 +115,8 @@
static void netperf_test_control_closed(NetperfTest *test);
static void netperf_test_dependency_met(NetperfTest *test);
static void netperf_test_launch_thread(NetperfTest *test);
+static void netperf_test_get_stats(NetperfTest *test);
+static void netperf_test_clear_stats(NetperfTest *test);
/* a place to stash the id's returned by g_signal_new should we ever
need to refer to them by their ID. */
@@ -352,6 +356,8 @@
klass->control_closed = netperf_test_control_closed;
klass->dependency_met = netperf_test_dependency_met;
klass->launch_thread = netperf_test_launch_thread;
+ klass->get_stats = netperf_test_get_stats;
+ klass->clear_stats = netperf_test_clear_stats;
netperf_test_signals[NEW_MESSAGE] =
g_signal_new("new_message", /* signal name */
@@ -369,6 +375,7 @@
G_TYPE_NONE, /* type of return value */
1, /* one additional parameter */
G_TYPE_POINTER); /* and its type */
+
netperf_test_signals[CONTROL_CLOSED] =
g_signal_new("control_closed",
TYPE_NETPERF_TEST,
@@ -379,7 +386,28 @@
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE,
0);
+ netperf_test_signals[GET_STATS] =
+ g_signal_new("get_stats",
+ TYPE_NETPERF_TEST,
+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
+ G_STRUCT_OFFSET(NetperfTestClass, get_stats),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+ netperf_test_signals[CLEAR_STATS] =
+ g_signal_new("clear_stats",
+ TYPE_NETPERF_TEST,
+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
+ G_STRUCT_OFFSET(NetperfTestClass, clear_stats),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
netperf_test_signals[DEPENDENCY_MET] =
g_signal_new("dependency_met",
TYPE_NETPERF_TEST,
@@ -425,6 +453,58 @@
return;
}
+static void netperf_test_get_stats(NetperfTest *test)
+{
+ xmlNodePtr message;
+
+ if ((message = xmlNewNode(NULL, (xmlChar *)"get_stats")) != NULL) {
+ /* zippity do dah */
+ if (xmlSetProp(message,(xmlChar *)"tid",test->id) != NULL) {
+ /* zippity ey */
+ NetperfNetserver *server = NULL;
+ server = g_hash_table_lookup(server_hash,test->server_id);
+ g_signal_emit_by_name(server,"send_message",message);
+ }
+ else {
+ /* xmlSetProp failed, we should probably do something about that */
+ test->state = NP_TST_ERROR;
+ test->state_req = NP_TST_ERROR;
+ }
+ }
+ else {
+ /* xmlNewNode failed, we should probably do something about that */
+ test->state = NP_TST_ERROR;
+ test->state_req = NP_TST_ERROR;
+ }
+
+}
+
+static void netperf_test_clear_stats(NetperfTest *test)
+
+{
+ xmlNodePtr message;
+
+ if ((message = xmlNewNode(NULL, (xmlChar *)"clear_stats")) != NULL) {
+ /* zippity do dah */
+ if (xmlSetProp(message,(xmlChar *)"tid",test->id) != NULL) {
+ /* zippity ey */
+ NetperfNetserver *server = NULL;
+ server = g_hash_table_lookup(server_hash,test->server_id);
+ g_signal_emit_by_name(server,"send_message",message);
+ }
+ else {
+ /* xmlSetProp failed, we should probably do something about that */
+ test->state = NP_TST_ERROR;
+ test->state_req = NP_TST_ERROR;
+ }
+ }
+ else {
+ /* xmlNewNode failed, we should probably do something about that */
+ test->state = NP_TST_ERROR;
+ test->state_req = NP_TST_ERROR;
+ }
+
+}
/* we are sent this signal when the test on which we are dependant has
finished its initialization, which means we can get our dependency
data. this will look rather like netperf_test_initialize but with a
Modified: branches/gobject_migration/src/netperf-test.h
===================================================================
--- branches/gobject_migration/src/netperf-test.h 2007-03-22 00:28:59 UTC (rev 223)
+++ branches/gobject_migration/src/netperf-test.h 2007-03-22 18:54:16 UTC (rev 224)
@@ -195,6 +195,8 @@
void (*control_closed)(NetperfTest *test);
void (*dependency_met)(NetperfTest *test);
void (*launch_thread)(NetperfTest *test);
+ void (*get_stats)(NetperfTest *test);
+ void (*clear_stats)(NetperfTest *test);
/* methods */
Modified: branches/gobject_migration/src/netperf4.c
===================================================================
--- branches/gobject_migration/src/netperf4.c 2007-03-22 00:28:59 UTC (rev 223)
+++ branches/gobject_migration/src/netperf4.c 2007-03-22 18:54:16 UTC (rev 224)
@@ -457,7 +457,22 @@
NULL);
}
+void send_test_signal(gpointer key, gpointer value, gpointer user_data)
+{
+ /* remember that the value is the pointer to the test object, not
+ the key, which we don't really use here but to make
+ g_hash_mumble_for_each happy. the user_data will be the desired
+ state */
+ g_print("about to try to send %s signal to test %s\n",
+ (char *)user_data,
+ (char *) key);
+
+ g_signal_emit_by_name(value,
+ (char *)user_data);
+
+}
+
void print_test_hash_entry(gpointer key, gpointer value, gpointer user_data)
{
NetperfTest *test;
@@ -1018,11 +1033,104 @@
return return_value;
}
+static gboolean parse_interactive_stats_get_command(char *arguments,
+ gpointer data)
+{
+
+ gboolean return_value = TRUE;
+ NetperfTest *test;
+ gchar **split;
+
+ NETPERF_DEBUG_ENTRY(debug,where);
+
+ split = g_strsplit_set(arguments,
+ " \r\n",
+ 2);
+
+ if (g_strcasecmp(split[0],"all") == 0) {
+ g_hash_table_foreach(test_hash,send_test_signal,"get_stats");
+ }
+ else {
+ test = g_hash_table_lookup(test_hash,split[0]);
+ if (NULL != test) {
+ send_test_signal(split[0],test,"get_stats");
+ }
+ else {
+ g_print("test id %s unknown!\n",
+ split[0]);
+ }
+ }
+
+ g_strfreev(split);
+
+ NETPERF_DEBUG_EXIT(debug,where);
+
+ return return_value;
+
+ return return_value;
+}
+
+static gboolean parse_interactive_stats_clear_command(char *arguments,
+ gpointer data)
+{
+ gboolean return_value;
+ NetperfTest *test;
+ gchar **split;
+
+ NETPERF_DEBUG_ENTRY(debug,where);
+
+ g_print("%s called with arguments |%s|\n",__func__,arguments);
+
+ split = g_strsplit_set(arguments,
+ " \r\n",
+ 2);
+
+ if (g_strcasecmp(split[0],"all") == 0) {
+ g_hash_table_foreach(test_hash,send_test_signal,"clear_stats");
+ }
+ else {
+ test = g_hash_table_lookup(test_hash,split[0]);
+ if (NULL != test) {
+ send_test_signal(split[0],test,"clear_stats");
+ }
+ else {
+ g_print("test id %s unknown!\n",
+ split[0]);
+ }
+ }
+
+ g_strfreev(split);
+
+ NETPERF_DEBUG_EXIT(debug,where);
+
+ return return_value;
+
+}
static gboolean parse_interactive_stats_command(char *arguments,
gpointer data)
{
gboolean return_value = TRUE;
+ gchar **split;
+ g_print("%s called with arguetns |%s|\n",
+ __func__,
+ arguments);
+
+ split = g_strsplit_set(arguments,
+ " \r\n",
+ 2);
+ if (g_strcasecmp("get", split[0]) == 0)
+ return_value = parse_interactive_stats_get_command(split[1],
+ data);
+ else if (g_strcasecmp("clear", split[0]) == 0)
+ return_value = parse_interactive_stats_clear_command(split[1],
+ data);
+ else {
+ g_print("Silly rabbit, STATS are for tests!\n");
+ }
+
+ g_strfreev(split);
+
return return_value;
}
More information about the netperf-dev
mailing list