// Copyright The 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.

// Package metric provides support for reporting measurements using instruments.
//
// Instruments are categorized as below:
//
// Synchronous instruments are called by the user with a Context.
// Asynchronous instruments are called by the SDK during collection.
//
// Additive instruments are semantically intended for capturing a sum.
// Non-additive instruments are intended for capturing a distribution.
//
// Additive instruments may be monotonic, in which case they are
// non-descreasing and naturally define a rate.
//
// The synchronous instrument names are:
//
//   Counter:           additive, monotonic
//   UpDownCounter:     additive
//   ValueRecorder:     non-additive
//
// and the asynchronous instruments are:
//
//   SumObserver:       additive, monotonic
//   UpDownSumObserver: additive
//   ValueObserver:     non-additive
//
// All instruments are provided with support for either float64 or
// int64 input values.
//
// The Meter interface supports allocating new instruments as well as
// interfaces for recording batches of synchronous measurements or
// asynchronous observations.  To obtain a Meter, use a MeterProvider.
//
// The MeterProvider interface supports obtaining a named Meter interface. To
// obtain a MeterProvider implementation, initialize and configure any
// compatible SDK.
package metric // import "go.opentelemetry.io/otel/api/metric"
