diff --git a/api/include/opentelemetry/semconv/azure_metrics.h b/api/include/opentelemetry/semconv/azure_metrics.h
new file mode 100644
index 0000000000..63f4556b0b
--- /dev/null
+++ b/api/include/opentelemetry/semconv/azure_metrics.h
@@ -0,0 +1,97 @@
+/*
+ * 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_metrics-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/metrics/meter.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace azure
+{
+
+/**
+ * Number of active client instances
+ *
+ * updowncounter
+ */
+static constexpr const char *kMetricAzureCosmosdbClientActiveInstanceCount =
+ "azure.cosmosdb.client.active_instance.count";
+static constexpr const char *descrMetricAzureCosmosdbClientActiveInstanceCount =
+ "Number of active client instances";
+static constexpr const char *unitMetricAzureCosmosdbClientActiveInstanceCount = "{instance}";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricAzureCosmosdbClientActiveInstanceCount(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricAzureCosmosdbClientActiveInstanceCount,
+ descrMetricAzureCosmosdbClientActiveInstanceCount,
+ unitMetricAzureCosmosdbClientActiveInstanceCount);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricAzureCosmosdbClientActiveInstanceCount(metrics::Meter *meter)
+{
+ return meter->CreateDoubleUpDownCounter(kMetricAzureCosmosdbClientActiveInstanceCount,
+ descrMetricAzureCosmosdbClientActiveInstanceCount,
+ unitMetricAzureCosmosdbClientActiveInstanceCount);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricAzureCosmosdbClientActiveInstanceCount(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(
+ kMetricAzureCosmosdbClientActiveInstanceCount,
+ descrMetricAzureCosmosdbClientActiveInstanceCount,
+ unitMetricAzureCosmosdbClientActiveInstanceCount);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricAzureCosmosdbClientActiveInstanceCount(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableUpDownCounter(
+ kMetricAzureCosmosdbClientActiveInstanceCount,
+ descrMetricAzureCosmosdbClientActiveInstanceCount,
+ unitMetricAzureCosmosdbClientActiveInstanceCount);
+}
+
+/**
+ * Request units consumed by
+ * the operation histogram
+ */
+static constexpr const char *kMetricAzureCosmosdbClientOperationRequestCharge =
+ "azure.cosmosdb.client.operation.request_charge";
+static constexpr const char *descrMetricAzureCosmosdbClientOperationRequestCharge =
+ "[Request units](https://learn.microsoft.com/azure/cosmos-db/request-units) consumed by the "
+ "operation";
+static constexpr const char *unitMetricAzureCosmosdbClientOperationRequestCharge = "{request_unit}";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricAzureCosmosdbClientOperationRequestCharge(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricAzureCosmosdbClientOperationRequestCharge,
+ descrMetricAzureCosmosdbClientOperationRequestCharge,
+ unitMetricAzureCosmosdbClientOperationRequestCharge);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricAzureCosmosdbClientOperationRequestCharge(metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricAzureCosmosdbClientOperationRequestCharge,
+ descrMetricAzureCosmosdbClientOperationRequestCharge,
+ unitMetricAzureCosmosdbClientOperationRequestCharge);
+}
+
+} // namespace azure
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/cicd_metrics.h b/api/include/opentelemetry/semconv/cicd_metrics.h
new file mode 100644
index 0000000000..993c2636f4
--- /dev/null
+++ b/api/include/opentelemetry/semconv/cicd_metrics.h
@@ -0,0 +1,213 @@
+/*
+ * 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_metrics-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/metrics/meter.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace cicd
+{
+
+/**
+ * The number of pipeline runs currently active in the system by state.
+ *
+ * updowncounter
+ */
+static constexpr const char *kMetricCicdPipelineRunActive = "cicd.pipeline.run.active";
+static constexpr const char *descrMetricCicdPipelineRunActive =
+ "The number of pipeline runs currently active in the system by state.";
+static constexpr const char *unitMetricCicdPipelineRunActive = "{run}";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricCicdPipelineRunActive(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricCicdPipelineRunActive,
+ descrMetricCicdPipelineRunActive,
+ unitMetricCicdPipelineRunActive);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricCicdPipelineRunActive(metrics::Meter *meter)
+{
+ return meter->CreateDoubleUpDownCounter(kMetricCicdPipelineRunActive,
+ descrMetricCicdPipelineRunActive,
+ unitMetricCicdPipelineRunActive);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricCicdPipelineRunActive(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricCicdPipelineRunActive,
+ descrMetricCicdPipelineRunActive,
+ unitMetricCicdPipelineRunActive);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricCicdPipelineRunActive(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableUpDownCounter(kMetricCicdPipelineRunActive,
+ descrMetricCicdPipelineRunActive,
+ unitMetricCicdPipelineRunActive);
+}
+
+/**
+ * Duration of a pipeline run grouped by pipeline, state and result.
+ *
+ * histogram
+ */
+static constexpr const char *kMetricCicdPipelineRunDuration = "cicd.pipeline.run.duration";
+static constexpr const char *descrMetricCicdPipelineRunDuration =
+ "Duration of a pipeline run grouped by pipeline, state and result.";
+static constexpr const char *unitMetricCicdPipelineRunDuration = "s";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricCicdPipelineRunDuration(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricCicdPipelineRunDuration,
+ descrMetricCicdPipelineRunDuration,
+ unitMetricCicdPipelineRunDuration);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricCicdPipelineRunDuration(metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricCicdPipelineRunDuration,
+ descrMetricCicdPipelineRunDuration,
+ unitMetricCicdPipelineRunDuration);
+}
+
+/**
+ * The number of errors encountered in pipeline runs (eg. compile, test failures).
+ *
+ * There might be errors in a pipeline run that are non fatal (eg. they are suppressed) or in a
+ * parallel stage multiple stages could have a fatal error. This means that this error count might
+ * not be the same as the count of metric @code cicd.pipeline.run.duration @endcode with run result
+ * @code failure @endcode.
counter
+ */
+static constexpr const char *kMetricCicdPipelineRunErrors = "cicd.pipeline.run.errors";
+static constexpr const char *descrMetricCicdPipelineRunErrors =
+ "The number of errors encountered in pipeline runs (eg. compile, test failures).";
+static constexpr const char *unitMetricCicdPipelineRunErrors = "{error}";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricCicdPipelineRunErrors(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricCicdPipelineRunErrors, descrMetricCicdPipelineRunErrors,
+ unitMetricCicdPipelineRunErrors);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricCicdPipelineRunErrors(metrics::Meter *meter)
+{
+ return meter->CreateDoubleCounter(kMetricCicdPipelineRunErrors, descrMetricCicdPipelineRunErrors,
+ unitMetricCicdPipelineRunErrors);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricCicdPipelineRunErrors(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricCicdPipelineRunErrors,
+ descrMetricCicdPipelineRunErrors,
+ unitMetricCicdPipelineRunErrors);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricCicdPipelineRunErrors(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableCounter(kMetricCicdPipelineRunErrors,
+ descrMetricCicdPipelineRunErrors,
+ unitMetricCicdPipelineRunErrors);
+}
+
+/**
+ * The number of errors in a component of the CICD system (eg. controller, scheduler, agent).
+ *
+ * Errors in pipeline run execution are explicitly excluded. Ie a test failure is not counted in
+ * this metric.
counter
+ */
+static constexpr const char *kMetricCicdSystemErrors = "cicd.system.errors";
+static constexpr const char *descrMetricCicdSystemErrors =
+ "The number of errors in a component of the CICD system (eg. controller, scheduler, agent).";
+static constexpr const char *unitMetricCicdSystemErrors = "{error}";
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricCicdSystemErrors(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricCicdSystemErrors, descrMetricCicdSystemErrors,
+ unitMetricCicdSystemErrors);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricCicdSystemErrors(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleCounter(kMetricCicdSystemErrors, descrMetricCicdSystemErrors,
+ unitMetricCicdSystemErrors);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricCicdSystemErrors(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricCicdSystemErrors, descrMetricCicdSystemErrors,
+ unitMetricCicdSystemErrors);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricCicdSystemErrors(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableCounter(kMetricCicdSystemErrors, descrMetricCicdSystemErrors,
+ unitMetricCicdSystemErrors);
+}
+
+/**
+ * The number of workers on the CICD system by state.
+ *
+ * updowncounter
+ */
+static constexpr const char *kMetricCicdWorkerCount = "cicd.worker.count";
+static constexpr const char *descrMetricCicdWorkerCount =
+ "The number of workers on the CICD system by state.";
+static constexpr const char *unitMetricCicdWorkerCount = "{count}";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricCicdWorkerCount(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricCicdWorkerCount, descrMetricCicdWorkerCount,
+ unitMetricCicdWorkerCount);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricCicdWorkerCount(metrics::Meter *meter)
+{
+ return meter->CreateDoubleUpDownCounter(kMetricCicdWorkerCount, descrMetricCicdWorkerCount,
+ unitMetricCicdWorkerCount);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricCicdWorkerCount(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(
+ kMetricCicdWorkerCount, descrMetricCicdWorkerCount, unitMetricCicdWorkerCount);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricCicdWorkerCount(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableUpDownCounter(
+ kMetricCicdWorkerCount, descrMetricCicdWorkerCount, unitMetricCicdWorkerCount);
+}
+
+} // namespace cicd
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/container_metrics.h b/api/include/opentelemetry/semconv/container_metrics.h
new file mode 100644
index 0000000000..d3fef8b91b
--- /dev/null
+++ b/api/include/opentelemetry/semconv/container_metrics.h
@@ -0,0 +1,266 @@
+/*
+ * 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_metrics-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/metrics/meter.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace container
+{
+
+/**
+ * Total CPU time consumed
+ *
+ * Total CPU time consumed by the specific container on all available CPU cores
+ *
+ * counter
+ */
+static constexpr const char *kMetricContainerCpuTime = "container.cpu.time";
+static constexpr const char *descrMetricContainerCpuTime = "Total CPU time consumed";
+static constexpr const char *unitMetricContainerCpuTime = "s";
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricContainerCpuTime(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricContainerCpuTime, descrMetricContainerCpuTime,
+ unitMetricContainerCpuTime);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricContainerCpuTime(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleCounter(kMetricContainerCpuTime, descrMetricContainerCpuTime,
+ unitMetricContainerCpuTime);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricContainerCpuTime(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricContainerCpuTime, descrMetricContainerCpuTime,
+ unitMetricContainerCpuTime);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricContainerCpuTime(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableCounter(kMetricContainerCpuTime, descrMetricContainerCpuTime,
+ unitMetricContainerCpuTime);
+}
+
+/**
+ * Container's CPU usage, measured in cpus. Range from 0 to the number of allocatable CPUs
+ *
+ * CPU usage of the specific container on all available CPU cores, averaged over the sample window
+ *
+ * gauge
+ */
+static constexpr const char *kMetricContainerCpuUsage = "container.cpu.usage";
+static constexpr const char *descrMetricContainerCpuUsage =
+ "Container's CPU usage, measured in cpus. Range from 0 to the number of allocatable CPUs";
+static constexpr const char *unitMetricContainerCpuUsage = "{cpu}";
+
+#if OPENTELEMETRY_ABI_VERSION_NO >= 2
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricContainerCpuUsage(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64Gauge(kMetricContainerCpuUsage, descrMetricContainerCpuUsage,
+ unitMetricContainerCpuUsage);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricContainerCpuUsage(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleGauge(kMetricContainerCpuUsage, descrMetricContainerCpuUsage,
+ unitMetricContainerCpuUsage);
+}
+#endif /* OPENTELEMETRY_ABI_VERSION_NO */
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricContainerCpuUsage(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableGauge(kMetricContainerCpuUsage, descrMetricContainerCpuUsage,
+ unitMetricContainerCpuUsage);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricContainerCpuUsage(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableGauge(kMetricContainerCpuUsage, descrMetricContainerCpuUsage,
+ unitMetricContainerCpuUsage);
+}
+
+/**
+ * Disk bytes for the container.
+ *
+ * The total number of bytes read/written successfully (aggregated from all disks).
+ *
+ * counter
+ */
+static constexpr const char *kMetricContainerDiskIo = "container.disk.io";
+static constexpr const char *descrMetricContainerDiskIo = "Disk bytes for the container.";
+static constexpr const char *unitMetricContainerDiskIo = "By";
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricContainerDiskIo(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricContainerDiskIo, descrMetricContainerDiskIo,
+ unitMetricContainerDiskIo);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricContainerDiskIo(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleCounter(kMetricContainerDiskIo, descrMetricContainerDiskIo,
+ unitMetricContainerDiskIo);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricContainerDiskIo(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricContainerDiskIo, descrMetricContainerDiskIo,
+ unitMetricContainerDiskIo);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricContainerDiskIo(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableCounter(kMetricContainerDiskIo, descrMetricContainerDiskIo,
+ unitMetricContainerDiskIo);
+}
+
+/**
+ * Memory usage of the container.
+ *
+ * Memory usage of the container.
+ *
+ * counter
+ */
+static constexpr const char *kMetricContainerMemoryUsage = "container.memory.usage";
+static constexpr const char *descrMetricContainerMemoryUsage = "Memory usage of the container.";
+static constexpr const char *unitMetricContainerMemoryUsage = "By";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricContainerMemoryUsage(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricContainerMemoryUsage, descrMetricContainerMemoryUsage,
+ unitMetricContainerMemoryUsage);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricContainerMemoryUsage(metrics::Meter *meter)
+{
+ return meter->CreateDoubleCounter(kMetricContainerMemoryUsage, descrMetricContainerMemoryUsage,
+ unitMetricContainerMemoryUsage);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricContainerMemoryUsage(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(
+ kMetricContainerMemoryUsage, descrMetricContainerMemoryUsage, unitMetricContainerMemoryUsage);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricContainerMemoryUsage(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableCounter(
+ kMetricContainerMemoryUsage, descrMetricContainerMemoryUsage, unitMetricContainerMemoryUsage);
+}
+
+/**
+ * Network bytes for the container.
+ *
+ * The number of bytes sent/received on all network interfaces by the container.
+ *
+ * counter
+ */
+static constexpr const char *kMetricContainerNetworkIo = "container.network.io";
+static constexpr const char *descrMetricContainerNetworkIo = "Network bytes for the container.";
+static constexpr const char *unitMetricContainerNetworkIo = "By";
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricContainerNetworkIo(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricContainerNetworkIo, descrMetricContainerNetworkIo,
+ unitMetricContainerNetworkIo);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricContainerNetworkIo(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleCounter(kMetricContainerNetworkIo, descrMetricContainerNetworkIo,
+ unitMetricContainerNetworkIo);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricContainerNetworkIo(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(
+ kMetricContainerNetworkIo, descrMetricContainerNetworkIo, unitMetricContainerNetworkIo);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricContainerNetworkIo(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableCounter(
+ kMetricContainerNetworkIo, descrMetricContainerNetworkIo, unitMetricContainerNetworkIo);
+}
+
+/**
+ * The time the container has been running
+ *
+ * Instrumentations SHOULD use a gauge with type @code double @endcode and measure uptime in seconds
+ * as a floating point number with the highest precision available. The actual accuracy would depend
+ * on the instrumentation and operating system.
gauge
+ */
+static constexpr const char *kMetricContainerUptime = "container.uptime";
+static constexpr const char *descrMetricContainerUptime = "The time the container has been running";
+static constexpr const char *unitMetricContainerUptime = "s";
+
+#if OPENTELEMETRY_ABI_VERSION_NO >= 2
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricContainerUptime(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64Gauge(kMetricContainerUptime, descrMetricContainerUptime,
+ unitMetricContainerUptime);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricContainerUptime(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleGauge(kMetricContainerUptime, descrMetricContainerUptime,
+ unitMetricContainerUptime);
+}
+#endif /* OPENTELEMETRY_ABI_VERSION_NO */
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricContainerUptime(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableGauge(kMetricContainerUptime, descrMetricContainerUptime,
+ unitMetricContainerUptime);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricContainerUptime(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableGauge(kMetricContainerUptime, descrMetricContainerUptime,
+ unitMetricContainerUptime);
+}
+
+} // namespace container
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/cpu_metrics.h b/api/include/opentelemetry/semconv/cpu_metrics.h
new file mode 100644
index 0000000000..f9e6de5eb2
--- /dev/null
+++ b/api/include/opentelemetry/semconv/cpu_metrics.h
@@ -0,0 +1,141 @@
+/*
+ * 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_metrics-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/metrics/meter.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace cpu
+{
+
+/**
+ * Operating frequency of the logical CPU in Hertz.
+ *
+ * gauge
+ */
+static constexpr const char *kMetricCpuFrequency = "cpu.frequency";
+static constexpr const char *descrMetricCpuFrequency =
+ "Operating frequency of the logical CPU in Hertz.";
+static constexpr const char *unitMetricCpuFrequency = "Hz";
+
+#if OPENTELEMETRY_ABI_VERSION_NO >= 2
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricCpuFrequency(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64Gauge(kMetricCpuFrequency, descrMetricCpuFrequency,
+ unitMetricCpuFrequency);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricCpuFrequency(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleGauge(kMetricCpuFrequency, descrMetricCpuFrequency,
+ unitMetricCpuFrequency);
+}
+#endif /* OPENTELEMETRY_ABI_VERSION_NO */
+
+static inline nostd::shared_ptr CreateAsyncInt64MetricCpuFrequency(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableGauge(kMetricCpuFrequency, descrMetricCpuFrequency,
+ unitMetricCpuFrequency);
+}
+
+static inline nostd::shared_ptr CreateAsyncDoubleMetricCpuFrequency(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableGauge(kMetricCpuFrequency, descrMetricCpuFrequency,
+ unitMetricCpuFrequency);
+}
+
+/**
+ * Seconds each logical CPU spent on each mode
+ *
+ * counter
+ */
+static constexpr const char *kMetricCpuTime = "cpu.time";
+static constexpr const char *descrMetricCpuTime = "Seconds each logical CPU spent on each mode";
+static constexpr const char *unitMetricCpuTime = "s";
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricCpuTime(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricCpuTime, descrMetricCpuTime, unitMetricCpuTime);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricCpuTime(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleCounter(kMetricCpuTime, descrMetricCpuTime, unitMetricCpuTime);
+}
+
+static inline nostd::shared_ptr CreateAsyncInt64MetricCpuTime(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricCpuTime, descrMetricCpuTime, unitMetricCpuTime);
+}
+
+static inline nostd::shared_ptr CreateAsyncDoubleMetricCpuTime(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableCounter(kMetricCpuTime, descrMetricCpuTime,
+ unitMetricCpuTime);
+}
+
+/**
+ * For each logical CPU, the utilization is calculated as the change in cumulative CPU time
+ * (cpu.time) over a measurement interval, divided by the elapsed time. gauge
+ */
+static constexpr const char *kMetricCpuUtilization = "cpu.utilization";
+static constexpr const char *descrMetricCpuUtilization =
+ "For each logical CPU, the utilization is calculated as the change in cumulative CPU time "
+ "(cpu.time) over a measurement interval, divided by the elapsed time.";
+static constexpr const char *unitMetricCpuUtilization = "1";
+
+#if OPENTELEMETRY_ABI_VERSION_NO >= 2
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricCpuUtilization(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64Gauge(kMetricCpuUtilization, descrMetricCpuUtilization,
+ unitMetricCpuUtilization);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricCpuUtilization(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleGauge(kMetricCpuUtilization, descrMetricCpuUtilization,
+ unitMetricCpuUtilization);
+}
+#endif /* OPENTELEMETRY_ABI_VERSION_NO */
+
+static inline nostd::shared_ptr CreateAsyncInt64MetricCpuUtilization(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableGauge(kMetricCpuUtilization, descrMetricCpuUtilization,
+ unitMetricCpuUtilization);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricCpuUtilization(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableGauge(kMetricCpuUtilization, descrMetricCpuUtilization,
+ unitMetricCpuUtilization);
+}
+
+} // namespace cpu
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/db_metrics.h b/api/include/opentelemetry/semconv/db_metrics.h
new file mode 100644
index 0000000000..a444adf5f9
--- /dev/null
+++ b/api/include/opentelemetry/semconv/db_metrics.h
@@ -0,0 +1,866 @@
+/*
+ * 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_metrics-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/metrics/meter.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace db
+{
+
+/**
+ * The number of connections that are currently in state described by the @code state @endcode
+ * attribute updowncounter
+ */
+static constexpr const char *kMetricDbClientConnectionCount = "db.client.connection.count";
+static constexpr const char *descrMetricDbClientConnectionCount =
+ "The number of connections that are currently in state described by the `state` attribute";
+static constexpr const char *unitMetricDbClientConnectionCount = "{connection}";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientConnectionCount(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionCount,
+ descrMetricDbClientConnectionCount,
+ unitMetricDbClientConnectionCount);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientConnectionCount(metrics::Meter *meter)
+{
+ return meter->CreateDoubleUpDownCounter(kMetricDbClientConnectionCount,
+ descrMetricDbClientConnectionCount,
+ unitMetricDbClientConnectionCount);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricDbClientConnectionCount(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionCount,
+ descrMetricDbClientConnectionCount,
+ unitMetricDbClientConnectionCount);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricDbClientConnectionCount(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableUpDownCounter(kMetricDbClientConnectionCount,
+ descrMetricDbClientConnectionCount,
+ unitMetricDbClientConnectionCount);
+}
+
+/**
+ * The time it took to create a new connection
+ *
+ * histogram
+ */
+static constexpr const char *kMetricDbClientConnectionCreateTime =
+ "db.client.connection.create_time";
+static constexpr const char *descrMetricDbClientConnectionCreateTime =
+ "The time it took to create a new connection";
+static constexpr const char *unitMetricDbClientConnectionCreateTime = "s";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientConnectionCreateTime(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricDbClientConnectionCreateTime,
+ descrMetricDbClientConnectionCreateTime,
+ unitMetricDbClientConnectionCreateTime);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientConnectionCreateTime(metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricDbClientConnectionCreateTime,
+ descrMetricDbClientConnectionCreateTime,
+ unitMetricDbClientConnectionCreateTime);
+}
+
+/**
+ * The maximum number of idle open connections allowed
+ *
+ * updowncounter
+ */
+static constexpr const char *kMetricDbClientConnectionIdleMax = "db.client.connection.idle.max";
+static constexpr const char *descrMetricDbClientConnectionIdleMax =
+ "The maximum number of idle open connections allowed";
+static constexpr const char *unitMetricDbClientConnectionIdleMax = "{connection}";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientConnectionIdleMax(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionIdleMax,
+ descrMetricDbClientConnectionIdleMax,
+ unitMetricDbClientConnectionIdleMax);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientConnectionIdleMax(metrics::Meter *meter)
+{
+ return meter->CreateDoubleUpDownCounter(kMetricDbClientConnectionIdleMax,
+ descrMetricDbClientConnectionIdleMax,
+ unitMetricDbClientConnectionIdleMax);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricDbClientConnectionIdleMax(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionIdleMax,
+ descrMetricDbClientConnectionIdleMax,
+ unitMetricDbClientConnectionIdleMax);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricDbClientConnectionIdleMax(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableUpDownCounter(kMetricDbClientConnectionIdleMax,
+ descrMetricDbClientConnectionIdleMax,
+ unitMetricDbClientConnectionIdleMax);
+}
+
+/**
+ * The minimum number of idle open connections allowed
+ *
+ * updowncounter
+ */
+static constexpr const char *kMetricDbClientConnectionIdleMin = "db.client.connection.idle.min";
+static constexpr const char *descrMetricDbClientConnectionIdleMin =
+ "The minimum number of idle open connections allowed";
+static constexpr const char *unitMetricDbClientConnectionIdleMin = "{connection}";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientConnectionIdleMin(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionIdleMin,
+ descrMetricDbClientConnectionIdleMin,
+ unitMetricDbClientConnectionIdleMin);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientConnectionIdleMin(metrics::Meter *meter)
+{
+ return meter->CreateDoubleUpDownCounter(kMetricDbClientConnectionIdleMin,
+ descrMetricDbClientConnectionIdleMin,
+ unitMetricDbClientConnectionIdleMin);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricDbClientConnectionIdleMin(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionIdleMin,
+ descrMetricDbClientConnectionIdleMin,
+ unitMetricDbClientConnectionIdleMin);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricDbClientConnectionIdleMin(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableUpDownCounter(kMetricDbClientConnectionIdleMin,
+ descrMetricDbClientConnectionIdleMin,
+ unitMetricDbClientConnectionIdleMin);
+}
+
+/**
+ * The maximum number of open connections allowed
+ *
+ * updowncounter
+ */
+static constexpr const char *kMetricDbClientConnectionMax = "db.client.connection.max";
+static constexpr const char *descrMetricDbClientConnectionMax =
+ "The maximum number of open connections allowed";
+static constexpr const char *unitMetricDbClientConnectionMax = "{connection}";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientConnectionMax(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionMax,
+ descrMetricDbClientConnectionMax,
+ unitMetricDbClientConnectionMax);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientConnectionMax(metrics::Meter *meter)
+{
+ return meter->CreateDoubleUpDownCounter(kMetricDbClientConnectionMax,
+ descrMetricDbClientConnectionMax,
+ unitMetricDbClientConnectionMax);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricDbClientConnectionMax(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionMax,
+ descrMetricDbClientConnectionMax,
+ unitMetricDbClientConnectionMax);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricDbClientConnectionMax(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableUpDownCounter(kMetricDbClientConnectionMax,
+ descrMetricDbClientConnectionMax,
+ unitMetricDbClientConnectionMax);
+}
+
+/**
+ * The number of current pending requests for an open connection
+ *
+ * updowncounter
+ */
+static constexpr const char *kMetricDbClientConnectionPendingRequests =
+ "db.client.connection.pending_requests";
+static constexpr const char *descrMetricDbClientConnectionPendingRequests =
+ "The number of current pending requests for an open connection";
+static constexpr const char *unitMetricDbClientConnectionPendingRequests = "{request}";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientConnectionPendingRequests(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionPendingRequests,
+ descrMetricDbClientConnectionPendingRequests,
+ unitMetricDbClientConnectionPendingRequests);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientConnectionPendingRequests(metrics::Meter *meter)
+{
+ return meter->CreateDoubleUpDownCounter(kMetricDbClientConnectionPendingRequests,
+ descrMetricDbClientConnectionPendingRequests,
+ unitMetricDbClientConnectionPendingRequests);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricDbClientConnectionPendingRequests(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionPendingRequests,
+ descrMetricDbClientConnectionPendingRequests,
+ unitMetricDbClientConnectionPendingRequests);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricDbClientConnectionPendingRequests(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableUpDownCounter(kMetricDbClientConnectionPendingRequests,
+ descrMetricDbClientConnectionPendingRequests,
+ unitMetricDbClientConnectionPendingRequests);
+}
+
+/**
+ * The number of connection timeouts that have occurred trying to obtain a connection from the pool
+ *
+ * counter
+ */
+static constexpr const char *kMetricDbClientConnectionTimeouts = "db.client.connection.timeouts";
+static constexpr const char *descrMetricDbClientConnectionTimeouts =
+ "The number of connection timeouts that have occurred trying to obtain a connection from the "
+ "pool";
+static constexpr const char *unitMetricDbClientConnectionTimeouts = "{timeout}";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientConnectionTimeouts(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricDbClientConnectionTimeouts,
+ descrMetricDbClientConnectionTimeouts,
+ unitMetricDbClientConnectionTimeouts);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientConnectionTimeouts(metrics::Meter *meter)
+{
+ return meter->CreateDoubleCounter(kMetricDbClientConnectionTimeouts,
+ descrMetricDbClientConnectionTimeouts,
+ unitMetricDbClientConnectionTimeouts);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricDbClientConnectionTimeouts(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricDbClientConnectionTimeouts,
+ descrMetricDbClientConnectionTimeouts,
+ unitMetricDbClientConnectionTimeouts);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricDbClientConnectionTimeouts(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableCounter(kMetricDbClientConnectionTimeouts,
+ descrMetricDbClientConnectionTimeouts,
+ unitMetricDbClientConnectionTimeouts);
+}
+
+/**
+ * The time between borrowing a connection and returning it to the pool
+ *
+ * histogram
+ */
+static constexpr const char *kMetricDbClientConnectionUseTime = "db.client.connection.use_time";
+static constexpr const char *descrMetricDbClientConnectionUseTime =
+ "The time between borrowing a connection and returning it to the pool";
+static constexpr const char *unitMetricDbClientConnectionUseTime = "s";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientConnectionUseTime(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricDbClientConnectionUseTime,
+ descrMetricDbClientConnectionUseTime,
+ unitMetricDbClientConnectionUseTime);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientConnectionUseTime(metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricDbClientConnectionUseTime,
+ descrMetricDbClientConnectionUseTime,
+ unitMetricDbClientConnectionUseTime);
+}
+
+/**
+ * The time it took to obtain an open connection from the pool
+ *
+ * histogram
+ */
+static constexpr const char *kMetricDbClientConnectionWaitTime = "db.client.connection.wait_time";
+static constexpr const char *descrMetricDbClientConnectionWaitTime =
+ "The time it took to obtain an open connection from the pool";
+static constexpr const char *unitMetricDbClientConnectionWaitTime = "s";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientConnectionWaitTime(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricDbClientConnectionWaitTime,
+ descrMetricDbClientConnectionWaitTime,
+ unitMetricDbClientConnectionWaitTime);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientConnectionWaitTime(metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricDbClientConnectionWaitTime,
+ descrMetricDbClientConnectionWaitTime,
+ unitMetricDbClientConnectionWaitTime);
+}
+
+/**
+ * Deprecated, use @code db.client.connection.create_time @endcode instead. Note: the unit also
+ * changed from @code ms @endcode to @code s @endcode.
+ *
+ * @deprecated
+ * {"note": "Replaced by @code db.client.connection.create_time @endcode. Note: the unit also
+ * changed from @code ms @endcode to @code s @endcode.", "reason": "uncategorized"} histogram
+ */
+OPENTELEMETRY_DEPRECATED static constexpr const char *kMetricDbClientConnectionsCreateTime =
+ "db.client.connections.create_time";
+OPENTELEMETRY_DEPRECATED static constexpr const char *descrMetricDbClientConnectionsCreateTime =
+ "Deprecated, use `db.client.connection.create_time` instead. Note: the unit also changed from "
+ "`ms` to `s`.";
+OPENTELEMETRY_DEPRECATED static constexpr const char *unitMetricDbClientConnectionsCreateTime =
+ "ms";
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientConnectionsCreateTime(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricDbClientConnectionsCreateTime,
+ descrMetricDbClientConnectionsCreateTime,
+ unitMetricDbClientConnectionsCreateTime);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientConnectionsCreateTime(metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricDbClientConnectionsCreateTime,
+ descrMetricDbClientConnectionsCreateTime,
+ unitMetricDbClientConnectionsCreateTime);
+}
+
+/**
+ * Deprecated, use @code db.client.connection.idle.max @endcode instead.
+ *
+ * @deprecated
+ * {"note": "Replaced by @code db.client.connection.idle.max @endcode.", "reason": "uncategorized"}
+ *
+ * updowncounter
+ */
+OPENTELEMETRY_DEPRECATED static constexpr const char *kMetricDbClientConnectionsIdleMax =
+ "db.client.connections.idle.max";
+OPENTELEMETRY_DEPRECATED static constexpr const char *descrMetricDbClientConnectionsIdleMax =
+ "Deprecated, use `db.client.connection.idle.max` instead.";
+OPENTELEMETRY_DEPRECATED static constexpr const char *unitMetricDbClientConnectionsIdleMax =
+ "{connection}";
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientConnectionsIdleMax(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionsIdleMax,
+ descrMetricDbClientConnectionsIdleMax,
+ unitMetricDbClientConnectionsIdleMax);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientConnectionsIdleMax(metrics::Meter *meter)
+{
+ return meter->CreateDoubleUpDownCounter(kMetricDbClientConnectionsIdleMax,
+ descrMetricDbClientConnectionsIdleMax,
+ unitMetricDbClientConnectionsIdleMax);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::shared_ptr
+CreateAsyncInt64MetricDbClientConnectionsIdleMax(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionsIdleMax,
+ descrMetricDbClientConnectionsIdleMax,
+ unitMetricDbClientConnectionsIdleMax);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::shared_ptr
+CreateAsyncDoubleMetricDbClientConnectionsIdleMax(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableUpDownCounter(kMetricDbClientConnectionsIdleMax,
+ descrMetricDbClientConnectionsIdleMax,
+ unitMetricDbClientConnectionsIdleMax);
+}
+
+/**
+ * Deprecated, use @code db.client.connection.idle.min @endcode instead.
+ *
+ * @deprecated
+ * {"note": "Replaced by @code db.client.connection.idle.min @endcode.", "reason": "uncategorized"}
+ *
+ * updowncounter
+ */
+OPENTELEMETRY_DEPRECATED static constexpr const char *kMetricDbClientConnectionsIdleMin =
+ "db.client.connections.idle.min";
+OPENTELEMETRY_DEPRECATED static constexpr const char *descrMetricDbClientConnectionsIdleMin =
+ "Deprecated, use `db.client.connection.idle.min` instead.";
+OPENTELEMETRY_DEPRECATED static constexpr const char *unitMetricDbClientConnectionsIdleMin =
+ "{connection}";
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientConnectionsIdleMin(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionsIdleMin,
+ descrMetricDbClientConnectionsIdleMin,
+ unitMetricDbClientConnectionsIdleMin);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientConnectionsIdleMin(metrics::Meter *meter)
+{
+ return meter->CreateDoubleUpDownCounter(kMetricDbClientConnectionsIdleMin,
+ descrMetricDbClientConnectionsIdleMin,
+ unitMetricDbClientConnectionsIdleMin);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::shared_ptr
+CreateAsyncInt64MetricDbClientConnectionsIdleMin(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionsIdleMin,
+ descrMetricDbClientConnectionsIdleMin,
+ unitMetricDbClientConnectionsIdleMin);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::shared_ptr
+CreateAsyncDoubleMetricDbClientConnectionsIdleMin(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableUpDownCounter(kMetricDbClientConnectionsIdleMin,
+ descrMetricDbClientConnectionsIdleMin,
+ unitMetricDbClientConnectionsIdleMin);
+}
+
+/**
+ * Deprecated, use @code db.client.connection.max @endcode instead.
+ *
+ * @deprecated
+ * {"note": "Replaced by @code db.client.connection.max @endcode.", "reason": "uncategorized"}
+ *
+ * updowncounter
+ */
+OPENTELEMETRY_DEPRECATED static constexpr const char *kMetricDbClientConnectionsMax =
+ "db.client.connections.max";
+OPENTELEMETRY_DEPRECATED static constexpr const char *descrMetricDbClientConnectionsMax =
+ "Deprecated, use `db.client.connection.max` instead.";
+OPENTELEMETRY_DEPRECATED static constexpr const char *unitMetricDbClientConnectionsMax =
+ "{connection}";
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientConnectionsMax(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionsMax,
+ descrMetricDbClientConnectionsMax,
+ unitMetricDbClientConnectionsMax);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientConnectionsMax(metrics::Meter *meter)
+{
+ return meter->CreateDoubleUpDownCounter(kMetricDbClientConnectionsMax,
+ descrMetricDbClientConnectionsMax,
+ unitMetricDbClientConnectionsMax);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::shared_ptr
+CreateAsyncInt64MetricDbClientConnectionsMax(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionsMax,
+ descrMetricDbClientConnectionsMax,
+ unitMetricDbClientConnectionsMax);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::shared_ptr
+CreateAsyncDoubleMetricDbClientConnectionsMax(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableUpDownCounter(kMetricDbClientConnectionsMax,
+ descrMetricDbClientConnectionsMax,
+ unitMetricDbClientConnectionsMax);
+}
+
+/**
+ * Deprecated, use @code db.client.connection.pending_requests @endcode instead.
+ *
+ * @deprecated
+ * {"note": "Replaced by @code db.client.connection.pending_requests @endcode.", "reason":
+ * "uncategorized"} updowncounter
+ */
+OPENTELEMETRY_DEPRECATED static constexpr const char *kMetricDbClientConnectionsPendingRequests =
+ "db.client.connections.pending_requests";
+OPENTELEMETRY_DEPRECATED static constexpr const char
+ *descrMetricDbClientConnectionsPendingRequests =
+ "Deprecated, use `db.client.connection.pending_requests` instead.";
+OPENTELEMETRY_DEPRECATED static constexpr const char *unitMetricDbClientConnectionsPendingRequests =
+ "{request}";
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientConnectionsPendingRequests(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionsPendingRequests,
+ descrMetricDbClientConnectionsPendingRequests,
+ unitMetricDbClientConnectionsPendingRequests);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientConnectionsPendingRequests(metrics::Meter *meter)
+{
+ return meter->CreateDoubleUpDownCounter(kMetricDbClientConnectionsPendingRequests,
+ descrMetricDbClientConnectionsPendingRequests,
+ unitMetricDbClientConnectionsPendingRequests);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::shared_ptr
+CreateAsyncInt64MetricDbClientConnectionsPendingRequests(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionsPendingRequests,
+ descrMetricDbClientConnectionsPendingRequests,
+ unitMetricDbClientConnectionsPendingRequests);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::shared_ptr
+CreateAsyncDoubleMetricDbClientConnectionsPendingRequests(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableUpDownCounter(kMetricDbClientConnectionsPendingRequests,
+ descrMetricDbClientConnectionsPendingRequests,
+ unitMetricDbClientConnectionsPendingRequests);
+}
+
+/**
+ * Deprecated, use @code db.client.connection.timeouts @endcode instead.
+ *
+ * @deprecated
+ * {"note": "Replaced by @code db.client.connection.timeouts @endcode.", "reason": "uncategorized"}
+ *
+ * counter
+ */
+OPENTELEMETRY_DEPRECATED static constexpr const char *kMetricDbClientConnectionsTimeouts =
+ "db.client.connections.timeouts";
+OPENTELEMETRY_DEPRECATED static constexpr const char *descrMetricDbClientConnectionsTimeouts =
+ "Deprecated, use `db.client.connection.timeouts` instead.";
+OPENTELEMETRY_DEPRECATED static constexpr const char *unitMetricDbClientConnectionsTimeouts =
+ "{timeout}";
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientConnectionsTimeouts(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricDbClientConnectionsTimeouts,
+ descrMetricDbClientConnectionsTimeouts,
+ unitMetricDbClientConnectionsTimeouts);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientConnectionsTimeouts(metrics::Meter *meter)
+{
+ return meter->CreateDoubleCounter(kMetricDbClientConnectionsTimeouts,
+ descrMetricDbClientConnectionsTimeouts,
+ unitMetricDbClientConnectionsTimeouts);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::shared_ptr
+CreateAsyncInt64MetricDbClientConnectionsTimeouts(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricDbClientConnectionsTimeouts,
+ descrMetricDbClientConnectionsTimeouts,
+ unitMetricDbClientConnectionsTimeouts);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::shared_ptr
+CreateAsyncDoubleMetricDbClientConnectionsTimeouts(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableCounter(kMetricDbClientConnectionsTimeouts,
+ descrMetricDbClientConnectionsTimeouts,
+ unitMetricDbClientConnectionsTimeouts);
+}
+
+/**
+ * Deprecated, use @code db.client.connection.count @endcode instead.
+ *
+ * @deprecated
+ * {"note": "Replaced by @code db.client.connection.count @endcode.", "reason": "uncategorized"}
+ *
+ * updowncounter
+ */
+OPENTELEMETRY_DEPRECATED static constexpr const char *kMetricDbClientConnectionsUsage =
+ "db.client.connections.usage";
+OPENTELEMETRY_DEPRECATED static constexpr const char *descrMetricDbClientConnectionsUsage =
+ "Deprecated, use `db.client.connection.count` instead.";
+OPENTELEMETRY_DEPRECATED static constexpr const char *unitMetricDbClientConnectionsUsage =
+ "{connection}";
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientConnectionsUsage(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionsUsage,
+ descrMetricDbClientConnectionsUsage,
+ unitMetricDbClientConnectionsUsage);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientConnectionsUsage(metrics::Meter *meter)
+{
+ return meter->CreateDoubleUpDownCounter(kMetricDbClientConnectionsUsage,
+ descrMetricDbClientConnectionsUsage,
+ unitMetricDbClientConnectionsUsage);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::shared_ptr
+CreateAsyncInt64MetricDbClientConnectionsUsage(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionsUsage,
+ descrMetricDbClientConnectionsUsage,
+ unitMetricDbClientConnectionsUsage);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::shared_ptr
+CreateAsyncDoubleMetricDbClientConnectionsUsage(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableUpDownCounter(kMetricDbClientConnectionsUsage,
+ descrMetricDbClientConnectionsUsage,
+ unitMetricDbClientConnectionsUsage);
+}
+
+/**
+ * Deprecated, use @code db.client.connection.use_time @endcode instead. Note: the unit also changed
+ * from @code ms @endcode to @code s @endcode.
+ *
+ * @deprecated
+ * {"note": "Replaced by @code db.client.connection.use_time @endcode. Note: the unit also changed
+ * from @code ms @endcode to @code s @endcode.", "reason": "uncategorized"} histogram
+ */
+OPENTELEMETRY_DEPRECATED static constexpr const char *kMetricDbClientConnectionsUseTime =
+ "db.client.connections.use_time";
+OPENTELEMETRY_DEPRECATED static constexpr const char *descrMetricDbClientConnectionsUseTime =
+ "Deprecated, use `db.client.connection.use_time` instead. Note: the unit also changed from "
+ "`ms` to `s`.";
+OPENTELEMETRY_DEPRECATED static constexpr const char *unitMetricDbClientConnectionsUseTime = "ms";
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientConnectionsUseTime(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricDbClientConnectionsUseTime,
+ descrMetricDbClientConnectionsUseTime,
+ unitMetricDbClientConnectionsUseTime);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientConnectionsUseTime(metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricDbClientConnectionsUseTime,
+ descrMetricDbClientConnectionsUseTime,
+ unitMetricDbClientConnectionsUseTime);
+}
+
+/**
+ * Deprecated, use @code db.client.connection.wait_time @endcode instead. Note: the unit also
+ * changed from @code ms @endcode to @code s @endcode.
+ *
+ * @deprecated
+ * {"note": "Replaced by @code db.client.connection.wait_time @endcode. Note: the unit also changed
+ * from @code ms @endcode to @code s @endcode.", "reason": "uncategorized"} histogram
+ */
+OPENTELEMETRY_DEPRECATED static constexpr const char *kMetricDbClientConnectionsWaitTime =
+ "db.client.connections.wait_time";
+OPENTELEMETRY_DEPRECATED static constexpr const char *descrMetricDbClientConnectionsWaitTime =
+ "Deprecated, use `db.client.connection.wait_time` instead. Note: the unit also changed from "
+ "`ms` to `s`.";
+OPENTELEMETRY_DEPRECATED static constexpr const char *unitMetricDbClientConnectionsWaitTime = "ms";
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientConnectionsWaitTime(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricDbClientConnectionsWaitTime,
+ descrMetricDbClientConnectionsWaitTime,
+ unitMetricDbClientConnectionsWaitTime);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientConnectionsWaitTime(metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricDbClientConnectionsWaitTime,
+ descrMetricDbClientConnectionsWaitTime,
+ unitMetricDbClientConnectionsWaitTime);
+}
+
+/**
+ * Deprecated, use @code azure.cosmosdb.client.active_instance.count @endcode instead.
+ *
+ * @deprecated
+ * {"note": "Replaced by @code azure.cosmosdb.client.active_instance.count @endcode.", "reason":
+ * "uncategorized"} updowncounter
+ */
+OPENTELEMETRY_DEPRECATED static constexpr const char *kMetricDbClientCosmosdbActiveInstanceCount =
+ "db.client.cosmosdb.active_instance.count";
+OPENTELEMETRY_DEPRECATED static constexpr const char
+ *descrMetricDbClientCosmosdbActiveInstanceCount =
+ "Deprecated, use `azure.cosmosdb.client.active_instance.count` instead.";
+OPENTELEMETRY_DEPRECATED static constexpr const char
+ *unitMetricDbClientCosmosdbActiveInstanceCount = "{instance}";
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientCosmosdbActiveInstanceCount(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientCosmosdbActiveInstanceCount,
+ descrMetricDbClientCosmosdbActiveInstanceCount,
+ unitMetricDbClientCosmosdbActiveInstanceCount);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientCosmosdbActiveInstanceCount(metrics::Meter *meter)
+{
+ return meter->CreateDoubleUpDownCounter(kMetricDbClientCosmosdbActiveInstanceCount,
+ descrMetricDbClientCosmosdbActiveInstanceCount,
+ unitMetricDbClientCosmosdbActiveInstanceCount);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::shared_ptr
+CreateAsyncInt64MetricDbClientCosmosdbActiveInstanceCount(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientCosmosdbActiveInstanceCount,
+ descrMetricDbClientCosmosdbActiveInstanceCount,
+ unitMetricDbClientCosmosdbActiveInstanceCount);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::shared_ptr
+CreateAsyncDoubleMetricDbClientCosmosdbActiveInstanceCount(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableUpDownCounter(kMetricDbClientCosmosdbActiveInstanceCount,
+ descrMetricDbClientCosmosdbActiveInstanceCount,
+ unitMetricDbClientCosmosdbActiveInstanceCount);
+}
+
+/**
+ * Deprecated, use @code azure.cosmosdb.client.operation.request_charge @endcode instead.
+ *
+ * @deprecated
+ * {"note": "Replaced by @code azure.cosmosdb.client.operation.request_charge @endcode.", "reason":
+ * "uncategorized"} histogram
+ */
+OPENTELEMETRY_DEPRECATED static constexpr const char
+ *kMetricDbClientCosmosdbOperationRequestCharge = "db.client.cosmosdb.operation.request_charge";
+OPENTELEMETRY_DEPRECATED static constexpr const char
+ *descrMetricDbClientCosmosdbOperationRequestCharge =
+ "Deprecated, use `azure.cosmosdb.client.operation.request_charge` instead.";
+OPENTELEMETRY_DEPRECATED static constexpr const char
+ *unitMetricDbClientCosmosdbOperationRequestCharge = "{request_unit}";
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientCosmosdbOperationRequestCharge(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricDbClientCosmosdbOperationRequestCharge,
+ descrMetricDbClientCosmosdbOperationRequestCharge,
+ unitMetricDbClientCosmosdbOperationRequestCharge);
+}
+
+OPENTELEMETRY_DEPRECATED static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientCosmosdbOperationRequestCharge(metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricDbClientCosmosdbOperationRequestCharge,
+ descrMetricDbClientCosmosdbOperationRequestCharge,
+ unitMetricDbClientCosmosdbOperationRequestCharge);
+}
+
+/**
+ * Duration of database client operations.
+ *
+ * Batch operations SHOULD be recorded as a single operation.
+ *
+ * histogram
+ */
+static constexpr const char *kMetricDbClientOperationDuration = "db.client.operation.duration";
+static constexpr const char *descrMetricDbClientOperationDuration =
+ "Duration of database client operations.";
+static constexpr const char *unitMetricDbClientOperationDuration = "s";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientOperationDuration(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricDbClientOperationDuration,
+ descrMetricDbClientOperationDuration,
+ unitMetricDbClientOperationDuration);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientOperationDuration(metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricDbClientOperationDuration,
+ descrMetricDbClientOperationDuration,
+ unitMetricDbClientOperationDuration);
+}
+
+/**
+ * The actual number of records returned by the database operation.
+ *
+ * histogram
+ */
+static constexpr const char *kMetricDbClientResponseReturnedRows =
+ "db.client.response.returned_rows";
+static constexpr const char *descrMetricDbClientResponseReturnedRows =
+ "The actual number of records returned by the database operation.";
+static constexpr const char *unitMetricDbClientResponseReturnedRows = "{row}";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricDbClientResponseReturnedRows(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricDbClientResponseReturnedRows,
+ descrMetricDbClientResponseReturnedRows,
+ unitMetricDbClientResponseReturnedRows);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricDbClientResponseReturnedRows(metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricDbClientResponseReturnedRows,
+ descrMetricDbClientResponseReturnedRows,
+ unitMetricDbClientResponseReturnedRows);
+}
+
+} // namespace db
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/dns_metrics.h b/api/include/opentelemetry/semconv/dns_metrics.h
new file mode 100644
index 0000000000..019fea6742
--- /dev/null
+++ b/api/include/opentelemetry/semconv/dns_metrics.h
@@ -0,0 +1,49 @@
+/*
+ * 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_metrics-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/metrics/meter.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace dns
+{
+
+/**
+ * Measures the time taken to perform a DNS lookup.
+ *
+ * histogram
+ */
+static constexpr const char *kMetricDnsLookupDuration = "dns.lookup.duration";
+static constexpr const char *descrMetricDnsLookupDuration =
+ "Measures the time taken to perform a DNS lookup.";
+static constexpr const char *unitMetricDnsLookupDuration = "s";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricDnsLookupDuration(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricDnsLookupDuration, descrMetricDnsLookupDuration,
+ unitMetricDnsLookupDuration);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricDnsLookupDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricDnsLookupDuration, descrMetricDnsLookupDuration,
+ unitMetricDnsLookupDuration);
+}
+
+} // namespace dns
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/exception_attributes.h b/api/include/opentelemetry/semconv/exception_attributes.h
index 980e4525f9..61e94d955b 100644
--- a/api/include/opentelemetry/semconv/exception_attributes.h
+++ b/api/include/opentelemetry/semconv/exception_attributes.h
@@ -21,10 +21,10 @@ namespace exception
/**
* Indicates that the exception is escaping the scope of the span.
- *
+ *
* @deprecated
- * It's no longer recommended to record exceptions that are handled and do not escape the scope of a
- * span.
+ * {"note": "It's no longer recommended to record exceptions that are handled and do not escape the
+ * scope of a span.", "reason": "uncategorized"}
*/
OPENTELEMETRY_DEPRECATED static constexpr const char *kExceptionEscaped = "exception.escaped";
diff --git a/api/include/opentelemetry/semconv/faas_metrics.h b/api/include/opentelemetry/semconv/faas_metrics.h
new file mode 100644
index 0000000000..72109d887a
--- /dev/null
+++ b/api/include/opentelemetry/semconv/faas_metrics.h
@@ -0,0 +1,287 @@
+/*
+ * 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_metrics-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/metrics/meter.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace faas
+{
+
+/**
+ * Number of invocation cold starts
+ *
+ * counter
+ */
+static constexpr const char *kMetricFaasColdstarts = "faas.coldstarts";
+static constexpr const char *descrMetricFaasColdstarts = "Number of invocation cold starts";
+static constexpr const char *unitMetricFaasColdstarts = "{coldstart}";
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricFaasColdstarts(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricFaasColdstarts, descrMetricFaasColdstarts,
+ unitMetricFaasColdstarts);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricFaasColdstarts(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleCounter(kMetricFaasColdstarts, descrMetricFaasColdstarts,
+ unitMetricFaasColdstarts);
+}
+
+static inline nostd::shared_ptr CreateAsyncInt64MetricFaasColdstarts(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricFaasColdstarts, descrMetricFaasColdstarts,
+ unitMetricFaasColdstarts);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricFaasColdstarts(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableCounter(kMetricFaasColdstarts, descrMetricFaasColdstarts,
+ unitMetricFaasColdstarts);
+}
+
+/**
+ * Distribution of CPU usage per invocation
+ *
+ * histogram
+ */
+static constexpr const char *kMetricFaasCpuUsage = "faas.cpu_usage";
+static constexpr const char *descrMetricFaasCpuUsage = "Distribution of CPU usage per invocation";
+static constexpr const char *unitMetricFaasCpuUsage = "s";
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricFaasCpuUsage(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricFaasCpuUsage, descrMetricFaasCpuUsage,
+ unitMetricFaasCpuUsage);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricFaasCpuUsage(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricFaasCpuUsage, descrMetricFaasCpuUsage,
+ unitMetricFaasCpuUsage);
+}
+
+/**
+ * Number of invocation errors
+ *
+ * counter
+ */
+static constexpr const char *kMetricFaasErrors = "faas.errors";
+static constexpr const char *descrMetricFaasErrors = "Number of invocation errors";
+static constexpr const char *unitMetricFaasErrors = "{error}";
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricFaasErrors(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricFaasErrors, descrMetricFaasErrors, unitMetricFaasErrors);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricFaasErrors(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleCounter(kMetricFaasErrors, descrMetricFaasErrors, unitMetricFaasErrors);
+}
+
+static inline nostd::shared_ptr CreateAsyncInt64MetricFaasErrors(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricFaasErrors, descrMetricFaasErrors,
+ unitMetricFaasErrors);
+}
+
+static inline nostd::shared_ptr CreateAsyncDoubleMetricFaasErrors(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableCounter(kMetricFaasErrors, descrMetricFaasErrors,
+ unitMetricFaasErrors);
+}
+
+/**
+ * Measures the duration of the function's initialization, such as a cold start
+ *
+ * histogram
+ */
+static constexpr const char *kMetricFaasInitDuration = "faas.init_duration";
+static constexpr const char *descrMetricFaasInitDuration =
+ "Measures the duration of the function's initialization, such as a cold start";
+static constexpr const char *unitMetricFaasInitDuration = "s";
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricFaasInitDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricFaasInitDuration, descrMetricFaasInitDuration,
+ unitMetricFaasInitDuration);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricFaasInitDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricFaasInitDuration, descrMetricFaasInitDuration,
+ unitMetricFaasInitDuration);
+}
+
+/**
+ * Number of successful invocations
+ *
+ * counter
+ */
+static constexpr const char *kMetricFaasInvocations = "faas.invocations";
+static constexpr const char *descrMetricFaasInvocations = "Number of successful invocations";
+static constexpr const char *unitMetricFaasInvocations = "{invocation}";
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricFaasInvocations(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricFaasInvocations, descrMetricFaasInvocations,
+ unitMetricFaasInvocations);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricFaasInvocations(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleCounter(kMetricFaasInvocations, descrMetricFaasInvocations,
+ unitMetricFaasInvocations);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricFaasInvocations(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricFaasInvocations, descrMetricFaasInvocations,
+ unitMetricFaasInvocations);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricFaasInvocations(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableCounter(kMetricFaasInvocations, descrMetricFaasInvocations,
+ unitMetricFaasInvocations);
+}
+
+/**
+ * Measures the duration of the function's logic execution
+ *
+ * histogram
+ */
+static constexpr const char *kMetricFaasInvokeDuration = "faas.invoke_duration";
+static constexpr const char *descrMetricFaasInvokeDuration =
+ "Measures the duration of the function's logic execution";
+static constexpr const char *unitMetricFaasInvokeDuration = "s";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricFaasInvokeDuration(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricFaasInvokeDuration, descrMetricFaasInvokeDuration,
+ unitMetricFaasInvokeDuration);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricFaasInvokeDuration(metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricFaasInvokeDuration, descrMetricFaasInvokeDuration,
+ unitMetricFaasInvokeDuration);
+}
+
+/**
+ * Distribution of max memory usage per invocation
+ *
+ * histogram
+ */
+static constexpr const char *kMetricFaasMemUsage = "faas.mem_usage";
+static constexpr const char *descrMetricFaasMemUsage =
+ "Distribution of max memory usage per invocation";
+static constexpr const char *unitMetricFaasMemUsage = "By";
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricFaasMemUsage(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricFaasMemUsage, descrMetricFaasMemUsage,
+ unitMetricFaasMemUsage);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricFaasMemUsage(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricFaasMemUsage, descrMetricFaasMemUsage,
+ unitMetricFaasMemUsage);
+}
+
+/**
+ * Distribution of net I/O usage per invocation
+ *
+ * histogram
+ */
+static constexpr const char *kMetricFaasNetIo = "faas.net_io";
+static constexpr const char *descrMetricFaasNetIo = "Distribution of net I/O usage per invocation";
+static constexpr const char *unitMetricFaasNetIo = "By";
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricFaasNetIo(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricFaasNetIo, descrMetricFaasNetIo, unitMetricFaasNetIo);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricFaasNetIo(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricFaasNetIo, descrMetricFaasNetIo, unitMetricFaasNetIo);
+}
+
+/**
+ * Number of invocation timeouts
+ *
+ * counter
+ */
+static constexpr const char *kMetricFaasTimeouts = "faas.timeouts";
+static constexpr const char *descrMetricFaasTimeouts = "Number of invocation timeouts";
+static constexpr const char *unitMetricFaasTimeouts = "{timeout}";
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricFaasTimeouts(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricFaasTimeouts, descrMetricFaasTimeouts,
+ unitMetricFaasTimeouts);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricFaasTimeouts(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleCounter(kMetricFaasTimeouts, descrMetricFaasTimeouts,
+ unitMetricFaasTimeouts);
+}
+
+static inline nostd::shared_ptr CreateAsyncInt64MetricFaasTimeouts(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricFaasTimeouts, descrMetricFaasTimeouts,
+ unitMetricFaasTimeouts);
+}
+
+static inline nostd::shared_ptr CreateAsyncDoubleMetricFaasTimeouts(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableCounter(kMetricFaasTimeouts, descrMetricFaasTimeouts,
+ unitMetricFaasTimeouts);
+}
+
+} // namespace faas
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/gen_ai_metrics.h b/api/include/opentelemetry/semconv/gen_ai_metrics.h
new file mode 100644
index 0000000000..437ba4af4a
--- /dev/null
+++ b/api/include/opentelemetry/semconv/gen_ai_metrics.h
@@ -0,0 +1,157 @@
+/*
+ * 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_metrics-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/metrics/meter.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace gen_ai
+{
+
+/**
+ * GenAI operation duration
+ *
+ * histogram
+ */
+static constexpr const char *kMetricGenAiClientOperationDuration =
+ "gen_ai.client.operation.duration";
+static constexpr const char *descrMetricGenAiClientOperationDuration = "GenAI operation duration";
+static constexpr const char *unitMetricGenAiClientOperationDuration = "s";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricGenAiClientOperationDuration(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricGenAiClientOperationDuration,
+ descrMetricGenAiClientOperationDuration,
+ unitMetricGenAiClientOperationDuration);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricGenAiClientOperationDuration(metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricGenAiClientOperationDuration,
+ descrMetricGenAiClientOperationDuration,
+ unitMetricGenAiClientOperationDuration);
+}
+
+/**
+ * Measures number of input and output tokens used
+ *
+ * histogram
+ */
+static constexpr const char *kMetricGenAiClientTokenUsage = "gen_ai.client.token.usage";
+static constexpr const char *descrMetricGenAiClientTokenUsage =
+ "Measures number of input and output tokens used";
+static constexpr const char *unitMetricGenAiClientTokenUsage = "{token}";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricGenAiClientTokenUsage(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricGenAiClientTokenUsage,
+ descrMetricGenAiClientTokenUsage,
+ unitMetricGenAiClientTokenUsage);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricGenAiClientTokenUsage(metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricGenAiClientTokenUsage,
+ descrMetricGenAiClientTokenUsage,
+ unitMetricGenAiClientTokenUsage);
+}
+
+/**
+ * Generative AI server request duration such as time-to-last byte or last output token
+ *
+ * histogram
+ */
+static constexpr const char *kMetricGenAiServerRequestDuration = "gen_ai.server.request.duration";
+static constexpr const char *descrMetricGenAiServerRequestDuration =
+ "Generative AI server request duration such as time-to-last byte or last output token";
+static constexpr const char *unitMetricGenAiServerRequestDuration = "s";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricGenAiServerRequestDuration(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricGenAiServerRequestDuration,
+ descrMetricGenAiServerRequestDuration,
+ unitMetricGenAiServerRequestDuration);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricGenAiServerRequestDuration(metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricGenAiServerRequestDuration,
+ descrMetricGenAiServerRequestDuration,
+ unitMetricGenAiServerRequestDuration);
+}
+
+/**
+ * Time per output token generated after the first token for successful responses
+ *
+ * histogram
+ */
+static constexpr const char *kMetricGenAiServerTimePerOutputToken =
+ "gen_ai.server.time_per_output_token";
+static constexpr const char *descrMetricGenAiServerTimePerOutputToken =
+ "Time per output token generated after the first token for successful responses";
+static constexpr const char *unitMetricGenAiServerTimePerOutputToken = "s";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricGenAiServerTimePerOutputToken(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricGenAiServerTimePerOutputToken,
+ descrMetricGenAiServerTimePerOutputToken,
+ unitMetricGenAiServerTimePerOutputToken);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricGenAiServerTimePerOutputToken(metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricGenAiServerTimePerOutputToken,
+ descrMetricGenAiServerTimePerOutputToken,
+ unitMetricGenAiServerTimePerOutputToken);
+}
+
+/**
+ * Time to generate first token for successful responses
+ *
+ * histogram
+ */
+static constexpr const char *kMetricGenAiServerTimeToFirstToken =
+ "gen_ai.server.time_to_first_token";
+static constexpr const char *descrMetricGenAiServerTimeToFirstToken =
+ "Time to generate first token for successful responses";
+static constexpr const char *unitMetricGenAiServerTimeToFirstToken = "s";
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricGenAiServerTimeToFirstToken(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricGenAiServerTimeToFirstToken,
+ descrMetricGenAiServerTimeToFirstToken,
+ unitMetricGenAiServerTimeToFirstToken);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricGenAiServerTimeToFirstToken(metrics::Meter *meter)
+{
+ return meter->CreateDoubleHistogram(kMetricGenAiServerTimeToFirstToken,
+ descrMetricGenAiServerTimeToFirstToken,
+ unitMetricGenAiServerTimeToFirstToken);
+}
+
+} // namespace gen_ai
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/hw_metrics.h b/api/include/opentelemetry/semconv/hw_metrics.h
new file mode 100644
index 0000000000..225b939e8c
--- /dev/null
+++ b/api/include/opentelemetry/semconv/hw_metrics.h
@@ -0,0 +1,344 @@
+/*
+ * 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_metrics-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/metrics/meter.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace hw
+{
+
+/**
+ * Energy consumed by the component
+ *
+ * counter
+ */
+static constexpr const char *kMetricHwEnergy = "hw.energy";
+static constexpr const char *descrMetricHwEnergy = "Energy consumed by the component";
+static constexpr const char *unitMetricHwEnergy = "J";
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricHwEnergy(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricHwEnergy, descrMetricHwEnergy, unitMetricHwEnergy);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricHwEnergy(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleCounter(kMetricHwEnergy, descrMetricHwEnergy, unitMetricHwEnergy);
+}
+
+static inline nostd::shared_ptr CreateAsyncInt64MetricHwEnergy(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricHwEnergy, descrMetricHwEnergy,
+ unitMetricHwEnergy);
+}
+
+static inline nostd::shared_ptr CreateAsyncDoubleMetricHwEnergy(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableCounter(kMetricHwEnergy, descrMetricHwEnergy,
+ unitMetricHwEnergy);
+}
+
+/**
+ * Number of errors encountered by the component
+ *
+ * counter
+ */
+static constexpr const char *kMetricHwErrors = "hw.errors";
+static constexpr const char *descrMetricHwErrors = "Number of errors encountered by the component";
+static constexpr const char *unitMetricHwErrors = "{error}";
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricHwErrors(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricHwErrors, descrMetricHwErrors, unitMetricHwErrors);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricHwErrors(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleCounter(kMetricHwErrors, descrMetricHwErrors, unitMetricHwErrors);
+}
+
+static inline nostd::shared_ptr CreateAsyncInt64MetricHwErrors(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricHwErrors, descrMetricHwErrors,
+ unitMetricHwErrors);
+}
+
+static inline nostd::shared_ptr CreateAsyncDoubleMetricHwErrors(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableCounter(kMetricHwErrors, descrMetricHwErrors,
+ unitMetricHwErrors);
+}
+
+/**
+ * Ambient (external) temperature of the physical host
+ *
+ * gauge
+ */
+static constexpr const char *kMetricHwHostAmbientTemperature = "hw.host.ambient_temperature";
+static constexpr const char *descrMetricHwHostAmbientTemperature =
+ "Ambient (external) temperature of the physical host";
+static constexpr const char *unitMetricHwHostAmbientTemperature = "Cel";
+
+#if OPENTELEMETRY_ABI_VERSION_NO >= 2
+
+static inline nostd::unique_ptr>
+CreateSyncInt64MetricHwHostAmbientTemperature(metrics::Meter *meter)
+{
+ return meter->CreateInt64Gauge(kMetricHwHostAmbientTemperature,
+ descrMetricHwHostAmbientTemperature,
+ unitMetricHwHostAmbientTemperature);
+}
+
+static inline nostd::unique_ptr>
+CreateSyncDoubleMetricHwHostAmbientTemperature(metrics::Meter *meter)
+{
+ return meter->CreateDoubleGauge(kMetricHwHostAmbientTemperature,
+ descrMetricHwHostAmbientTemperature,
+ unitMetricHwHostAmbientTemperature);
+}
+#endif /* OPENTELEMETRY_ABI_VERSION_NO */
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricHwHostAmbientTemperature(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableGauge(kMetricHwHostAmbientTemperature,
+ descrMetricHwHostAmbientTemperature,
+ unitMetricHwHostAmbientTemperature);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricHwHostAmbientTemperature(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableGauge(kMetricHwHostAmbientTemperature,
+ descrMetricHwHostAmbientTemperature,
+ unitMetricHwHostAmbientTemperature);
+}
+
+/**
+ * Total energy consumed by the entire physical host, in joules
+ *
+ * The overall energy usage of a host MUST be reported using the specific @code hw.host.energy
+ * @endcode and @code hw.host.power @endcode metrics only, instead of the generic
+ * @code hw.energy @endcode and @code hw.power @endcode described in the previous section, to
+ * prevent summing up overlapping values.
counter
+ */
+static constexpr const char *kMetricHwHostEnergy = "hw.host.energy";
+static constexpr const char *descrMetricHwHostEnergy =
+ "Total energy consumed by the entire physical host, in joules";
+static constexpr const char *unitMetricHwHostEnergy = "J";
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricHwHostEnergy(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricHwHostEnergy, descrMetricHwHostEnergy,
+ unitMetricHwHostEnergy);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricHwHostEnergy(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleCounter(kMetricHwHostEnergy, descrMetricHwHostEnergy,
+ unitMetricHwHostEnergy);
+}
+
+static inline nostd::shared_ptr CreateAsyncInt64MetricHwHostEnergy(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricHwHostEnergy, descrMetricHwHostEnergy,
+ unitMetricHwHostEnergy);
+}
+
+static inline nostd::shared_ptr CreateAsyncDoubleMetricHwHostEnergy(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableCounter(kMetricHwHostEnergy, descrMetricHwHostEnergy,
+ unitMetricHwHostEnergy);
+}
+
+/**
+ * By how many degrees Celsius the temperature of the physical host can be increased, before
+ * reaching a warning threshold on one of the internal sensors gauge
+ */
+static constexpr const char *kMetricHwHostHeatingMargin = "hw.host.heating_margin";
+static constexpr const char *descrMetricHwHostHeatingMargin =
+ "By how many degrees Celsius the temperature of the physical host can be increased, before reaching a warning threshold on one of the internal sensors
+ ";
+ static constexpr const char *unitMetricHwHostHeatingMargin = "Cel";
+
+#if OPENTELEMETRY_ABI_VERSION_NO >= 2
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricHwHostHeatingMargin(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64Gauge(kMetricHwHostHeatingMargin, descrMetricHwHostHeatingMargin,
+ unitMetricHwHostHeatingMargin);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricHwHostHeatingMargin(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleGauge(kMetricHwHostHeatingMargin, descrMetricHwHostHeatingMargin,
+ unitMetricHwHostHeatingMargin);
+}
+#endif /* OPENTELEMETRY_ABI_VERSION_NO */
+
+static inline nostd::shared_ptr
+CreateAsyncInt64MetricHwHostHeatingMargin(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableGauge(
+ kMetricHwHostHeatingMargin, descrMetricHwHostHeatingMargin, unitMetricHwHostHeatingMargin);
+}
+
+static inline nostd::shared_ptr
+CreateAsyncDoubleMetricHwHostHeatingMargin(metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableGauge(
+ kMetricHwHostHeatingMargin, descrMetricHwHostHeatingMargin, unitMetricHwHostHeatingMargin);
+}
+
+/**
+ * Instantaneous power consumed by the entire physical host in Watts (@code hw.host.energy @endcode
+ * is preferred) The overall energy usage of a host MUST be reported using the specific @code
+ * hw.host.energy @endcode and @code hw.host.power @endcode metrics only, instead
+ * of the generic @code hw.energy @endcode and @code hw.power @endcode described in the previous
+ * section, to prevent summing up overlapping values.
gauge
+ */
+static constexpr const char *kMetricHwHostPower = "hw.host.power";
+static constexpr const char *descrMetricHwHostPower =
+ "Instantaneous power consumed by the entire physical host in Watts (`hw.host.energy` is preferred)
+ ";
+ static constexpr const char *unitMetricHwHostPower = "W";
+
+#if OPENTELEMETRY_ABI_VERSION_NO >= 2
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricHwHostPower(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64Gauge(kMetricHwHostPower, descrMetricHwHostPower, unitMetricHwHostPower);
+}
+
+static inline nostd::unique_ptr> CreateSyncDoubleMetricHwHostPower(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleGauge(kMetricHwHostPower, descrMetricHwHostPower,
+ unitMetricHwHostPower);
+}
+#endif /* OPENTELEMETRY_ABI_VERSION_NO */
+
+static inline nostd::shared_ptr CreateAsyncInt64MetricHwHostPower(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableGauge(kMetricHwHostPower, descrMetricHwHostPower,
+ unitMetricHwHostPower);
+}
+
+static inline nostd::shared_ptr CreateAsyncDoubleMetricHwHostPower(
+ metrics::Meter *meter)
+{
+ return meter->CreateDoubleObservableGauge(kMetricHwHostPower, descrMetricHwHostPower,
+ unitMetricHwHostPower);
+}
+
+/**
+ * Instantaneous power consumed by the component
+ *
+ * It is recommended to report @code hw.energy @endcode instead of @code hw.power @endcode when
+ * possible.
gauge
+ */
+static constexpr const char *kMetricHwPower = "hw.power";
+static constexpr const char *descrMetricHwPower = "Instantaneous power consumed by the component";
+static constexpr const char *unitMetricHwPower = "W";
+
+#if OPENTELEMETRY_ABI_VERSION_NO >= 2
+
+static inline nostd::unique_ptr> CreateSyncInt64MetricHwPower(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64Gauge(kMetricHwPower, descrMetricHwPower, unitMetricHwPower);
+}
+
+static inline nostd::unique_ptr