in accumulator/batch.go [132:170]
func (b *Batch) OnAgentInit(reqID, contentEncoding string, raw []byte) error {
payload, err := GetUncompressedBytes(raw, contentEncoding)
if err != nil {
return fmt.Errorf("failed to decompress request body: %w", err)
}
var metadata, txnData []byte
switch findEventType(payload) {
case metadataEvent:
metadata, txnData, _ = bytes.Cut(payload, newLineSep)
case transactionEvent:
txnData = payload
default:
return errors.New("invalid payload")
}
txnID := gjson.GetBytes(txnData, "transaction.id").String()
if txnID == "" {
return errors.New("failed to parse transaction id from registration body")
}
b.mu.Lock()
defer b.mu.Unlock()
if b.metadataBytes == 0 && len(metadata) > 0 {
b.metadataBytes, err = b.buf.Write(metadata)
if err != nil {
return fmt.Errorf("failed to write metadata to buffer: %v", err)
}
}
i, ok := b.invocations[reqID]
if !ok {
// It is possible that the invocation is registered at a later time
i = &Invocation{}
b.invocations[reqID] = i
}
i.TransactionID, i.AgentPayload = txnID, txnData
b.currentlyExecutingRequestID = reqID
return nil
}