in internal/pkg/api/handleCheckin.go [547:636]
func (ct *CheckinT) writeResponse(zlog zerolog.Logger, w http.ResponseWriter, r *http.Request, agent *model.Agent, resp CheckinResponse) error {
ctx := r.Context()
var links []apm.SpanLink
if ct.bulker.HasTracer() {
for _, a := range fromPtr(resp.Actions) {
if fromPtr(a.Traceparent) != "" {
traceContext, err := apmhttp.ParseTraceparentHeader(fromPtr(a.Traceparent))
if err != nil {
zlog.Debug().Err(err).Msg("unable to parse traceparent header")
continue
}
zlog.Debug().Str("traceparent", fromPtr(a.Traceparent)).Msgf("✅ parsed traceparent header: %s", fromPtr(a.Traceparent))
links = append(links, apm.SpanLink{
Trace: traceContext.Trace,
Span: traceContext.Span,
})
}
}
}
if len(fromPtr(resp.Actions)) > 0 {
var span *apm.Span
span, ctx = apm.StartSpanOptions(ctx, "action delivery", "fleet-server", apm.SpanOptions{
Links: links,
})
span.Context.SetLabel("action_count", len(fromPtr(resp.Actions)))
span.Context.SetLabel("agent_id", agent.Id)
defer span.End()
}
for _, action := range fromPtr(resp.Actions) {
zlog.Info().
Str("ackToken", fromPtr(resp.AckToken)).
Str("createdAt", action.CreatedAt).
Str(logger.ActionID, action.Id).
Str(logger.ActionType, string(action.Type)).
Str("inputType", action.InputType).
Int64("timeout", fromPtr(action.Timeout)).
Msg("Action delivered to agent on checkin")
}
rSpan, _ := apm.StartSpan(ctx, "response", "write")
defer rSpan.End()
payload, err := json.Marshal(&resp)
if err != nil {
return fmt.Errorf("writeResponse marshal: %w", err)
}
compressionLevel := ct.cfg.CompressionLevel
compressThreshold := ct.cfg.CompressionThresh
if len(payload) > compressThreshold && compressionLevel != flate.NoCompression && acceptsEncoding(r, kEncodingGzip) {
wrCounter := datacounter.NewWriterCounter(w)
zipper, _ := ct.gwPool.Get().(*gzip.Writer)
defer ct.gwPool.Put(zipper)
zipper.Reset(wrCounter)
w.Header().Set("Content-Encoding", kEncodingGzip)
if _, err = zipper.Write(payload); err != nil {
return fmt.Errorf("writeResponse gzip write: %w", err)
}
if err = zipper.Close(); err != nil {
err = fmt.Errorf("writeResponse gzip close: %w", err)
}
cntCheckin.bodyOut.Add(wrCounter.Count())
zlog.Trace().
Err(err).
Int("lvl", compressionLevel).
Int("srcSz", len(payload)).
Uint64("dstSz", wrCounter.Count()).
Msg("compressing checkin response")
} else {
var nWritten int
nWritten, err = w.Write(payload)
cntCheckin.bodyOut.Add(uint64(nWritten)) //nolint:gosec // disable G115
if err != nil {
err = fmt.Errorf("writeResponse payload: %w", err)
}
}
return err
}