Skip to content

Commit 01462c8

Browse files
committed
fix: propagate context to heartbeat HTTP requests for clean shutdown
Pass context through to http.NewRequestWithContext so in-flight heartbeat requests are cancelled immediately on app shutdown instead of blocking up to 10s on the client timeout. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent c31f6dc commit 01462c8

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

internal/telemetry/telemetry.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func (s *Service) Start(ctx context.Context) {
116116
}
117117

118118
// Send first heartbeat
119-
s.sendHeartbeat()
119+
s.sendHeartbeat(ctx)
120120

121121
// Then send every interval
122122
ticker := time.NewTicker(s.heartbeatInterval)
@@ -125,15 +125,15 @@ func (s *Service) Start(ctx context.Context) {
125125
for {
126126
select {
127127
case <-ticker.C:
128-
s.sendHeartbeat()
128+
s.sendHeartbeat(ctx)
129129
case <-ctx.Done():
130130
s.logger.Info("Telemetry service stopped")
131131
return
132132
}
133133
}
134134
}
135135

136-
func (s *Service) sendHeartbeat() {
136+
func (s *Service) sendHeartbeat(ctx context.Context) {
137137
payload := s.buildHeartbeat()
138138

139139
data, err := json.Marshal(payload)
@@ -143,7 +143,7 @@ func (s *Service) sendHeartbeat() {
143143
}
144144

145145
url := s.endpoint + "/heartbeat"
146-
req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(data))
146+
req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(data))
147147
if err != nil {
148148
s.logger.Debug("Failed to create heartbeat request", zap.Error(err))
149149
return

0 commit comments

Comments
 (0)