mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2024-12-23 14:52:26 +00:00
introweb.py: add ?t=json, to provide machine-readable subscriber counts
This commit is contained in:
parent
4b46f1cd53
commit
4531d1e953
@ -1,6 +1,6 @@
|
||||
|
||||
from base64 import b32encode
|
||||
import os, sys, time, re
|
||||
import os, sys, time, re, simplejson
|
||||
from cStringIO import StringIO
|
||||
from twisted.trial import unittest
|
||||
from twisted.internet import defer, reactor
|
||||
@ -880,13 +880,30 @@ class SystemTest(testutil.SignalMixin, testutil.PollMixin, unittest.TestCase):
|
||||
try:
|
||||
self.failUnless("allmydata: %s" % str(allmydata.__version__)
|
||||
in res)
|
||||
self.failUnless("Summary: storage: 5, stub_client: 5" in res)
|
||||
self.failUnless("Announcement Summary: storage: 5, stub_client: 5" in res)
|
||||
self.failUnless("Subscription Summary: storage: 5" in res)
|
||||
except unittest.FailTest:
|
||||
print
|
||||
print "GET %s output was:" % self.introweb_url
|
||||
print res
|
||||
raise
|
||||
d.addCallback(_check)
|
||||
d.addCallback(lambda res:
|
||||
getPage(self.introweb_url + "?t=json",
|
||||
method="GET", followRedirect=True))
|
||||
def _check_json(res):
|
||||
data = simplejson.loads(res)
|
||||
try:
|
||||
self.failUnlessEqual(data["subscription_summary"],
|
||||
{"storage": 5})
|
||||
self.failUnlessEqual(data["announcement_summary"],
|
||||
{"storage": 5, "stub_client": 5})
|
||||
except unittest.FailTest:
|
||||
print
|
||||
print "GET %s?t=json output was:" % self.introweb_url
|
||||
print res
|
||||
raise
|
||||
d.addCallback(_check_json)
|
||||
return d
|
||||
|
||||
def _do_publish1(self, res):
|
||||
|
@ -1,18 +1,43 @@
|
||||
|
||||
import time
|
||||
from nevow import rend
|
||||
from nevow import rend, inevow
|
||||
from foolscap.referenceable import SturdyRef
|
||||
from twisted.internet import address
|
||||
import allmydata
|
||||
import simplejson
|
||||
from allmydata import get_package_versions_string
|
||||
from allmydata.util import idlib
|
||||
from common import getxmlfile, IClient
|
||||
from common import getxmlfile, get_arg, IClient
|
||||
|
||||
class IntroducerRoot(rend.Page):
|
||||
|
||||
addSlash = True
|
||||
docFactory = getxmlfile("introducer.xhtml")
|
||||
|
||||
def renderHTTP(self, ctx):
|
||||
t = get_arg(inevow.IRequest(ctx), "t")
|
||||
if t == "json":
|
||||
return self.render_JSON(ctx)
|
||||
return rend.Page.renderHTTP(self, ctx)
|
||||
|
||||
def render_JSON(self, ctx):
|
||||
i = IClient(ctx).getServiceNamed("introducer")
|
||||
res = {}
|
||||
clients = i.get_subscribers()
|
||||
subscription_summary = dict([ (name, len(clients[name]))
|
||||
for name in clients ])
|
||||
res["subscription_summary"] = subscription_summary
|
||||
|
||||
announcement_summary = {}
|
||||
for ann in i.get_announcements():
|
||||
(furl, service_name, ri_name, nickname, ver, oldest) = ann
|
||||
if service_name not in announcement_summary:
|
||||
announcement_summary[service_name] = 0
|
||||
announcement_summary[service_name] += 1
|
||||
res["announcement_summary"] = announcement_summary
|
||||
|
||||
return simplejson.dumps(res, indent=1)
|
||||
|
||||
def data_version(self, ctx, data):
|
||||
return get_package_versions_string()
|
||||
def data_import_path(self, ctx, data):
|
||||
|
Loading…
Reference in New Issue
Block a user