[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