code: func (h *Heartbeat) Run() error {
  	defer func() {
  		h.reset(HeartbeatStateInit)
  		h.checkTicker.Stop()
  	}()
  	for {
  		if err := h.fetchAndAnnounce(); err != nil {
  			h.Warningf("Heartbeat failed %v.", err)
  		}
  		select {
  		case <-h.checkTicker.C:
  		case <-h.sendC:
  			h.Debugf("Asked check out of cycle")
  		case <-h.cancelCtx.Done():
  			h.Debugf("Heartbeat exited.")
  			return nil
  		}
  	}
  }
docs: // Run periodically calls to announce presence,
  // should be called explicitly in a separate goroutine