@libp2p/gossipsub 14.1.1-6059227cb

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.
Files changed (160) hide show
  1. package/README.md +85 -0
  2. package/dist/index.min.js +19 -0
  3. package/dist/index.min.js.map +7 -0
  4. package/dist/src/config.d.ts +32 -0
  5. package/dist/src/config.d.ts.map +1 -0
  6. package/dist/src/config.js +2 -0
  7. package/dist/src/config.js.map +1 -0
  8. package/dist/src/constants.d.ts +213 -0
  9. package/dist/src/constants.d.ts.map +1 -0
  10. package/dist/src/constants.js +217 -0
  11. package/dist/src/constants.js.map +1 -0
  12. package/dist/src/errors.d.ts +9 -0
  13. package/dist/src/errors.d.ts.map +1 -0
  14. package/dist/src/errors.js +15 -0
  15. package/dist/src/errors.js.map +1 -0
  16. package/dist/src/gossipsub.d.ts +419 -0
  17. package/dist/src/gossipsub.d.ts.map +1 -0
  18. package/dist/src/gossipsub.js +2520 -0
  19. package/dist/src/gossipsub.js.map +1 -0
  20. package/dist/src/index.d.ts +344 -0
  21. package/dist/src/index.d.ts.map +1 -0
  22. package/dist/src/index.js +43 -0
  23. package/dist/src/index.js.map +1 -0
  24. package/dist/src/message/decodeRpc.d.ts +11 -0
  25. package/dist/src/message/decodeRpc.d.ts.map +1 -0
  26. package/dist/src/message/decodeRpc.js +10 -0
  27. package/dist/src/message/decodeRpc.js.map +1 -0
  28. package/dist/src/message/index.d.ts +2 -0
  29. package/dist/src/message/index.d.ts.map +1 -0
  30. package/dist/src/message/index.js +2 -0
  31. package/dist/src/message/index.js.map +1 -0
  32. package/dist/src/message/rpc.d.ts +99 -0
  33. package/dist/src/message/rpc.d.ts.map +1 -0
  34. package/dist/src/message/rpc.js +663 -0
  35. package/dist/src/message/rpc.js.map +1 -0
  36. package/dist/src/message-cache.d.ts +80 -0
  37. package/dist/src/message-cache.d.ts.map +1 -0
  38. package/dist/src/message-cache.js +144 -0
  39. package/dist/src/message-cache.js.map +1 -0
  40. package/dist/src/metrics.d.ts +467 -0
  41. package/dist/src/metrics.d.ts.map +1 -0
  42. package/dist/src/metrics.js +896 -0
  43. package/dist/src/metrics.js.map +1 -0
  44. package/dist/src/score/compute-score.d.ts +4 -0
  45. package/dist/src/score/compute-score.d.ts.map +1 -0
  46. package/dist/src/score/compute-score.js +75 -0
  47. package/dist/src/score/compute-score.js.map +1 -0
  48. package/dist/src/score/index.d.ts +4 -0
  49. package/dist/src/score/index.d.ts.map +1 -0
  50. package/dist/src/score/index.js +4 -0
  51. package/dist/src/score/index.js.map +1 -0
  52. package/dist/src/score/message-deliveries.d.ts +45 -0
  53. package/dist/src/score/message-deliveries.d.ts.map +1 -0
  54. package/dist/src/score/message-deliveries.js +75 -0
  55. package/dist/src/score/message-deliveries.js.map +1 -0
  56. package/dist/src/score/peer-score-params.d.ts +125 -0
  57. package/dist/src/score/peer-score-params.d.ts.map +1 -0
  58. package/dist/src/score/peer-score-params.js +159 -0
  59. package/dist/src/score/peer-score-params.js.map +1 -0
  60. package/dist/src/score/peer-score-thresholds.d.ts +31 -0
  61. package/dist/src/score/peer-score-thresholds.d.ts.map +1 -0
  62. package/dist/src/score/peer-score-thresholds.js +32 -0
  63. package/dist/src/score/peer-score-thresholds.js.map +1 -0
  64. package/dist/src/score/peer-score.d.ts +119 -0
  65. package/dist/src/score/peer-score.d.ts.map +1 -0
  66. package/dist/src/score/peer-score.js +459 -0
  67. package/dist/src/score/peer-score.js.map +1 -0
  68. package/dist/src/score/peer-stats.d.ts +32 -0
  69. package/dist/src/score/peer-stats.d.ts.map +1 -0
  70. package/dist/src/score/peer-stats.js +2 -0
  71. package/dist/src/score/peer-stats.js.map +1 -0
  72. package/dist/src/score/scoreMetrics.d.ts +23 -0
  73. package/dist/src/score/scoreMetrics.d.ts.map +1 -0
  74. package/dist/src/score/scoreMetrics.js +155 -0
  75. package/dist/src/score/scoreMetrics.js.map +1 -0
  76. package/dist/src/stream.d.ts +30 -0
  77. package/dist/src/stream.d.ts.map +1 -0
  78. package/dist/src/stream.js +55 -0
  79. package/dist/src/stream.js.map +1 -0
  80. package/dist/src/tracer.d.ts +53 -0
  81. package/dist/src/tracer.d.ts.map +1 -0
  82. package/dist/src/tracer.js +155 -0
  83. package/dist/src/tracer.js.map +1 -0
  84. package/dist/src/types.d.ts +148 -0
  85. package/dist/src/types.d.ts.map +1 -0
  86. package/dist/src/types.js +90 -0
  87. package/dist/src/types.js.map +1 -0
  88. package/dist/src/utils/buildRawMessage.d.ts +20 -0
  89. package/dist/src/utils/buildRawMessage.d.ts.map +1 -0
  90. package/dist/src/utils/buildRawMessage.js +151 -0
  91. package/dist/src/utils/buildRawMessage.js.map +1 -0
  92. package/dist/src/utils/create-gossip-rpc.d.ts +7 -0
  93. package/dist/src/utils/create-gossip-rpc.d.ts.map +1 -0
  94. package/dist/src/utils/create-gossip-rpc.js +31 -0
  95. package/dist/src/utils/create-gossip-rpc.js.map +1 -0
  96. package/dist/src/utils/index.d.ts +4 -0
  97. package/dist/src/utils/index.d.ts.map +1 -0
  98. package/dist/src/utils/index.js +4 -0
  99. package/dist/src/utils/index.js.map +1 -0
  100. package/dist/src/utils/messageIdToString.d.ts +5 -0
  101. package/dist/src/utils/messageIdToString.d.ts.map +1 -0
  102. package/dist/src/utils/messageIdToString.js +8 -0
  103. package/dist/src/utils/messageIdToString.js.map +1 -0
  104. package/dist/src/utils/msgIdFn.d.ts +10 -0
  105. package/dist/src/utils/msgIdFn.d.ts.map +1 -0
  106. package/dist/src/utils/msgIdFn.js +23 -0
  107. package/dist/src/utils/msgIdFn.js.map +1 -0
  108. package/dist/src/utils/multiaddr.d.ts +3 -0
  109. package/dist/src/utils/multiaddr.d.ts.map +1 -0
  110. package/dist/src/utils/multiaddr.js +15 -0
  111. package/dist/src/utils/multiaddr.js.map +1 -0
  112. package/dist/src/utils/publishConfig.d.ts +8 -0
  113. package/dist/src/utils/publishConfig.d.ts.map +1 -0
  114. package/dist/src/utils/publishConfig.js +25 -0
  115. package/dist/src/utils/publishConfig.js.map +1 -0
  116. package/dist/src/utils/set.d.ts +14 -0
  117. package/dist/src/utils/set.d.ts.map +1 -0
  118. package/dist/src/utils/set.js +41 -0
  119. package/dist/src/utils/set.js.map +1 -0
  120. package/dist/src/utils/shuffle.d.ts +7 -0
  121. package/dist/src/utils/shuffle.d.ts.map +1 -0
  122. package/dist/src/utils/shuffle.js +21 -0
  123. package/dist/src/utils/shuffle.js.map +1 -0
  124. package/dist/src/utils/time-cache.d.ts +22 -0
  125. package/dist/src/utils/time-cache.d.ts.map +1 -0
  126. package/dist/src/utils/time-cache.js +54 -0
  127. package/dist/src/utils/time-cache.js.map +1 -0
  128. package/package.json +142 -0
  129. package/src/config.ts +31 -0
  130. package/src/constants.ts +261 -0
  131. package/src/errors.ts +17 -0
  132. package/src/gossipsub.ts +3061 -0
  133. package/src/index.ts +404 -0
  134. package/src/message/decodeRpc.ts +19 -0
  135. package/src/message/index.ts +1 -0
  136. package/src/message/rpc.proto +58 -0
  137. package/src/message/rpc.ts +848 -0
  138. package/src/message-cache.ts +196 -0
  139. package/src/metrics.ts +1014 -0
  140. package/src/score/compute-score.ts +98 -0
  141. package/src/score/index.ts +3 -0
  142. package/src/score/message-deliveries.ts +95 -0
  143. package/src/score/peer-score-params.ts +316 -0
  144. package/src/score/peer-score-thresholds.ts +70 -0
  145. package/src/score/peer-score.ts +565 -0
  146. package/src/score/peer-stats.ts +33 -0
  147. package/src/score/scoreMetrics.ts +215 -0
  148. package/src/stream.ts +79 -0
  149. package/src/tracer.ts +177 -0
  150. package/src/types.ts +178 -0
  151. package/src/utils/buildRawMessage.ts +174 -0
  152. package/src/utils/create-gossip-rpc.ts +34 -0
  153. package/src/utils/index.ts +3 -0
  154. package/src/utils/messageIdToString.ts +8 -0
  155. package/src/utils/msgIdFn.ts +24 -0
  156. package/src/utils/multiaddr.ts +19 -0
  157. package/src/utils/publishConfig.ts +33 -0
  158. package/src/utils/set.ts +43 -0
  159. package/src/utils/shuffle.ts +21 -0
  160. package/src/utils/time-cache.ts +71 -0
@@ -0,0 +1,467 @@
1
+ import { TopicValidatorResult } from './index.ts';
2
+ import { MessageStatus, RejectReason } from './types.js';
3
+ import type { RPC } from './message/rpc.js';
4
+ import type { PeerScoreThresholds } from './score/peer-score-thresholds.js';
5
+ import type { PeerIdStr, RejectReasonObj, TopicStr, ValidateError } from './types.js';
6
+ /** Topic label as provided in `topicStrToLabel` */
7
+ export type TopicLabel = string;
8
+ export type TopicStrToLabel = Map<TopicStr, TopicLabel>;
9
+ export declare enum MessageSource {
10
+ forward = "forward",
11
+ publish = "publish"
12
+ }
13
+ type NoLabels = Record<string, never>;
14
+ type LabelsGeneric = Record<string, string | number>;
15
+ type LabelKeys<Labels extends LabelsGeneric> = Extract<keyof Labels, string>;
16
+ interface CollectFn<Labels extends LabelsGeneric> {
17
+ (metric: Gauge<Labels>): void;
18
+ }
19
+ export interface Gauge<Labels extends LabelsGeneric = NoLabels> {
20
+ inc: NoLabels extends Labels ? (value?: number) => void : (labels: Labels, value?: number) => void;
21
+ set: NoLabels extends Labels ? (value: number) => void : (labels: Labels, value: number) => void;
22
+ addCollect(collectFn: CollectFn<Labels>): void;
23
+ }
24
+ export interface Histogram<Labels extends LabelsGeneric = NoLabels> {
25
+ startTimer(): () => void;
26
+ observe: NoLabels extends Labels ? (value: number) => void : (labels: Labels, value: number) => void;
27
+ reset(): void;
28
+ }
29
+ export interface AvgMinMax<Labels extends LabelsGeneric = NoLabels> {
30
+ set: NoLabels extends Labels ? (values: number[]) => void : (labels: Labels, values: number[]) => void;
31
+ }
32
+ export type GaugeConfig<Labels extends LabelsGeneric> = {
33
+ name: string;
34
+ help: string;
35
+ } & (NoLabels extends Labels ? {
36
+ labelNames?: never;
37
+ } : {
38
+ labelNames: [LabelKeys<Labels>, ...Array<LabelKeys<Labels>>];
39
+ });
40
+ export type HistogramConfig<Labels extends LabelsGeneric> = GaugeConfig<Labels> & {
41
+ buckets?: number[];
42
+ };
43
+ export type AvgMinMaxConfig<Labels extends LabelsGeneric> = GaugeConfig<Labels>;
44
+ export interface MetricsRegister {
45
+ gauge<Labels extends LabelsGeneric = NoLabels>(config: GaugeConfig<Labels>): Gauge<Labels>;
46
+ histogram<Labels extends LabelsGeneric = NoLabels>(config: HistogramConfig<Labels>): Histogram<Labels>;
47
+ avgMinMax<Labels extends LabelsGeneric = NoLabels>(config: AvgMinMaxConfig<Labels>): AvgMinMax<Labels>;
48
+ }
49
+ export declare enum InclusionReason {
50
+ /** Peer was a fanaout peer. */
51
+ Fanout = "fanout",
52
+ /** Included from random selection. */
53
+ Random = "random",
54
+ /** Peer subscribed. */
55
+ Subscribed = "subscribed",
56
+ /** On heartbeat, peer was included to fill the outbound quota. */
57
+ Outbound = "outbound",
58
+ /** On heartbeat, not enough peers in mesh */
59
+ NotEnough = "not_enough",
60
+ /** On heartbeat opportunistic grafting due to low mesh score */
61
+ Opportunistic = "opportunistic"
62
+ }
63
+ export declare enum ChurnReason {
64
+ Dc = "disconnected",
65
+ BadScore = "bad_score",
66
+ Prune = "prune",
67
+ Excess = "excess"
68
+ }
69
+ export declare enum ScorePenalty {
70
+ GraftBackoff = "graft_backoff",
71
+ BrokenPromise = "broken_promise",
72
+ MessageDeficit = "message_deficit",
73
+ IPColocation = "IP_colocation"
74
+ }
75
+ export declare enum IHaveIgnoreReason {
76
+ LowScore = "low_score",
77
+ MaxIhave = "max_ihave",
78
+ MaxIasked = "max_iasked"
79
+ }
80
+ export declare enum ScoreThreshold {
81
+ graylist = "graylist",
82
+ publish = "publish",
83
+ gossip = "gossip",
84
+ mesh = "mesh"
85
+ }
86
+ export type PeersByScoreThreshold = Record<ScoreThreshold, number>;
87
+ export interface ToSendGroupCount {
88
+ direct: number;
89
+ floodsub: number;
90
+ mesh: number;
91
+ fanout: number;
92
+ }
93
+ export interface ToAddGroupCount {
94
+ fanout: number;
95
+ random: number;
96
+ }
97
+ export type PromiseDeliveredStats = {
98
+ expired: false;
99
+ requestedCount: number;
100
+ maxDeliverMs: number;
101
+ } | {
102
+ expired: true;
103
+ maxDeliverMs: number;
104
+ };
105
+ export interface TopicScoreWeights<T> {
106
+ p1w: T;
107
+ p2w: T;
108
+ p3w: T;
109
+ p3bw: T;
110
+ p4w: T;
111
+ }
112
+ export interface ScoreWeights<T> {
113
+ byTopic: Map<TopicLabel, TopicScoreWeights<T>>;
114
+ p5w: T;
115
+ p6w: T;
116
+ p7w: T;
117
+ score: T;
118
+ }
119
+ export type Metrics = ReturnType<typeof getMetrics>;
120
+ /**
121
+ * A collection of metrics used throughout the Gossipsub behaviour.
122
+ * NOTE: except for special reasons, do not add more than 1 label for frequent metrics,
123
+ * there's a performance penalty as of June 2023.
124
+ */
125
+ export declare function getMetrics(register: MetricsRegister, topicStrToLabel: TopicStrToLabel, opts: {
126
+ gossipPromiseExpireSec: number;
127
+ behaviourPenaltyThreshold: number;
128
+ maxMeshMessageDeliveriesWindowSec: number;
129
+ }): {
130
+ protocolsEnabled: Gauge<{
131
+ protocol: string;
132
+ }>;
133
+ /**
134
+ * Status of our subscription to this topic. This metric allows analyzing other topic metrics
135
+ * filtered by our current subscription status.
136
+ * = rust-libp2p `topic_subscription_status`
137
+ */
138
+ topicSubscriptionStatus: Gauge<{
139
+ topicStr: TopicStr;
140
+ }>;
141
+ /**
142
+ * Number of peers subscribed to each topic. This allows us to analyze a topic's behaviour
143
+ * regardless of our subscription status.
144
+ */
145
+ topicPeersCount: Gauge<{
146
+ topicStr: TopicStr;
147
+ }>;
148
+ /**
149
+ * Number of peers in our mesh. This metric should be updated with the count of peers for a
150
+ * topic in the mesh regardless of inclusion and churn events.
151
+ * = rust-libp2p `mesh_peer_counts`
152
+ */
153
+ meshPeerCounts: Gauge<{
154
+ topicStr: TopicStr;
155
+ }>;
156
+ /**
157
+ * Number of times we include peers in a topic mesh for different reasons.
158
+ * = rust-libp2p `mesh_peer_inclusion_events`
159
+ */
160
+ meshPeerInclusionEventsFanout: Gauge<{
161
+ topic: TopicLabel;
162
+ }>;
163
+ meshPeerInclusionEventsRandom: Gauge<{
164
+ topic: TopicLabel;
165
+ }>;
166
+ meshPeerInclusionEventsSubscribed: Gauge<{
167
+ topic: TopicLabel;
168
+ }>;
169
+ meshPeerInclusionEventsOutbound: Gauge<{
170
+ topic: TopicLabel;
171
+ }>;
172
+ meshPeerInclusionEventsNotEnough: Gauge<{
173
+ topic: TopicLabel;
174
+ }>;
175
+ meshPeerInclusionEventsOpportunistic: Gauge<{
176
+ topic: TopicLabel;
177
+ }>;
178
+ meshPeerInclusionEventsUnknown: Gauge<{
179
+ topic: TopicLabel;
180
+ }>;
181
+ /**
182
+ * Number of times we remove peers in a topic mesh for different reasons.
183
+ * = rust-libp2p `mesh_peer_churn_events`
184
+ */
185
+ meshPeerChurnEventsDisconnected: Gauge<{
186
+ topic: TopicLabel;
187
+ }>;
188
+ meshPeerChurnEventsBadScore: Gauge<{
189
+ topic: TopicLabel;
190
+ }>;
191
+ meshPeerChurnEventsPrune: Gauge<{
192
+ topic: TopicLabel;
193
+ }>;
194
+ meshPeerChurnEventsExcess: Gauge<{
195
+ topic: TopicLabel;
196
+ }>;
197
+ meshPeerChurnEventsUnknown: Gauge<{
198
+ topic: TopicLabel;
199
+ }>;
200
+ /**
201
+ * Gossipsub supports floodsub, gossipsub v1.0, v1.1, and v1.2. Peers are classified based
202
+ * on which protocol they support. This metric keeps track of the number of peers that are
203
+ * connected of each type.
204
+ */
205
+ peersPerProtocol: Gauge<{
206
+ protocol: string;
207
+ }>;
208
+ /** The time it takes to complete one iteration of the heartbeat. */
209
+ heartbeatDuration: Histogram<NoLabels>;
210
+ /** Heartbeat run took longer than heartbeat interval so next is skipped */
211
+ heartbeatSkipped: Gauge<NoLabels>;
212
+ /**
213
+ * Message validation results for each topic.
214
+ * Invalid == Reject?
215
+ * = rust-libp2p `invalid_messages`, `accepted_messages`, `ignored_messages`, `rejected_messages`
216
+ */
217
+ acceptedMessagesTotal: Gauge<{
218
+ topic: TopicLabel;
219
+ }>;
220
+ ignoredMessagesTotal: Gauge<{
221
+ topic: TopicLabel;
222
+ }>;
223
+ rejectedMessagesTotal: Gauge<{
224
+ topic: TopicLabel;
225
+ }>;
226
+ unknownValidationResultsTotal: Gauge<{
227
+ topic: TopicLabel;
228
+ }>;
229
+ /**
230
+ * When the user validates a message, it tries to re propagate it to its mesh peers. If the
231
+ * message expires from the memcache before it can be validated, we count this a cache miss
232
+ * and it is an indicator that the memcache size should be increased.
233
+ * = rust-libp2p `mcache_misses`
234
+ */
235
+ asyncValidationMcacheHit: Gauge<{
236
+ hit: "hit" | "miss";
237
+ }>;
238
+ asyncValidationDelayFromFirstSeenSec: Histogram<NoLabels>;
239
+ asyncValidationUnknownFirstSeen: Gauge<NoLabels>;
240
+ peerReadStreamError: Gauge<NoLabels>;
241
+ rpcRecvBytes: Gauge<NoLabels>;
242
+ rpcRecvCount: Gauge<NoLabels>;
243
+ rpcRecvSubscription: Gauge<NoLabels>;
244
+ rpcRecvMessage: Gauge<NoLabels>;
245
+ rpcRecvControl: Gauge<NoLabels>;
246
+ rpcRecvIHave: Gauge<NoLabels>;
247
+ rpcRecvIWant: Gauge<NoLabels>;
248
+ rpcRecvGraft: Gauge<NoLabels>;
249
+ rpcRecvPrune: Gauge<NoLabels>;
250
+ rpcDataError: Gauge<NoLabels>;
251
+ rpcRecvError: Gauge<NoLabels>;
252
+ /** Total count of RPC dropped because acceptFrom() == false */
253
+ rpcRecvNotAccepted: Gauge<NoLabels>;
254
+ rpcSentBytes: Gauge<NoLabels>;
255
+ rpcSentCount: Gauge<NoLabels>;
256
+ rpcSentSubscription: Gauge<NoLabels>;
257
+ rpcSentMessage: Gauge<NoLabels>;
258
+ rpcSentControl: Gauge<NoLabels>;
259
+ rpcSentIHave: Gauge<NoLabels>;
260
+ rpcSentIWant: Gauge<NoLabels>;
261
+ rpcSentGraft: Gauge<NoLabels>;
262
+ rpcSentPrune: Gauge<NoLabels>;
263
+ rpcSentIDontWant: Gauge<NoLabels>;
264
+ /** Total count of msg published by topic */
265
+ msgPublishCount: Gauge<{
266
+ topic: TopicLabel;
267
+ }>;
268
+ /** Total count of peers that we publish a msg to */
269
+ msgPublishPeersByTopic: Gauge<{
270
+ topic: TopicLabel;
271
+ }>;
272
+ /** Total count of peers (by group) that we publish a msg to */
273
+ directPeersPublishedTotal: Gauge<{
274
+ topic: TopicLabel;
275
+ }>;
276
+ floodsubPeersPublishedTotal: Gauge<{
277
+ topic: TopicLabel;
278
+ }>;
279
+ meshPeersPublishedTotal: Gauge<{
280
+ topic: TopicLabel;
281
+ }>;
282
+ fanoutPeersPublishedTotal: Gauge<{
283
+ topic: TopicLabel;
284
+ }>;
285
+ /** Total count of msg publish data.length bytes */
286
+ msgPublishBytes: Gauge<{
287
+ topic: TopicLabel;
288
+ }>;
289
+ /** Total time in seconds to publish a message */
290
+ msgPublishTime: Histogram<{
291
+ topic: TopicLabel;
292
+ }>;
293
+ /** Total count of msg forwarded by topic */
294
+ msgForwardCount: Gauge<{
295
+ topic: TopicLabel;
296
+ }>;
297
+ /** Total count of peers that we forward a msg to */
298
+ msgForwardPeers: Gauge<{
299
+ topic: TopicLabel;
300
+ }>;
301
+ /** Total count of recv msgs before any validation */
302
+ msgReceivedPreValidation: Gauge<{
303
+ topic: TopicLabel;
304
+ }>;
305
+ /** Total count of recv msgs error */
306
+ msgReceivedError: Gauge<{
307
+ topic: TopicLabel;
308
+ }>;
309
+ /** Tracks distribution of recv msgs by duplicate, invalid, valid */
310
+ prevalidationInvalidTotal: Gauge<{
311
+ topic: TopicLabel;
312
+ }>;
313
+ prevalidationValidTotal: Gauge<{
314
+ topic: TopicLabel;
315
+ }>;
316
+ prevalidationDuplicateTotal: Gauge<{
317
+ topic: TopicLabel;
318
+ }>;
319
+ prevalidationUnknownTotal: Gauge<{
320
+ topic: TopicLabel;
321
+ }>;
322
+ /** Tracks specific reason of invalid */
323
+ msgReceivedInvalid: Gauge<{
324
+ error: RejectReason | ValidateError;
325
+ }>;
326
+ msgReceivedInvalidByTopic: Gauge<{
327
+ topic: TopicLabel;
328
+ }>;
329
+ /** Track duplicate message delivery time */
330
+ duplicateMsgDeliveryDelay: Histogram<{
331
+ topic: TopicLabel;
332
+ }>;
333
+ /** Total count of late msg delivery total by topic */
334
+ duplicateMsgLateDelivery: Gauge<{
335
+ topic: TopicLabel;
336
+ }>;
337
+ duplicateMsgIgnored: Gauge<{
338
+ topic: TopicLabel;
339
+ }>;
340
+ /** Total times score() is called */
341
+ scoreFnCalls: Gauge<NoLabels>;
342
+ /** Total times score() call actually computed computeScore(), no cache */
343
+ scoreFnRuns: Gauge<NoLabels>;
344
+ scoreCachedDelta: Histogram<NoLabels>;
345
+ /** Current count of peers by score threshold */
346
+ peersByScoreThreshold: Gauge<{
347
+ threshold: ScoreThreshold;
348
+ }>;
349
+ score: AvgMinMax<NoLabels>;
350
+ /**
351
+ * Separate score weights
352
+ * Need to use 2-label metrics in this case to debug the score weights
353
+ */
354
+ scoreWeights: AvgMinMax<{
355
+ topic?: TopicLabel;
356
+ p: string;
357
+ }>;
358
+ /** Histogram of the scores for each mesh topic. */
359
+ scorePerMesh: AvgMinMax<{
360
+ topic: TopicLabel;
361
+ }>;
362
+ /** A counter of the kind of penalties being applied to peers. */
363
+ scoringPenalties: Gauge<{
364
+ penalty: ScorePenalty;
365
+ }>;
366
+ behaviourPenalty: Histogram<NoLabels>;
367
+ /** Total received IHAVE messages that we ignore for some reason */
368
+ ihaveRcvIgnored: Gauge<{
369
+ reason: IHaveIgnoreReason;
370
+ }>;
371
+ /** Total received IHAVE messages by topic */
372
+ ihaveRcvMsgids: Gauge<{
373
+ topic: TopicLabel;
374
+ }>;
375
+ /**
376
+ * Total messages per topic we don't have. Not actual requests.
377
+ * The number of times we have decided that an IWANT control message is required for this
378
+ * topic. A very high metric might indicate an underperforming network.
379
+ * = rust-libp2p `topic_iwant_msgs`
380
+ */
381
+ ihaveRcvNotSeenMsgids: Gauge<{
382
+ topic: TopicLabel;
383
+ }>;
384
+ /** Total received IWANT messages by topic */
385
+ iwantRcvMsgids: Gauge<{
386
+ topic: TopicLabel;
387
+ }>;
388
+ /** Total requested messageIDs that we don't have */
389
+ iwantRcvDonthaveMsgids: Gauge<NoLabels>;
390
+ /** Total received IDONTWANT messages */
391
+ idontwantRcvMsgids: Gauge<NoLabels>;
392
+ /** Total received IDONTWANT messageIDs that we don't have */
393
+ idontwantRcvDonthaveMsgids: Gauge<NoLabels>;
394
+ iwantPromiseStarted: Gauge<NoLabels>;
395
+ /** Total count of resolved IWANT promises */
396
+ iwantPromiseResolved: Gauge<NoLabels>;
397
+ /** Total count of resolved IWANT promises from duplicate messages */
398
+ iwantPromiseResolvedFromDuplicate: Gauge<NoLabels>;
399
+ /** Total count of peers we have asked IWANT promises that are resolved */
400
+ iwantPromiseResolvedPeers: Gauge<NoLabels>;
401
+ iwantPromiseBroken: Gauge<NoLabels>;
402
+ iwantMessagePruned: Gauge<NoLabels>;
403
+ /** Histogram of delivery time of resolved IWANT promises */
404
+ iwantPromiseDeliveryTime: Histogram<NoLabels>;
405
+ iwantPromiseUntracked: Gauge<NoLabels>;
406
+ /** Backoff time */
407
+ connectedPeersBackoffSec: Histogram<NoLabels>;
408
+ /** Unbounded cache sizes */
409
+ cacheSize: Gauge<{
410
+ cache: string;
411
+ }>;
412
+ /** Current mcache msg count */
413
+ mcacheSize: Gauge<NoLabels>;
414
+ mcacheNotValidatedCount: Gauge<NoLabels>;
415
+ fastMsgIdCacheCollision: Gauge<NoLabels>;
416
+ newConnectionCount: Gauge<{
417
+ status: string;
418
+ }>;
419
+ topicStrToLabel: TopicStrToLabel;
420
+ toTopic(topicStr: TopicStr): TopicLabel;
421
+ /** We joined a topic */
422
+ onJoin(topicStr: TopicStr): void;
423
+ /** We left a topic */
424
+ onLeave(topicStr: TopicStr): void;
425
+ /** Register the inclusion of peers in our mesh due to some reason. */
426
+ onAddToMesh(topicStr: TopicStr, reason: InclusionReason, count: number): void;
427
+ /** Register the removal of peers in our mesh due to some reason */
428
+ onRemoveFromMesh(topicStr: TopicStr, reason: ChurnReason, count: number): void;
429
+ /**
430
+ * Update validation result to metrics
431
+ *
432
+ * @param messageRecord - null means the message's mcache record was not known at the time of acceptance report
433
+ */
434
+ onReportValidation(messageRecord: {
435
+ message: {
436
+ topic: TopicStr;
437
+ };
438
+ } | null, acceptance: TopicValidatorResult, firstSeenTimestampMs: number | null): void;
439
+ /**
440
+ * - in handle_graft() Penalty::GraftBackoff
441
+ * - in apply_iwant_penalties() Penalty::BrokenPromise
442
+ * - in metric_score() P3 Penalty::MessageDeficit
443
+ * - in metric_score() P6 Penalty::IPColocation
444
+ */
445
+ onScorePenalty(penalty: ScorePenalty): void;
446
+ onIhaveRcv(topicStr: TopicStr, ihave: number, idonthave: number): void;
447
+ onIwantRcv(iwantByTopic: Map<TopicStr, number>, iwantDonthave: number): void;
448
+ onIdontwantRcv(idontwant: number, idontwantDonthave: number): void;
449
+ onForwardMsg(topicStr: TopicStr, tosendCount: number): void;
450
+ onPublishMsg(topicStr: TopicStr, tosendGroupCount: ToSendGroupCount, tosendCount: number, dataLen: number, ms: number): void;
451
+ onMsgRecvPreValidation(topicStr: TopicStr): void;
452
+ onMsgRecvError(topicStr: TopicStr): void;
453
+ onPrevalidationResult(topicStr: TopicStr, status: MessageStatus): void;
454
+ onMsgRecvInvalid(topicStr: TopicStr, reason: RejectReasonObj): void;
455
+ onDuplicateMsgDelivery(topicStr: TopicStr, deliveryDelayMs: number, isLateDelivery: boolean): void;
456
+ onPublishDuplicateMsg(topicStr: TopicStr): void;
457
+ onPeerReadStreamError(): void;
458
+ onRpcRecvError(): void;
459
+ onRpcDataError(): void;
460
+ onRpcRecv(rpc: RPC, rpcBytes: number): void;
461
+ onRpcSent(rpc: RPC, rpcBytes: number): void;
462
+ registerScores(scores: number[], scoreThresholds: PeerScoreThresholds): void;
463
+ registerScoreWeights(sw: ScoreWeights<number[]>): void;
464
+ registerScorePerMesh(mesh: Map<TopicStr, Set<PeerIdStr>>, scoreByPeer: Map<PeerIdStr, number>): void;
465
+ };
466
+ export {};
467
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/metrics.ts"],"names":[],"mappings":"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"}