Snapshot 返回当前 Hub 指标的快照。
()
| 68 | |
| 69 | // Snapshot 返回当前 Hub 指标的快照。 |
| 70 | func (h *Hub) Snapshot() Snapshot { |
| 71 | online := h.OnlineNodes() |
| 72 | |
| 73 | sum := h.metrics.callLatencyNanosSum.Load() |
| 74 | cnt := h.metrics.callLatencyCount.Load() |
| 75 | var avg uint64 |
| 76 | if cnt > 0 { |
| 77 | avg = sum / cnt |
| 78 | } |
| 79 | |
| 80 | h.metrics.mu.RLock() |
| 81 | lastSeen := make(map[string]int64, len(h.metrics.perNodeLastSeen)) |
| 82 | for k, v := range h.metrics.perNodeLastSeen { |
| 83 | lastSeen[k] = v.Unix() |
| 84 | } |
| 85 | h.metrics.mu.RUnlock() |
| 86 | |
| 87 | return Snapshot{ |
| 88 | OnlineCount: h.metrics.onlineGauge.Load(), |
| 89 | OnlineNodeIDs: online, |
| 90 | CallsTotal: h.metrics.callsTotal.Load(), |
| 91 | CallsErrTotal: h.metrics.callsErrTotal.Load(), |
| 92 | CallsOfflineTotal: h.metrics.callsOfflineTotal.Load(), |
| 93 | PushUsageTotal: h.metrics.pushUsageTotal.Load(), |
| 94 | PushUsageAckTotal: h.metrics.pushUsageAckTotal.Load(), |
| 95 | ReconnectTotal: h.metrics.reconnectTotal.Load(), |
| 96 | ReapedTotal: h.metrics.reapedTotal.Load(), |
| 97 | CallLatencyAvgNs: avg, |
| 98 | LastSeen: lastSeen, |
| 99 | } |
| 100 | } |