From 7c4edac58277667005f3a5c43d6ae9e49c10b70f Mon Sep 17 00:00:00 2001 From: Brian Warner Date: Thu, 4 Dec 2008 15:01:24 -0700 Subject: [PATCH] stats: don't return booleans: it violates the schema. Add a test. --- src/allmydata/storage.py | 4 +++- src/allmydata/test/test_system.py | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/allmydata/storage.py b/src/allmydata/storage.py index f3fd9836..faf6b5bb 100644 --- a/src/allmydata/storage.py +++ b/src/allmydata/storage.py @@ -866,6 +866,8 @@ class StorageServer(service.MultiService, Referenceable): fileutil.rm_dir(self.incomingdir) def get_stats(self): + # remember: RIStatsProvider requires that our return dict + # contains numeric values. stats = { 'storage_server.allocated': self.allocated_size(), } for category,ld in self.get_latencies().items(): for name,v in ld.items(): @@ -896,7 +898,7 @@ class StorageServer(service.MultiService, Referenceable): except AttributeError: # os.statvfs is only available on unix pass - stats["storage_server.accepting_immutable_shares"] = writeable + stats["storage_server.accepting_immutable_shares"] = int(writeable) return stats diff --git a/src/allmydata/test/test_system.py b/src/allmydata/test/test_system.py index 942ffe4b..02fd446a 100644 --- a/src/allmydata/test/test_system.py +++ b/src/allmydata/test/test_system.py @@ -403,6 +403,28 @@ class SystemTest(SystemTestMixin, unittest.TestCase): return d d.addCallback(_upload_resumable) + def _grab_stats(ignored): + # the StatsProvider doesn't normally publish a FURL: + # instead it passes a live reference to the StatsGatherer + # (if and when it connects). To exercise the remote stats + # interface, we manually publish client0's StatsProvider + # and use client1 to query it. + sp = self.clients[0].stats_provider + sp_furl = self.clients[0].tub.registerReference(sp) + d = self.clients[1].tub.getReference(sp_furl) + d.addCallback(lambda sp_rref: sp_rref.callRemote("get_stats")) + def _got_stats(stats): + #print "STATS" + #from pprint import pprint + #pprint(stats) + s = stats["stats"] + self.failUnlessEqual(s["storage_server.accepting_immutable_shares"], 1) + c = stats["counters"] + self.failUnlessEqual(c["storage_server.allocate"], 2) + d.addCallback(_got_stats) + return d + d.addCallback(_grab_stats) + return d def _find_shares(self, basedir): -- 2.45.2