modules/network.jsView |
---|
3 | 3 … | var plugs = require('../plugs') |
4 | 4 … | |
5 | 5 … | var avatar = plugs.first(exports.avatar = []) |
6 | 6 … | var sbot_gossip_peers = plugs.first(exports.sbot_gossip_peers = []) |
| 7 … | +var sbot_gossip_connect = plugs.first(exports.sbot_gossip_connect = []) |
7 | 8 … | |
8 | 9 … | |
9 | 10 … | |
10 | 11 … | var human = require('human-time') |
16 | 17 … | exports.menu_items = function () { |
17 | 18 … | return h('a', {href: '#/network'}, '/network') |
18 | 19 … | } |
19 | 20 … | |
| 21 … | + |
| 22 … | + |
| 23 … | + |
| 24 … | + |
| 25 … | +function isLocal (e) { |
| 26 … | + |
| 27 … | + |
| 28 … | + return ip.isPrivate(e.host) && e.type === 'local' |
| 29 … | +} |
| 30 … | + |
| 31 … | + |
| 32 … | + |
| 33 … | + |
| 34 … | +function isLongterm (e) { |
| 35 … | + return e.ping && e.ping.rtt.mean > 0 |
| 36 … | +} |
| 37 … | + |
| 38 … | + |
| 39 … | + |
| 40 … | +function isLegacy (peer) { |
| 41 … | + return /connect/.test(peer.state) || peer.duration.mean > 0 && !exports.isLongterm(peer) |
| 42 … | +} |
| 43 … | + |
| 44 … | + |
| 45 … | +function isInactive (e) { |
| 46 … | + return e.stateChange && e.duration.mean == 0 |
| 47 … | +} |
| 48 … | + |
| 49 … | + |
| 50 … | +function isUnattempted (e) { |
| 51 … | + return !e.stateChange |
| 52 … | +} |
| 53 … | + |
| 54 … | +function getType (e) { |
| 55 … | + return ( |
| 56 … | + isLongterm(e) ? 'modern' |
| 57 … | + : isLegacy(e) ? 'legacy' |
| 58 … | + : isInactive(e) ? 'inactive' |
| 59 … | + : isUnattempted(e) ? 'unattempted' |
| 60 … | + : 'other' |
| 61 … | + ) |
| 62 … | +} |
| 63 … | + |
| 64 … | +var states = { |
| 65 … | + connected: 3, |
| 66 … | + connecting: 2 |
| 67 … | +} |
| 68 … | + |
| 69 … | +var types = { |
| 70 … | + modern: 4, |
| 71 … | + legacy: 3, |
| 72 … | + inactive: 2, |
| 73 … | + unattempted: 1, |
| 74 … | + other: 0 |
| 75 … | +} |
| 76 … | + |
| 77 … | +function round(n) { |
| 78 … | + return Math.round(n*100)/100 |
| 79 … | +} |
| 80 … | + |
| 81 … | +function duration (s) { |
| 82 … | + if(!s) return s |
| 83 … | + if (Math.abs(s) > 30000) |
| 84 … | + return round(s/60000)+'m' |
| 85 … | + else if (Math.abs(s) > 500) |
| 86 … | + return round(s/1000)+'s' |
| 87 … | + else |
| 88 … | + return round(s)+'ms' |
| 89 … | +} |
| 90 … | + |
20 | 91 … | exports.screen_view = function (path) { |
21 | 92 … | |
22 | 93 … | if(path !== '/network') return |
23 | 94 … | |
24 | | - var ol = h('ol.network') |
| 95 … | + var ol = h('ul.network') |
25 | 96 … | |
26 | | - var states = { |
27 | | - connected: 3, |
28 | | - connecting: 2, |
29 | | - disconnecting: 1 |
30 | | - } |
31 | | - |
32 | 97 … | ;(function poll () { |
33 | 98 … | |
34 | 99 … | |
35 | 100 … | |
38 | 103 … | |
39 | 104 … | sbot_gossip_peers(function (err, list) { |
40 | 105 … | ol.innerHTML = '' |
41 | 106 … | list.sort(function (a, b) { |
42 | | - return (states[b.state] || 0) - (states[a.state] || 0) || b.stateChange - a.stateChange |
| 107 … | + return ( |
| 108 … | + (states[b.state] || 0) - (states[a.state] || 0) |
| 109 … | + || types[getType(b)] - types[getType(a)] |
| 110 … | + || b.stateChange - a.stateChange |
| 111 … | + ) |
43 | 112 … | }).forEach(function (peer) { |
44 | | - ol.appendChild(h('li', |
| 113 … | + ol.appendChild(h('div', |
45 | 114 … | avatar(peer.key, 'thumbnail'), |
46 | 115 … | h('div', |
47 | 116 … | peer.state || 'not connected', |
48 | 117 … | ' ', |
| 118 … | + getType(peer), |
| 119 … | + ' ', |
| 120 … | + |
| 121 … | + peer.ping ? duration(peer.ping.rtt.mean) : '', |
| 122 … | + ' ', |
| 123 … | + peer.ping ? duration(peer.ping.skew.mean) : '', |
49 | 124 … | h('label', |
50 | 125 … | {title: new Date(peer.stateChange).toString()}, |
51 | 126 … | peer.stateChange && ('(' + human(new Date(peer.stateChange))) + ')') |
52 | 127 … | ), |
53 | 128 … | 'source:'+peer.source, |
54 | | - h('pre', legacyToMultiServer(peer)) |
| 129 … | + h('pre', legacyToMultiServer(peer)), |
| 130 … | + h('button', 'connect', {onclick: function () { |
| 131 … | + sbot_gossip_connect(peer, function (err) { |
| 132 … | + if(err) console.error(err) |
| 133 … | + else console.log('connected to', peer) |
| 134 … | + }) |
| 135 … | + }}) |
55 | 136 … | ) |
56 | 137 … | ) |
57 | 138 … | }) |
58 | 139 … | |
75 | 156 … | |
76 | 157 … | |
77 | 158 … | |
78 | 159 … | |
| 160 … | + |
| 161 … | + |
| 162 … | + |
| 163 … | + |
| 164 … | + |
| 165 … | + |