Current section

Files

Jump to
opentelemetry_api src ot_meter.erl
Raw

src/ot_meter.erl

%%%------------------------------------------------------------------------
%% Copyright 2019, OpenTelemetry Authors
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
%%
%% @doc
%% @end
%%%-------------------------------------------------------------------------
-module(ot_meter).
-callback new_instruments(opentelemetry:meter(), [instrument_opts()]) -> boolean().
-callback record(opentelemetry:meter(), term (), number()) -> ok.
-callback record(opentelemetry:meter(), name(), label_set(), number()) -> ok.
-callback record_batch(opentelemetry:meter(), [{instrument(), number()}], label_set()) -> ok.
-callback bind(opentelemetry:meter(), instrument(), label_set()) -> term().
-callback release(opentelemetry:meter(), term()) -> ok.
-callback register_observer(opentelemetry:meter(), ot_meter:name(), ot_observer:callback()) -> ok | unknown_instrument.
-callback set_observer_callback(opentelemetry:meter(), ot_meter:name(), ot_observer:callback()) -> ok | unknown_instrument.
-callback observe(ot_observer:observer_result(), number(), label_set()) -> ok.
-export([new_instruments/2,
bind/3,
release/1,
record/2,
record/4,
record_batch/3,
register_observer/3,
set_observer_callback/3,
observe/3]).
-type label_key() :: unicode:unicode_binary().
-type label_value() :: unicode:unicode_binary().
-type label_set() :: [{label_key(), label_value()}].
-type name() :: unicode:unicode_binary().
-type key() :: {name(), label_set()}.
-type description() :: unicode:unicode_binary().
-type instrument_kind() :: counter | observer | measure.
-type unit() :: atom().
-type input_type() :: integer | float.
-type instrument_opts() :: #{name := name(),
description => description(),
kind := instrument_kind(),
type => input_type(),
label_keys => [label_key()],
unit => unit()}.
-type instrument() :: term().
-type bound_instrument() :: {opentelemetry:meter(), term()}.
-type measurement() :: {bound_instrument() | name(), number()}.
-export_type([key/0,
name/0,
description/0,
instrument_kind/0,
input_type/0,
unit/0,
measurement/0,
label_set/0]).
-spec new_instruments(opentelemetry:meter(), [instrument_opts()]) -> boolean().
new_instruments(Meter={Module, _}, List) ->
Module:new_instruments(Meter, List).
-spec bind(opentelemetry:meter(), name(), label_set()) -> bound_instrument().
bind(Meter={Module, _}, Name, LabelSet) ->
{Meter, Module:bind(Meter, Name, LabelSet)}.
-spec release(bound_instrument()) -> ok.
release({Meter={Module, _}, BoundInstrument}) ->
Module:release(Meter, BoundInstrument).
-spec record(opentelemetry:meter(), name(), number(), label_set()) -> ok.
record(Meter={Module, _}, Name, Number, LabelSet) ->
Module:record(Meter, Name, LabelSet, Number).
-spec record(bound_instrument(), number()) -> ok.
record({Meter={Module, _}, BoundInstrument}, Number) ->
Module:record(Meter, BoundInstrument, Number).
-spec record_batch(opentelemetry:meter(), label_set(), [measurement()]) -> ok.
record_batch(Meter={Module, _}, LabelSet, Measurements) ->
Module:record_batch(Meter, LabelSet, Measurements).
-spec register_observer(opentelemetry:meter(), ot_meter:name(), ot_observer:callback())
-> ok | unknown_instrument.
register_observer(Meter={Module, _}, Name, Callback) ->
Module:register_observer(Meter, Name, Callback).
-spec set_observer_callback(opentelemetry:meter(), ot_meter:name(), ot_observer:callback())
-> ok | unknown_instrument.
set_observer_callback(Meter={Module, _}, Name, Callback) ->
Module:set_observer_callback(Meter, Name, Callback).
-spec observe(ot_observer:observer_result(), number(), label_set()) -> ok.
observe({Module, Instrument}, Number, LabelSet) ->
Module:observe(Instrument, Number, LabelSet).