model/model.go (343 lines of code) (raw):

// Licensed to Elasticsearch B.V. under one or more contributor // license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright // ownership. Elasticsearch B.V. licenses this file to you under // the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package model // import "go.elastic.co/apm/v2/model" import ( "net/http" "net/url" "time" ) // Service represents the service handling transactions being traced. type Service struct { // Name is the immutable name of the service. Name string `json:"name,omitempty"` // Version is the version of the service, if it has one. Version string `json:"version,omitempty"` // Environment is the name of the service's environment, if it has // one, e.g. "production" or "staging". Environment string `json:"environment,omitempty"` // Agent holds information about the Elastic APM agent tracing this // service's transactions. Agent *Agent `json:"agent,omitempty"` // Framework holds information about the service's framework, if any. Framework *Framework `json:"framework,omitempty"` // Language holds information about the programming language in which // the service is written. Language *Language `json:"language,omitempty"` // Runtime holds information about the programming language runtime // running this service. Runtime *Runtime `json:"runtime,omitempty"` // Node holds unique information about each service node Node *ServiceNode `json:"node,omitempty"` } // Agent holds information about the Elastic APM agent. type Agent struct { // Name is the name of the Elastic APM agent, e.g. "Go". Name string `json:"name"` // Version is the version of the Elastic APM agent, e.g. "1.0.0". Version string `json:"version"` } // Framework holds information about the framework (typically web) // used by the service. type Framework struct { // Name is the name of the framework. Name string `json:"name"` // Version is the version of the framework. Version string `json:"version"` } // Language holds information about the programming language used. type Language struct { // Name is the name of the programming language. Name string `json:"name"` // Version is the version of the programming language. Version string `json:"version,omitempty"` } // Runtime holds information about the programming language runtime. type Runtime struct { // Name is the name of the programming language runtime. Name string `json:"name"` // Version is the version of the programming language runtime. Version string `json:"version"` } // ServiceNode holds unique information about each service node type ServiceNode struct { // ConfiguredName holds the name of the service node ConfiguredName string `json:"configured_name,omitempty"` } // System represents the system (operating system and machine) running the // service. type System struct { // Architecture is the system's hardware architecture. Architecture string `json:"architecture,omitempty"` // Hostname is the system's hostname. Hostname string `json:"hostname,omitempty"` // Platform is the system's platform, or operating system name. Platform string `json:"platform,omitempty"` // Container describes the container running the service. Container *Container `json:"container,omitempty"` // Kubernetes describes the kubernetes node and pod running the service. Kubernetes *Kubernetes `json:"kubernetes,omitempty"` } // Process represents an operating system process. type Process struct { // Pid is the process ID. Pid int `json:"pid"` // Ppid is the parent process ID, if known. Ppid *int `json:"ppid,omitempty"` // Title is the title of the process. Title string `json:"title,omitempty"` // Argv holds the command line arguments used to start the process. Argv []string `json:"argv,omitempty"` } // Container represents the container (e.g. Docker) running the service. type Container struct { // ID is the unique container ID. ID string `json:"id"` } // Kubernetes describes properties of the Kubernetes node and pod in which // the service is running. type Kubernetes struct { // Namespace names the Kubernetes namespace in which the pod exists. Namespace string `json:"namespace,omitempty"` // Node describes the Kubernetes node running the service's pod. Node *KubernetesNode `json:"node,omitempty"` // Pod describes the Kubernetes pod running the service. Pod *KubernetesPod `json:"pod,omitempty"` } // KubernetesNode describes a Kubernetes node. type KubernetesNode struct { // Name holds the node name. Name string `json:"name,omitempty"` } // KubernetesPod describes a Kubernetes pod. type KubernetesPod struct { // Name holds the pod name. Name string `json:"name,omitempty"` // UID holds the pod UID. UID string `json:"uid,omitempty"` } // Cloud represents the cloud in which the service is running. type Cloud struct { // Provider is the cloud provider name, e.g. aws, azure, gcp. Provider string `json:"provider"` // Region is the cloud region name, e.g. us-east-1. Region string `json:"region,omitempty"` // AvailabilityZone is the cloud availability zone name, e.g. us-east-1a. AvailabilityZone string `json:"availability_zone,omitempty"` // Instance holds information about the cloud instance (virtual machine). Instance *CloudInstance `json:"instance,omitempty"` // Machine also holds information about the cloud instance (virtual machine). Machine *CloudMachine `json:"machine,omitempty"` // Account holds information about the cloud account. Account *CloudAccount `json:"account,omitempty"` // Project holds information about the cloud project. Project *CloudProject `json:"project,omitempty"` } // CloudInstance holds information about a cloud instance (virtual machine). type CloudInstance struct { // ID holds the cloud instance identifier. ID string `json:"id,omitempty"` // ID holds the cloud instance name. Name string `json:"name,omitempty"` } // CloudMachine holds information about a cloud instance (virtual machine). type CloudMachine struct { // Type holds the cloud instance type, e.g. t2.medium. Type string `json:"type,omitempty"` } // CloudAccount holds information about a cloud account. type CloudAccount struct { // ID holds the cloud account identifier. ID string `json:"id,omitempty"` // ID holds the cloud account name. Name string `json:"name,omitempty"` } // CloudProject holds information about a cloud project. type CloudProject struct { // ID holds the cloud project identifier. ID string `json:"id,omitempty"` // Name holds the cloud project name. Name string `json:"name,omitempty"` } // Transaction represents a transaction handled by the service. type Transaction struct { // ID holds the 64-bit hex-encoded transaction ID. ID SpanID `json:"id"` // TraceID holds the ID of the trace that this transaction is a part of. TraceID TraceID `json:"trace_id"` // ParentID holds the ID of the transaction's parent span or transaction. ParentID SpanID `json:"parent_id,omitempty"` // Name holds the name of the transaction. Name string `json:"name"` // Type identifies the service-domain specific type of the request, // e.g. "request" or "backgroundjob". Type string `json:"type"` // Timestamp holds the time at which the transaction started. Timestamp Time `json:"timestamp"` // Duration records how long the transaction took to complete, // in milliseconds. Duration float64 `json:"duration"` // Result holds the result of the transaction, e.g. the status code // for HTTP requests. Result string `json:"result,omitempty"` // Context holds contextual information relating to the transaction. Context *Context `json:"context,omitempty"` // Sampled indicates that the transaction was sampled, and // includes all available information. Non-sampled transactions // omit Context. // // If Sampled is unspecified (nil), it is equivalent to setting // it to true. Sampled *bool `json:"sampled,omitempty"` // SampleRate holds the sample rate in effect when the trace was started, // if known. This is used by the server to aggregate transaction metrics. SampleRate *float64 `json:"sample_rate,omitempty"` // SpanCount holds statistics on spans within a transaction. SpanCount SpanCount `json:"span_count"` // DroppedSpansStats holds information about spans that were dropped // (for example due to transaction_max_spans or exit_span_min_duration). DroppedSpansStats []DroppedSpansStats `json:"dropped_spans_stats,omitempty"` // Outcome holds the transaction outcome: success, failure, or unknown. Outcome string `json:"outcome,omitempty"` // OTel holds information bridged from OpenTelemetry. OTel *OTel `json:"otel,omitempty"` // FAAS holds Function-as-a-Service properties for the transaction. FAAS *FAAS `json:"faas,omitempty"` // Links holds a list of spans linked to the transaction. Links []SpanLink `json:"links,omitempty"` } // OTel holds bridged OpenTelemetry information. type OTel struct { SpanKind string `json:"span_kind"` Attributes map[string]interface{} `json:"attributes,omitempty"` } // SpanCount holds statistics on spans within a transaction. type SpanCount struct { // Dropped holds the number of spans dropped within a transaction. // This does not include spans that were started and dropped due // to full buffers, network errors, etc. Dropped int `json:"dropped"` // Started holds the number of spans started within a transaction. Started int `json:"started"` } // DroppedSpansStats holds information about spans that were dropped // (for example due to transaction_max_spans or exit_span_min_duration). type DroppedSpansStats struct { // DestinationServiceResource identifies the destination service resource // being operated on. e.g. 'http://elastic.co:80', 'elasticsearch', 'rabbitmq/queue_name'. DestinationServiceResource string `json:"destination_service_resource"` // ServiceTargetType holds the target type. ServiceTargetType string `json:"service_target_type,omitempty"` // ServiceTargetName holds the target name. ServiceTargetName string `json:"service_target_name,omitempty"` // Outcome of the span: success, failure, or unknown. Outcome may be one of // a limited set of permitted values describing the success or failure of // the span. It can be used for calculating error rates for outgoing requests. Outcome string `json:"outcome"` // Duration holds duration aggregations about the dropped span. Duration AggregateDuration `json:"duration"` } // AggregateDuration duration type AggregateDuration struct { // Count holds the number of times the dropped span happened. Count int `json:"count"` // Sum holds dimensions about the dropped span's duration. Sum DurationSum `json:"sum"` } // DurationSum contains units for duration type DurationSum struct { // Sum of the duration of a span in Microseconds. Us int64 `json:"us"` } // Span represents a span within a transaction. type Span struct { // Name holds the name of the span. Name string `json:"name"` // Timestamp holds the time at which the span started. Timestamp Time `json:"timestamp"` // Duration holds the duration of the span, in milliseconds. Duration float64 `json:"duration"` // Type identifies the overarching type of the span, // e.g. "db" or "external". Type string `json:"type"` // Subtype identifies the subtype of the span, // e.g. "mysql" or "http". Subtype string `json:"subtype,omitempty"` // Action identifies the action that is being undertaken, e.g. "query". Action string `json:"action,omitempty"` // ID holds the ID of the span. ID SpanID `json:"id"` // TransactionID holds the ID of the transaction of which the span is a part. TransactionID SpanID `json:"transaction_id,omitempty"` // TraceID holds the ID of the trace that this span is a part of. TraceID TraceID `json:"trace_id"` // ParentID holds the ID of the span's parent (span or transaction). ParentID SpanID `json:"parent_id,omitempty"` // SampleRate holds the sample rate in effect when the trace was started, // if known. This is used by the server to aggregate span metrics. SampleRate *float64 `json:"sample_rate,omitempty"` // Context holds contextual information relating to the span. Context *SpanContext `json:"context,omitempty"` // Stacktrace holds stack frames corresponding to the span. Stacktrace []StacktraceFrame `json:"stacktrace,omitempty"` // Outcome holds the span outcome: success, failure, or unknown. Outcome string `json:"outcome,omitempty"` // Composite is set when the span is a composite span and represents an // aggregated set of spans as defined by `composite.compression_strategy`. Composite *CompositeSpan `json:"composite,omitempty"` // Links holds a list of spans linked to the span. Links []SpanLink `json:"links,omitempty"` // OTel holds information bridged from OpenTelemetry. OTel *OTel `json:"otel,omitempty"` } // SpanContext holds contextual information relating to the span. type SpanContext struct { // Destination holds information about a destination service. Destination *DestinationSpanContext `json:"destination,omitempty"` // Service holds information about the service. Service *ServiceSpanContext `json:"service,omitempty"` // Database holds contextual information for database // operation spans. Database *DatabaseSpanContext `json:"db,omitempty"` // Message holds contextual information for message operation spans. Message *MessageSpanContext `json:"message,omitempty"` // HTTP holds contextual information for HTTP client request spans. HTTP *HTTPSpanContext `json:"http,omitempty"` // Tags holds user-defined key/value pairs. Tags IfaceMap `json:"tags,omitempty"` } // SpanLink holds the information of a linked span. type SpanLink struct { TraceID TraceID `json:"trace_id"` SpanID SpanID `json:"span_id"` } // DestinationSpanContext holds contextual information about the destination // for a span that relates to an operation involving an external service. type DestinationSpanContext struct { // Address holds the network address of the destination service. // This may be a hostname, FQDN, or (IPv4 or IPv6) network address. Address string `json:"address,omitempty"` // Port holds the network port for the destination service. Port int `json:"port,omitempty"` // Service holds additional destination service context. Service *DestinationServiceSpanContext `json:"service,omitempty"` // Cloud holds additional destination cloud context. Cloud *DestinationCloudSpanContext `json:"cloud,omitempty"` } // ServiceSpanContext holds contextual information about the service // for a span that relates to an operation involving an external service. type ServiceSpanContext struct { // Target holds the destination service. Target *ServiceTargetSpanContext `json:"target,omitempty"` } // ServiceTargetSpanContext fields replace the `span.destination.service.*` // fields that are deprecated. type ServiceTargetSpanContext struct { // Type holds the destination service type. Type string `json:"type"` // Name holds the destination service name. Name string `json:"name,omitempty"` } // DestinationServiceSpanContext holds contextual information about a // destination service. // // Deprecated: replaced by `service.target.{type,name}`. type DestinationServiceSpanContext struct { // Type holds the destination service type. Deprecated. // // Deprecated: replaced by `service.target.{type,name}`. Type string `json:"type,omitempty"` // Name holds the destination service name. Deprecated. // // Deprecated: replaced by `service.target.{type,name}`. Name string `json:"name"` // Resource identifies the destination service // resource, e.g. a URI or message queue name. // // Deprecated: replaced by `service.target.{type,name}`. Resource string `json:"resource,omitempty"` } // DestinationCloudSpanContext holds contextual information about a // destination cloud. type DestinationCloudSpanContext struct { // Region holds the destination cloud region. Region string `json:"region,omitempty"` } // MessageSpanContext holds contextual information about a message. type MessageSpanContext struct { // Queue holds the destination cloud region. Queue *MessageQueueSpanContext `json:"queue,omitempty"` } // MessageQueueSpanContext holds contextual information about a message queue. type MessageQueueSpanContext struct { // Name holds the message queue name. Name string `json:"name,omitempty"` } // DatabaseSpanContext holds contextual information for database // operation spans. type DatabaseSpanContext struct { // Instance holds the database instance name. Instance string `json:"instance,omitempty"` // Statement holds the database statement (e.g. query). Statement string `json:"statement,omitempty"` // RowsAffected holds the number of rows affected by the // database operation. RowsAffected *int64 `json:"rows_affected,omitempty"` // Type holds the database type. For any SQL database, // this should be "sql"; for others, the lower-cased // database category, e.g. "cassandra", "hbase", "redis". Type string `json:"type,omitempty"` // User holds the username used for database access. User string `json:"user,omitempty"` } // HTTPSpanContext holds contextual information for HTTP client request spans. type HTTPSpanContext struct { // URL is the request URL. URL *url.URL // StatusCode holds the HTTP response status code. StatusCode int `json:"status_code,omitempty"` } // CompositeSpan holds details on a group of spans represented by a single one. type CompositeSpan struct { // Count is the number of compressed spans the composite span represents. // The minimum count is 2, as a composite span represents at least two spans. Count int `json:"count"` // Sum is the durations of all compressed spans this composite span // represents in milliseconds. Sum float64 `json:"sum"` // A string value indicating which compression strategy was used. The valid // values are `exact_match` and `same_kind`. CompressionStrategy string `json:"compression_strategy"` } // Context holds contextual information relating to a transaction or error. type Context struct { // Custom holds custom context relating to the transaction or error. Custom IfaceMap `json:"custom,omitempty"` // Request holds details of the HTTP request relating to the // transaction or error, if relevant. Request *Request `json:"request,omitempty"` // Response holds details of the HTTP response relating to the // transaction or error, if relevant. Response *Response `json:"response,omitempty"` // User holds details of the authenticated user relating to the // transaction or error, if relevant. User *User `json:"user,omitempty"` // Tags holds user-defined key/value pairs. Tags IfaceMap `json:"tags,omitempty"` // Service holds values to overrides service-level metadata. Service *Service `json:"service,omitempty"` } // User holds information about an authenticated user. type User struct { // Username holds the username of the user. Username string `json:"username,omitempty"` // ID identifies the user, e.g. a primary key. This may be // a string or number. ID string `json:"id,omitempty"` // Email holds the email address of the user. Email string `json:"email,omitempty"` } // Error represents an error occurring in the service. type Error struct { // Timestamp holds the time at which the error occurred. Timestamp Time `json:"timestamp"` // ID holds the 128-bit hex-encoded error ID. ID TraceID `json:"id"` // TraceID holds the ID of the trace within which the error occurred. TraceID TraceID `json:"trace_id,omitempty"` // ParentID holds the ID of the transaction within which the error // occurred. ParentID SpanID `json:"parent_id,omitempty"` // TransactionID holds the ID of the transaction within which the error occurred. TransactionID SpanID `json:"transaction_id,omitempty"` // Culprit holds the name of the function which // produced the error. Culprit string `json:"culprit,omitempty"` // Context holds contextual information relating to the error. Context *Context `json:"context,omitempty"` // Exception holds details of the exception (error or panic) // to which this error relates. Exception Exception `json:"exception,omitempty"` // Log holds additional information added when logging the error. Log Log `json:"log,omitempty"` // Transaction holds information about the transaction within which the error occurred. Transaction ErrorTransaction `json:"transaction,omitempty"` } // ErrorTransaction holds information about the transaction within which an error occurred. type ErrorTransaction struct { // Sampled indicates that the transaction was sampled. Sampled *bool `json:"sampled,omitempty"` // Type holds the transaction type. Type string `json:"type,omitempty"` // Name holds the transaction name. Name string `json:"name,omitempty"` } // Exception represents an exception: an error or panic. type Exception struct { // Message holds the error message. Message string `json:"message"` // Code holds the error code. This may be a number or a string. Code ExceptionCode `json:"code,omitempty"` // Type holds the type of the exception. Type string `json:"type,omitempty"` // Module holds the exception type's module namespace. Module string `json:"module,omitempty"` // Attributes holds arbitrary exception-type specific attributes. Attributes map[string]interface{} `json:"attributes,omitempty"` // Stacktrace holds stack frames corresponding to the exception. Stacktrace []StacktraceFrame `json:"stacktrace,omitempty"` // Handled indicates whether or not the error was caught and handled. Handled bool `json:"handled"` // Cause holds the causes of this error. Cause []Exception `json:"cause,omitempty"` } // ExceptionCode represents an exception code as either a number or a string. type ExceptionCode struct { String string Number float64 } // StacktraceFrame describes a stack frame. type StacktraceFrame struct { // AbsolutePath holds the absolute path of the source file for the // stack frame. AbsolutePath string `json:"abs_path,omitempty"` // File holds the base filename of the source file for the stack frame. File string `json:"filename"` // Line holds the line number of the source for the stack frame. Line int `json:"lineno"` // Column holds the column number of the source for the stack frame. Column *int `json:"colno,omitempty"` // Module holds the module to which the frame belongs. For Go, we // use the package path (e.g. "net/http"). Module string `json:"module,omitempty"` // Classname holds the name of the class to which the frame belongs. Classname string `json:"classname,omitempty"` // Function holds the name of the function to which the frame belongs. Function string `json:"function,omitempty"` // LibraryFrame indicates whether or not the frame corresponds to // library or user code. LibraryFrame bool `json:"library_frame,omitempty"` // ContextLine holds the line of source code to which the frame // corresponds. ContextLine string `json:"context_line,omitempty"` // PreContext holds zero or more lines of source code preceding the // line corresponding to the frame. PreContext []string `json:"pre_context,omitempty"` // PostContext holds zero or more lines of source code proceeding the // line corresponding to the frame. PostContext []string `json:"post_context,omitempty"` // Vars holds local variables for this stack frame. Vars map[string]interface{} `json:"vars,omitempty"` } // Log holds additional information added when logging an error. type Log struct { // Message holds the logged error message. Message string `json:"message"` // Level holds the severity of the log record. Level string `json:"level,omitempty"` // LoggerName holds the name of the logger used. LoggerName string `json:"logger_name,omitempty"` // ParamMessage holds a parameterized message, e.g. // "Could not connect to %s". The string is not interpreted, // but may be used for grouping errors. ParamMessage string `json:"param_message,omitempty"` // Stacktrace holds stack frames corresponding to the error. Stacktrace []StacktraceFrame `json:"stacktrace,omitempty"` } // Request represents an HTTP request. type Request struct { // URL is the request URL. URL URL `json:"url"` // Method holds the HTTP request method. Method string `json:"method"` // Headers holds the request headers. Headers Headers `json:"headers,omitempty"` // Body holds the request body, if body capture is enabled. Body *RequestBody `json:"body,omitempty"` // HTTPVersion holds the HTTP version of the request. HTTPVersion string `json:"http_version,omitempty"` // Cookies holds the parsed cookies. Cookies Cookies `json:"cookies,omitempty"` // Env holds environment information passed from the // web framework to the request handler. Env map[string]string `json:"env,omitempty"` // Socket holds transport-level information. Socket *RequestSocket `json:"socket,omitempty"` } // Cookies holds a collection of HTTP cookies. type Cookies []*http.Cookie // RequestBody holds a request body. // // Exactly one of Raw or Form must be set. type RequestBody struct { // Raw holds the raw body content. Raw string // Form holds the form data from POST, PATCH, or PUT body parameters. Form url.Values } // Headers holds a collection of HTTP headers. type Headers []Header // Header holds an HTTP header, with one or more values. type Header struct { Key string Values []string } // RequestSocket holds transport-level information relating to an HTTP request. type RequestSocket struct { // Encrypted indicates whether or not the request was sent // as an SSL/HTTPS request. Deprecated. Encrypted bool `json:"encrypted,omitempty"` // RemoteAddress holds the remote address for the request. RemoteAddress string `json:"remote_address,omitempty"` } // URL represents a server-side (transaction) request URL, // broken down into its constituent parts. type URL struct { // Full is the full URL, e.g. // "https://example.com:443/search/?q=elasticsearch#top". Full string `json:"full,omitempty"` // Protocol is the scheme of the URL, e.g. "https". Protocol string `json:"protocol,omitempty"` // Hostname is the hostname for the URL, e.g. "example.com". Hostname string `json:"hostname,omitempty"` // Port is the port number in the URL, e.g. "443". Port string `json:"port,omitempty"` // Path is the path of the URL, e.g. "/search". Path string `json:"pathname,omitempty"` // Search is the query string of the URL, e.g. "q=elasticsearch". Search string `json:"search,omitempty"` // Hash is the fragment for references, e.g. "top" in the // URL example provided for Full. Hash string `json:"hash,omitempty"` } // Response represents an HTTP response. type Response struct { // StatusCode holds the HTTP response status code. StatusCode int `json:"status_code,omitempty"` // Headers holds the response headers. Headers Headers `json:"headers,omitempty"` // HeadersSent indicates whether or not headers were sent // to the client. HeadersSent *bool `json:"headers_sent,omitempty"` // Finished indicates whether or not the response was finished. Finished *bool `json:"finished,omitempty"` } // Time is a timestamp, formatted as a number of microseconds since January 1, 1970 UTC. type Time time.Time // TraceID holds a 128-bit trace ID. type TraceID [16]byte // SpanID holds a 64-bit span ID. Despite its name, this is used for // both spans and transactions. type SpanID [8]byte // Metrics holds a set of metric samples, with an optional set of labels. type Metrics struct { // Timestamp holds the time at which the metric samples were taken. Timestamp Time `json:"timestamp"` // Transaction optionally holds the name and type of transactions // with which these metrics are associated. Transaction MetricsTransaction `json:"transaction,omitempty"` // Span optionally holds the type and subtype of the spans with // which these metrics are associated. Span MetricsSpan `json:"span,omitempty"` // Labels holds a set of labels associated with the metrics. // The labels apply uniformly to all metric samples in the set. // // NOTE(axw) the schema calls the field "tags", but we use // "labels" for agent-internal consistency. Labels aligns better // with the common schema, anyway. Labels StringMap `json:"tags,omitempty"` // FAAS holds Function-as-a-Service related properties for the metrics. FAAS *FAAS `json:"faas,omitempty"` // Samples holds a map of metric samples, keyed by metric name. Samples map[string]Metric `json:"samples"` } // MetricsTransaction holds transaction identifiers for metrics. type MetricsTransaction struct { Type string `json:"type,omitempty"` Name string `json:"name,omitempty"` } // MetricsSpan holds span identifiers for metrics. type MetricsSpan struct { Type string `json:"type,omitempty"` Subtype string `json:"subtype,omitempty"` } // Metric holds metric values. type Metric struct { Type string `json:"type,omitempty"` // Value holds the metric value. Value float64 `json:"value"` // Values holds the metric bucket values. Values []float64 `json:"values,omitempty"` // Counts holds the metric observation count for the bucket. Counts []uint64 `json:"counts,omitempty"` } // FAAS holds Function-as-a-Service properties. type FAAS struct { // ID holds a unique identifier of the invoked serverless function. ID string `json:"id,omitempty"` // Execution holds the request ID of the function invocation. Execution string `json:"execution,omitempty"` // Trigger holds information related to the trigger of the function invocation. Trigger *FAASTrigger `json:"trigger,omitempty"` // Name holds the lambda function name. Name string `json:"name,omitempty"` // Version holds the lambda function version. Version string `json:"version,omitempty"` // Coldstart indicates if the lambda function triggered a Cold Start Coldstart bool `json:"coldstart"` } // FAASTrigger holds information related to the trigger of a Function-as-a-Service invocation. type FAASTrigger struct { // Type holds the trigger type. Type string `json:"type,omitempty"` // RequestID holds the ID of the origin trigger request. RequestID string `json:"request_id,omitempty"` }