Skip to content

Commit 68b0151

Browse files
committed
Add meter scope configurator
1 parent 3ca3c76 commit 68b0151

File tree

12 files changed

+150
-7
lines changed

12 files changed

+150
-7
lines changed

sdk/include/opentelemetry/sdk/metrics/meter.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h"
2020
#include "opentelemetry/sdk/metrics/instrument_metadata_validator.h"
2121
#include "opentelemetry/sdk/metrics/instruments.h"
22+
#include "opentelemetry/sdk/metrics/meter_config.h"
2223
#include "opentelemetry/sdk/metrics/meter_context.h"
2324
#include "opentelemetry/sdk/metrics/state/async_metric_storage.h"
2425
#include "opentelemetry/sdk/resource/resource.h"
@@ -135,6 +136,7 @@ class Meter final : public opentelemetry::metrics::Meter
135136
// meter-context.
136137
std::unique_ptr<sdk::instrumentationscope::InstrumentationScope> scope_;
137138
std::weak_ptr<sdk::metrics::MeterContext> meter_context_;
139+
// MeterConfig meter_config_;
138140
// Mapping between instrument-name and Aggregation Storage.
139141
std::unordered_map<std::string, std::shared_ptr<MetricStorage>> storage_registry_;
140142
std::shared_ptr<ObservableRegistry> observable_registry_;
@@ -144,6 +146,8 @@ class Meter final : public opentelemetry::metrics::Meter
144146
InstrumentDescriptor &instrument_descriptor);
145147
opentelemetry::common::SpinLockMutex storage_lock_;
146148

149+
// static const opentelemetry::metrics::NoopMeter kNoopMeter;
150+
147151
static nostd::shared_ptr<opentelemetry::metrics::ObservableInstrument>
148152
GetNoopObservableInsrument()
149153
{
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
#pragma once
5+
6+
#include "opentelemetry/version.h"
7+
8+
OPENTELEMETRY_BEGIN_NAMESPACE
9+
namespace sdk
10+
{
11+
namespace metrics
12+
{
13+
class MeterConfig
14+
{
15+
public:
16+
bool operator==(const MeterConfig &other) const noexcept;
17+
18+
bool IsEnabled() const noexcept;
19+
20+
static MeterConfig Disabled();
21+
22+
static MeterConfig Enabled();
23+
24+
static MeterConfig Default();
25+
26+
private:
27+
explicit MeterConfig(const bool disabled = false) : disabled_(disabled) {}
28+
bool disabled_;
29+
static const MeterConfig kDefaultConfig;
30+
static const MeterConfig kDisabledConfig;
31+
};
32+
} // namespace metrics
33+
} // namespace sdk
34+
OPENTELEMETRY_END_NAMESPACE

sdk/include/opentelemetry/sdk/metrics/meter_context.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
#include "opentelemetry/nostd/function_ref.h"
1414
#include "opentelemetry/nostd/span.h"
1515
#include "opentelemetry/nostd/string_view.h"
16+
#include "opentelemetry/sdk/instrumentationscope/scope_configurator.h"
17+
#include "opentelemetry/sdk/metrics/meter_config.h"
1618
#include "opentelemetry/sdk/metrics/metric_reader.h"
1719
#include "opentelemetry/sdk/metrics/state/metric_collector.h"
1820
#include "opentelemetry/sdk/metrics/view/instrument_selector.h"
@@ -55,7 +57,11 @@ class MeterContext : public std::enable_shared_from_this<MeterContext>
5557
MeterContext(
5658
std::unique_ptr<ViewRegistry> views = std::unique_ptr<ViewRegistry>(new ViewRegistry()),
5759
const opentelemetry::sdk::resource::Resource &resource =
58-
opentelemetry::sdk::resource::Resource::Create({})) noexcept;
60+
opentelemetry::sdk::resource::Resource::Create({}),
61+
std::unique_ptr<instrumentationscope::ScopeConfigurator<MeterConfig>> meter_configurator =
62+
std::make_unique<instrumentationscope::ScopeConfigurator<MeterConfig>>(
63+
instrumentationscope::ScopeConfigurator<MeterConfig>::Builder(MeterConfig::Default())
64+
.Build())) noexcept;
5965

6066
/**
6167
* Obtain the resource associated with this meter context.
@@ -69,6 +75,8 @@ class MeterContext : public std::enable_shared_from_this<MeterContext>
6975
*/
7076
ViewRegistry *GetViewRegistry() const noexcept;
7177

78+
const instrumentationscope::ScopeConfigurator<MeterConfig> &GetMeterConfigurator() const noexcept;
79+
7280
/**
7381
* NOTE - INTERNAL method, can change in future.
7482
* Process callback for each meter in thread-safe manner
@@ -153,6 +161,7 @@ class MeterContext : public std::enable_shared_from_this<MeterContext>
153161
opentelemetry::sdk::resource::Resource resource_;
154162
std::vector<std::shared_ptr<CollectorHandle>> collectors_;
155163
std::unique_ptr<ViewRegistry> views_;
164+
std::unique_ptr<instrumentationscope::ScopeConfigurator<MeterConfig>> meter_configurator_;
156165
opentelemetry::common::SystemTimestamp sdk_start_ts_;
157166
std::vector<std::shared_ptr<Meter>> meters_;
158167

sdk/include/opentelemetry/sdk/metrics/meter_context_factory.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ class OPENTELEMETRY_EXPORT MeterContextFactory
3232
static std::unique_ptr<MeterContext> Create(
3333
std::unique_ptr<ViewRegistry> views,
3434
const opentelemetry::sdk::resource::Resource &resource);
35+
36+
static std::unique_ptr<MeterContext> Create(
37+
std::unique_ptr<ViewRegistry> views,
38+
const opentelemetry::sdk::resource::Resource &resource,
39+
std::unique_ptr<instrumentationscope::ScopeConfigurator<MeterConfig>> meter_configurator);
3540
};
3641

3742
} // namespace metrics

sdk/include/opentelemetry/sdk/metrics/meter_provider.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
#include "opentelemetry/sdk/resource/resource.h"
2121
#include "opentelemetry/version.h"
2222

23+
#include "opentelemetry/sdk/instrumentationscope/scope_configurator.h"
24+
#include "opentelemetry/sdk/metrics/meter.h"
25+
2326
#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW
2427
# include "opentelemetry/sdk/metrics/exemplar/filter_type.h"
2528
#endif
@@ -40,7 +43,11 @@ class OPENTELEMETRY_EXPORT MeterProvider final : public opentelemetry::metrics::
4043
*/
4144
MeterProvider(
4245
std::unique_ptr<ViewRegistry> views = std::unique_ptr<ViewRegistry>(new ViewRegistry()),
43-
const sdk::resource::Resource &resource = sdk::resource::Resource::Create({})) noexcept;
46+
const sdk::resource::Resource &resource = sdk::resource::Resource::Create({}),
47+
std::unique_ptr<instrumentationscope::ScopeConfigurator<MeterConfig>> meter_configurator =
48+
std::make_unique<instrumentationscope::ScopeConfigurator<MeterConfig>>(
49+
instrumentationscope::ScopeConfigurator<MeterConfig>::Builder(MeterConfig::Default())
50+
.Build())) noexcept;
4451

4552
/**
4653
* Initialize a new meter provider with a specified context

sdk/include/opentelemetry/sdk/metrics/meter_provider_factory.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ class OPENTELEMETRY_EXPORT MeterProviderFactory
3030
std::unique_ptr<ViewRegistry> views,
3131
const opentelemetry::sdk::resource::Resource &resource);
3232

33+
static std::unique_ptr<opentelemetry::sdk::metrics::MeterProvider> Create(
34+
std::unique_ptr<ViewRegistry> views,
35+
const opentelemetry::sdk::resource::Resource &resource,
36+
std::unique_ptr<instrumentationscope::ScopeConfigurator<MeterConfig>> meter_configurator);
37+
3338
static std::unique_ptr<opentelemetry::sdk::metrics::MeterProvider> Create(
3439
std::unique_ptr<sdk::metrics::MeterContext> context);
3540
};

sdk/src/metrics/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ add_library(
88
meter_provider.cc
99
meter_provider_factory.cc
1010
meter.cc
11+
meter_config.cc
1112
meter_context.cc
1213
meter_context_factory.cc
1314
metric_reader.cc

sdk/src/metrics/meter_config.cc

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
#include "opentelemetry/sdk/metrics/meter_config.h"
5+
OPENTELEMETRY_BEGIN_NAMESPACE
6+
namespace sdk
7+
{
8+
namespace metrics
9+
{
10+
11+
const MeterConfig MeterConfig::kDefaultConfig = MeterConfig();
12+
const MeterConfig MeterConfig::kDisabledConfig = MeterConfig(true);
13+
14+
bool MeterConfig::operator==(const MeterConfig &other) const noexcept
15+
{
16+
return disabled_ == other.disabled_;
17+
}
18+
19+
bool MeterConfig::IsEnabled() const noexcept
20+
{
21+
return !disabled_;
22+
}
23+
24+
MeterConfig MeterConfig::Disabled()
25+
{
26+
return kDisabledConfig;
27+
}
28+
29+
MeterConfig MeterConfig::Enabled()
30+
{
31+
return kDefaultConfig;
32+
}
33+
34+
MeterConfig MeterConfig::Default()
35+
{
36+
return kDefaultConfig;
37+
}
38+
39+
} // namespace metrics
40+
} // namespace sdk
41+
OPENTELEMETRY_END_NAMESPACE

sdk/src/metrics/meter_context.cc

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,13 @@ namespace metrics
3535
{
3636

3737
MeterContext::MeterContext(std::unique_ptr<ViewRegistry> views,
38-
const opentelemetry::sdk::resource::Resource &resource) noexcept
39-
: resource_{resource}, views_(std::move(views)), sdk_start_ts_{std::chrono::system_clock::now()}
38+
const opentelemetry::sdk::resource::Resource &resource,
39+
std::unique_ptr<instrumentationscope::ScopeConfigurator<MeterConfig>>
40+
meter_configurator) noexcept
41+
: resource_{resource},
42+
views_(std::move(views)),
43+
sdk_start_ts_{std::chrono::system_clock::now()},
44+
meter_configurator_(std::move(meter_configurator))
4045
{}
4146

4247
const resource::Resource &MeterContext::GetResource() const noexcept
@@ -49,6 +54,12 @@ ViewRegistry *MeterContext::GetViewRegistry() const noexcept
4954
return views_.get();
5055
}
5156

57+
const instrumentationscope::ScopeConfigurator<MeterConfig> &MeterContext::GetMeterConfigurator()
58+
const noexcept
59+
{
60+
return *meter_configurator_;
61+
}
62+
5263
bool MeterContext::ForEachMeter(
5364
nostd::function_ref<bool(std::shared_ptr<Meter> &meter)> callback) noexcept
5465
{

sdk/src/metrics/meter_context_factory.cc

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,19 @@ std::unique_ptr<MeterContext> MeterContextFactory::Create(
3333
std::unique_ptr<ViewRegistry> views,
3434
const opentelemetry::sdk::resource::Resource &resource)
3535
{
36-
std::unique_ptr<MeterContext> context(new MeterContext(std::move(views), resource));
36+
auto meter_configurator = std::make_unique<instrumentationscope::ScopeConfigurator<MeterConfig>>(
37+
instrumentationscope::ScopeConfigurator<MeterConfig>::Builder(MeterConfig::Default())
38+
.Build());
39+
return Create(std::move(views), resource, std::move(meter_configurator));
40+
}
41+
42+
std::unique_ptr<MeterContext> MeterContextFactory::Create(
43+
std::unique_ptr<ViewRegistry> views,
44+
const opentelemetry::sdk::resource::Resource &resource,
45+
std::unique_ptr<instrumentationscope::ScopeConfigurator<MeterConfig>> meter_configurator)
46+
{
47+
std::unique_ptr<MeterContext> context(
48+
new MeterContext(std::move(views), resource, std::move(meter_configurator)));
3749
return context;
3850
}
3951

0 commit comments

Comments
 (0)