mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2024-11-30 15:42:46 +00:00
97 lines
3.2 KiB
Go
97 lines
3.2 KiB
Go
|
// 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 x contains support for OTel metric SDK experimental features.
|
||
|
//
|
||
|
// This package should only be used for features defined in the specification.
|
||
|
// It should not be used for experiments or new project ideas.
|
||
|
package x // import "go.opentelemetry.io/otel/sdk/metric/internal/x"
|
||
|
|
||
|
import (
|
||
|
"os"
|
||
|
"strconv"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
// Exemplars is an experimental feature flag that defines if exemplars
|
||
|
// should be recorded for metric data-points.
|
||
|
//
|
||
|
// To enable this feature set the OTEL_GO_X_EXEMPLAR environment variable
|
||
|
// to the case-insensitive string value of "true" (i.e. "True" and "TRUE"
|
||
|
// will also enable this).
|
||
|
Exemplars = newFeature("EXEMPLAR", func(v string) (string, bool) {
|
||
|
if strings.ToLower(v) == "true" {
|
||
|
return v, true
|
||
|
}
|
||
|
return "", false
|
||
|
})
|
||
|
|
||
|
// CardinalityLimit is an experimental feature flag that defines if
|
||
|
// cardinality limits should be applied to the recorded metric data-points.
|
||
|
//
|
||
|
// To enable this feature set the OTEL_GO_X_CARDINALITY_LIMIT environment
|
||
|
// variable to the integer limit value you want to use.
|
||
|
//
|
||
|
// Setting OTEL_GO_X_CARDINALITY_LIMIT to a value less than or equal to 0
|
||
|
// will disable the cardinality limits.
|
||
|
CardinalityLimit = newFeature("CARDINALITY_LIMIT", func(v string) (int, bool) {
|
||
|
n, err := strconv.Atoi(v)
|
||
|
if err != nil {
|
||
|
return 0, false
|
||
|
}
|
||
|
return n, true
|
||
|
})
|
||
|
)
|
||
|
|
||
|
// Feature is an experimental feature control flag. It provides a uniform way
|
||
|
// to interact with these feature flags and parse their values.
|
||
|
type Feature[T any] struct {
|
||
|
key string
|
||
|
parse func(v string) (T, bool)
|
||
|
}
|
||
|
|
||
|
func newFeature[T any](suffix string, parse func(string) (T, bool)) Feature[T] {
|
||
|
const envKeyRoot = "OTEL_GO_X_"
|
||
|
return Feature[T]{
|
||
|
key: envKeyRoot + suffix,
|
||
|
parse: parse,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Key returns the environment variable key that needs to be set to enable the
|
||
|
// feature.
|
||
|
func (f Feature[T]) Key() string { return f.key }
|
||
|
|
||
|
// Lookup returns the user configured value for the feature and true if the
|
||
|
// user has enabled the feature. Otherwise, if the feature is not enabled, a
|
||
|
// zero-value and false are returned.
|
||
|
func (f Feature[T]) Lookup() (v T, ok bool) {
|
||
|
// https://github.com/open-telemetry/opentelemetry-specification/blob/62effed618589a0bec416a87e559c0a9d96289bb/specification/configuration/sdk-environment-variables.md#parsing-empty-value
|
||
|
//
|
||
|
// > The SDK MUST interpret an empty value of an environment variable the
|
||
|
// > same way as when the variable is unset.
|
||
|
vRaw := os.Getenv(f.key)
|
||
|
if vRaw == "" {
|
||
|
return v, ok
|
||
|
}
|
||
|
return f.parse(vRaw)
|
||
|
}
|
||
|
|
||
|
// Enabled returns if the feature is enabled.
|
||
|
func (f Feature[T]) Enabled() bool {
|
||
|
_, ok := f.Lookup()
|
||
|
return ok
|
||
|
}
|