lambda/interop/events_api.go (155 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 package interop import ( "fmt" "go.amzn.com/lambda/fatalerror" "go.amzn.com/lambda/rapi/model" ) type InitPhase string // InitializationType describes possible types of INIT phase type InitType string type InitStartData struct { InitializationType InitType `json:"initializationType"` RuntimeVersion string `json:"runtimeVersion"` RuntimeVersionArn string `json:"runtimeVersionArn"` FunctionName string `json:"functionName"` FunctionArn string `json:"functionArn"` FunctionVersion string `json:"functionVersion"` InstanceID string `json:"instanceId"` InstanceMaxMemory uint64 `json:"instanceMaxMemory"` Phase InitPhase `json:"phase"` Tracing *TracingCtx `json:"tracing,omitempty"` } func (d *InitStartData) String() string { return fmt.Sprintf("INIT START(type: %s, phase: %s)", d.InitializationType, d.Phase) } type InitRuntimeDoneData struct { InitializationType InitType `json:"initializationType"` Status string `json:"status"` Phase InitPhase `json:"phase"` ErrorType *string `json:"errorType,omitempty"` Tracing *TracingCtx `json:"tracing,omitempty"` } func (d *InitRuntimeDoneData) String() string { return fmt.Sprintf("INIT RTDONE(status: %s)", d.Status) } type InitReportMetrics struct { DurationMs float64 `json:"durationMs"` } type InitReportData struct { InitializationType InitType `json:"initializationType"` Metrics InitReportMetrics `json:"metrics"` Phase InitPhase `json:"phase"` Tracing *TracingCtx `json:"tracing,omitempty"` } func (d *InitReportData) String() string { return fmt.Sprintf("INIT REPORT(durationMs: %f)", d.Metrics.DurationMs) } type RestoreRuntimeDoneData struct { Status string `json:"status"` ErrorType *string `json:"errorType,omitempty"` Tracing *TracingCtx `json:"tracing,omitempty"` } func (d *RestoreRuntimeDoneData) String() string { return fmt.Sprintf("RESTORE RTDONE(status: %s)", d.Status) } type TracingCtx struct { SpanID string `json:"spanId,omitempty"` Type model.TracingType `json:"type"` Value string `json:"value"` } type InvokeStartData struct { RequestID string `json:"requestId"` Version string `json:"version,omitempty"` Tracing *TracingCtx `json:"tracing,omitempty"` } func (d *InvokeStartData) String() string { return fmt.Sprintf("INVOKE START(requestId: %s)", d.RequestID) } type RuntimeDoneInvokeMetrics struct { ProducedBytes int64 `json:"producedBytes"` DurationMs float64 `json:"durationMs"` } type Span struct { Name string `json:"name"` Start string `json:"start"` DurationMs float64 `json:"durationMs"` } func (s *Span) String() string { return fmt.Sprintf("SPAN(name: %s)", s.Name) } type InvokeRuntimeDoneData struct { RequestID RequestID `json:"requestId"` Status string `json:"status"` Metrics *RuntimeDoneInvokeMetrics `json:"metrics,omitempty"` Tracing *TracingCtx `json:"tracing,omitempty"` Spans []Span `json:"spans,omitempty"` ErrorType *string `json:"errorType,omitempty"` InternalMetrics *InvokeResponseMetrics `json:"-"` } func (d *InvokeRuntimeDoneData) String() string { return fmt.Sprintf("INVOKE RTDONE(status: %s, produced bytes: %d, duration: %fms)", d.Status, d.Metrics.ProducedBytes, d.Metrics.DurationMs) } type ExtensionInitData struct { AgentName string `json:"name"` State string `json:"state"` Subscriptions []string `json:"events"` ErrorType string `json:"errorType,omitempty"` } func (d *ExtensionInitData) String() string { return fmt.Sprintf("EXTENSION INIT(agent name: %s, state: %s, error type: %s)", d.AgentName, d.State, d.ErrorType) } type ReportMetrics struct { DurationMs float64 `json:"durationMs"` BilledDurationMs float64 `json:"billedDurationMs"` MemorySizeMB uint64 `json:"memorySizeMB"` MaxMemoryUsedMB uint64 `json:"maxMemoryUsedMB"` InitDurationMs float64 `json:"initDurationMs,omitempty"` } type ReportData struct { RequestID RequestID `json:"requestId"` Status string `json:"status"` Metrics ReportMetrics `json:"metrics"` Tracing *TracingCtx `json:"tracing,omitempty"` Spans []Span `json:"spans,omitempty"` ErrorType *string `json:"errorType,omitempty"` } func (d *ReportData) String() string { return fmt.Sprintf("REPORT(status: %s, durationMs: %f)", d.Status, d.Metrics.DurationMs) } type EndData struct { RequestID RequestID `json:"requestId"` } func (d *EndData) String() string { return "END" } type RequestID string type FaultData struct { RequestID RequestID ErrorMessage error ErrorType fatalerror.ErrorType } func (d *FaultData) String() string { return fmt.Sprintf("RequestId: %s Error: %s\n%s\n", d.RequestID, d.ErrorMessage, d.ErrorType) } type ImageErrorLogData string type EventsAPI interface { SetCurrentRequestID(RequestID) SendInitStart(InitStartData) error SendInitRuntimeDone(InitRuntimeDoneData) error SendInitReport(InitReportData) error SendRestoreRuntimeDone(RestoreRuntimeDoneData) error SendInvokeStart(InvokeStartData) error SendInvokeRuntimeDone(InvokeRuntimeDoneData) error SendExtensionInit(ExtensionInitData) error SendReportSpan(Span) error SendReport(ReportData) error SendEnd(EndData) error SendFault(FaultData) error SendImageErrorLog(ImageErrorLogData) FetchTailLogs(string) (string, error) GetRuntimeDoneSpans( runtimeStartedTime int64, invokeResponseMetrics *InvokeResponseMetrics, runtimeOverheadStartedTime int64, runtimeReadyTime int64, ) []Span }