libp2p 0.36.2 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +3 -21
- package/README.md +13 -10
- package/dist/src/address-manager/index.d.ts +34 -52
- package/dist/src/address-manager/index.d.ts.map +1 -1
- package/dist/src/address-manager/index.js +81 -0
- package/dist/src/address-manager/index.js.map +1 -0
- package/dist/src/circuit/auto-relay.d.ts +24 -85
- package/dist/src/circuit/auto-relay.d.ts.map +1 -1
- package/dist/src/circuit/auto-relay.js +216 -0
- package/dist/src/circuit/auto-relay.js.map +1 -0
- package/dist/src/circuit/circuit/hop.d.ts +26 -53
- package/dist/src/circuit/circuit/hop.d.ts.map +1 -1
- package/dist/src/circuit/circuit/hop.js +138 -0
- package/dist/src/circuit/circuit/hop.js.map +1 -0
- package/dist/src/circuit/circuit/stop.d.ts +18 -10
- package/dist/src/circuit/circuit/stop.d.ts.map +1 -1
- package/dist/src/circuit/circuit/stop.js +49 -0
- package/dist/src/circuit/circuit/stop.js.map +1 -0
- package/dist/src/circuit/circuit/stream-handler.d.ts +19 -38
- package/dist/src/circuit/circuit/stream-handler.d.ts.map +1 -1
- package/dist/src/circuit/circuit/stream-handler.js +59 -0
- package/dist/src/circuit/circuit/stream-handler.js.map +1 -0
- package/dist/src/circuit/circuit/utils.d.ts +3 -6
- package/dist/src/circuit/circuit/utils.d.ts.map +1 -1
- package/dist/src/circuit/circuit/utils.js +43 -0
- package/dist/src/circuit/circuit/utils.js.map +1 -0
- package/dist/src/circuit/constants.d.ts +24 -6
- package/dist/src/circuit/constants.d.ts.map +1 -1
- package/dist/src/circuit/constants.js +26 -0
- package/dist/src/circuit/constants.js.map +1 -0
- package/dist/src/circuit/index.d.ts +41 -74
- package/dist/src/circuit/index.d.ts.map +1 -1
- package/dist/src/circuit/index.js +69 -0
- package/dist/src/circuit/index.js.map +1 -0
- package/dist/src/circuit/listener.d.ts +8 -3
- package/dist/src/circuit/listener.d.ts.map +1 -1
- package/dist/src/circuit/listener.js +62 -0
- package/dist/src/circuit/listener.js.map +1 -0
- package/dist/src/circuit/multicodec.d.ts +1 -1
- package/dist/src/circuit/multicodec.d.ts.map +1 -1
- package/dist/src/circuit/multicodec.js +2 -0
- package/dist/src/circuit/multicodec.js.map +1 -0
- package/dist/src/circuit/pb/index.d.ts +52 -0
- package/dist/src/circuit/pb/index.d.ts.map +1 -0
- package/dist/src/circuit/pb/index.js +98 -0
- package/dist/src/circuit/pb/index.js.map +1 -0
- package/dist/src/circuit/transport.d.ts +18 -78
- package/dist/src/circuit/transport.d.ts.map +1 -1
- package/dist/src/circuit/transport.js +192 -0
- package/dist/src/circuit/transport.js.map +1 -0
- package/dist/src/circuit/utils.d.ts +5 -2
- package/dist/src/circuit/utils.d.ts.map +1 -1
- package/dist/src/circuit/utils.js +11 -0
- package/dist/src/circuit/utils.js.map +1 -0
- package/dist/src/config.d.ts +3 -85
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +91 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/connection-manager/auto-dialler.d.ts +24 -41
- package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
- package/dist/src/connection-manager/auto-dialler.js +105 -0
- package/dist/src/connection-manager/auto-dialler.js.map +1 -0
- package/dist/src/connection-manager/dialer/auto-dialer.d.ts +16 -0
- package/dist/src/connection-manager/dialer/auto-dialer.d.ts.map +1 -0
- package/dist/src/connection-manager/dialer/auto-dialer.js +37 -0
- package/dist/src/connection-manager/dialer/auto-dialer.js.map +1 -0
- package/dist/src/connection-manager/dialer/dial-request.d.ts +27 -0
- package/dist/src/connection-manager/dialer/dial-request.d.ts.map +1 -0
- package/dist/src/connection-manager/dialer/dial-request.js +83 -0
- package/dist/src/connection-manager/dialer/dial-request.js.map +1 -0
- package/dist/src/connection-manager/dialer/index.d.ts +104 -0
- package/dist/src/connection-manager/dialer/index.d.ts.map +1 -0
- package/dist/src/connection-manager/dialer/index.js +267 -0
- package/dist/src/connection-manager/dialer/index.js.map +1 -0
- package/dist/src/connection-manager/index.d.ts +102 -136
- package/dist/src/connection-manager/index.d.ts.map +1 -1
- package/dist/src/connection-manager/index.js +333 -0
- package/dist/src/connection-manager/index.js.map +1 -0
- package/dist/src/connection-manager/latency-monitor.d.ts +72 -97
- package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
- package/dist/src/connection-manager/latency-monitor.js +220 -0
- package/dist/src/connection-manager/latency-monitor.js.map +1 -0
- package/dist/src/connection-manager/visibility-change-emitter.d.ts +15 -16
- package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
- package/dist/src/connection-manager/visibility-change-emitter.js +118 -0
- package/dist/src/connection-manager/visibility-change-emitter.js.map +1 -0
- package/dist/src/constants.d.ts +22 -10
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +27 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/content-routing/index.d.ts +27 -81
- package/dist/src/content-routing/index.d.ts.map +1 -1
- package/dist/src/content-routing/index.js +99 -0
- package/dist/src/content-routing/index.js.map +1 -0
- package/dist/src/content-routing/utils.d.ts +6 -49
- package/dist/src/content-routing/utils.d.ts.map +1 -1
- package/dist/src/content-routing/utils.js +42 -0
- package/dist/src/content-routing/utils.js.map +1 -0
- package/dist/src/dht/dht-content-routing.d.ts +10 -24
- package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
- package/dist/src/dht/dht-content-routing.js +32 -0
- package/dist/src/dht/dht-content-routing.js.map +1 -0
- package/dist/src/dht/dht-peer-routing.d.ts +9 -24
- package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
- package/dist/src/dht/dht-peer-routing.js +26 -0
- package/dist/src/dht/dht-peer-routing.js.map +1 -0
- package/dist/src/dht/dummy-dht.d.ts +20 -0
- package/dist/src/dht/dummy-dht.d.ts.map +1 -0
- package/dist/src/dht/dummy-dht.js +46 -0
- package/dist/src/dht/dummy-dht.js.map +1 -0
- package/dist/src/errors.d.ts +70 -63
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +75 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/fetch/constants.d.ts +1 -1
- package/dist/src/fetch/constants.d.ts.map +1 -1
- package/dist/src/fetch/constants.js +3 -0
- package/dist/src/fetch/constants.js.map +1 -0
- package/dist/src/fetch/index.d.ts +30 -49
- package/dist/src/fetch/index.d.ts.map +1 -1
- package/dist/src/fetch/index.js +129 -0
- package/dist/src/fetch/index.js.map +1 -0
- package/dist/src/fetch/pb/proto.d.ts +27 -0
- package/dist/src/fetch/pb/proto.d.ts.map +1 -0
- package/dist/src/fetch/pb/proto.js +50 -0
- package/dist/src/fetch/pb/proto.js.map +1 -0
- package/dist/src/get-peer.d.ts +4 -11
- package/dist/src/get-peer.d.ts.map +1 -1
- package/dist/src/get-peer.js +43 -0
- package/dist/src/get-peer.js.map +1 -0
- package/dist/src/identify/consts.d.ts +9 -9
- package/dist/src/identify/consts.d.ts.map +1 -1
- package/dist/src/identify/consts.js +11 -0
- package/dist/src/identify/consts.js.map +1 -0
- package/dist/src/identify/index.d.ts +42 -96
- package/dist/src/identify/index.d.ts.map +1 -1
- package/dist/src/identify/index.js +322 -0
- package/dist/src/identify/index.js.map +1 -0
- package/dist/src/identify/pb/message.d.ts +16 -0
- package/dist/src/identify/pb/message.d.ts.map +1 -0
- package/dist/src/identify/pb/message.js +24 -0
- package/dist/src/identify/pb/message.js.map +1 -0
- package/dist/src/index.d.ts +150 -496
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/insecure/index.d.ts +9 -0
- package/dist/src/insecure/index.d.ts.map +1 -0
- package/dist/src/insecure/index.js +81 -0
- package/dist/src/insecure/index.js.map +1 -0
- package/dist/src/insecure/pb/proto.d.ts +29 -0
- package/dist/src/insecure/pb/proto.d.ts.map +1 -0
- package/dist/src/insecure/pb/proto.js +53 -0
- package/dist/src/insecure/pb/proto.js.map +1 -0
- package/dist/src/keychain/cms.d.ts +6 -14
- package/dist/src/keychain/cms.d.ts.map +1 -1
- package/dist/src/keychain/cms.js +129 -0
- package/dist/src/keychain/cms.js.map +1 -0
- package/dist/src/keychain/index.d.ts +60 -81
- package/dist/src/keychain/index.d.ts.map +1 -1
- package/dist/src/keychain/index.js +492 -0
- package/dist/src/keychain/index.js.map +1 -0
- package/dist/src/keychain/util.d.ts +3 -6
- package/dist/src/keychain/util.d.ts.map +1 -1
- package/dist/src/keychain/util.js +79 -0
- package/dist/src/keychain/util.js.map +1 -0
- package/dist/src/libp2p.d.ts +80 -0
- package/dist/src/libp2p.d.ts.map +1 -0
- package/dist/src/libp2p.js +397 -0
- package/dist/src/libp2p.js.map +1 -0
- package/dist/src/metrics/index.d.ts +47 -104
- package/dist/src/metrics/index.d.ts.map +1 -1
- package/dist/src/metrics/index.js +231 -0
- package/dist/src/metrics/index.js.map +1 -0
- package/dist/src/metrics/moving-average.d.ts +14 -0
- package/dist/src/metrics/moving-average.d.ts.map +1 -0
- package/dist/src/metrics/moving-average.js +40 -0
- package/dist/src/metrics/moving-average.js.map +1 -0
- package/dist/src/metrics/stats.d.ts +41 -93
- package/dist/src/metrics/stats.d.ts.map +1 -1
- package/dist/src/metrics/stats.js +183 -0
- package/dist/src/metrics/stats.js.map +1 -0
- package/dist/src/nat-manager.d.ts +42 -99
- package/dist/src/nat-manager.d.ts.map +1 -1
- package/dist/src/nat-manager.js +114 -0
- package/dist/src/nat-manager.js.map +1 -0
- package/dist/src/peer-record-updater.d.ts +15 -0
- package/dist/src/peer-record-updater.d.ts.map +1 -0
- package/dist/src/peer-record-updater.js +44 -0
- package/dist/src/peer-record-updater.js.map +1 -0
- package/dist/src/peer-routing.d.ts +40 -84
- package/dist/src/peer-routing.d.ts.map +1 -1
- package/dist/src/peer-routing.js +108 -0
- package/dist/src/peer-routing.js.map +1 -0
- package/dist/src/ping/constants.d.ts +4 -4
- package/dist/src/ping/constants.d.ts.map +1 -1
- package/dist/src/ping/constants.js +5 -0
- package/dist/src/ping/constants.js.map +1 -0
- package/dist/src/ping/index.d.ts +17 -31
- package/dist/src/ping/index.d.ts.map +1 -1
- package/dist/src/ping/index.js +57 -0
- package/dist/src/ping/index.js.map +1 -0
- package/dist/src/pnet/crypto.d.ts +15 -5
- package/dist/src/pnet/crypto.d.ts.map +1 -1
- package/dist/src/pnet/crypto.js +60 -0
- package/dist/src/pnet/crypto.js.map +1 -0
- package/dist/src/pnet/errors.d.ts +5 -5
- package/dist/src/pnet/errors.d.ts.map +1 -1
- package/dist/src/pnet/errors.js +6 -0
- package/dist/src/pnet/errors.js.map +1 -0
- package/dist/src/pnet/index.d.ts +12 -20
- package/dist/src/pnet/index.d.ts.map +1 -1
- package/dist/src/pnet/index.js +67 -0
- package/dist/src/pnet/index.js.map +1 -0
- package/dist/src/pnet/key-generator.d.ts +3 -7
- package/dist/src/pnet/key-generator.d.ts.map +1 -1
- package/dist/src/pnet/key-generator.js +25 -0
- package/dist/src/pnet/key-generator.js.map +1 -0
- package/dist/src/pubsub/dummy-pubsub.d.ts +17 -0
- package/dist/src/pubsub/dummy-pubsub.d.ts.map +1 -0
- package/dist/src/pubsub/dummy-pubsub.js +37 -0
- package/dist/src/pubsub/dummy-pubsub.js.map +1 -0
- package/dist/src/registrar.d.ts +26 -65
- package/dist/src/registrar.d.ts.map +1 -1
- package/dist/src/registrar.js +144 -0
- package/dist/src/registrar.js.map +1 -0
- package/dist/src/transport-manager.d.ts +36 -82
- package/dist/src/transport-manager.d.ts.map +1 -1
- package/dist/src/transport-manager.js +223 -0
- package/dist/src/transport-manager.js.map +1 -0
- package/dist/src/upgrader.d.ts +49 -129
- package/dist/src/upgrader.d.ts.map +1 -1
- package/dist/src/upgrader.js +402 -0
- package/dist/src/upgrader.js.map +1 -0
- package/dist/src/version.d.ts +3 -0
- package/dist/src/version.d.ts.map +1 -0
- package/dist/src/version.js +3 -0
- package/dist/src/version.js.map +1 -0
- package/package.json +144 -201
- package/src/address-manager/index.ts +130 -0
- package/src/circuit/README.md +16 -11
- package/src/circuit/auto-relay.ts +286 -0
- package/src/circuit/circuit/hop.ts +211 -0
- package/src/circuit/circuit/stop.ts +78 -0
- package/src/circuit/circuit/stream-handler.ts +86 -0
- package/src/circuit/circuit/{utils.js → utils.ts} +9 -25
- package/src/circuit/constants.ts +31 -0
- package/src/circuit/index.ts +120 -0
- package/src/circuit/listener.ts +82 -0
- package/src/circuit/multicodec.ts +2 -0
- package/src/circuit/{protocol → pb}/index.proto +1 -1
- package/src/circuit/pb/index.ts +117 -0
- package/src/circuit/transport.ts +219 -0
- package/src/circuit/utils.ts +12 -0
- package/src/config.ts +99 -0
- package/src/connection-manager/auto-dialler.ts +154 -0
- package/src/connection-manager/dialer/auto-dialer.ts +59 -0
- package/src/{dialer/dial-request.js → connection-manager/dialer/dial-request.ts} +60 -51
- package/src/connection-manager/dialer/index.ts +382 -0
- package/src/connection-manager/index.ts +508 -0
- package/src/connection-manager/latency-monitor.ts +319 -0
- package/src/connection-manager/{visibility-change-emitter.js → visibility-change-emitter.ts} +48 -38
- package/src/constants.ts +31 -0
- package/src/content-routing/index.ts +144 -0
- package/src/content-routing/utils.ts +54 -0
- package/src/dht/dht-content-routing.ts +43 -0
- package/src/dht/dht-peer-routing.ts +35 -0
- package/src/dht/dummy-dht.ts +60 -0
- package/src/errors.ts +73 -0
- package/src/fetch/README.md +1 -1
- package/src/fetch/constants.ts +3 -0
- package/src/fetch/index.ts +167 -0
- package/src/fetch/{proto.proto → pb/proto.proto} +0 -0
- package/src/fetch/pb/proto.ts +65 -0
- package/src/get-peer.ts +57 -0
- package/src/identify/consts.ts +13 -0
- package/src/identify/index.ts +445 -0
- package/src/identify/{message.proto → pb/message.proto} +0 -0
- package/src/identify/pb/message.ts +37 -0
- package/src/index.ts +220 -0
- package/src/insecure/index.ts +101 -0
- package/src/insecure/{proto.proto → pb/proto.proto} +0 -0
- package/src/insecure/pb/proto.ts +68 -0
- package/src/keychain/{cms.js → cms.ts} +62 -58
- package/src/keychain/index.ts +587 -0
- package/src/keychain/{util.js → util.ts} +7 -17
- package/src/libp2p.ts +538 -0
- package/src/metrics/index.ts +310 -0
- package/src/metrics/moving-average.ts +53 -0
- package/src/metrics/stats.ts +238 -0
- package/src/nat-manager.ts +194 -0
- package/src/peer-record-updater.ts +55 -0
- package/src/peer-routing.ts +186 -0
- package/src/ping/README.md +1 -1
- package/src/ping/constants.ts +5 -0
- package/src/ping/index.ts +84 -0
- package/src/pnet/README.md +2 -2
- package/src/pnet/crypto.ts +67 -0
- package/src/pnet/errors.ts +5 -0
- package/src/pnet/index.ts +97 -0
- package/src/pnet/key-generator.ts +28 -0
- package/src/pubsub/dummy-pubsub.ts +51 -0
- package/src/registrar.ts +189 -0
- package/src/transport-manager.ts +281 -0
- package/src/upgrader.ts +499 -0
- package/src/version.ts +3 -0
- package/dist/index.min.js +0 -55
- package/dist/src/circuit/protocol/index.d.ts +0 -173
- package/dist/src/dialer/dial-request.d.ts +0 -55
- package/dist/src/dialer/dial-request.d.ts.map +0 -1
- package/dist/src/dialer/index.d.ts +0 -182
- package/dist/src/dialer/index.d.ts.map +0 -1
- package/dist/src/fetch/proto.d.ts +0 -134
- package/dist/src/identify/message.d.ts +0 -95
- package/dist/src/insecure/plaintext.d.ts +0 -12
- package/dist/src/insecure/plaintext.d.ts.map +0 -1
- package/dist/src/insecure/proto.d.ts +0 -128
- package/dist/src/metrics/old-peers.d.ts +0 -3
- package/dist/src/metrics/old-peers.d.ts.map +0 -1
- package/dist/src/metrics/tracked-map.d.ts +0 -8
- package/dist/src/metrics/tracked-map.d.ts.map +0 -1
- package/dist/src/peer-store/address-book.d.ts +0 -67
- package/dist/src/peer-store/address-book.d.ts.map +0 -1
- package/dist/src/peer-store/index.d.ts +0 -58
- package/dist/src/peer-store/index.d.ts.map +0 -1
- package/dist/src/peer-store/key-book.d.ts +0 -40
- package/dist/src/peer-store/key-book.d.ts.map +0 -1
- package/dist/src/peer-store/metadata-book.d.ts +0 -58
- package/dist/src/peer-store/metadata-book.d.ts.map +0 -1
- package/dist/src/peer-store/pb/peer.d.ts +0 -222
- package/dist/src/peer-store/proto-book.d.ts +0 -43
- package/dist/src/peer-store/proto-book.d.ts.map +0 -1
- package/dist/src/peer-store/store.d.ts +0 -73
- package/dist/src/peer-store/store.d.ts.map +0 -1
- package/dist/src/peer-store/types.d.ts +0 -202
- package/dist/src/peer-store/types.d.ts.map +0 -1
- package/dist/src/ping/util.d.ts +0 -5
- package/dist/src/ping/util.d.ts.map +0 -1
- package/dist/src/pubsub-adapter.d.ts +0 -22
- package/dist/src/pubsub-adapter.d.ts.map +0 -1
- package/dist/src/record/envelope/envelope.d.ts +0 -77
- package/dist/src/record/envelope/index.d.ts +0 -80
- package/dist/src/record/envelope/index.d.ts.map +0 -1
- package/dist/src/record/peer-record/consts.d.ts +0 -4
- package/dist/src/record/peer-record/consts.d.ts.map +0 -1
- package/dist/src/record/peer-record/index.d.ts +0 -60
- package/dist/src/record/peer-record/index.d.ts.map +0 -1
- package/dist/src/record/peer-record/peer-record.d.ts +0 -133
- package/dist/src/record/utils.d.ts +0 -12
- package/dist/src/record/utils.d.ts.map +0 -1
- package/dist/src/types.d.ts +0 -90
- package/dist/src/types.d.ts.map +0 -1
- package/src/address-manager/index.js +0 -96
- package/src/circuit/auto-relay.js +0 -302
- package/src/circuit/circuit/hop.js +0 -205
- package/src/circuit/circuit/stop.js +0 -81
- package/src/circuit/circuit/stream-handler.js +0 -94
- package/src/circuit/constants.js +0 -12
- package/src/circuit/index.js +0 -102
- package/src/circuit/listener.js +0 -75
- package/src/circuit/multicodec.js +0 -5
- package/src/circuit/protocol/index.d.ts +0 -173
- package/src/circuit/protocol/index.js +0 -530
- package/src/circuit/transport.js +0 -229
- package/src/circuit/utils.js +0 -17
- package/src/config.js +0 -114
- package/src/connection-manager/auto-dialler.js +0 -132
- package/src/connection-manager/index.js +0 -374
- package/src/connection-manager/latency-monitor.js +0 -264
- package/src/constants.js +0 -18
- package/src/content-routing/index.js +0 -163
- package/src/content-routing/utils.js +0 -89
- package/src/dht/dht-content-routing.js +0 -44
- package/src/dht/dht-peer-routing.js +0 -51
- package/src/dialer/index.js +0 -376
- package/src/errors.js +0 -66
- package/src/fetch/constants.js +0 -6
- package/src/fetch/index.js +0 -159
- package/src/fetch/proto.d.ts +0 -134
- package/src/fetch/proto.js +0 -333
- package/src/get-peer.js +0 -49
- package/src/identify/consts.js +0 -15
- package/src/identify/index.js +0 -384
- package/src/identify/message.d.ts +0 -95
- package/src/identify/message.js +0 -328
- package/src/index.js +0 -813
- package/src/insecure/plaintext.js +0 -95
- package/src/insecure/proto.d.ts +0 -128
- package/src/insecure/proto.js +0 -371
- package/src/keychain/index.js +0 -561
- package/src/metrics/index.js +0 -290
- package/src/metrics/old-peers.js +0 -16
- package/src/metrics/stats.js +0 -270
- package/src/metrics/tracked-map.js +0 -94
- package/src/nat-manager.js +0 -197
- package/src/peer-routing.js +0 -176
- package/src/peer-store/README.md +0 -145
- package/src/peer-store/address-book.js +0 -382
- package/src/peer-store/index.js +0 -121
- package/src/peer-store/key-book.js +0 -141
- package/src/peer-store/metadata-book.js +0 -250
- package/src/peer-store/pb/peer.d.ts +0 -222
- package/src/peer-store/pb/peer.js +0 -643
- package/src/peer-store/pb/peer.proto +0 -31
- package/src/peer-store/proto-book.js +0 -237
- package/src/peer-store/store.js +0 -263
- package/src/peer-store/types.ts +0 -245
- package/src/ping/constants.js +0 -8
- package/src/ping/index.js +0 -84
- package/src/ping/util.js +0 -18
- package/src/pnet/crypto.js +0 -84
- package/src/pnet/errors.js +0 -7
- package/src/pnet/index.js +0 -86
- package/src/pnet/key-generator.js +0 -33
- package/src/pubsub-adapter.js +0 -61
- package/src/record/README.md +0 -130
- package/src/record/envelope/envelope.d.ts +0 -77
- package/src/record/envelope/envelope.js +0 -243
- package/src/record/envelope/envelope.proto +0 -19
- package/src/record/envelope/index.js +0 -183
- package/src/record/peer-record/consts.js +0 -14
- package/src/record/peer-record/index.js +0 -113
- package/src/record/peer-record/peer-record.d.ts +0 -133
- package/src/record/peer-record/peer-record.js +0 -367
- package/src/record/peer-record/peer-record.proto +0 -18
- package/src/record/utils.js +0 -25
- package/src/registrar.js +0 -127
- package/src/transport-manager.js +0 -269
- package/src/types.ts +0 -98
- package/src/upgrader.js +0 -492
package/src/metrics/index.js
DELETED
|
@@ -1,290 +0,0 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
'use strict'
|
|
3
|
-
|
|
4
|
-
const mergeOptions = require('merge-options')
|
|
5
|
-
const { pipe } = require('it-pipe')
|
|
6
|
-
const { tap } = require('streaming-iterables')
|
|
7
|
-
const oldPeerLRU = require('./old-peers')
|
|
8
|
-
const { METRICS: defaultOptions } = require('../constants')
|
|
9
|
-
const Stats = require('./stats')
|
|
10
|
-
|
|
11
|
-
const initialCounters = [
|
|
12
|
-
'dataReceived',
|
|
13
|
-
'dataSent'
|
|
14
|
-
]
|
|
15
|
-
|
|
16
|
-
const directionToEvent = {
|
|
17
|
-
in: 'dataReceived',
|
|
18
|
-
out: 'dataSent'
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* @typedef {import('peer-id')} PeerId
|
|
23
|
-
* @typedef {import('libp2p-interfaces/src/transport/types').MultiaddrConnection} MultiaddrConnection
|
|
24
|
-
*/
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* @typedef MetricsOptions
|
|
28
|
-
* @property {number} [computeThrottleMaxQueueSize = defaultOptions.computeThrottleMaxQueueSize]
|
|
29
|
-
* @property {number} [computeThrottleTimeout = defaultOptions.computeThrottleTimeout]
|
|
30
|
-
* @property {number[]} [movingAverageIntervals = defaultOptions.movingAverageIntervals]
|
|
31
|
-
* @property {number} [maxOldPeersRetention = defaultOptions.maxOldPeersRetention]
|
|
32
|
-
*/
|
|
33
|
-
|
|
34
|
-
class Metrics {
|
|
35
|
-
/**
|
|
36
|
-
* @class
|
|
37
|
-
* @param {MetricsOptions} options
|
|
38
|
-
*/
|
|
39
|
-
constructor (options) {
|
|
40
|
-
this._options = mergeOptions(defaultOptions, options)
|
|
41
|
-
this._globalStats = new Stats(initialCounters, this._options)
|
|
42
|
-
this._peerStats = new Map()
|
|
43
|
-
this._protocolStats = new Map()
|
|
44
|
-
this._oldPeers = oldPeerLRU(this._options.maxOldPeersRetention)
|
|
45
|
-
this._running = false
|
|
46
|
-
this._onMessage = this._onMessage.bind(this)
|
|
47
|
-
this._systems = new Map()
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Must be called for stats to saved. Any data pushed for tracking
|
|
52
|
-
* will be ignored.
|
|
53
|
-
*/
|
|
54
|
-
start () {
|
|
55
|
-
this._running = true
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Stops all averages timers and prevents new data from being tracked.
|
|
60
|
-
* Once `stop` is called, `start` must be called to resume stats tracking.
|
|
61
|
-
*/
|
|
62
|
-
stop () {
|
|
63
|
-
this._running = false
|
|
64
|
-
this._globalStats.stop()
|
|
65
|
-
for (const stats of this._peerStats.values()) {
|
|
66
|
-
stats.stop()
|
|
67
|
-
}
|
|
68
|
-
for (const stats of this._protocolStats.values()) {
|
|
69
|
-
stats.stop()
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Gets the global `Stats` object
|
|
75
|
-
*
|
|
76
|
-
* @returns {Stats}
|
|
77
|
-
*/
|
|
78
|
-
get global () {
|
|
79
|
-
return this._globalStats
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Returns a list of `PeerId` strings currently being tracked
|
|
84
|
-
*
|
|
85
|
-
* @returns {string[]}
|
|
86
|
-
*/
|
|
87
|
-
get peers () {
|
|
88
|
-
return Array.from(this._peerStats.keys())
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* @returns {Map<string, Map<string, Map<string, any>>>}
|
|
93
|
-
*/
|
|
94
|
-
getComponentMetrics () {
|
|
95
|
-
return this._systems
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
updateComponentMetric ({ system = 'libp2p', component, metric, value }) {
|
|
99
|
-
if (!this._systems.has(system)) {
|
|
100
|
-
this._systems.set(system, new Map())
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
const systemMetrics = this._systems.get(system)
|
|
104
|
-
|
|
105
|
-
if (!systemMetrics.has(component)) {
|
|
106
|
-
systemMetrics.set(component, new Map())
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
const componentMetrics = systemMetrics.get(component)
|
|
110
|
-
|
|
111
|
-
componentMetrics.set(metric, value)
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Returns the `Stats` object for the given `PeerId` whether it
|
|
116
|
-
* is a live peer, or in the disconnected peer LRU cache.
|
|
117
|
-
*
|
|
118
|
-
* @param {PeerId} peerId
|
|
119
|
-
* @returns {Stats}
|
|
120
|
-
*/
|
|
121
|
-
forPeer (peerId) {
|
|
122
|
-
const idString = peerId.toB58String()
|
|
123
|
-
return this._peerStats.get(idString) || this._oldPeers.get(idString)
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Returns a list of all protocol strings currently being tracked.
|
|
128
|
-
*
|
|
129
|
-
* @returns {string[]}
|
|
130
|
-
*/
|
|
131
|
-
get protocols () {
|
|
132
|
-
return Array.from(this._protocolStats.keys())
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Returns the `Stats` object for the given `protocol`.
|
|
137
|
-
*
|
|
138
|
-
* @param {string} protocol
|
|
139
|
-
* @returns {Stats}
|
|
140
|
-
*/
|
|
141
|
-
forProtocol (protocol) {
|
|
142
|
-
return this._protocolStats.get(protocol)
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Should be called when all connections to a given peer
|
|
147
|
-
* have closed. The `Stats` collection for the peer will
|
|
148
|
-
* be stopped and moved to an LRU for temporary retention.
|
|
149
|
-
*
|
|
150
|
-
* @param {PeerId} peerId
|
|
151
|
-
*/
|
|
152
|
-
onPeerDisconnected (peerId) {
|
|
153
|
-
const idString = peerId.toB58String()
|
|
154
|
-
const peerStats = this._peerStats.get(idString)
|
|
155
|
-
if (peerStats) {
|
|
156
|
-
peerStats.stop()
|
|
157
|
-
this._peerStats.delete(idString)
|
|
158
|
-
this._oldPeers.set(idString, peerStats)
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* Takes the metadata for a message and tracks it in the
|
|
164
|
-
* appropriate categories. If the protocol is present, protocol
|
|
165
|
-
* stats will also be tracked.
|
|
166
|
-
*
|
|
167
|
-
* @private
|
|
168
|
-
* @param {object} params
|
|
169
|
-
* @param {PeerId} params.remotePeer - Remote peer
|
|
170
|
-
* @param {string} [params.protocol] - Protocol string the stream is running
|
|
171
|
-
* @param {string} params.direction - One of ['in','out']
|
|
172
|
-
* @param {number} params.dataLength - Size of the message
|
|
173
|
-
* @returns {void}
|
|
174
|
-
*/
|
|
175
|
-
_onMessage ({ remotePeer, protocol, direction, dataLength }) {
|
|
176
|
-
if (!this._running) return
|
|
177
|
-
|
|
178
|
-
const key = directionToEvent[direction]
|
|
179
|
-
|
|
180
|
-
let peerStats = this.forPeer(remotePeer)
|
|
181
|
-
if (!peerStats) {
|
|
182
|
-
peerStats = new Stats(initialCounters, this._options)
|
|
183
|
-
this._peerStats.set(remotePeer.toB58String(), peerStats)
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
// Peer and global stats
|
|
187
|
-
peerStats.push(key, dataLength)
|
|
188
|
-
this._globalStats.push(key, dataLength)
|
|
189
|
-
|
|
190
|
-
// Protocol specific stats
|
|
191
|
-
if (protocol) {
|
|
192
|
-
let protocolStats = this.forProtocol(protocol)
|
|
193
|
-
if (!protocolStats) {
|
|
194
|
-
protocolStats = new Stats(initialCounters, this._options)
|
|
195
|
-
this._protocolStats.set(protocol, protocolStats)
|
|
196
|
-
}
|
|
197
|
-
protocolStats.push(key, dataLength)
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/**
|
|
202
|
-
* Replaces the `PeerId` string with the given `peerId`.
|
|
203
|
-
* If stats are already being tracked for the given `peerId`, the
|
|
204
|
-
* placeholder stats will be merged with the existing stats.
|
|
205
|
-
*
|
|
206
|
-
* @param {PeerId} placeholder - A peerId string
|
|
207
|
-
* @param {PeerId} peerId
|
|
208
|
-
* @returns {void}
|
|
209
|
-
*/
|
|
210
|
-
updatePlaceholder (placeholder, peerId) {
|
|
211
|
-
if (!this._running) return
|
|
212
|
-
const placeholderStats = this.forPeer(placeholder)
|
|
213
|
-
const peerIdString = peerId.toB58String()
|
|
214
|
-
const existingStats = this.forPeer(peerId)
|
|
215
|
-
let mergedStats = placeholderStats
|
|
216
|
-
|
|
217
|
-
// If we already have stats, merge the two
|
|
218
|
-
if (existingStats) {
|
|
219
|
-
// If existing, merge
|
|
220
|
-
mergedStats = Metrics.mergeStats(existingStats, mergedStats)
|
|
221
|
-
// Attempt to delete from the old peers list just in case it was tracked there
|
|
222
|
-
this._oldPeers.delete(peerIdString)
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
this._peerStats.delete(placeholder.toB58String())
|
|
226
|
-
this._peerStats.set(peerIdString, mergedStats)
|
|
227
|
-
mergedStats.start()
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
/**
|
|
231
|
-
* Tracks data running through a given Duplex Iterable `stream`. If
|
|
232
|
-
* the `peerId` is not provided, a placeholder string will be created and
|
|
233
|
-
* returned. This allows lazy tracking of a peer when the peer is not yet known.
|
|
234
|
-
* When the `PeerId` is known, `Metrics.updatePlaceholder` should be called
|
|
235
|
-
* with the placeholder string returned from here, and the known `PeerId`.
|
|
236
|
-
*
|
|
237
|
-
* @param {Object} options
|
|
238
|
-
* @param {MultiaddrConnection} options.stream - A duplex iterable stream
|
|
239
|
-
* @param {PeerId} [options.remotePeer] - The id of the remote peer that's connected
|
|
240
|
-
* @param {string} [options.protocol] - The protocol the stream is running
|
|
241
|
-
* @returns {MultiaddrConnection} The peerId string or placeholder string
|
|
242
|
-
*/
|
|
243
|
-
trackStream ({ stream, remotePeer, protocol }) {
|
|
244
|
-
const metrics = this
|
|
245
|
-
const _source = stream.source
|
|
246
|
-
stream.source = tap(chunk => metrics._onMessage({
|
|
247
|
-
remotePeer,
|
|
248
|
-
protocol,
|
|
249
|
-
direction: 'in',
|
|
250
|
-
dataLength: chunk.length
|
|
251
|
-
}))(_source)
|
|
252
|
-
|
|
253
|
-
const _sink = stream.sink
|
|
254
|
-
stream.sink = source => {
|
|
255
|
-
return pipe(
|
|
256
|
-
source,
|
|
257
|
-
tap(chunk => metrics._onMessage({
|
|
258
|
-
remotePeer,
|
|
259
|
-
protocol,
|
|
260
|
-
direction: 'out',
|
|
261
|
-
dataLength: chunk.length
|
|
262
|
-
})),
|
|
263
|
-
_sink
|
|
264
|
-
)
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
return stream
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
/**
|
|
271
|
-
* Merges `other` into `target`. `target` will be modified
|
|
272
|
-
* and returned.
|
|
273
|
-
*
|
|
274
|
-
* @param {Stats} target
|
|
275
|
-
* @param {Stats} other
|
|
276
|
-
* @returns {Stats}
|
|
277
|
-
*/
|
|
278
|
-
static mergeStats (target, other) {
|
|
279
|
-
target.stop()
|
|
280
|
-
other.stop()
|
|
281
|
-
|
|
282
|
-
// Merge queues
|
|
283
|
-
target._queue = [...target._queue, ...other._queue]
|
|
284
|
-
|
|
285
|
-
// TODO: how to merge moving averages?
|
|
286
|
-
return target
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
module.exports = Metrics
|
package/src/metrics/old-peers.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const LRU = require('hashlru')
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Creates and returns a Least Recently Used Cache
|
|
7
|
-
*
|
|
8
|
-
* @param {number} maxSize
|
|
9
|
-
* @returns {any}
|
|
10
|
-
*/
|
|
11
|
-
module.exports = (maxSize) => {
|
|
12
|
-
// @ts-ignore LRU expression is not callable
|
|
13
|
-
const patched = LRU(maxSize)
|
|
14
|
-
patched.delete = patched.remove
|
|
15
|
-
return patched
|
|
16
|
-
}
|
package/src/metrics/stats.js
DELETED
|
@@ -1,270 +0,0 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
'use strict'
|
|
3
|
-
|
|
4
|
-
const { EventEmitter } = require('events')
|
|
5
|
-
const { BigNumber: Big } = require('bignumber.js')
|
|
6
|
-
const MovingAverage = require('@vascosantos/moving-average')
|
|
7
|
-
const retimer = require('retimer')
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @typedef {import('@vascosantos/moving-average').IMovingAverage} IMovingAverage
|
|
11
|
-
* @typedef {import('bignumber.js').BigNumber} Big
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
class Stats extends EventEmitter {
|
|
15
|
-
/**
|
|
16
|
-
* A queue based manager for stat processing
|
|
17
|
-
*
|
|
18
|
-
* @class
|
|
19
|
-
* @param {string[]} initialCounters
|
|
20
|
-
* @param {any} options
|
|
21
|
-
*/
|
|
22
|
-
constructor (initialCounters, options) {
|
|
23
|
-
super()
|
|
24
|
-
|
|
25
|
-
this._options = options
|
|
26
|
-
this._queue = []
|
|
27
|
-
|
|
28
|
-
/** @type {{ dataReceived: Big, dataSent: Big }} */
|
|
29
|
-
this._stats = {
|
|
30
|
-
dataReceived: Big(0),
|
|
31
|
-
dataSent: Big(0)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
this._frequencyLastTime = Date.now()
|
|
35
|
-
this._frequencyAccumulators = {}
|
|
36
|
-
|
|
37
|
-
/** @type {{ dataReceived: IMovingAverage[], dataSent: IMovingAverage[] }} */
|
|
38
|
-
this._movingAverages = {}
|
|
39
|
-
|
|
40
|
-
this._update = this._update.bind(this)
|
|
41
|
-
|
|
42
|
-
const intervals = this._options.movingAverageIntervals
|
|
43
|
-
|
|
44
|
-
for (let i = 0; i < initialCounters.length; i++) {
|
|
45
|
-
const key = initialCounters[i]
|
|
46
|
-
this._stats[key] = Big(0)
|
|
47
|
-
this._movingAverages[key] = {}
|
|
48
|
-
for (let k = 0; k < intervals.length; k++) {
|
|
49
|
-
const interval = intervals[k]
|
|
50
|
-
const ma = this._movingAverages[key][interval] = MovingAverage(interval)
|
|
51
|
-
ma.push(this._frequencyLastTime, 0)
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Initializes the internal timer if there are items in the queue. This
|
|
58
|
-
* should only need to be called if `Stats.stop` was previously called, as
|
|
59
|
-
* `Stats.push` will also start the processing.
|
|
60
|
-
*
|
|
61
|
-
* @returns {void}
|
|
62
|
-
*/
|
|
63
|
-
start () {
|
|
64
|
-
if (this._queue.length) {
|
|
65
|
-
this._resetComputeTimeout()
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Stops processing and computing of stats by clearing the internal
|
|
71
|
-
* timer.
|
|
72
|
-
*
|
|
73
|
-
* @returns {void}
|
|
74
|
-
*/
|
|
75
|
-
stop () {
|
|
76
|
-
if (this._timeout) {
|
|
77
|
-
this._timeout.clear()
|
|
78
|
-
this._timeout = null
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Returns a clone of the current stats.
|
|
84
|
-
*/
|
|
85
|
-
get snapshot () {
|
|
86
|
-
return Object.assign({}, this._stats)
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Returns a clone of the internal movingAverages
|
|
91
|
-
*/
|
|
92
|
-
get movingAverages () {
|
|
93
|
-
return Object.assign({}, this._movingAverages)
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Returns a plain JSON object of the stats
|
|
98
|
-
*
|
|
99
|
-
* @returns {*}
|
|
100
|
-
*/
|
|
101
|
-
toJSON () {
|
|
102
|
-
const snapshot = this.snapshot
|
|
103
|
-
const movingAverages = this.movingAverages
|
|
104
|
-
const data = {
|
|
105
|
-
dataReceived: snapshot.dataReceived.toString(),
|
|
106
|
-
dataSent: snapshot.dataSent.toString(),
|
|
107
|
-
movingAverages: {}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
const counters = Object.keys(movingAverages)
|
|
111
|
-
for (const key of counters) {
|
|
112
|
-
data.movingAverages[key] = {}
|
|
113
|
-
for (const interval of Object.keys(movingAverages[key])) {
|
|
114
|
-
data.movingAverages[key][interval] = movingAverages[key][interval].movingAverage()
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
return data
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Pushes the given operation data to the queue, along with the
|
|
123
|
-
* current Timestamp, then resets the update timer.
|
|
124
|
-
*
|
|
125
|
-
* @param {string} counter
|
|
126
|
-
* @param {number} inc
|
|
127
|
-
* @returns {void}
|
|
128
|
-
*/
|
|
129
|
-
push (counter, inc) {
|
|
130
|
-
this._queue.push([counter, inc, Date.now()])
|
|
131
|
-
this._resetComputeTimeout()
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Resets the timeout for triggering updates.
|
|
136
|
-
*
|
|
137
|
-
* @private
|
|
138
|
-
* @returns {void}
|
|
139
|
-
*/
|
|
140
|
-
_resetComputeTimeout () {
|
|
141
|
-
this._timeout = retimer(this._update, this._nextTimeout())
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Calculates and returns the timeout for the next update based on
|
|
146
|
-
* the urgency of the update.
|
|
147
|
-
*
|
|
148
|
-
* @private
|
|
149
|
-
* @returns {number}
|
|
150
|
-
*/
|
|
151
|
-
_nextTimeout () {
|
|
152
|
-
// calculate the need for an update, depending on the queue length
|
|
153
|
-
const urgency = this._queue.length / this._options.computeThrottleMaxQueueSize
|
|
154
|
-
const timeout = Math.max(this._options.computeThrottleTimeout * (1 - urgency), 0)
|
|
155
|
-
return timeout
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* If there are items in the queue, they will will be processed and
|
|
160
|
-
* the frequency for all items will be updated based on the Timestamp
|
|
161
|
-
* of the last item in the queue. The `update` event will also be emitted
|
|
162
|
-
* with the latest stats.
|
|
163
|
-
*
|
|
164
|
-
* If there are no items in the queue, no action is taken.
|
|
165
|
-
*
|
|
166
|
-
* @private
|
|
167
|
-
* @returns {void}
|
|
168
|
-
*/
|
|
169
|
-
_update () {
|
|
170
|
-
this._timeout = null
|
|
171
|
-
if (this._queue.length) {
|
|
172
|
-
let last
|
|
173
|
-
for (last of this._queue) {
|
|
174
|
-
this._applyOp(last)
|
|
175
|
-
}
|
|
176
|
-
this._queue = []
|
|
177
|
-
|
|
178
|
-
this._updateFrequency(last[2]) // contains timestamp of last op
|
|
179
|
-
|
|
180
|
-
this.emit('update', this._stats)
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* For each key in the stats, the frequency and moving averages
|
|
186
|
-
* will be updated via Stats._updateFrequencyFor based on the time
|
|
187
|
-
* difference between calls to this method.
|
|
188
|
-
*
|
|
189
|
-
* @private
|
|
190
|
-
* @param {Timestamp} latestTime
|
|
191
|
-
* @returns {void}
|
|
192
|
-
*/
|
|
193
|
-
_updateFrequency (latestTime) {
|
|
194
|
-
const timeDiff = latestTime - this._frequencyLastTime
|
|
195
|
-
|
|
196
|
-
Object.keys(this._stats).forEach((key) => {
|
|
197
|
-
this._updateFrequencyFor(key, timeDiff, latestTime)
|
|
198
|
-
})
|
|
199
|
-
|
|
200
|
-
this._frequencyLastTime = latestTime
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Updates the `movingAverages` for the given `key` and also
|
|
205
|
-
* resets the `frequencyAccumulator` for the `key`.
|
|
206
|
-
*
|
|
207
|
-
* @private
|
|
208
|
-
* @param {string} key
|
|
209
|
-
* @param {number} timeDiffMS - Time in milliseconds
|
|
210
|
-
* @param {Timestamp} latestTime - Time in ticks
|
|
211
|
-
* @returns {void}
|
|
212
|
-
*/
|
|
213
|
-
_updateFrequencyFor (key, timeDiffMS, latestTime) {
|
|
214
|
-
const count = this._frequencyAccumulators[key] || 0
|
|
215
|
-
this._frequencyAccumulators[key] = 0
|
|
216
|
-
// if `timeDiff` is zero, `hz` becomes Infinity, so we fallback to 1ms
|
|
217
|
-
const safeTimeDiff = timeDiffMS || 1
|
|
218
|
-
const hz = (count / safeTimeDiff) * 1000
|
|
219
|
-
|
|
220
|
-
let movingAverages = this._movingAverages[key]
|
|
221
|
-
if (!movingAverages) {
|
|
222
|
-
movingAverages = this._movingAverages[key] = {}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
const intervals = this._options.movingAverageIntervals
|
|
226
|
-
|
|
227
|
-
for (let i = 0; i < intervals.length; i++) {
|
|
228
|
-
const movingAverageInterval = intervals[i]
|
|
229
|
-
let movingAverage = movingAverages[movingAverageInterval]
|
|
230
|
-
if (!movingAverage) {
|
|
231
|
-
movingAverage = movingAverages[movingAverageInterval] = MovingAverage(movingAverageInterval)
|
|
232
|
-
}
|
|
233
|
-
movingAverage.push(latestTime, hz)
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
/**
|
|
238
|
-
* For the given operation, `op`, the stats and `frequencyAccumulator`
|
|
239
|
-
* will be updated or initialized if they don't already exist.
|
|
240
|
-
*
|
|
241
|
-
* @private
|
|
242
|
-
* @param {{string, number}[]} op
|
|
243
|
-
* @throws {InvalidNumber}
|
|
244
|
-
* @returns {void}
|
|
245
|
-
*/
|
|
246
|
-
_applyOp (op) {
|
|
247
|
-
const key = op[0]
|
|
248
|
-
const inc = op[1]
|
|
249
|
-
|
|
250
|
-
if (typeof inc !== 'number') {
|
|
251
|
-
throw new Error(`invalid increment number: ${inc}`)
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
let n
|
|
255
|
-
|
|
256
|
-
if (!Object.prototype.hasOwnProperty.call(this._stats, key)) {
|
|
257
|
-
n = this._stats[key] = Big(0)
|
|
258
|
-
} else {
|
|
259
|
-
n = this._stats[key]
|
|
260
|
-
}
|
|
261
|
-
this._stats[key] = n.plus(inc)
|
|
262
|
-
|
|
263
|
-
if (!this._frequencyAccumulators[key]) {
|
|
264
|
-
this._frequencyAccumulators[key] = 0
|
|
265
|
-
}
|
|
266
|
-
this._frequencyAccumulators[key] += inc
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
module.exports = Stats
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @template K
|
|
5
|
-
* @template V
|
|
6
|
-
*/
|
|
7
|
-
class TrackedMap extends Map {
|
|
8
|
-
/**
|
|
9
|
-
* @param {object} options
|
|
10
|
-
* @param {string} options.system
|
|
11
|
-
* @param {string} options.component
|
|
12
|
-
* @param {string} options.metric
|
|
13
|
-
* @param {import('.')} options.metrics
|
|
14
|
-
*/
|
|
15
|
-
constructor (options) {
|
|
16
|
-
super()
|
|
17
|
-
|
|
18
|
-
const { system, component, metric, metrics } = options
|
|
19
|
-
this._system = system
|
|
20
|
-
this._component = component
|
|
21
|
-
this._metric = metric
|
|
22
|
-
this._metrics = metrics
|
|
23
|
-
|
|
24
|
-
this._metrics.updateComponentMetric({
|
|
25
|
-
system: this._system,
|
|
26
|
-
component: this._component,
|
|
27
|
-
metric: this._metric,
|
|
28
|
-
value: this.size
|
|
29
|
-
})
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* @param {K} key
|
|
34
|
-
* @param {V} value
|
|
35
|
-
*/
|
|
36
|
-
set (key, value) {
|
|
37
|
-
super.set(key, value)
|
|
38
|
-
this._metrics.updateComponentMetric({
|
|
39
|
-
system: this._system,
|
|
40
|
-
component: this._component,
|
|
41
|
-
metric: this._metric,
|
|
42
|
-
value: this.size
|
|
43
|
-
})
|
|
44
|
-
return this
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* @param {K} key
|
|
49
|
-
*/
|
|
50
|
-
delete (key) {
|
|
51
|
-
const deleted = super.delete(key)
|
|
52
|
-
this._metrics.updateComponentMetric({
|
|
53
|
-
system: this._system,
|
|
54
|
-
component: this._component,
|
|
55
|
-
metric: this._metric,
|
|
56
|
-
value: this.size
|
|
57
|
-
})
|
|
58
|
-
return deleted
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
clear () {
|
|
62
|
-
super.clear()
|
|
63
|
-
|
|
64
|
-
this._metrics.updateComponentMetric({
|
|
65
|
-
system: this._system,
|
|
66
|
-
component: this._component,
|
|
67
|
-
metric: this._metric,
|
|
68
|
-
value: this.size
|
|
69
|
-
})
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* @template K
|
|
75
|
-
* @template V
|
|
76
|
-
* @param {object} options
|
|
77
|
-
* @param {string} [options.system]
|
|
78
|
-
* @param {string} options.component
|
|
79
|
-
* @param {string} options.metric
|
|
80
|
-
* @param {import('.')} [options.metrics]
|
|
81
|
-
* @returns {Map<K, V>}
|
|
82
|
-
*/
|
|
83
|
-
module.exports = ({ system = 'libp2p', component, metric, metrics }) => {
|
|
84
|
-
/** @type {Map<K, V>} */
|
|
85
|
-
let map
|
|
86
|
-
|
|
87
|
-
if (metrics) {
|
|
88
|
-
map = new TrackedMap({ system, component, metric, metrics })
|
|
89
|
-
} else {
|
|
90
|
-
map = new Map()
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
return map
|
|
94
|
-
}
|