more expensive metrics (#312)

This commit is contained in:
Ștefan Talpalaru 2020-08-05 14:02:26 +02:00 committed by GitHub
parent 74a6dccd80
commit bd5d43874a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 48 additions and 37 deletions

View File

@ -57,17 +57,18 @@ type
heartbeatRunning: bool heartbeatRunning: bool
heartbeatLock: AsyncLock # heartbeat lock to prevent two consecutive concurrent heartbeats heartbeatLock: AsyncLock # heartbeat lock to prevent two consecutive concurrent heartbeats
declareGauge(libp2p_gossipsub_peers_per_topic_mesh, when defined(libp2p_expensive_metrics):
"gossipsub peers per topic in mesh", declareGauge(libp2p_gossipsub_peers_per_topic_mesh,
labels = ["topic"]) "gossipsub peers per topic in mesh",
labels = ["topic"])
declareGauge(libp2p_gossipsub_peers_per_topic_fanout, declareGauge(libp2p_gossipsub_peers_per_topic_fanout,
"gossipsub peers per topic in fanout", "gossipsub peers per topic in fanout",
labels = ["topic"]) labels = ["topic"])
declareGauge(libp2p_gossipsub_peers_per_topic_gossipsub, declareGauge(libp2p_gossipsub_peers_per_topic_gossipsub,
"gossipsub peers per topic in gossipsub", "gossipsub peers per topic in gossipsub",
labels = ["topic"]) labels = ["topic"])
method init*(g: GossipSub) = method init*(g: GossipSub) =
proc handler(conn: Connection, proto: string) {.async.} = proc handler(conn: Connection, proto: string) {.async.} =
@ -93,8 +94,9 @@ proc replenishFanout(g: GossipSub, topic: string) =
if g.fanout.peers(topic) == GossipSubD: if g.fanout.peers(topic) == GossipSubD:
break break
libp2p_gossipsub_peers_per_topic_fanout when defined(libp2p_expensive_metrics):
.set(g.fanout.peers(topic).int64, labelValues = [topic]) libp2p_gossipsub_peers_per_topic_fanout
.set(g.fanout.peers(topic).int64, labelValues = [topic])
trace "fanout replenished with peers", peers = g.fanout.peers(topic) trace "fanout replenished with peers", peers = g.fanout.peers(topic)
@ -142,14 +144,15 @@ proc rebalanceMesh(g: GossipSub, topic: string) {.async.} =
for peer in prunes: for peer in prunes:
g.mesh.removePeer(topic, peer) g.mesh.removePeer(topic, peer)
libp2p_gossipsub_peers_per_topic_gossipsub when defined(libp2p_expensive_metrics):
.set(g.gossipsub.peers(topic).int64, labelValues = [topic]) libp2p_gossipsub_peers_per_topic_gossipsub
.set(g.gossipsub.peers(topic).int64, labelValues = [topic])
libp2p_gossipsub_peers_per_topic_fanout libp2p_gossipsub_peers_per_topic_fanout
.set(g.fanout.peers(topic).int64, labelValues = [topic]) .set(g.fanout.peers(topic).int64, labelValues = [topic])
libp2p_gossipsub_peers_per_topic_mesh libp2p_gossipsub_peers_per_topic_mesh
.set(g.mesh.peers(topic).int64, labelValues = [topic]) .set(g.mesh.peers(topic).int64, labelValues = [topic])
# Send changes to peers after table updates to avoid stale state # Send changes to peers after table updates to avoid stale state
for p in grafts: for p in grafts:
@ -170,8 +173,9 @@ proc dropFanoutPeers(g: GossipSub) =
g.lastFanoutPubSub.del(topic) g.lastFanoutPubSub.del(topic)
trace "dropping fanout topic", topic trace "dropping fanout topic", topic
libp2p_gossipsub_peers_per_topic_fanout when defined(libp2p_expensive_metrics):
.set(g.fanout.peers(topic).int64, labelValues = [topic]) libp2p_gossipsub_peers_per_topic_fanout
.set(g.fanout.peers(topic).int64, labelValues = [topic])
proc getGossipPeers(g: GossipSub): Table[string, ControlMessage] {.gcsafe.} = proc getGossipPeers(g: GossipSub): Table[string, ControlMessage] {.gcsafe.} =
## gossip iHave messages to peers ## gossip iHave messages to peers
@ -245,20 +249,23 @@ method handleDisconnect*(g: GossipSub, peer: PubSubPeer) =
for t in toSeq(g.gossipsub.keys): for t in toSeq(g.gossipsub.keys):
g.gossipsub.removePeer(t, peer) g.gossipsub.removePeer(t, peer)
libp2p_gossipsub_peers_per_topic_gossipsub when defined(libp2p_expensive_metrics):
.set(g.gossipsub.peers(t).int64, labelValues = [t]) libp2p_gossipsub_peers_per_topic_gossipsub
.set(g.gossipsub.peers(t).int64, labelValues = [t])
for t in toSeq(g.mesh.keys): for t in toSeq(g.mesh.keys):
g.mesh.removePeer(t, peer) g.mesh.removePeer(t, peer)
libp2p_gossipsub_peers_per_topic_mesh when defined(libp2p_expensive_metrics):
.set(g.mesh.peers(t).int64, labelValues = [t]) libp2p_gossipsub_peers_per_topic_mesh
.set(g.mesh.peers(t).int64, labelValues = [t])
for t in toSeq(g.fanout.keys): for t in toSeq(g.fanout.keys):
g.fanout.removePeer(t, peer) g.fanout.removePeer(t, peer)
libp2p_gossipsub_peers_per_topic_fanout when defined(libp2p_expensive_metrics):
.set(g.fanout.peers(t).int64, labelValues = [t]) libp2p_gossipsub_peers_per_topic_fanout
.set(g.fanout.peers(t).int64, labelValues = [t])
method subscribePeer*(p: GossipSub, method subscribePeer*(p: GossipSub,
conn: Connection) = conn: Connection) =
@ -291,13 +298,15 @@ method subscribeTopic*(g: GossipSub,
g.mesh.removePeer(topic, peer) g.mesh.removePeer(topic, peer)
g.fanout.removePeer(topic, peer) g.fanout.removePeer(topic, peer)
libp2p_gossipsub_peers_per_topic_mesh when defined(libp2p_expensive_metrics):
.set(g.mesh.peers(topic).int64, labelValues = [topic]) libp2p_gossipsub_peers_per_topic_mesh
libp2p_gossipsub_peers_per_topic_fanout .set(g.mesh.peers(topic).int64, labelValues = [topic])
.set(g.fanout.peers(topic).int64, labelValues = [topic]) libp2p_gossipsub_peers_per_topic_fanout
.set(g.fanout.peers(topic).int64, labelValues = [topic])
libp2p_gossipsub_peers_per_topic_gossipsub when defined(libp2p_expensive_metrics):
.set(g.gossipsub.peers(topic).int64, labelValues = [topic]) libp2p_gossipsub_peers_per_topic_gossipsub
.set(g.gossipsub.peers(topic).int64, labelValues = [topic])
trace "gossip peers", peers = g.gossipsub.peers(topic), topic trace "gossip peers", peers = g.gossipsub.peers(topic), topic
@ -334,18 +343,20 @@ proc handleGraft(g: GossipSub,
debug "peer grafting topic we're not interested in" debug "peer grafting topic we're not interested in"
result.add(ControlPrune(topicID: topic)) result.add(ControlPrune(topicID: topic))
libp2p_gossipsub_peers_per_topic_mesh when defined(libp2p_expensive_metrics):
.set(g.mesh.peers(topic).int64, labelValues = [topic]) libp2p_gossipsub_peers_per_topic_mesh
libp2p_gossipsub_peers_per_topic_fanout .set(g.mesh.peers(topic).int64, labelValues = [topic])
.set(g.fanout.peers(topic).int64, labelValues = [topic]) libp2p_gossipsub_peers_per_topic_fanout
.set(g.fanout.peers(topic).int64, labelValues = [topic])
proc handlePrune(g: GossipSub, peer: PubSubPeer, prunes: seq[ControlPrune]) = proc handlePrune(g: GossipSub, peer: PubSubPeer, prunes: seq[ControlPrune]) =
for prune in prunes: for prune in prunes:
trace "peer pruned topic", peer = peer.id, topic = prune.topicID trace "peer pruned topic", peer = peer.id, topic = prune.topicID
g.mesh.removePeer(prune.topicID, peer) g.mesh.removePeer(prune.topicID, peer)
libp2p_gossipsub_peers_per_topic_mesh when defined(libp2p_expensive_metrics):
.set(g.mesh.peers(prune.topicID).int64, labelValues = [prune.topicID]) libp2p_gossipsub_peers_per_topic_mesh
.set(g.mesh.peers(prune.topicID).int64, labelValues = [prune.topicID])
proc handleIHave(g: GossipSub, proc handleIHave(g: GossipSub,
peer: PubSubPeer, peer: PubSubPeer,