From 462ef2a0aca32f4cd8536b74a6fea5f625568894 Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@allmydata.com>
Date: Thu, 8 May 2008 11:37:30 -0700
Subject: [PATCH] run a stats provider even if there's no gatherer, since the
 HTTP /statistics page is then useful. Only run the once-per-second
 load-monitor if there is a gatherer configured

---
 src/allmydata/client.py |  9 +++------
 src/allmydata/stats.py  | 18 ++++++++++++------
 2 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/src/allmydata/client.py b/src/allmydata/client.py
index cb96b495..95cd8ff7 100644
--- a/src/allmydata/client.py
+++ b/src/allmydata/client.py
@@ -114,12 +114,9 @@ class Client(node.Node, testutil.PollMixin):
 
     def init_stats_provider(self):
         gatherer_furl = self.get_config('stats_gatherer.furl')
-        if gatherer_furl:
-            self.stats_provider = StatsProvider(self, gatherer_furl)
-            self.add_service(self.stats_provider)
-            self.stats_provider.register_producer(self)
-        else:
-            self.stats_provider = None
+        self.stats_provider = StatsProvider(self, gatherer_furl)
+        self.add_service(self.stats_provider)
+        self.stats_provider.register_producer(self)
 
     def get_stats(self):
         return { 'node.uptime': time.time() - self.started_timestamp }
diff --git a/src/allmydata/stats.py b/src/allmydata/stats.py
index 5a50b571..96621311 100644
--- a/src/allmydata/stats.py
+++ b/src/allmydata/stats.py
@@ -131,25 +131,31 @@ class StatsProvider(foolscap.Referenceable, service.MultiService):
     def __init__(self, node, gatherer_furl):
         service.MultiService.__init__(self)
         self.node = node
-        self.gatherer_furl = gatherer_furl
+        self.gatherer_furl = gatherer_furl # might be None
 
         self.counters = {}
         self.stats_producers = []
 
-        self.load_monitor = LoadMonitor(self)
-        self.load_monitor.setServiceParent(self)
-        self.register_producer(self.load_monitor)
+        # only run the LoadMonitor (which submits a timer every second) if
+        # there is a gatherer who is going to be paying attention. Our stats
+        # are visible through HTTP even without a gatherer, so run the rest
+        # of the stats (including the once-per-minute CPUUsageMonitor)
+        if gatherer_furl:
+            self.load_monitor = LoadMonitor(self)
+            self.load_monitor.setServiceParent(self)
+            self.register_producer(self.load_monitor)
 
         self.cpu_monitor = CPUUsageMonitor()
         self.cpu_monitor.setServiceParent(self)
         self.register_producer(self.cpu_monitor)
 
     def startService(self):
-        if self.node:
+        if self.node and self.gatherer_furl:
             d = self.node.when_tub_ready()
             def connect(junk):
                 nickname = self.node.get_config('nickname')
-                self.node.tub.connectTo(self.gatherer_furl, self._connected, nickname)
+                self.node.tub.connectTo(self.gatherer_furl,
+                                        self._connected, nickname)
             d.addCallback(connect)
         service.MultiService.startService(self)
 
-- 
2.45.2