/*
 * Copyright The OpenTelemetry Authors
 * SPDX-License-Identifier: Apache-2.0
 */

/*
 * DO NOT EDIT, this is an Auto-generated file from:
 * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
 */

#pragma once

#include "opentelemetry/common/macros.h"
#include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace semconv
{
namespace faas
{

/**
  A boolean that is true if the serverless function is executed for the first time (aka cold-start).
 */
static constexpr const char *kFaasColdstart = "faas.coldstart";

/**
  A string containing the schedule period as <a
  href="https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm">Cron
  Expression</a>.
 */
static constexpr const char *kFaasCron = "faas.cron";

/**
  The name of the source on which the triggering operation was performed. For example, in Cloud
  Storage or S3 corresponds to the bucket name, and in Cosmos DB to the database name.
 */
static constexpr const char *kFaasDocumentCollection = "faas.document.collection";

/**
  The document name/table subjected to the operation. For example, in Cloud Storage or S3 is the
  name of the file, and in Cosmos DB the table name.
 */
static constexpr const char *kFaasDocumentName = "faas.document.name";

/**
  Describes the type of the operation that was performed on the data.
 */
static constexpr const char *kFaasDocumentOperation = "faas.document.operation";

/**
  A string containing the time when the data was accessed in the <a
  href="https://www.iso.org/iso-8601-date-and-time-format.html">ISO 8601</a> format expressed in <a
  href="https://www.w3.org/TR/NOTE-datetime">UTC</a>.
 */
static constexpr const char *kFaasDocumentTime = "faas.document.time";

/**
  The execution environment ID as a string, that will be potentially reused for other invocations to
  the same function/function version. <ul> <li><strong>AWS Lambda:</strong> Use the (full) log
  stream name.</li>
  </ul>
 */
static constexpr const char *kFaasInstance = "faas.instance";

/**
  The invocation ID of the current function invocation.
 */
static constexpr const char *kFaasInvocationId = "faas.invocation_id";

/**
  The name of the invoked function.
  <p>
  SHOULD be equal to the @code faas.name @endcode resource attribute of the invoked function.
 */
static constexpr const char *kFaasInvokedName = "faas.invoked_name";

/**
  The cloud provider of the invoked function.
  <p>
  SHOULD be equal to the @code cloud.provider @endcode resource attribute of the invoked function.
 */
static constexpr const char *kFaasInvokedProvider = "faas.invoked_provider";

/**
  The cloud region of the invoked function.
  <p>
  SHOULD be equal to the @code cloud.region @endcode resource attribute of the invoked function.
 */
static constexpr const char *kFaasInvokedRegion = "faas.invoked_region";

/**
  The amount of memory available to the serverless function converted to Bytes.
  <p>
  It's recommended to set this attribute since e.g. too little memory can easily stop a Java AWS
  Lambda function from working correctly. On AWS Lambda, the environment variable @code
  AWS_LAMBDA_FUNCTION_MEMORY_SIZE @endcode provides this information (which must be multiplied by
  1,048,576).
 */
static constexpr const char *kFaasMaxMemory = "faas.max_memory";

/**
  The name of the single function that this runtime instance executes.
  <p>
  This is the name of the function as configured/deployed on the FaaS
  platform and is usually different from the name of the callback
  function (which may be stored in the
  <a href="/docs/general/attributes.md#source-code-attributes">@code code.namespace @endcode/@code
  code.function.name @endcode</a> span attributes). <p> For some cloud providers, the above
  definition is ambiguous. The following definition of function name MUST be used for this attribute
  (and consequently the span name) for the listed cloud providers/products:
  <ul>
    <li><strong>Azure:</strong>  The full name @code <FUNCAPP>/<FUNC> @endcode, i.e., function app
  name followed by a forward slash followed by the function name (this form can also be seen in the
  resource JSON for the function). This means that a span attribute MUST be used, as an Azure
  function app can host multiple functions that would usually share a TracerProvider (see also the
  @code cloud.resource_id @endcode attribute).</li>
  </ul>
 */
static constexpr const char *kFaasName = "faas.name";

/**
  A string containing the function invocation time in the <a
  href="https://www.iso.org/iso-8601-date-and-time-format.html">ISO 8601</a> format expressed in <a
  href="https://www.w3.org/TR/NOTE-datetime">UTC</a>.
 */
static constexpr const char *kFaasTime = "faas.time";

/**
  Type of the trigger which caused this function invocation.
 */
static constexpr const char *kFaasTrigger = "faas.trigger";

/**
  The immutable version of the function being executed.
  <p>
  Depending on the cloud provider and platform, use:
  <ul>
    <li><strong>AWS Lambda:</strong> The <a
  href="https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html">function
  version</a> (an integer represented as a decimal string).</li> <li><strong>Google Cloud Run
  (Services):</strong> The <a
  href="https://cloud.google.com/run/docs/managing/revisions">revision</a> (i.e., the function name
  plus the revision suffix).</li> <li><strong>Google Cloud Functions:</strong> The value of the <a
  href="https://cloud.google.com/functions/docs/env-var#runtime_environment_variables_set_automatically">@code
  K_REVISION @endcode environment variable</a>.</li> <li><strong>Azure Functions:</strong> Not
  applicable. Do not set this attribute.</li>
  </ul>
 */
static constexpr const char *kFaasVersion = "faas.version";

namespace FaasDocumentOperationValues
{
/**
  When a new object is created.
 */
static constexpr const char *kInsert = "insert";

/**
  When an object is modified.
 */
static constexpr const char *kEdit = "edit";

/**
  When an object is deleted.
 */
static constexpr const char *kDelete = "delete";

}  // namespace FaasDocumentOperationValues

namespace FaasInvokedProviderValues
{
/**
  Alibaba Cloud
 */
static constexpr const char *kAlibabaCloud = "alibaba_cloud";

/**
  Amazon Web Services
 */
static constexpr const char *kAws = "aws";

/**
  Microsoft Azure
 */
static constexpr const char *kAzure = "azure";

/**
  Google Cloud Platform
 */
static constexpr const char *kGcp = "gcp";

/**
  Tencent Cloud
 */
static constexpr const char *kTencentCloud = "tencent_cloud";

}  // namespace FaasInvokedProviderValues

namespace FaasTriggerValues
{
/**
  A response to some data source operation such as a database or filesystem read/write
 */
static constexpr const char *kDatasource = "datasource";

/**
  To provide an answer to an inbound HTTP request
 */
static constexpr const char *kHttp = "http";

/**
  A function is set to be executed when messages are sent to a messaging system
 */
static constexpr const char *kPubsub = "pubsub";

/**
  A function is scheduled to be executed regularly
 */
static constexpr const char *kTimer = "timer";

/**
  If none of the others apply
 */
static constexpr const char *kOther = "other";

}  // namespace FaasTriggerValues

}  // namespace faas
}  // namespace semconv
OPENTELEMETRY_END_NAMESPACE
