1818package  logsapi
1919
2020import  (
21+ 	"errors" 
22+ 
2123	"github.com/elastic/apm-aws-lambda/apmproxy" 
2224	"go.elastic.co/apm/v2/model" 
2325	"go.elastic.co/fastjson" 
@@ -83,14 +85,18 @@ func (lc logContainer) MarshalFastJSON(json *fastjson.Writer) error {
8385	return  nil 
8486}
8587
86- // ProcessFunctionLog consumes extension event,  agent metadata and log 
87- // event from Lambda  logs API to create a payload for APM server 
88+ // ProcessFunctionLog consumes agent metadata and log event from Lambda  
89+ // logs API to create a payload for APM server.  
8890func  ProcessFunctionLog (
8991	metadataContainer  * apmproxy.MetadataContainer ,
9092	requestID  string ,
9193	invokedFnArn  string ,
9294	log  LogEvent ,
9395) (apmproxy.AgentData , error ) {
96+ 	if  metadataContainer  ==  nil  ||  len (metadataContainer .Metadata ) ==  0  {
97+ 		return  apmproxy.AgentData {}, errors .New ("metadata is required" )
98+ 	}
99+ 
94100	lc  :=  logContainer {
95101		Log : & logLine {
96102			Timestamp : model .Time (log .Time ),
@@ -108,11 +114,11 @@ func ProcessFunctionLog(
108114		return  apmproxy.AgentData {}, err 
109115	}
110116
111- 	var  logData  []byte 
112- 	if  metadataContainer .Metadata  !=  nil  {
113- 		logData  =  append (metadataContainer .Metadata , []byte ("\n " )... )
114- 	}
117+ 	capacity  :=  len (metadataContainer .Metadata ) +  jsonWriter .Size () +  1 
118+ 	logData  :=  make ([]byte , len (metadataContainer .Metadata ), capacity )
119+ 	copy (logData , metadataContainer .Metadata )
115120
121+ 	logData  =  append (logData , '\n' )
116122	logData  =  append (logData , jsonWriter .Bytes ()... )
117123	return  apmproxy.AgentData {Data : logData }, nil 
118124}
0 commit comments