From: Christian Grothoff Date: Wed, 28 Apr 2010 11:33:29 +0000 (+0000) Subject: stats for datacache X-Git-Tag: initial-import-from-subversion-38251~21984 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=684476aafc7c225d565295fdac4a00ee8bfc207f;p=oweals%2Fgnunet.git stats for datacache --- diff --git a/TODO b/TODO index 3db19b785..404597138 100644 --- a/TODO +++ b/TODO @@ -169,7 +169,7 @@ Optimizations: - should use hash map to look up Neighbours (service AND plugins!) * HOSTLIST: - 'server' uses 'GNUNET_PEERINFO_iterate', should probably switch to notification API - (for more instant / up-to-date hostlists at lower cost) + (for more instant / up-to-date hostlists at lower cost) [done by MW?] * DATASTORE (?): - check for duplicates on insertion (currently, same content is frequently stored again [seen with KBLOCKS and SBLOCKS]!) @@ -185,9 +185,5 @@ Minor features: - [./transport/plugin_transport_tcp.c:391]: (style) struct or union member 'Plugin::address_update_task' is never used (related to issue above) * TRANSPORT: - [./transport/gnunet-service-transport.c:173]: (style) struct or union member 'TransportPlugin::rebuild' is never used (related to TCP not refreshing external addresses?) -* DATACACHE: - - add stats (# bytes available, # bytes used, # PUTs, # GETs, # GETs satisfied) -* FS: - - support inline data in directories for recursive file downloads (fs_download) * BLOCKS: - testcase would be nice... diff --git a/src/datacache/Makefile.am b/src/datacache/Makefile.am index 5e01fe03e..564af9f28 100644 --- a/src/datacache/Makefile.am +++ b/src/datacache/Makefile.am @@ -18,6 +18,7 @@ lib_LTLIBRARIES = \ libgnunetdatacache_la_SOURCES = \ datacache.c plugin_datacache.h libgnunetdatacache_la_LIBADD = \ + $(top_builddir)/src/statistics/libgnunetstatistics.la \ $(top_builddir)/src/util/libgnunetutil.la \ $(GN_LIBINTL) libgnunetdatacache_la_LDFLAGS = \ diff --git a/src/datacache/datacache.c b/src/datacache/datacache.c index 4c474e9ba..0ad9b9df4 100644 --- a/src/datacache/datacache.c +++ b/src/datacache/datacache.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet - (C) 2004, 2005, 2006, 2007, 2009 Christian Grothoff (and other contributing authors) + (C) 2004, 2005, 2006, 2007, 2009, 2010 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -26,6 +26,7 @@ #include "platform.h" #include "gnunet_util_lib.h" #include "gnunet_datacache_lib.h" +#include "gnunet_statistics_service.h" #include "plugin_datacache.h" /** @@ -44,6 +45,11 @@ struct GNUNET_DATACACHE_Handle */ const struct GNUNET_CONFIGURATION_Handle *cfg; + /** + * Opaque handle for the statistics service. + */ + struct GNUNET_STATISTICS_Handle *stats; + /** * Configuration section to use. */ @@ -100,6 +106,10 @@ env_delete_notify (void *cls, GNUNET_assert (h->utilization >= size); h->utilization -= size; GNUNET_CONTAINER_bloomfilter_remove (h->filter, key); + GNUNET_STATISTICS_update (h->stats, + gettext_noop ("# bytes stored"), + -size, + GNUNET_NO); } @@ -157,6 +167,9 @@ GNUNET_DATACACHE_create (struct GNUNET_SCHEDULER_Handle *sched, { ret->filter = GNUNET_CONTAINER_bloomfilter_load (NULL, bf_size, 5); /* approx. 3% false positives at max use */ } + ret->stats = GNUNET_STATISTICS_create (sched, + "datacache", + cfg); ret->section = GNUNET_strdup (section); ret->env.sched = sched; ret->env.cfg = cfg; @@ -204,6 +217,8 @@ void GNUNET_DATACACHE_destroy (struct GNUNET_DATACACHE_Handle *h) h->bloom_name); GNUNET_free (h->bloom_name); } + GNUNET_STATISTICS_destroy (h->stats, + GNUNET_NO); GNUNET_free (h); } @@ -237,6 +252,10 @@ GNUNET_DATACACHE_put (struct GNUNET_DATACACHE_Handle *h, discard_time); if (used == 0) return GNUNET_SYSERR; + GNUNET_STATISTICS_update (h->stats, + gettext_noop ("# bytes stored"), + size, + GNUNET_NO); GNUNET_CONTAINER_bloomfilter_add (h->filter, key); while (h->utilization + used > h->env.quota) GNUNET_assert (GNUNET_OK == h->api->del (h->api->cls)); @@ -263,9 +282,19 @@ GNUNET_DATACACHE_get (struct GNUNET_DATACACHE_Handle *h, GNUNET_DATACACHE_Iterator iter, void *iter_cls) { + GNUNET_STATISTICS_update (h->stats, + gettext_noop ("# requests received"), + 1, + GNUNET_NO); if (GNUNET_OK != GNUNET_CONTAINER_bloomfilter_test (h->filter, key)) - return 0; /* can not be present */ + { + GNUNET_STATISTICS_update (h->stats, + gettext_noop ("# requests filtered by bloom filter"), + 1, + GNUNET_NO); + return 0; /* can not be present */ + } return h->api->get (h->api->cls, key, type,