Skip to content
This repository was archived by the owner on Oct 3, 2023. It is now read-only.

Commit 4b7f306

Browse files
authored
Remove support for exporting ViewData (#188)
* Remove support for exporting ViewData * Fix gofmt * Remove ExportView * Fix examples
1 parent 97b79b6 commit 4b7f306

7 files changed

Lines changed: 90 additions & 1839 deletions

File tree

equivalence_test.go

Lines changed: 87 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ package stackdriver
1616

1717
import (
1818
"context"
19+
"fmt"
1920
"net"
2021
"sync"
2122
"testing"
2223
"time"
2324

24-
"go.opencensus.io/stats"
25-
"go.opencensus.io/stats/view"
25+
"go.opencensus.io/metric/metricdata"
2626
"google.golang.org/api/option"
2727
"google.golang.org/grpc"
2828

@@ -42,32 +42,30 @@ func TestStatsAndMetricsEquivalence(t *testing.T) {
4242

4343
startTime := time.Unix(1000, 0)
4444
startTimePb := &timestamp.Timestamp{Seconds: 1000}
45-
mLatencyMs := stats.Float64("latency", "The latency for various methods", "ms")
46-
v := &view.View{
45+
md := metricdata.Descriptor{
4746
Name: "ocagent.io/latency",
4847
Description: "The latency of the various methods",
49-
Aggregation: view.Count(),
50-
Measure: mLatencyMs,
48+
Unit: "ms",
49+
Type: metricdata.TypeCumulativeInt64,
5150
}
5251
metricDescriptor := &metricspb.MetricDescriptor{
5352
Name: "ocagent.io/latency",
5453
Description: "The latency of the various methods",
55-
Unit: "1",
54+
Unit: "ms",
5655
Type: metricspb.MetricDescriptor_CUMULATIVE_INT64,
5756
}
5857
seenResources := make(map[*resourcepb.Resource]*monitoredrespb.MonitoredResource)
5958

60-
// Generate some view.Data and metrics.
61-
var vdl []*view.Data
59+
// Generate some metricdata.Metric and metrics proto.
60+
var metrics []*metricdata.Metric
6261
var metricPbs []*metricspb.Metric
6362
for i := 0; i < 100; i++ {
64-
vd := &view.Data{
65-
Start: startTime,
66-
End: startTime.Add(time.Duration(1+i) * time.Second),
67-
View: v,
68-
Rows: []*view.Row{
63+
metric := &metricdata.Metric{
64+
Descriptor: md,
65+
TimeSeries: []*metricdata.TimeSeries{
6966
{
70-
Data: &view.CountData{Value: int64(4 * (i + 2))},
67+
StartTime: startTime,
68+
Points: []metricdata.Point{metricdata.NewInt64Point(startTime.Add(time.Duration(1+i)*time.Second), int64(4*(i+2)))},
7169
},
7270
},
7371
}
@@ -85,35 +83,39 @@ func TestStatsAndMetricsEquivalence(t *testing.T) {
8583
},
8684
},
8785
}
88-
vdl = append(vdl, vd)
86+
metrics = append(metrics, metric)
8987
metricPbs = append(metricPbs, metricPb)
9088
}
9189

9290
// Now perform some exporting.
93-
for i, vd := range vdl {
91+
for i, metric := range metrics {
9492
se := &statsExporter{
9593
o: Options{ProjectID: "equivalence", MapResource: defaultMapResource},
9694
}
9795

9896
ctx := context.Background()
99-
sMD, err := se.viewToCreateMetricDescriptorRequest(ctx, vd.View)
97+
sMD, err := se.metricToMpbMetricDescriptor(metric)
10098
if err != nil {
101-
t.Errorf("#%d: Stats.viewToMetricDescriptor: %v", i, err)
99+
t.Errorf("#%d: Stats.metricToMpbMetricDescriptor: %v", i, err)
102100
}
103-
pMD, err := se.protoMetricDescriptorToCreateMetricDescriptorRequest(ctx, metricPbs[i], nil)
101+
sMDR := &monitoringpb.CreateMetricDescriptorRequest{
102+
Name: fmt.Sprintf("projects/%s", se.o.ProjectID),
103+
MetricDescriptor: sMD,
104+
}
105+
pMDR, err := se.protoMetricDescriptorToCreateMetricDescriptorRequest(ctx, metricPbs[i], nil)
104106
if err != nil {
105107
t.Errorf("#%d: Stats.protoMetricDescriptorToMetricDescriptor: %v", i, err)
106108
}
107-
if diff := cmpMDReq(pMD, sMD); diff != "" {
108-
t.Fatalf("MetricDescriptor Mismatch -FromMetrics +FromStats: %s", diff)
109+
if diff := cmpMDReq(pMDR, sMDR); diff != "" {
110+
t.Fatalf("MetricDescriptor Mismatch -FromMetricsPb +FromMetrics: %s", diff)
109111
}
110112

111-
vdl := []*view.Data{vd}
112-
sctreql := se.makeReq(vdl, maxTimeSeriesPerUpload)
113+
stss, _ := se.metricToMpbTs(ctx, metric)
114+
sctreql := se.combineTimeSeriesToCreateTimeSeriesRequest(stss)
113115
tsl, _ := se.protoMetricToTimeSeries(ctx, se.getResource(nil, metricPbs[i], seenResources), metricPbs[i], nil)
114116
pctreql := se.combineTimeSeriesToCreateTimeSeriesRequest(tsl)
115117
if diff := cmpTSReqs(pctreql, sctreql); diff != "" {
116-
t.Fatalf("TimeSeries Mismatch -FromMetrics +FromStats: %s", diff)
118+
t.Fatalf("TimeSeries Mismatch -FromMetricsPb +FromMetrics: %s", diff)
117119
}
118120
}
119121
}
@@ -123,8 +125,8 @@ func TestStatsAndMetricsEquivalence(t *testing.T) {
123125
// that the Stackdriver Metrics Proto client then sends to, as it would
124126
// send to Google Stackdriver backends.
125127
//
126-
// This test ensures that the final responses sent by direct stats(view.Data) exporting
127-
// are exactly equal to those from view.Data-->OpenCensus-Proto.Metrics exporting.
128+
// This test ensures that the final responses sent by direct stats(metricdata.Metric) exporting
129+
// are exactly equal to those from metricdata.Metric-->OpenCensus-Proto.Metrics exporting.
128130
func TestEquivalenceStatsVsMetricsUploads(t *testing.T) {
129131
server, addr, doneFn := createFakeServer(t)
130132
defer doneFn()
@@ -154,90 +156,87 @@ func TestEquivalenceStatsVsMetricsUploads(t *testing.T) {
154156

155157
startTime := time.Unix(1000, 0)
156158
startTimePb := &timestamp.Timestamp{Seconds: 1000}
157-
mLatencyMs := stats.Float64("latency", "The latency for various methods", "ms")
158-
mConnections := stats.Int64("connections", "The count of various connections at a point in time", "1")
159-
mTimeMs := stats.Float64("time", "Counts time in milliseconds", "ms")
160-
161-
// Generate the view.Data.
162-
var vdl []*view.Data
163-
vdl = append(vdl,
164-
&view.Data{
165-
Start: startTime,
166-
End: startTime.Add(time.Duration(1) * time.Second),
167-
View: &view.View{
159+
160+
// Generate the metricdata.Metric.
161+
metrics := []*metricdata.Metric{
162+
{
163+
Descriptor: metricdata.Descriptor{
168164
Name: "ocagent.io/calls",
169165
Description: "The number of the various calls",
170-
Aggregation: view.Count(),
171-
Measure: mLatencyMs,
166+
Unit: "1",
167+
Type: metricdata.TypeCumulativeInt64,
172168
},
173-
Rows: []*view.Row{
169+
TimeSeries: []*metricdata.TimeSeries{
174170
{
175-
Data: &view.CountData{Value: int64(8)},
171+
StartTime: startTime,
172+
Points: []metricdata.Point{metricdata.NewInt64Point(startTime.Add(time.Duration(1)*time.Second), 8)},
176173
},
177174
},
178175
},
179-
&view.Data{
180-
Start: startTime,
181-
End: startTime.Add(time.Duration(2) * time.Second),
182-
View: &view.View{
176+
{
177+
Descriptor: metricdata.Descriptor{
183178
Name: "ocagent.io/latency",
184179
Description: "The latency of the various methods",
185-
Aggregation: view.Distribution(100, 500, 1000, 2000, 4000, 8000, 16000),
186-
Measure: mLatencyMs,
180+
181+
Unit: "ms",
182+
Type: metricdata.TypeCumulativeDistribution,
187183
},
188-
Rows: []*view.Row{
184+
TimeSeries: []*metricdata.TimeSeries{
189185
{
190-
Data: &view.DistributionData{
191-
Count: 1,
192-
Min: 100,
193-
Max: 500,
194-
Mean: 125.9,
195-
CountPerBucket: []int64{0, 1, 0, 0, 0, 0, 0},
186+
StartTime: startTime,
187+
Points: []metricdata.Point{
188+
metricdata.NewDistributionPoint(
189+
startTime.Add(time.Duration(2)*time.Second),
190+
&metricdata.Distribution{
191+
Count: 1,
192+
Sum: 125.9,
193+
Buckets: []metricdata.Bucket{{Count: 0}, {Count: 1}, {Count: 0}, {Count: 0}, {Count: 0}, {Count: 0}, {Count: 0}},
194+
BucketOptions: &metricdata.BucketOptions{Bounds: []float64{100, 500, 1000, 2000, 4000, 8000, 16000}},
195+
}),
196196
},
197197
},
198198
},
199199
},
200-
&view.Data{
201-
Start: startTime,
202-
End: startTime.Add(time.Duration(3) * time.Second),
203-
View: &view.View{
200+
{
201+
Descriptor: metricdata.Descriptor{
204202
Name: "ocagent.io/connections",
205203
Description: "The count of various connections instantaneously",
206-
Aggregation: view.LastValue(),
207-
Measure: mConnections,
204+
Unit: "1",
205+
Type: metricdata.TypeGaugeInt64,
208206
},
209-
Rows: []*view.Row{
210-
{Data: &view.LastValueData{Value: 99}},
207+
TimeSeries: []*metricdata.TimeSeries{
208+
{
209+
Points: []metricdata.Point{metricdata.NewInt64Point(startTime.Add(time.Duration(3)*time.Second), 99)},
210+
},
211211
},
212212
},
213-
&view.Data{
214-
Start: startTime,
215-
End: startTime.Add(time.Duration(1) * time.Second),
216-
View: &view.View{
213+
{
214+
Descriptor: metricdata.Descriptor{
217215
Name: "ocagent.io/uptime",
218216
Description: "The total uptime at any instance",
219-
Aggregation: view.Sum(),
220-
Measure: mTimeMs,
217+
Unit: "ms",
218+
Type: metricdata.TypeCumulativeFloat64,
221219
},
222-
Rows: []*view.Row{
223-
{Data: &view.SumData{Value: 199903.97}},
220+
TimeSeries: []*metricdata.TimeSeries{
221+
{
222+
StartTime: startTime,
223+
Points: []metricdata.Point{metricdata.NewFloat64Point(startTime.Add(time.Duration(1)*time.Second), 199903.97)},
224+
},
224225
},
225-
})
226-
227-
for _, vd := range vdl {
228-
// Export the view.Data to the Stackdriver backend.
229-
se.ExportView(vd)
226+
},
230227
}
228+
229+
se.ExportMetrics(context.Background(), metrics)
231230
se.Flush()
232231

233232
// Examining the stackdriver metrics that are available.
234-
var stackdriverTimeSeriesFromStats []*monitoringpb.CreateTimeSeriesRequest
233+
var stackdriverTimeSeriesFromMetrics []*monitoringpb.CreateTimeSeriesRequest
235234
server.forEachStackdriverTimeSeries(func(sdt *monitoringpb.CreateTimeSeriesRequest) {
236-
stackdriverTimeSeriesFromStats = append(stackdriverTimeSeriesFromStats, sdt)
235+
stackdriverTimeSeriesFromMetrics = append(stackdriverTimeSeriesFromMetrics, sdt)
237236
})
238-
var stackdriverMetricDescriptorsFromStats []*monitoringpb.CreateMetricDescriptorRequest
237+
var stackdriverMetricDescriptorsFromMetrics []*monitoringpb.CreateMetricDescriptorRequest
239238
server.forEachStackdriverMetricDescriptor(func(sdmd *monitoringpb.CreateMetricDescriptorRequest) {
240-
stackdriverMetricDescriptorsFromStats = append(stackdriverMetricDescriptorsFromStats, sdmd)
239+
stackdriverMetricDescriptorsFromMetrics = append(stackdriverMetricDescriptorsFromMetrics, sdmd)
241240
})
242241

243242
// Reset the stackdriverTimeSeries to enable fresh collection
@@ -340,24 +339,23 @@ func TestEquivalenceStatsVsMetricsUploads(t *testing.T) {
340339
se.ExportMetricsProto(context.Background(), nil, nil, metricPbs)
341340
se.Flush()
342341

343-
var stackdriverTimeSeriesFromMetrics []*monitoringpb.CreateTimeSeriesRequest
342+
var stackdriverTimeSeriesFromMetricsPb []*monitoringpb.CreateTimeSeriesRequest
344343
server.forEachStackdriverTimeSeries(func(sdt *monitoringpb.CreateTimeSeriesRequest) {
345-
stackdriverTimeSeriesFromMetrics = append(stackdriverTimeSeriesFromMetrics, sdt)
344+
stackdriverTimeSeriesFromMetricsPb = append(stackdriverTimeSeriesFromMetricsPb, sdt)
346345
})
347-
348-
var stackdriverMetricDescriptorsFromMetrics []*monitoringpb.CreateMetricDescriptorRequest
346+
var stackdriverMetricDescriptorsFromMetricsPb []*monitoringpb.CreateMetricDescriptorRequest
349347
server.forEachStackdriverMetricDescriptor(func(sdmd *monitoringpb.CreateMetricDescriptorRequest) {
350-
stackdriverMetricDescriptorsFromMetrics = append(stackdriverMetricDescriptorsFromMetrics, sdmd)
348+
stackdriverMetricDescriptorsFromMetricsPb = append(stackdriverMetricDescriptorsFromMetricsPb, sdmd)
351349
})
352350

353351
// The results should be equal now
354-
if diff := cmpTSReqs(stackdriverTimeSeriesFromMetrics, stackdriverTimeSeriesFromStats); diff != "" {
355-
t.Fatalf("Unexpected CreateTimeSeriesRequests -FromMetrics +FromStats: %s", diff)
352+
if diff := cmpTSReqs(stackdriverTimeSeriesFromMetricsPb, stackdriverTimeSeriesFromMetrics); diff != "" {
353+
t.Fatalf("Unexpected CreateTimeSeriesRequests -FromMetricsPb +FromMetrics: %s", diff)
356354
}
357355

358356
// Examining the metric descriptors too.
359-
if diff := cmpMDReqs(stackdriverMetricDescriptorsFromMetrics, stackdriverMetricDescriptorsFromStats); diff != "" {
360-
t.Fatalf("Unexpected CreateMetricDescriptorRequests -FromMetrics +FromStats: %s", diff)
357+
if diff := cmpMDReqs(stackdriverMetricDescriptorsFromMetricsPb, stackdriverMetricDescriptorsFromMetrics); diff != "" {
358+
t.Fatalf("Unexpected CreateMetricDescriptorRequests -FromMetricsPb +FromMetrics: %s", diff)
361359
}
362360
}
363361

example_test.go

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,6 @@ func Example_defaults() {
3434
log.Fatal(err)
3535
}
3636

37-
// Export to Stackdriver Monitoring.
38-
view.RegisterExporter(exporter)
39-
4037
// Subscribe views to see stats in Stackdriver Monitoring.
4138
if err := view.Register(
4239
ochttp.ClientLatencyView,
@@ -76,7 +73,7 @@ func Example_gKE() {
7673
zone = "unknown"
7774
}
7875

79-
exporter, err := stackdriver.NewExporter(stackdriver.Options{
76+
_, err = stackdriver.NewExporter(stackdriver.Options{
8077
ProjectID: "google-project-id",
8178
// Set a MonitoredResource that represents a GKE container.
8279
Resource: &monitoredres.MonitoredResource{
@@ -103,7 +100,4 @@ func Example_gKE() {
103100
if err != nil {
104101
log.Fatal(err)
105102
}
106-
107-
// Register so that views are exported.
108-
view.RegisterExporter(exporter)
109103
}

examples/stats/main.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,13 @@ func main() {
4646
// to setup the authorization.
4747
// See https://developers.google.com/identity/protocols/application-default-credentials
4848
// for more details.
49-
exporter, err := stackdriver.NewExporter(stackdriver.Options{
49+
_, err := stackdriver.NewExporter(stackdriver.Options{
5050
ProjectID: "your-project-id", // Google Cloud Console project ID for stackdriver.
5151
MonitoredResource: monitoredresource.Autodetect(),
5252
})
5353
if err != nil {
5454
log.Fatal(err)
5555
}
56-
view.RegisterExporter(exporter)
5756

5857
// Set reporting period to report data at 60 seconds.
5958
// The recommended reporting period by Stackdriver Monitoring is >= 1 minute:

stackdriver.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -341,12 +341,6 @@ func NewExporter(o Options) (*Exporter, error) {
341341
}, nil
342342
}
343343

344-
// ExportView exports to the Stackdriver Monitoring if view data
345-
// has one or more rows.
346-
func (e *Exporter) ExportView(vd *view.Data) {
347-
e.statsExporter.ExportView(vd)
348-
}
349-
350344
// ExportMetricsProto exports OpenCensus Metrics Proto to Stackdriver Monitoring synchronously,
351345
// without de-duping or adding proto metrics to the bundler.
352346
func (e *Exporter) ExportMetricsProto(ctx context.Context, node *commonpb.Node, rsc *resourcepb.Resource, metrics []*metricspb.Metric) error {

stackdriver_test.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525

2626
"contrib.go.opencensus.io/exporter/stackdriver/internal/testpb"
2727
"go.opencensus.io/plugin/ochttp"
28-
"go.opencensus.io/stats/view"
2928
"go.opencensus.io/trace"
3029
"golang.org/x/net/context/ctxhttp"
3130
)
@@ -48,8 +47,6 @@ func TestExport(t *testing.T) {
4847

4948
trace.RegisterExporter(exporter)
5049
defer trace.UnregisterExporter(exporter)
51-
view.RegisterExporter(exporter)
52-
defer view.UnregisterExporter(exporter)
5350

5451
trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()})
5552

@@ -113,8 +110,6 @@ func TestGRPC(t *testing.T) {
113110

114111
trace.RegisterExporter(exporter)
115112
defer trace.UnregisterExporter(exporter)
116-
view.RegisterExporter(exporter)
117-
defer view.UnregisterExporter(exporter)
118113

119114
trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()})
120115

0 commit comments

Comments
 (0)