[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r34233 - gnunet/src/sensor
From: |
gnunet |
Subject: |
[GNUnet-SVN] r34233 - gnunet/src/sensor |
Date: |
Thu, 28 Aug 2014 15:37:00 +0200 |
Author: otarabai
Date: 2014-08-28 15:37:00 +0200 (Thu, 28 Aug 2014)
New Revision: 34233
Added:
gnunet/src/sensor/gnunet-sensor-profiler.c
gnunet/src/sensor/gnunet-sensor-profiler.conf
Modified:
gnunet/src/sensor/
gnunet/src/sensor/Makefile.am
Log:
sensor: towards profiler
Index: gnunet/src/sensor
===================================================================
--- gnunet/src/sensor 2014-08-28 13:31:48 UTC (rev 34232)
+++ gnunet/src/sensor 2014-08-28 13:37:00 UTC (rev 34233)
Property changes on: gnunet/src/sensor
___________________________________________________________________
Modified: svn:ignore
## -7,3 +7,4 ##
test_sensor_api
test_gnunet-service-sensor_reporting
test_pow_sign
+gnunet-sensor-profiler
Modified: gnunet/src/sensor/Makefile.am
===================================================================
--- gnunet/src/sensor/Makefile.am 2014-08-28 13:31:48 UTC (rev 34232)
+++ gnunet/src/sensor/Makefile.am 2014-08-28 13:37:00 UTC (rev 34233)
@@ -18,7 +18,8 @@
endif
bin_PROGRAMS = \
- gnunet-sensor
+ gnunet-sensor \
+ gnunet-sensor-profiler
libexec_PROGRAMS = \
gnunet-service-sensor
@@ -114,6 +115,12 @@
$(top_builddir)/src/testbed/libgnunettestbed.la \
libgnunetsensorutil.la
+gnunet_sensor_profiler_SOURCES = \
+ gnunet-sensor-profiler.c
+gnunet_sensor_profiler_LDADD = \
+ $(top_builddir)/src/util/libgnunetutil.la \
+ $(top_builddir)/src/testbed/libgnunettestbed.la
+
pkgsensordir = sensors
install-data-local:
Added: gnunet/src/sensor/gnunet-sensor-profiler.c
===================================================================
--- gnunet/src/sensor/gnunet-sensor-profiler.c (rev 0)
+++ gnunet/src/sensor/gnunet-sensor-profiler.c 2014-08-28 13:37:00 UTC (rev
34233)
@@ -0,0 +1,233 @@
+/*
+ This file is part of GNUnet.
+ (C)
+
+ GNUnet is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GNUnet is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNUnet; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * TODO:
+ * - Run X peers
+ * - Rewrite interval time (optional)
+ * - Run 1 dashboard
+ * - Monitor dashboard records
+ * - Prompt for anomalies when ready:
+ * -- Cut Y peers (remove their connections to other X-Y peers but not the
connections among themselves)
+ */
+
+/**
+ * @file sensor/gnunet-sensor-profiler.c
+ * @brief Profiler for the sensor service
+ * @author Omar Tarabai
+ */
+#include "platform.h"
+#include "gnunet_util_lib.h"
+#include "gnunet_testbed_service.h"
+
+/**
+ * Information about a single peer
+ */
+struct PeerInfo
+{
+
+ /**
+ * Peer Identity
+ */
+ struct GNUNET_PeerIdentity peer_id;
+
+ /**
+ * Testbed peer handle
+ */
+ struct GNUNET_TESTBED_Peer *testbed_peer;
+
+};
+
+/**
+ * Number of peers to run
+ */
+static unsigned int num_peers;
+
+/**
+ * Return value of the program
+ */
+static int ok = 1;
+
+/**
+ * Array of peer info for all peers
+ */
+static struct PeerInfo *all_peers_info;
+
+/**
+ * Number of peers that we already collected and start their info
+ */
+static int peers_known = 0;
+
+/**
+ * Name of the configuration file used
+ */
+static char *cfg_filename = "gnunet-sensor-profiler.conf";
+
+
+/**
+ * Do clean up and shutdown scheduler
+ */
+static void
+do_shutdown () // TODO: schedule timeout shutdown
+{
+ if (NULL != all_peers_info)
+ {
+ GNUNET_free (all_peers_info);
+ all_peers_info = NULL;
+ }
+ GNUNET_SCHEDULER_shutdown ();
+}
+
+
+/**
+ * Callback to be called when the requested peer information is available
+ *
+ * @param cb_cls the closure from GNUNET_TETSBED_peer_get_information()
+ * @param op the operation this callback corresponds to
+ * @param pinfo the result; will be NULL if the operation has failed
+ * @param emsg error message if the operation has failed; will be NULL if the
+ * operation is successfull
+ */
+static void
+peer_info_cb (void *cb_cls, struct GNUNET_TESTBED_Operation *op,
+ const struct GNUNET_TESTBED_PeerInformation *pinfo,
+ const char *emsg)
+{
+ struct GNUNET_TESTBED_Peer *testbed_peer = cb_cls;
+ struct PeerInfo *peer = &all_peers_info[peers_known];
+
+ peer->testbed_peer = testbed_peer;
+ GNUNET_CRYPTO_get_peer_identity (pinfo->result.cfg, &peer->peer_id);
+ peers_known++;
+ if (peers_known == num_peers) //TODO: remove
+ {
+ do_shutdown ();
+ }
+}
+
+
+/**
+ * Signature of a main function for a testcase.
+ *
+ * @param cls closure
+ * @param h the run handle
+ * @param num number of peers in 'peers'
+ * @param peers handle to peers run in the testbed. NULL upon timeout (see
+ * GNUNET_TESTBED_test_run()).
+ * @param links_succeeded the number of overlay link connection attempts that
+ * succeeded
+ * @param links_failed the number of overlay link connection attempts that
+ * failed
+ * @see GNUNET_TESTBED_test_run()
+ */
+static void
+test_master (void *cls, struct GNUNET_TESTBED_RunHandle *h, unsigned int num,
+ struct GNUNET_TESTBED_Peer **peers, unsigned int links_succeeded,
+ unsigned int links_failed)
+{
+ int i;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "%d peers started. %d links succeeded. %d links failed.\n",
+ num_peers, links_succeeded, links_failed);
+ GNUNET_assert (num == num_peers);
+ GNUNET_assert (0 == links_failed);
+ /* Collect peer information */
+ all_peers_info = GNUNET_new_array (num_peers, struct PeerInfo);
+
+ for (i = 0; i < num_peers; i++)
+ {
+ GNUNET_TESTBED_peer_get_information (peers[i],
+ GNUNET_TESTBED_PIT_CONFIGURATION,
+ &peer_info_cb, peers[i]);
+ }
+}
+
+
+/**
+ * Verify that the user passed correct CL args
+ *
+ * @return #GNUNET_OK if arguments are valid, #GNUNET_SYSERR otherwise
+ */
+static int
+verify_args ()
+{
+ if (num_peers < 3)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ _
+ ("Invalid or missing number of peers. Set at least 3
peers.\n"));
+ return GNUNET_SYSERR;
+ }
+ return GNUNET_OK;
+}
+
+
+/**
+ * Actual main function.
+ *
+ * @param cls unused
+ * @param args remaining args, unused
+ * @param cfgfile name of the configuration
+ * @param cfg configuration handle
+ */
+static void
+run (void *cls, char *const *args, const char *cf,
+ const struct GNUNET_CONFIGURATION_Handle *c)
+{
+ struct GNUNET_CONFIGURATION_Handle *cfg;
+ double links;
+
+ if (GNUNET_OK != verify_args ())
+ {
+ do_shutdown ();
+ return;
+ }
+ cfg = GNUNET_CONFIGURATION_create ();
+ GNUNET_CONFIGURATION_load (cfg, cfg_filename);
+ links = log (num_peers) * log (num_peers) * num_peers / 2;
+ GNUNET_CONFIGURATION_set_value_number ((struct GNUNET_CONFIGURATION_Handle *)
+ cfg, "TESTBED",
"OVERLAY_RANDOM_LINKS",
+ (unsigned long long int) links);
+ GNUNET_TESTBED_run (NULL, cfg, num_peers, 0, NULL, NULL, &test_master, NULL);
+}
+
+
+/**
+ * Main function.
+ *
+ * @return 0 on success
+ */
+int
+main (int argc, char *const *argv)
+{
+ static struct GNUNET_GETOPT_CommandLineOption options[] = {
+ {'p', "peers", "COUNT", gettext_noop ("Number of peers to run"),
GNUNET_YES,
+ &GNUNET_GETOPT_set_uint, &num_peers},
+ GNUNET_GETOPT_OPTION_END
+ };
+
+ return (GNUNET_OK ==
+ GNUNET_PROGRAM_run (argc, argv, "gnunet-sensor-profiler",
+ gettext_noop ("Profiler for sensor service"),
+ options, &run, NULL)) ? ok : 1;
+}
+
+/* end of gnunet-sensor-profiler.c */
Added: gnunet/src/sensor/gnunet-sensor-profiler.conf
===================================================================
--- gnunet/src/sensor/gnunet-sensor-profiler.conf
(rev 0)
+++ gnunet/src/sensor/gnunet-sensor-profiler.conf 2014-08-28 13:37:00 UTC
(rev 34233)
@@ -0,0 +1,20 @@
+[testbed]
+OVERLAY_TOPOLOGY = RANDOM
+#OVERLAY_RANDOM_LINKS = 1000
+
+[arm]
+DEFAULTSERVICES = topology dht cadet
+
+[sensor]
+SENSOR_DIR = /tmp/gnunet-sensor-profiler/
+
+START_MONITORING = YES
+START_REPORTING = YES
+START_ANALYSIS = YES
+START_UPDATE = NO
+
+[transport]
+PLUGINS = unix
+
+[nat]
+USE_LOCALADDR = YES
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r34233 - gnunet/src/sensor,
gnunet <=