Skip to content

Commit

Permalink
Update metric exporter to v0.6.0 compat (#33) (#34)
Browse files Browse the repository at this point in the history
* Update metric exporter to v0.6.0 compat (#33)

* Remove example binary
  • Loading branch information
ymotongpoo committed May 26, 2020
1 parent ad51e85 commit 4ebc25a
Show file tree
Hide file tree
Showing 8 changed files with 54 additions and 28 deletions.
6 changes: 3 additions & 3 deletions example/metric/example.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ func main() {

// Start meter
ctx := context.Background()
meter := pusher.Meter("cloudmonitoring/example")
meter := pusher.Provider().Meter("cloudmonitoring/example")

// Register counter value
counter := metric.Must(meter).NewInt64Counter("counter-a")
Expand All @@ -90,12 +90,12 @@ func main() {
}
of := newObservedFloat(12.34)

callback := func(result metric.Float64ObserverResult) {
callback := func(_ context.Context, result metric.Float64ObserverResult) {
v := of.get()
result.Observe(v, olabels...)
}

metric.Must(meter).RegisterFloat64Observer("observer-a", callback)
metric.Must(meter).NewFloat64ValueObserver("observer-a", callback)

// Add measurement once an every 10 second.
timer := time.NewTicker(10 * time.Second)
Expand Down
9 changes: 7 additions & 2 deletions example/metric/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ go 1.14
replace github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric => ../../exporter/metric

require (
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.0.0-00010101000000-000000000000
go.opentelemetry.io/otel v0.5.0
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.0.0-20200519045558-2c699b108359
github.com/google/go-cmp v0.4.1 // indirect
go.opentelemetry.io/otel v0.6.0
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2 // indirect
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299 // indirect
google.golang.org/api v0.25.0 // indirect
google.golang.org/genproto v0.0.0-20200521103424-e9a78aa275b7 // indirect
)
14 changes: 12 additions & 2 deletions example/metric/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
Expand Down Expand Up @@ -116,8 +118,8 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opentelemetry.io/otel v0.5.0 h1:tdIR1veg/z+VRJaw/6SIxz+QX3l+m+BDleYLTs+GC1g=
go.opentelemetry.io/otel v0.5.0/go.mod h1:jzBIgIzK43Iu1BpDAXwqOd6UPsSAk+ewVZ5ofSXw4Ek=
go.opentelemetry.io/otel v0.6.0 h1:+vkHm/XwJ7ekpISV2Ixew93gCrxTbuwTF5rSewnLLgw=
go.opentelemetry.io/otel v0.6.0/go.mod h1:jzBIgIzK43Iu1BpDAXwqOd6UPsSAk+ewVZ5ofSXw4Ek=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
Expand Down Expand Up @@ -170,6 +172,8 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5 h1:WQ8q63x+f/zpC8Ac1s9wLElVoHhm32p6tudrU72n1QA=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2 h1:eDrdRpKgkcCqKZQwyZRyeFZgfqt37SL7Kv3tok06cKE=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
Expand Down Expand Up @@ -204,6 +208,8 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e h1:hq86ru83GdWTlfQFZGO4nZJTU4Bs2wfHl8oFHRaXsfc=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299 h1:DYfZAGf2WMFjMxbgTjaC+2HC7NkNAQs+6Q8b9WEB/F4=
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
Expand Down Expand Up @@ -260,6 +266,8 @@ google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.24.0 h1:cG03eaksBzhfSIk7JRGctfp3lanklcOM/mTGvow7BbQ=
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.25.0 h1:LodzhlzZEUfhXzNUMIfVlf9Gr6Ua5MMtoFWh7+f47qA=
google.golang.org/api v0.25.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
Expand Down Expand Up @@ -291,6 +299,8 @@ google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84 h1:pSLkPbrjnPyLDYU
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587 h1:1Ym+vvUpq1ZHvxzn34gENJX8U4aKO+vhy2P/2+Xl6qQ=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200521103424-e9a78aa275b7 h1:JUs1uIDQ46c7iI0QuMPzAHqXaSmqKF0f9freFMk2ivs=
google.golang.org/genproto v0.0.0-20200521103424-e9a78aa275b7/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
Expand Down
5 changes: 2 additions & 3 deletions exporter/metric/cloudmonitoring.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import (
"time"

export "go.opentelemetry.io/otel/sdk/export/metric"
"go.opentelemetry.io/otel/sdk/resource"
"golang.org/x/oauth2/google"

monitoring "cloud.google.com/go/monitoring/apiv3"
Expand Down Expand Up @@ -81,6 +80,6 @@ func NewRawExporter(opts ...Option) (*Exporter, error) {
}

// Export exports the provide metric record to Google Cloud Monitoring.
func (e *Exporter) Export(ctx context.Context, res *resource.Resource, cps export.CheckpointSet) error {
return e.metricExporter.ExportMetrics(ctx, res, cps)
func (e *Exporter) Export(ctx context.Context, cps export.CheckpointSet) error {
return e.metricExporter.ExportMetrics(ctx, cps)
}
2 changes: 1 addition & 1 deletion exporter/metric/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ go 1.14
require (
cloud.google.com/go v0.57.0
github.com/golang/protobuf v1.4.2
go.opentelemetry.io/otel v0.5.0
go.opentelemetry.io/otel v0.6.0
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
google.golang.org/api v0.24.0
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587
Expand Down
4 changes: 2 additions & 2 deletions exporter/metric/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -122,8 +122,8 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opentelemetry.io/otel v0.5.0 h1:tdIR1veg/z+VRJaw/6SIxz+QX3l+m+BDleYLTs+GC1g=
go.opentelemetry.io/otel v0.5.0/go.mod h1:jzBIgIzK43Iu1BpDAXwqOd6UPsSAk+ewVZ5ofSXw4Ek=
go.opentelemetry.io/otel v0.6.0 h1:+vkHm/XwJ7ekpISV2Ixew93gCrxTbuwTF5rSewnLLgw=
go.opentelemetry.io/otel v0.6.0/go.mod h1:jzBIgIzK43Iu1BpDAXwqOd6UPsSAk+ewVZ5ofSXw4Ek=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
Expand Down
32 changes: 21 additions & 11 deletions exporter/metric/metric.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ import (
export "go.opentelemetry.io/otel/sdk/export/metric"
"go.opentelemetry.io/otel/sdk/export/metric/aggregator"
"go.opentelemetry.io/otel/sdk/metric/controller/push"
integrator "go.opentelemetry.io/otel/sdk/metric/integrator/simple"
"go.opentelemetry.io/otel/sdk/metric/selector/simple"
"go.opentelemetry.io/otel/sdk/resource"

Expand Down Expand Up @@ -120,32 +119,38 @@ func InstallNewPipeline(opts []Option, popts ...push.Option) (*push.Controller,
if err != nil {
return nil, err
}
global.SetMeterProvider(pusher)
global.SetMeterProvider(pusher.Provider())
return pusher, err
}

// NewExportPipeline sets up a complete export pipeline with the recommended setup,
// chaining a NewRawExporter into the recommended selectors and integrators.
func NewExportPipeline(opts []Option, popts ...push.Option) (*push.Controller, error) {
selector := simple.NewWithExactMeasure()
selector := simple.NewWithExactDistribution()
exporter, err := NewRawExporter(opts...)
if err != nil {
return nil, err
}
integrator := integrator.New(selector, true)
period := exporter.metricExporter.o.ReportingInterval
pusher := push.New(integrator, exporter, period, popts...)
pusher := push.New(
selector,
exporter,
append([]push.Option{
push.WithStateful(true),
push.WithPeriod(period),
}, popts...)...,
)
pusher.Start()
return pusher, nil
}

// ExportMetrics exports OpenTelemetry Metrics to Google Cloud Monitoring.
func (me *metricExporter) ExportMetrics(ctx context.Context, res *resource.Resource, cps export.CheckpointSet) error {
func (me *metricExporter) ExportMetrics(ctx context.Context, cps export.CheckpointSet) error {
if err := me.exportMetricDescriptor(ctx, cps); err != nil {
return err
}

if err := me.exportTimeSeries(ctx, res, cps); err != nil {
if err := me.exportTimeSeries(ctx, cps); err != nil {
return err
}
return nil
Expand Down Expand Up @@ -196,9 +201,13 @@ func (me *metricExporter) exportMetricDescriptor(ctx context.Context, cps export

// exportTimeSeriees create TimeSeries from the records in cps.
// res should be the common resource among all TimeSeries, such as instance id, application name and so on.
func (me *metricExporter) exportTimeSeries(ctx context.Context, res *resource.Resource, cps export.CheckpointSet) error {
func (me *metricExporter) exportTimeSeries(ctx context.Context, cps export.CheckpointSet) error {
tss := []*monitoringpb.TimeSeries{}

// TODO: [ymotongpoo] Check how resource registered via push.WithResource can be
// extracted from pusher.
res := &resource.Resource{}

aggError := cps.ForEach(func(r export.Record) error {
ts, err := me.recordToTspb(&r, res)
if err != nil {
Expand Down Expand Up @@ -304,11 +313,12 @@ func recordToMdpbKindType(r *export.Record) (googlemetricpb.MetricDescriptor_Met

var kind googlemetricpb.MetricDescriptor_MetricKind
switch mkind {
case apimetric.CounterKind:
case apimetric.CounterKind, apimetric.UpDownCounterKind:
kind = googlemetricpb.MetricDescriptor_CUMULATIVE
case apimetric.ObserverKind:
case apimetric.ValueObserverKind, apimetric.ValueRecorderKind:
kind = googlemetricpb.MetricDescriptor_GAUGE
// TODO: Add support for MeasureKind.
// TODO: Add support for SumObserverKind and UpDownSumObserverKind.
// https://pkg.go.dev/go.opentelemetry.io/otel@v0.6.0/api/metric?tab=doc#Kind
default:
kind = googlemetricpb.MetricDescriptor_METRIC_KIND_UNSPECIFIED
}
Expand Down
10 changes: 6 additions & 4 deletions exporter/metric/metric_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
export "go.opentelemetry.io/otel/sdk/export/metric"
"go.opentelemetry.io/otel/sdk/metric/aggregator/lastvalue"
aggtest "go.opentelemetry.io/otel/sdk/metric/aggregator/test"
"go.opentelemetry.io/otel/sdk/resource"

googlemetricpb "google.golang.org/genproto/googleapis/api/metric"
)
Expand All @@ -50,8 +51,8 @@ func TestDescToMetricType(t *testing.T) {
}

inDesc := []apimetric.Descriptor{
apimetric.NewDescriptor("testing", apimetric.MeasureKind, apimetric.Float64NumberKind),
apimetric.NewDescriptor("test/of/path", apimetric.MeasureKind, apimetric.Float64NumberKind),
apimetric.NewDescriptor("testing", apimetric.ValueRecorderKind, apimetric.Float64NumberKind),
apimetric.NewDescriptor("test/of/path", apimetric.ValueRecorderKind, apimetric.Float64NumberKind),
}

wants := []string{
Expand All @@ -68,10 +69,11 @@ func TestDescToMetricType(t *testing.T) {
}

func TestRecordToMpb(t *testing.T) {
cps := test.NewCheckpointSet()
res := &resource.Resource{}
cps := test.NewCheckpointSet(res)
ctx := context.Background()

desc := apimetric.NewDescriptor("testing", apimetric.MeasureKind, apimetric.Float64NumberKind)
desc := apimetric.NewDescriptor("testing", apimetric.ValueRecorderKind, apimetric.Float64NumberKind)

lvagg := lastvalue.New()
aggtest.CheckedUpdate(t, lvagg, metric.NewFloat64Number(12.34), &desc)
Expand Down

0 comments on commit 4ebc25a

Please sign in to comment.