in ringpop.go [460:634]
func (rp *Ringpop) HandleEvent(event events.Event) {
rp.EmitEvent(event)
switch event := event.(type) {
case swim.MemberlistChangesReceivedEvent:
for _, change := range event.Changes {
status := change.Status
if len(status) == 0 {
status = "unknown"
}
rp.statter.IncCounter(rp.getStatKey("membership-update."+status), nil, 1)
}
case membership.ChangeEvent:
rp.ring.ProcessMembershipChanges(event.Changes)
case swim.MemberlistChangesAppliedEvent:
rp.statter.UpdateGauge(rp.getStatKey("changes.apply"), nil, int64(len(event.Changes)))
for _, change := range event.Changes {
status := change.Status
if len(status) == 0 {
status = "unknown"
}
rp.statter.IncCounter(rp.getStatKey("membership-set."+status), nil, 1)
}
// During bootstrapping ringpop is not ready causing errors from
// CountReachableMembers. When this is logged it would confuse people
// thinking that there is a problem with ringpop bootstrapping
if rp.Ready() {
mc, err := rp.CountReachableMembers()
if err != nil {
rp.logger.Errorf("unable to count members of the ring for statting: %q", err)
} else {
rp.statter.UpdateGauge(rp.getStatKey("num-members"), nil, int64(mc))
}
}
rp.statter.IncCounter(rp.getStatKey("updates"), nil, int64(len(event.Changes)))
case swim.FullSyncEvent:
rp.statter.IncCounter(rp.getStatKey("full-sync"), nil, 1)
case swim.StartReverseFullSyncEvent:
rp.statter.IncCounter(rp.getStatKey("full-sync.reverse"), nil, 1)
case swim.OmitReverseFullSyncEvent:
rp.statter.IncCounter(rp.getStatKey("full-sync.reverse-omitted"), nil, 1)
case swim.RedundantReverseFullSyncEvent:
rp.statter.IncCounter(rp.getStatKey("full-sync.redundant-reverse"), nil, 1)
case swim.MaxPAdjustedEvent:
rp.statter.UpdateGauge(rp.getStatKey("max-piggyback"), nil, int64(event.NewPCount))
case swim.JoinReceiveEvent:
rp.statter.IncCounter(rp.getStatKey("join.recv"), nil, 1)
case swim.JoinCompleteEvent:
rp.statter.IncCounter(rp.getStatKey("join.complete"), nil, 1)
rp.statter.IncCounter(rp.getStatKey("join.succeeded"), nil, 1)
rp.statter.RecordTimer(rp.getStatKey("join"), nil, event.Duration)
case swim.AddJoinListEvent:
rp.statter.RecordTimer(rp.getStatKey("join.add-join-list"), nil, event.Duration)
case swim.PingSendEvent:
rp.statter.IncCounter(rp.getStatKey("ping.send"), nil, 1)
case swim.PingSendCompleteEvent:
rp.statter.RecordTimer(rp.getStatKey("ping"), nil, event.Duration)
case swim.PingReceiveEvent:
rp.statter.IncCounter(rp.getStatKey("ping.recv"), nil, 1)
case swim.PingRequestsSendEvent:
rp.statter.IncCounter(rp.getStatKey("ping-req.send"), nil, 1)
rp.statter.IncCounter(rp.getStatKey("ping-req.other-members"), nil, int64(len(event.Peers)))
case swim.PingRequestsSendCompleteEvent:
rp.statter.RecordTimer(rp.getStatKey("ping-req"), nil, event.Duration)
case swim.PingRequestReceiveEvent:
rp.statter.IncCounter(rp.getStatKey("ping-req.recv"), nil, 1)
case swim.PingRequestPingEvent:
rp.statter.RecordTimer(rp.getStatKey("ping-req-ping"), nil, event.Duration)
case swim.ProtocolDelayComputeEvent:
rp.statter.RecordTimer(rp.getStatKey("protocol.delay"), nil, event.Duration)
case swim.ProtocolFrequencyEvent:
rp.statter.RecordTimer(rp.getStatKey("protocol.frequency"), nil, event.Duration)
case swim.ChecksumComputeEvent:
rp.statter.RecordTimer(rp.getStatKey("compute-checksum"), nil, event.Duration)
rp.statter.UpdateGauge(rp.getStatKey("checksum"), nil, int64(event.Checksum))
rp.statter.IncCounter(rp.getStatKey("membership.checksum-computed"), nil, 1)
case swim.ChangesCalculatedEvent:
rp.statter.UpdateGauge(rp.getStatKey("changes.disseminate"), nil, int64(len(event.Changes)))
case swim.ChangeFilteredEvent:
rp.statter.IncCounter(rp.getStatKey("filtered-change"), nil, 1)
case swim.JoinFailedEvent:
rp.statter.IncCounter(rp.getStatKey("join.failed."+string(event.Reason)), nil, 1)
case swim.JoinTriesUpdateEvent:
rp.statter.UpdateGauge(rp.getStatKey("join.retries"), nil, int64(event.Retries))
case swim.MakeNodeStatusEvent:
rp.statter.IncCounter(rp.getStatKey("make-"+event.Status), nil, 1)
case swim.RequestBeforeReadyEvent:
rp.statter.IncCounter(rp.getStatKey("not-ready."+string(event.Endpoint)), nil, 1)
case swim.DiscoHealEvent:
rp.statter.IncCounter(rp.getStatKey("heal.triggered"), nil, 1)
case swim.AttemptHealEvent:
rp.statter.IncCounter(rp.getStatKey("heal.attempt"), nil, 1)
case swim.RefuteUpdateEvent:
rp.statter.IncCounter(rp.getStatKey("refuted-update"), nil, 1)
case swim.SelfEvictedEvent:
rp.statter.RecordTimer(rp.getStatKey("self-eviction"), nil, event.Duration)
case events.RingChecksumEvent:
rp.statter.IncCounter(rp.getStatKey("ring.checksum-computed"), nil, 1)
rp.statter.UpdateGauge(rp.getStatKey("ring.checksum"), nil, int64((event.NewChecksum)))
for key, value := range event.NewChecksums {
rp.statter.UpdateGauge(rp.getStatKey("ring.checksums."+key), nil, int64(value))
}
case events.RingChangedEvent:
added := int64(len(event.ServersAdded))
removed := int64(len(event.ServersRemoved))
rp.statter.IncCounter(rp.getStatKey("ring.server-added"), nil, added)
rp.statter.IncCounter(rp.getStatKey("ring.server-removed"), nil, removed)
rp.statter.IncCounter(rp.getStatKey("ring.changed"), nil, 1)
case forward.RequestForwardedEvent:
rp.statter.IncCounter(rp.getStatKey("requestProxy.egress"), nil, 1)
case forward.InflightRequestsChangedEvent:
rp.statter.UpdateGauge(rp.getStatKey("requestProxy.inflight"), nil, event.Inflight)
case forward.InflightRequestsMiscountEvent:
rp.statter.IncCounter(rp.getStatKey("requestProxy.miscount."+string(event.Operation)), nil, 1)
case forward.FailedEvent:
rp.statter.IncCounter(rp.getStatKey("requestProxy.send.error"), nil, 1)
case forward.SuccessEvent:
rp.statter.IncCounter(rp.getStatKey("requestProxy.send.success"), nil, 1)
case forward.MaxRetriesEvent:
rp.statter.IncCounter(rp.getStatKey("requestProxy.retry.failed"), nil, 1)
case forward.RetryAttemptEvent:
rp.statter.IncCounter(rp.getStatKey("requestProxy.retry.attempted"), nil, 1)
case forward.RetryAbortEvent:
rp.statter.IncCounter(rp.getStatKey("requestProxy.retry.aborted"), nil, 1)
case forward.RerouteEvent:
me, _ := rp.WhoAmI()
if event.NewDestination == me {
rp.statter.IncCounter(rp.getStatKey("requestProxy.retry.reroute.local"), nil, 1)
} else {
rp.statter.IncCounter(rp.getStatKey("requestProxy.retry.reroute.remote"), nil, 1)
}
case forward.RetrySuccessEvent:
rp.statter.IncCounter(rp.getStatKey("requestProxy.retry.succeeded"), nil, 1)
}
}