MCPcopy Index your code
hub / github.com/koding/kite / sendHeartbeats

Method sendHeartbeats

heartbeat.go:185–243  ·  view source on GitHub ↗
(interval time.Duration, kiteURL *url.URL)

Source from the content-addressed store, hash-verified

183var errRegisterAgain = errors.New("register again")
184
185func (k *Kite) sendHeartbeats(interval time.Duration, kiteURL *url.URL) {
186 heartbeatURL := k.getKontrolPath("heartbeat")
187
188 k.Log.Debug("Starting to send heartbeat to: %s", heartbeatURL)
189
190 u, err := url.Parse(heartbeatURL)
191 if err != nil {
192 k.Log.Fatal("HeartbeatURL is malformed: %s", err)
193 }
194
195 q := u.Query()
196 q.Set("id", k.Id)
197 u.RawQuery = q.Encode()
198
199 heartbeatFunc := func() error {
200 k.Log.Debug("Sending heartbeat to %s", u)
201
202 resp, err := k.Config.Client.Get(u.String())
203 if err != nil {
204 return err
205 }
206 defer resp.Body.Close()
207
208 if resp.StatusCode != http.StatusOK {
209 return fmt.Errorf("unexpected status code: %d", resp.StatusCode)
210 }
211
212 // we are just receiving small size strings such as "pong",
213 // "registeragain" so we limit the reader to read just that
214 p, err := ioutil.ReadAll(io.LimitReader(resp.Body, 16))
215 if err != nil {
216 return err
217 }
218
219 p = bytes.TrimSpace(p)
220
221 k.Log.Debug("Heartbeat response received %q", p)
222
223 switch string(p) {
224 case "pong":
225 return nil
226 case "registeragain":
227 k.Log.Info("Disconnected from Kontrol, going to register again")
228
229 go func() {
230 k.RegisterHTTPForever(kiteURL)
231 }()
232
233 return errRegisterAgain
234 }
235
236 return fmt.Errorf("malformed heartbeat response: %s", p)
237 }
238
239 k.heartbeatC <- &heartbeatReq{
240 ping: heartbeatFunc,
241 interval: interval,
242 }

Callers 1

RegisterHTTPMethod · 0.95

Calls 10

getKontrolPathMethod · 0.95
RegisterHTTPForeverMethod · 0.95
DebugMethod · 0.80
FatalMethod · 0.80
QueryMethod · 0.80
InfoMethod · 0.80
GetMethod · 0.65
SetMethod · 0.45
StringMethod · 0.45
CloseMethod · 0.45

Tested by

no test coverage detected