func()

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
}