mirror of
https://github.com/1Password/onepassword-operator.git
synced 2025-10-23 07:58:04 +00:00
Initial 1Password Operator commit
This commit is contained in:
28
vendor/github.com/uber/jaeger-lib/metrics/counter.go
generated
vendored
Normal file
28
vendor/github.com/uber/jaeger-lib/metrics/counter.go
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
// Copyright (c) 2017 Uber Technologies, Inc.
|
||||
//
|
||||
// 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 metrics
|
||||
|
||||
// Counter tracks the number of times an event has occurred
|
||||
type Counter interface {
|
||||
// Inc adds the given value to the counter.
|
||||
Inc(int64)
|
||||
}
|
||||
|
||||
// NullCounter counter that does nothing
|
||||
var NullCounter Counter = nullCounter{}
|
||||
|
||||
type nullCounter struct{}
|
||||
|
||||
func (nullCounter) Inc(int64) {}
|
78
vendor/github.com/uber/jaeger-lib/metrics/factory.go
generated
vendored
Normal file
78
vendor/github.com/uber/jaeger-lib/metrics/factory.go
generated
vendored
Normal file
@@ -0,0 +1,78 @@
|
||||
// Copyright (c) 2017 Uber Technologies, Inc.
|
||||
//
|
||||
// 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 metrics
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// NSOptions defines the name and tags map associated with a factory namespace
|
||||
type NSOptions struct {
|
||||
Name string
|
||||
Tags map[string]string
|
||||
}
|
||||
|
||||
// Options defines the information associated with a metric
|
||||
type Options struct {
|
||||
Name string
|
||||
Tags map[string]string
|
||||
Help string
|
||||
}
|
||||
|
||||
// TimerOptions defines the information associated with a metric
|
||||
type TimerOptions struct {
|
||||
Name string
|
||||
Tags map[string]string
|
||||
Help string
|
||||
Buckets []time.Duration
|
||||
}
|
||||
|
||||
// HistogramOptions defines the information associated with a metric
|
||||
type HistogramOptions struct {
|
||||
Name string
|
||||
Tags map[string]string
|
||||
Help string
|
||||
Buckets []float64
|
||||
}
|
||||
|
||||
// Factory creates new metrics
|
||||
type Factory interface {
|
||||
Counter(metric Options) Counter
|
||||
Timer(metric TimerOptions) Timer
|
||||
Gauge(metric Options) Gauge
|
||||
Histogram(metric HistogramOptions) Histogram
|
||||
|
||||
// Namespace returns a nested metrics factory.
|
||||
Namespace(scope NSOptions) Factory
|
||||
}
|
||||
|
||||
// NullFactory is a metrics factory that returns NullCounter, NullTimer, and NullGauge.
|
||||
var NullFactory Factory = nullFactory{}
|
||||
|
||||
type nullFactory struct{}
|
||||
|
||||
func (nullFactory) Counter(options Options) Counter {
|
||||
return NullCounter
|
||||
}
|
||||
func (nullFactory) Timer(options TimerOptions) Timer {
|
||||
return NullTimer
|
||||
}
|
||||
func (nullFactory) Gauge(options Options) Gauge {
|
||||
return NullGauge
|
||||
}
|
||||
func (nullFactory) Histogram(options HistogramOptions) Histogram {
|
||||
return NullHistogram
|
||||
}
|
||||
func (nullFactory) Namespace(scope NSOptions) Factory { return NullFactory }
|
28
vendor/github.com/uber/jaeger-lib/metrics/gauge.go
generated
vendored
Normal file
28
vendor/github.com/uber/jaeger-lib/metrics/gauge.go
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
// Copyright (c) 2017 Uber Technologies, Inc.
|
||||
//
|
||||
// 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 metrics
|
||||
|
||||
// Gauge returns instantaneous measurements of something as an int64 value
|
||||
type Gauge interface {
|
||||
// Update the gauge to the value passed in.
|
||||
Update(int64)
|
||||
}
|
||||
|
||||
// NullGauge gauge that does nothing
|
||||
var NullGauge Gauge = nullGauge{}
|
||||
|
||||
type nullGauge struct{}
|
||||
|
||||
func (nullGauge) Update(int64) {}
|
28
vendor/github.com/uber/jaeger-lib/metrics/histogram.go
generated
vendored
Normal file
28
vendor/github.com/uber/jaeger-lib/metrics/histogram.go
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
// Copyright (c) 2018 The Jaeger 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 metrics
|
||||
|
||||
// Histogram that keeps track of a distribution of values.
|
||||
type Histogram interface {
|
||||
// Records the value passed in.
|
||||
Record(float64)
|
||||
}
|
||||
|
||||
// NullHistogram that does nothing
|
||||
var NullHistogram Histogram = nullHistogram{}
|
||||
|
||||
type nullHistogram struct{}
|
||||
|
||||
func (nullHistogram) Record(float64) {}
|
35
vendor/github.com/uber/jaeger-lib/metrics/keys.go
generated
vendored
Normal file
35
vendor/github.com/uber/jaeger-lib/metrics/keys.go
generated
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
// Copyright (c) 2017 Uber Technologies, Inc.
|
||||
//
|
||||
// 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 metrics
|
||||
|
||||
import (
|
||||
"sort"
|
||||
)
|
||||
|
||||
// GetKey converts name+tags into a single string of the form
|
||||
// "name|tag1=value1|...|tagN=valueN", where tag names are
|
||||
// sorted alphabetically.
|
||||
func GetKey(name string, tags map[string]string, tagsSep string, tagKVSep string) string {
|
||||
keys := make([]string, 0, len(tags))
|
||||
for k := range tags {
|
||||
keys = append(keys, k)
|
||||
}
|
||||
sort.Strings(keys)
|
||||
key := name
|
||||
for _, k := range keys {
|
||||
key = key + tagsSep + k + tagKVSep + tags[k]
|
||||
}
|
||||
return key
|
||||
}
|
137
vendor/github.com/uber/jaeger-lib/metrics/metrics.go
generated
vendored
Normal file
137
vendor/github.com/uber/jaeger-lib/metrics/metrics.go
generated
vendored
Normal file
@@ -0,0 +1,137 @@
|
||||
// Copyright (c) 2017 Uber Technologies, Inc.
|
||||
//
|
||||
// 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 metrics
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// MustInit initializes the passed in metrics and initializes its fields using the passed in factory.
|
||||
//
|
||||
// It uses reflection to initialize a struct containing metrics fields
|
||||
// by assigning new Counter/Gauge/Timer values with the metric name retrieved
|
||||
// from the `metric` tag and stats tags retrieved from the `tags` tag.
|
||||
//
|
||||
// Note: all fields of the struct must be exported, have a `metric` tag, and be
|
||||
// of type Counter or Gauge or Timer.
|
||||
//
|
||||
// Errors during Init lead to a panic.
|
||||
func MustInit(metrics interface{}, factory Factory, globalTags map[string]string) {
|
||||
if err := Init(metrics, factory, globalTags); err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
// Init does the same as MustInit, but returns an error instead of
|
||||
// panicking.
|
||||
func Init(m interface{}, factory Factory, globalTags map[string]string) error {
|
||||
// Allow user to opt out of reporting metrics by passing in nil.
|
||||
if factory == nil {
|
||||
factory = NullFactory
|
||||
}
|
||||
|
||||
counterPtrType := reflect.TypeOf((*Counter)(nil)).Elem()
|
||||
gaugePtrType := reflect.TypeOf((*Gauge)(nil)).Elem()
|
||||
timerPtrType := reflect.TypeOf((*Timer)(nil)).Elem()
|
||||
histogramPtrType := reflect.TypeOf((*Histogram)(nil)).Elem()
|
||||
|
||||
v := reflect.ValueOf(m).Elem()
|
||||
t := v.Type()
|
||||
for i := 0; i < t.NumField(); i++ {
|
||||
tags := make(map[string]string)
|
||||
for k, v := range globalTags {
|
||||
tags[k] = v
|
||||
}
|
||||
var buckets []float64
|
||||
field := t.Field(i)
|
||||
metric := field.Tag.Get("metric")
|
||||
if metric == "" {
|
||||
return fmt.Errorf("Field %s is missing a tag 'metric'", field.Name)
|
||||
}
|
||||
if tagString := field.Tag.Get("tags"); tagString != "" {
|
||||
tagPairs := strings.Split(tagString, ",")
|
||||
for _, tagPair := range tagPairs {
|
||||
tag := strings.Split(tagPair, "=")
|
||||
if len(tag) != 2 {
|
||||
return fmt.Errorf(
|
||||
"Field [%s]: Tag [%s] is not of the form key=value in 'tags' string [%s]",
|
||||
field.Name, tagPair, tagString)
|
||||
}
|
||||
tags[tag[0]] = tag[1]
|
||||
}
|
||||
}
|
||||
if bucketString := field.Tag.Get("buckets"); bucketString != "" {
|
||||
if field.Type.AssignableTo(timerPtrType) {
|
||||
// TODO: Parse timer duration buckets
|
||||
return fmt.Errorf(
|
||||
"Field [%s]: Buckets are not currently initialized for timer metrics",
|
||||
field.Name)
|
||||
} else if field.Type.AssignableTo(histogramPtrType) {
|
||||
bucketValues := strings.Split(bucketString, ",")
|
||||
for _, bucket := range bucketValues {
|
||||
b, err := strconv.ParseFloat(bucket, 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf(
|
||||
"Field [%s]: Bucket [%s] could not be converted to float64 in 'buckets' string [%s]",
|
||||
field.Name, bucket, bucketString)
|
||||
}
|
||||
buckets = append(buckets, b)
|
||||
}
|
||||
} else {
|
||||
return fmt.Errorf(
|
||||
"Field [%s]: Buckets should only be defined for Timer and Histogram metric types",
|
||||
field.Name)
|
||||
}
|
||||
}
|
||||
help := field.Tag.Get("help")
|
||||
var obj interface{}
|
||||
if field.Type.AssignableTo(counterPtrType) {
|
||||
obj = factory.Counter(Options{
|
||||
Name: metric,
|
||||
Tags: tags,
|
||||
Help: help,
|
||||
})
|
||||
} else if field.Type.AssignableTo(gaugePtrType) {
|
||||
obj = factory.Gauge(Options{
|
||||
Name: metric,
|
||||
Tags: tags,
|
||||
Help: help,
|
||||
})
|
||||
} else if field.Type.AssignableTo(timerPtrType) {
|
||||
// TODO: Add buckets once parsed (see TODO above)
|
||||
obj = factory.Timer(TimerOptions{
|
||||
Name: metric,
|
||||
Tags: tags,
|
||||
Help: help,
|
||||
})
|
||||
} else if field.Type.AssignableTo(histogramPtrType) {
|
||||
obj = factory.Histogram(HistogramOptions{
|
||||
Name: metric,
|
||||
Tags: tags,
|
||||
Help: help,
|
||||
Buckets: buckets,
|
||||
})
|
||||
} else {
|
||||
return fmt.Errorf(
|
||||
"Field %s is not a pointer to timer, gauge, or counter",
|
||||
field.Name)
|
||||
}
|
||||
v.Field(i).Set(reflect.ValueOf(obj))
|
||||
}
|
||||
return nil
|
||||
}
|
43
vendor/github.com/uber/jaeger-lib/metrics/stopwatch.go
generated
vendored
Normal file
43
vendor/github.com/uber/jaeger-lib/metrics/stopwatch.go
generated
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
// Copyright (c) 2017 Uber Technologies, Inc.
|
||||
//
|
||||
// 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 metrics
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// StartStopwatch begins recording the executing time of an event, returning
|
||||
// a Stopwatch that should be used to stop the recording the time for
|
||||
// that event. Multiple events can be occurring simultaneously each
|
||||
// represented by different active Stopwatches
|
||||
func StartStopwatch(timer Timer) Stopwatch {
|
||||
return Stopwatch{t: timer, start: time.Now()}
|
||||
}
|
||||
|
||||
// A Stopwatch tracks the execution time of a specific event
|
||||
type Stopwatch struct {
|
||||
t Timer
|
||||
start time.Time
|
||||
}
|
||||
|
||||
// Stop stops executing of the stopwatch and records the amount of elapsed time
|
||||
func (s Stopwatch) Stop() {
|
||||
s.t.Record(s.ElapsedTime())
|
||||
}
|
||||
|
||||
// ElapsedTime returns the amount of elapsed time (in time.Duration)
|
||||
func (s Stopwatch) ElapsedTime() time.Duration {
|
||||
return time.Since(s.start)
|
||||
}
|
33
vendor/github.com/uber/jaeger-lib/metrics/timer.go
generated
vendored
Normal file
33
vendor/github.com/uber/jaeger-lib/metrics/timer.go
generated
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
// Copyright (c) 2017 Uber Technologies, Inc.
|
||||
//
|
||||
// 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 metrics
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// Timer accumulates observations about how long some operation took,
|
||||
// and also maintains a historgam of percentiles.
|
||||
type Timer interface {
|
||||
// Records the time passed in.
|
||||
Record(time.Duration)
|
||||
}
|
||||
|
||||
// NullTimer timer that does nothing
|
||||
var NullTimer Timer = nullTimer{}
|
||||
|
||||
type nullTimer struct{}
|
||||
|
||||
func (nullTimer) Record(time.Duration) {}
|
Reference in New Issue
Block a user