add web page to Introducer, with client lists/counts #309

Open
opened 2008-02-11 20:27:03 +00:00 by warner · 2 comments

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
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
warner added the
operational
major
enhancement
0.7.0
labels 2008-02-11 20:27:03 +00:00
warner added this to the eventually milestone 2008-02-11 20:27:03 +00:00
Author

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.

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.
Author

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
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
Sign in to join this conversation.
No Milestone
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Reference: tahoe-lafs/trac-2024-07-25#309
No description provided.