Source File
reader.go
Belonging Package
go.opencensus.io/metric/metricexport
package metricexport
import (
)
var (
defaultSampler = trace.ProbabilitySampler(0.0001)
errReportingIntervalTooLow = fmt.Errorf("reporting interval less than %d", minimumReportingDuration)
errAlreadyStarted = fmt.Errorf("already started")
errIntervalReaderNil = fmt.Errorf("interval reader is nil")
errExporterNil = fmt.Errorf("exporter is nil")
errReaderNil = fmt.Errorf("reader is nil")
)
const (
defaultReportingDuration = 60 * time.Second
minimumReportingDuration = 1 * time.Second
defaultSpanName = "ExportMetrics"
)
type ReaderOption func(*ReaderOptions)
func ( string) ReaderOption {
return func( *ReaderOptions) {
.SpanName =
}
}
func ( ...ReaderOption) *Reader {
var ReaderOptions
for , := range {
(&)
}
:= &Reader{defaultSampler, defaultSpanName}
if .SpanName != "" {
.spanName = .SpanName
}
return
}
func ( *Reader, Exporter) (*IntervalReader, error) {
if == nil {
return nil, errExporterNil
}
if == nil {
return nil, errReaderNil
}
:= &IntervalReader{
exporter: ,
reader: ,
}
return , nil
}
func ( *IntervalReader) () error {
if == nil {
return errIntervalReaderNil
}
.mu.Lock()
defer .mu.Unlock()
var = defaultReportingDuration
if .ReportingInterval != 0 {
if .ReportingInterval < minimumReportingDuration {
return errReportingIntervalTooLow
}
= .ReportingInterval
}
if .done != nil {
return errAlreadyStarted
}
.timer = time.NewTicker()
.quit = make(chan bool)
.done = make(chan bool)
go .startInternal()
return nil
}
func ( *IntervalReader) () {
for {
select {
case <-.timer.C:
.reader.ReadAndExport(.exporter)
case <-.quit:
.timer.Stop()
.done <- true
return
}
}
}
func ( *Reader) ( Exporter) {
, := trace.StartSpan(context.Background(), .spanName, trace.WithSampler(.sampler))
defer .End()
:= metricproducer.GlobalManager().GetAll()
:= []*metricdata.Metric{}
for , := range {
= append(, .Read()...)
.ExportMetrics(, )
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |