Skip to content

Commit cbce85f

Browse files
authored
Merge pull request #632 from albertored/spec-compliance
Improve spec compliance
2 parents 311948a + 750e47a commit cbce85f

File tree

13 files changed

+142
-35
lines changed

13 files changed

+142
-35
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3636
- [Allow to create observable instruments without passing callback
3737
arguments](https://github.com/open-telemetry/opentelemetry-erlang/pull/604)
3838
- [Allow to give `advisory_params` to instrument creation functions](https://github.com/open-telemetry/opentelemetry-erlang/pull/628)
39+
- [Attributes are optional in Counter.add(), UpDownCounter.add() and Histo.record()](https://github.com/open-telemetry/opentelemetry-erlang/pull/632)
3940

4041
## Experimental SDK
4142

@@ -55,6 +56,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
5556

5657
- [Correctly record histogram values greater than last boundary](https://github.com/open-telemetry/opentelemetry-erlang/pull/614)
5758
- [Readers should use a default cumulative temporality if not specified](https://github.com/open-telemetry/opentelemetry-erlang/pull/613)
59+
- [Check for positive data values in counters and histograms](https://github.com/open-telemetry/opentelemetry-erlang/pull/632)
5860

5961
## SDK 1.3.1 - 2023-08-15
6062

apps/opentelemetry_api_experimental/include/otel_meter.hrl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,21 @@
2525
-define(create_observable_updowncounter(Name, Callback, CallbackArgs, Opts),
2626
otel_meter:create_observable_updowncounter(?current_meter, Name, Callback, CallbackArgs, Opts)).
2727

28+
-define(counter_add(Name, Number),
29+
otel_counter:add(?current_meter, Name, Number)).
30+
2831
-define(counter_add(Name, Number, Attributes),
2932
otel_counter:add(?current_meter, Name, Number, Attributes)).
3033

34+
-define(updown_counter_add(Name, Number),
35+
otel_updown_counter:add(?current_meter, Name, Number)).
36+
3137
-define(updown_counter_add(Name, Number, Attributes),
3238
otel_updown_counter:add(?current_meter, Name, Number, Attributes)).
3339

40+
-define(histogram_record(Name, Number),
41+
otel_histogram:record(?current_meter, Name, Number)).
42+
3443
-define(histogram_record(Name, Number, Attributes),
3544
otel_histogram:record(?current_meter, Name, Number, Attributes)).
3645

apps/opentelemetry_api_experimental/lib/open_telemetry/counter.ex

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,16 @@ defmodule OpenTelemetryAPIExperimental.Counter do
1313
end
1414
end
1515

16+
defmacro add(name, number) do
17+
quote bind_quoted: [name: name, number: number] do
18+
:otel_counter.add(
19+
:opentelemetry_experimental.get_meter(:opentelemetry.get_application_scope(__MODULE__)),
20+
name,
21+
number
22+
)
23+
end
24+
end
25+
1626
defmacro add(name, number, attributes) do
1727
quote bind_quoted: [name: name, number: number, attributes: attributes] do
1828
:otel_counter.add(

apps/opentelemetry_api_experimental/lib/open_telemetry/histogram.ex

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,16 @@ defmodule OpenTelemetryAPIExperimental.Histogram do
1313
end
1414
end
1515

16+
defmacro record(name, number) do
17+
quote bind_quoted: [name: name, number: number] do
18+
:otel_histogram.record(
19+
:opentelemetry_experimental.get_meter(:opentelemetry.get_application_scope(__MODULE__)),
20+
name,
21+
number
22+
)
23+
end
24+
end
25+
1626
defmacro record(name, number, attributes) do
1727
quote bind_quoted: [name: name, number: number, attributes: attributes] do
1828
:otel_histogram.record(

apps/opentelemetry_api_experimental/lib/open_telemetry/updown_counter.ex

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,16 @@ defmodule OpenTelemetryAPIExperimental.UpDownCounter do
1313
end
1414
end
1515

16+
defmacro add(name, number) do
17+
quote bind_quoted: [name: name, number: number] do
18+
:otel_updown_counter.add(
19+
:opentelemetry_experimental.get_meter(:opentelemetry.get_application_scope(__MODULE__)),
20+
name,
21+
number
22+
)
23+
end
24+
end
25+
1626
defmacro add(name, number, attributes) do
1727
quote bind_quoted: [name: name, number: number, attributes: attributes] do
1828
:otel_updown_counter.add(

apps/opentelemetry_api_experimental/src/otel_counter.erl

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
-module(otel_counter).
2020

2121
-export([create/3,
22+
add/2,
2223
add/3,
2324
add/4]).
2425

@@ -32,10 +33,20 @@
3233
create(Meter, Name, Opts) ->
3334
otel_meter:create_counter(Meter, Name, Opts).
3435

35-
-spec add(otel_meter:t(), otel_instrument:name(), pos_integer() |float(), opentelemetry:attributes_map()) -> ok.
36-
add(Meter, Name, Number, Attributes) ->
37-
otel_meter:record(Meter, Name, Number, Attributes).
36+
-spec add(otel_instrument:t(), pos_integer() | float()) -> ok.
37+
add(Instrument=#instrument{module=Module}, Number) ->
38+
Module:record(Instrument, Number).
3839

39-
-spec add(otel_instrument:t(), pos_integer() |float(), opentelemetry:attributes_map()) -> ok.
40+
-spec add(
41+
otel_meter:t() | otel_instrument:t(),
42+
otel_instrument:name() | pos_integer() | float(),
43+
pos_integer() | float() | opentelemetry:attributes_map()) -> ok.
4044
add(Instrument=#instrument{module=Module}, Number, Attributes) ->
41-
Module:record(Instrument, Number, Attributes).
45+
Module:record(Instrument, Number, Attributes);
46+
47+
add(Meter, Name, Number) ->
48+
otel_meter:record(Meter, Name, Number).
49+
50+
-spec add(otel_meter:t(), otel_instrument:name(), pos_integer() |float(), opentelemetry:attributes_map()) -> ok.
51+
add(Meter, Name, Number, Attributes) ->
52+
otel_meter:record(Meter, Name, Number, Attributes).

apps/opentelemetry_api_experimental/src/otel_histogram.erl

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
-module(otel_histogram).
2121

2222
-export([create/3,
23+
record/2,
2324
record/3,
2425
record/4]).
2526

@@ -33,10 +34,20 @@
3334
create(Meter, Name, Opts) ->
3435
otel_meter:create_histogram(Meter, Name, Opts).
3536

36-
-spec record(otel_meter:t(), otel_instrument:name(), pos_integer() | float(), opentelemetry:attributes_map()) -> ok.
37-
record(Meter, Name, Number, Attributes) ->
38-
otel_meter:record(Meter, Name, Number, Attributes).
37+
-spec record(otel_instrument:t(), pos_integer() | float()) -> ok.
38+
record(Instrument=#instrument{module=Module}, Number) ->
39+
Module:record(Instrument, Number).
3940

40-
-spec record(otel_instrument:t(), pos_integer() | float(), opentelemetry:attributes_map()) -> ok.
41+
-spec record(
42+
otel_meter:t() | otel_instrument:t(),
43+
otel_instrument:name() | pos_integer() | float(),
44+
pos_integer() | float() | opentelemetry:attributes_map()) -> ok.
4145
record(Instrument=#instrument{module=Module}, Number, Attributes) ->
42-
Module:record(Instrument, Number, Attributes).
46+
Module:record(Instrument, Number, Attributes);
47+
48+
record(Meter, Name, Number) ->
49+
otel_meter:record(Meter, Name, Number).
50+
51+
-spec record(otel_meter:t(), otel_instrument:name(), pos_integer() | float(), opentelemetry:attributes_map()) -> ok.
52+
record(Meter, Name, Number, Attributes) ->
53+
otel_meter:record(Meter, Name, Number, Attributes).

apps/opentelemetry_api_experimental/src/otel_meter.erl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434

3535
lookup_instrument/2,
3636

37+
record/3,
3738
record/4]).
3839

3940
-include("otel_metrics.hrl").
@@ -169,5 +170,8 @@ lookup_instrument(Meter={Module, _}, Name) ->
169170
register_callback(Meter={Module, _}, Instruments, Callback, CallbackArgs) ->
170171
Module:register_callback(Meter, Instruments, Callback, CallbackArgs).
171172

173+
record(Meter={Module, _}, Name, Number) ->
174+
Module:record(Meter, Name, Number).
175+
172176
record(Meter={Module, _}, Name, Number, Attributes) ->
173177
Module:record(Meter, Name, Number, Attributes).

apps/opentelemetry_api_experimental/src/otel_updown_counter.erl

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
-module(otel_updown_counter).
2020

2121
-export([create/3,
22+
add/2,
2223
add/3,
2324
add/4]).
2425

@@ -32,10 +33,20 @@
3233
create(Meter, Name, Opts) ->
3334
otel_meter:create_updown_counter(Meter, Name, Opts).
3435

35-
-spec add(otel_meter:t(), otel_instrument:name(), number(), opentelemetry:attributes_map()) -> ok.
36-
add(Meter, Name, Number, Attributes) ->
37-
otel_meter:record(Meter, Name, Number, Attributes).
36+
-spec add(otel_instrument:t(), number()) -> ok.
37+
add(Instrument=#instrument{module=Module}, Number) ->
38+
Module:record(Instrument, Number).
3839

39-
-spec add(otel_instrument:t(), number(), opentelemetry:attributes_map()) -> ok.
40+
-spec add(
41+
otel_meter:t() | otel_instrument:t(),
42+
otel_instrument:name() | number(),
43+
number() | opentelemetry:attributes_map()) -> ok.
4044
add(Instrument=#instrument{module=Module}, Number, Attributes) ->
41-
Module:record(Instrument, Number, Attributes).
45+
Module:record(Instrument, Number, Attributes);
46+
47+
add(Meter, Name, Number) ->
48+
otel_meter:record(Meter, Name, Number).
49+
50+
-spec add(otel_meter:t(), otel_instrument:name(), number(), opentelemetry:attributes_map()) -> ok.
51+
add(Meter, Name, Number, Attributes) ->
52+
otel_meter:record(Meter, Name, Number, Attributes).

apps/opentelemetry_experimental/src/otel_aggregation_sum.erl

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,8 @@ init(#view_aggregation{name=Name,
4444
float_value=0.0}.
4545

4646
aggregate(Tab, #view_aggregation{name=Name,
47-
reader=ReaderId,
48-
is_monotonic=IsMonotonic}, Value, Attributes)
49-
when is_integer(Value) andalso
50-
((IsMonotonic andalso Value >= 0) orelse not IsMonotonic) ->
47+
reader=ReaderId}, Value, Attributes)
48+
when is_integer(Value) ->
5149
Key = {Name, Attributes, ReaderId},
5250
try
5351
_ = ets:update_counter(Tab, Key, {#sum_aggregation.int_value, Value}),
@@ -65,9 +63,7 @@ aggregate(Tab, #view_aggregation{name=Name,
6563
false
6664
end;
6765
aggregate(Tab, #view_aggregation{name=Name,
68-
reader=ReaderId,
69-
is_monotonic=IsMonotonic}, Value, Attributes)
70-
when (IsMonotonic andalso Value >= 0.0) orelse not IsMonotonic ->
66+
reader=ReaderId}, Value, Attributes) ->
7167
Key = {Name, Attributes, ReaderId},
7268
MS = [{#sum_aggregation{key=Key,
7369
start_time='$1',
@@ -84,10 +80,7 @@ aggregate(Tab, #view_aggregation{name=Name,
8480
previous_checkpoint='$6',
8581
int_value='$3',
8682
float_value={'+', '$4', {const, Value}}}}]}],
87-
1 =:= ets:select_replace(Tab, MS);
88-
aggregate(_Tab, #view_aggregation{name=_Name,
89-
is_monotonic=_IsMonotonic}, _Value, _) ->
90-
false.
83+
1 =:= ets:select_replace(Tab, MS).
9184

9285
checkpoint(Tab, #view_aggregation{name=Name,
9386
reader=ReaderId,

0 commit comments

Comments
 (0)