Opened at 2008-02-11T20:27:03Z
Last modified at 2009-12-13T05:43:11Z
#309 new enhancement
add web page to Introducer, with client lists/counts
Reported by: | warner | Owned by: | somebody |
---|---|---|---|
Priority: | major | Milestone: | eventually |
Component: | operational | Version: | 0.7.0 |
Keywords: | introducer statistics privacy | Cc: | |
Launchpad Bug: |
Description
It would be useful if we had a way to look at the Introducer's state, to find out how many clients are subscribed to hear about storage services, and how many storage servers are publishing their contact information. The summarized stats from this data would be particularly useful to graph over time.
Things like:
- how many clients are currently connected
- how many unique clients have we ever heard about
- how many unique clients have we heard from in the last day/week/month
- how long does the average client remain attached
- how many connections (node startups) do we witness each day
Change History (3)
comment:1 Changed at 2008-03-12T02:40:09Z by warner
comment:2 Changed at 2008-03-25T22:49:39Z by warner
The t=json form is now in. It returns a JSON-encoded dictionary. Two keys are currently defined: "subscription_summary", which contains a dictionary mapping service name (like "storage") to an integer counting how many nodes are subscribed to hear about that service, and "announcement_summary", which contains a dictionary mapping service name to an integer counting how many nodes have announced that they provide that service.
Remaining things that we'd like to observe:
- how many unique clients have we heard from in the last day/week/month
- how long does a client remain attached
- how many connections (node startsups) do we witness each day
comment:3 Changed at 2009-12-13T05:43:11Z by davidsarah
- Keywords introducer statistics privacy added; stats removed
I've added a basic page to the introducer. It is enabled with the same 'webport' file as the regular client node. The introducer writes its resulting URL to 'node.url' just like the regular client (basically this just prepends an http prefix to the portnumber you picked).
The page currently shows all service announcements in a table: basically the list of storage servers. For each one it shows version numbers, listening IP addresses, and when the first announcement was heard. (it would probably be a good idea to change this to last announcement instead of first. note that we do not forget about announcements until the introducer is bounced).
The page also shows all subscribers (clients). For each one, it shows their nodeid and connecting IP address. If the client is new enough (0.8.0-r2303 or later) then it can also display the nickname and version.
Clients now announce a stub service called 'stub_client'. This is an empty service (subscribers can't actually make the client do anything), but it does serve to get a nickname and version into the introducer's tables. Clients running code older than about 0.8.0-r2303 will not announce this service and will not have nickname/version data displayed.
Tomorrow I'll add a ?t=json variant, and a munin plugin to read the data. This will provide the first item from that list above: how many clients are currently connected. The other items will take more work, but this might be the right place to do it.