1 // Copyright The OpenTelemetry Authors
2 // SPDX-License-Identifier: Apache-2.0
5 #ifndef ENABLE_METRICS_PREVIEW
6 # include "opentelemetry/common/key_value_iterable.h"
7 # include "opentelemetry/metrics/sync_instruments.h"
8 # include "opentelemetry/nostd/string_view.h"
9 # include "opentelemetry/sdk/metrics/instruments.h"
11 # include "opentelemetry/sdk/instrumentationlibrary/instrumentation_library.h"
13 OPENTELEMETRY_BEGIN_NAMESPACE
19 // forward declaration
20 class WritableMetricStorage
;
25 Synchronous(InstrumentDescriptor instrument_descriptor
,
26 std::unique_ptr
<WritableMetricStorage
> storage
)
27 : instrument_descriptor_(instrument_descriptor
), storage_(std::move(storage
))
31 InstrumentDescriptor instrument_descriptor_
;
32 std::unique_ptr
<WritableMetricStorage
> storage_
;
35 class LongCounter
: public Synchronous
, public opentelemetry::metrics::Counter
<long>
38 LongCounter(InstrumentDescriptor instrument_descriptor
,
39 std::unique_ptr
<WritableMetricStorage
> storage
);
41 void Add(long value
, const opentelemetry::common::KeyValueIterable
&attributes
) noexcept override
;
43 const opentelemetry::common::KeyValueIterable
&attributes
,
44 const opentelemetry::context::Context
&context
) noexcept override
;
46 void Add(long value
) noexcept override
;
47 void Add(long value
, const opentelemetry::context::Context
&context
) noexcept override
;
50 class DoubleCounter
: public Synchronous
, public opentelemetry::metrics::Counter
<double>
54 DoubleCounter(InstrumentDescriptor instrument_descriptor
,
55 std::unique_ptr
<WritableMetricStorage
> storage
);
57 void Add(double value
,
58 const opentelemetry::common::KeyValueIterable
&attributes
) noexcept override
;
59 void Add(double value
,
60 const opentelemetry::common::KeyValueIterable
&attributes
,
61 const opentelemetry::context::Context
&context
) noexcept override
;
63 void Add(double value
) noexcept override
;
64 void Add(double value
, const opentelemetry::context::Context
&context
) noexcept override
;
67 class LongUpDownCounter
: public Synchronous
, public opentelemetry::metrics::UpDownCounter
<long>
70 LongUpDownCounter(InstrumentDescriptor instrument_descriptor
,
71 std::unique_ptr
<WritableMetricStorage
> storage
);
73 void Add(long value
, const opentelemetry::common::KeyValueIterable
&attributes
) noexcept override
;
75 const opentelemetry::common::KeyValueIterable
&attributes
,
76 const opentelemetry::context::Context
&context
) noexcept override
;
78 void Add(long value
) noexcept override
;
79 void Add(long value
, const opentelemetry::context::Context
&context
) noexcept override
;
82 class DoubleUpDownCounter
: public Synchronous
, public opentelemetry::metrics::UpDownCounter
<double>
85 DoubleUpDownCounter(InstrumentDescriptor instrument_descriptor
,
86 std::unique_ptr
<WritableMetricStorage
> storage
);
88 void Add(double value
,
89 const opentelemetry::common::KeyValueIterable
&attributes
) noexcept override
;
90 void Add(double value
,
91 const opentelemetry::common::KeyValueIterable
&attributes
,
92 const opentelemetry::context::Context
&context
) noexcept override
;
94 void Add(double value
) noexcept override
;
95 void Add(double value
, const opentelemetry::context::Context
&context
) noexcept override
;
98 class LongHistogram
: public Synchronous
, public opentelemetry::metrics::Histogram
<long>
101 LongHistogram(InstrumentDescriptor instrument_descriptor
,
102 std::unique_ptr
<WritableMetricStorage
> storage
);
104 void Record(long value
,
105 const opentelemetry::common::KeyValueIterable
&attributes
,
106 const opentelemetry::context::Context
&context
) noexcept override
;
108 void Record(long value
, const opentelemetry::context::Context
&context
) noexcept override
;
111 class DoubleHistogram
: public Synchronous
, public opentelemetry::metrics::Histogram
<double>
114 DoubleHistogram(InstrumentDescriptor instrument_descriptor
,
115 std::unique_ptr
<WritableMetricStorage
> storage
);
117 void Record(double value
,
118 const opentelemetry::common::KeyValueIterable
&attributes
,
119 const opentelemetry::context::Context
&context
) noexcept override
;
121 void Record(double value
, const opentelemetry::context::Context
&context
) noexcept override
;
124 } // namespace metrics
126 OPENTELEMETRY_END_NAMESPACE