Changeset d018a07 in trunk
- Timestamp:
- 2017-07-27T22:59:03Z (8 years ago)
- Branches:
- master
- Children:
- 0386e0d5, bd1e450
- Parents:
- 0d278e35 (diff), e32f581 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified docs/frontends/webapi.rst ¶
r0d278e35 rd018a07 1851 1851 servers. 1852 1852 1853 ``GET /?t=json`` (the json welcome page) 1854 1855 This is the "json Welcome Page", and contains connectivity status 1856 of the introducer(s) and storage server(s), here's an example:: 1857 1858 { 1859 "introducers": { 1860 "statuses": [] 1861 }, 1862 "servers": [{ 1863 "nodeid": "other_nodeid", 1864 "available_space": 123456, 1865 "nickname": "George \u263b", 1866 "version": "1.0", 1867 "connection_status": "summary", 1868 "last_received_data": 1487811257 1869 }] 1870 } 1871 1872 1873 The above json ``introducers`` section includes a list of 1874 introducer connectivity status messages. 1875 1876 The above json ``servers`` section is an array with map elements. Each map 1877 has the following properties: 1878 1879 1. ``nodeid`` - an identifier derived from the node's public key 1880 2. ``available_space`` - the available space in bytes expressed as an integer 1881 3. ``nickname`` - the storage server nickname 1882 4. ``version`` - the storage server Tahoe-LAFS version 1883 5. ``connection_status`` - connectivity status 1884 6. ``last_received_data`` - the time when data was last received, 1885 expressed in seconds since epoch 1886 1853 1887 ``GET /status/`` 1854 1888 -
TabularUnified src/allmydata/test/web/test_web.py ¶
r0d278e35 rd018a07 185 185 self.last_rx_time = last_rx_time 186 186 self.last_connect_time = last_connect_time 187 187 188 def on_status_changed(self, cb): # TODO: try to remove me 188 189 cb(self) 189 190 def is_connected(self): # TODO: remove me 190 191 return self.connected 192 def get_version(self): 193 return { 194 "application-version": "1.0" 195 } 191 196 def get_permutation_seed(self): 192 197 return "" … … 258 263 self.storage_broker.test_add_server("disconnected_nodeid", 259 264 FakeDisplayableServer( 260 serverid=" other_nodeid", nickname=u"disconnected_nickname \u263B", connected = False,265 serverid="disconnected_nodeid", nickname=u"disconnected_nickname \u263B", connected = False, 261 266 last_connect_time = None, last_loss_time = 25, last_rx_time = 35)) 262 267 self.introducer_client = None … … 734 739 def test_create(self): 735 740 pass 741 742 maxDiff = None 743 def test_welcome_json(self): 744 """ 745 There is a JSON version of the welcome page which can be selected with the 746 ``t`` query argument. 747 """ 748 d = self.GET("/?t=json") 749 def _check(res): 750 decoded = json.loads(res) 751 expected = { 752 u'introducers': { 753 u'statuses': [], 754 }, 755 u'servers': sorted([ 756 {u"nodeid": u'other_nodeid', 757 u'available_space': 123456, 758 u'connection_status': u'summary', 759 u'last_received_data': 30, 760 u'nickname': u'other_nickname \u263b', 761 u'version': u'1.0', 762 }, 763 {u"nodeid": u'disconnected_nodeid', 764 u'available_space': 123456, 765 u'connection_status': u'summary', 766 u'last_received_data': 35, 767 u'nickname': u'disconnected_nickname \u263b', 768 u'version': u'1.0', 769 }, 770 ]), 771 } 772 self.assertEqual(expected, decoded) 773 d.addCallback(_check) 774 return d 736 775 737 776 def test_welcome(self): -
TabularUnified src/allmydata/web/root.py ¶
r0d278e35 rd018a07 1 import time, os 1 import time, os, json 2 2 3 3 from twisted.web import http … … 13 13 from allmydata.web import filenode, directory, unlinked, status, operations 14 14 from allmydata.web import storage, magic_folder 15 from allmydata.web.common import abbreviate_size, getxmlfile, WebError, \ 16 get_arg, RenderMixin, get_format, get_mutable_type, render_time_delta, render_time, render_time_attr 15 from allmydata.web.common import ( 16 abbreviate_size, 17 getxmlfile, 18 WebError, 19 get_arg, 20 MultiFormatPage, 21 RenderMixin, 22 get_format, 23 get_mutable_type, 24 render_time_delta, 25 render_time, 26 render_time_attr, 27 ) 17 28 18 29 … … 127 138 SPACE = u"\u00A0"*2 128 139 129 class Root( rend.Page):140 class Root(MultiFormatPage): 130 141 131 142 addSlash = True … … 183 194 tubid_s = "TubID: "+self.client.get_long_tubid() 184 195 return T.td(title=tubid_s)[self.client.get_long_nodeid()] 196 185 197 def data_my_nickname(self, ctx, data): 186 198 return self.client.nickname 199 200 201 def render_JSON(self, req): 202 req.setHeader("content-type", "application/json; charset=utf-8") 203 intro_summaries = [s.summary for s in self.client.introducer_connection_statuses()] 204 sb = self.client.get_storage_broker() 205 servers = self._describe_known_servers(sb) 206 result = { 207 "introducers": { 208 "statuses": intro_summaries, 209 }, 210 "servers": servers 211 } 212 return json.dumps(result, indent=1) + "\n" 213 214 215 def _describe_known_servers(self, broker): 216 return sorted(list( 217 self._describe_server(server) 218 for server 219 in broker.get_known_servers() 220 )) 221 222 223 def _describe_server(self, server): 224 status = server.get_connection_status() 225 description = { 226 u"nodeid": server.get_serverid(), 227 u"connection_status": status.summary, 228 u"available_space": server.get_available_space(), 229 u"nickname": server.get_nickname(), 230 u"version": None, 231 u"last_received_data": status.last_received_time, 232 } 233 version = server.get_version() 234 if version is not None: 235 description[u"version"] = version["application-version"] 236 237 return description 238 187 239 188 240 def render_magic_folder(self, ctx, data):
Note: See TracChangeset
for help on using the changeset viewer.