Skip to content

Commit 4791784

Browse files
committed
logadmin: use generated iterators
Change the logadmin iterators to use the iterators from the underlying generated client. Change-Id: Ie4be1d645ae0058bea88a1bc438e1bfa82945349 Reviewed-on: https://code-review.googlesource.com/8997 Reviewed-by: Jun Mukai <[email protected]> Reviewed-by: Michael Darakananda <[email protected]>
1 parent 384ca55 commit 4791784

File tree

4 files changed

+59
-99
lines changed

4 files changed

+59
-99
lines changed

logging/logadmin/logadmin.go

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ import (
4040
vkit "cloud.google.com/go/logging/apiv2"
4141
"cloud.google.com/go/logging/internal"
4242
"github.com/golang/protobuf/ptypes"
43-
gax "github.com/googleapis/gax-go"
4443
"golang.org/x/net/context"
4544
"google.golang.org/api/iterator"
4645
"google.golang.org/api/option"
@@ -207,9 +206,7 @@ func (newestFirst) set(r *logpb.ListLogEntriesRequest) { r.OrderBy = "timestamp
207206
// NewClient. This may be overridden by passing a ProjectIDs option. Requires ReadScope or AdminScope.
208207
func (c *Client) Entries(ctx context.Context, opts ...EntriesOption) *EntryIterator {
209208
it := &EntryIterator{
210-
ctx: ctx,
211-
client: c.lClient,
212-
req: listLogEntriesRequest(c.projectID, opts),
209+
it: c.lClient.ListLogEntries(ctx, listLogEntriesRequest(c.projectID, opts)),
213210
}
214211
it.pageInfo, it.nextFunc = iterator.NewPageInfo(
215212
it.fetch,
@@ -230,11 +227,9 @@ func listLogEntriesRequest(projectID string, opts []EntriesOption) *logpb.ListLo
230227

231228
// An EntryIterator iterates over log entries.
232229
type EntryIterator struct {
233-
ctx context.Context
234-
client *vkit.Client
230+
it *vkit.LogEntryIterator
235231
pageInfo *iterator.PageInfo
236232
nextFunc func() error
237-
req *logpb.ListLogEntriesRequest
238233
items []*logging.Entry
239234
}
240235

@@ -254,28 +249,18 @@ func (it *EntryIterator) Next() (*logging.Entry, error) {
254249
}
255250

256251
func (it *EntryIterator) fetch(pageSize int, pageToken string) (string, error) {
257-
// TODO(jba): Do this a nicer way if the generated code supports one.
258-
// TODO(jba): If the above TODO can't be done, find a way to pass metadata in the call.
259-
client := logpb.NewLoggingServiceV2Client(it.client.Connection())
260-
var res *logpb.ListLogEntriesResponse
261-
err := gax.Invoke(it.ctx, func(ctx context.Context) error {
262-
it.req.PageSize = trunc32(pageSize)
263-
it.req.PageToken = pageToken
264-
var err error
265-
res, err = client.ListLogEntries(ctx, it.req)
266-
return err
267-
}, it.client.CallOptions.ListLogEntries...)
268-
if err != nil {
269-
return "", err
270-
}
271-
for _, ep := range res.Entries {
272-
e, err := fromLogEntry(ep)
252+
return iterFetch(pageSize, pageToken, it.it.PageInfo(), func() error {
253+
item, err := it.it.Next()
273254
if err != nil {
274-
return "", err
255+
return err
256+
}
257+
e, err := fromLogEntry(item)
258+
if err != nil {
259+
return err
275260
}
276261
it.items = append(it.items, e)
277-
}
278-
return res.NextPageToken, nil
262+
return nil
263+
})
279264
}
280265

281266
func trunc32(i int) int32 {
@@ -328,3 +313,20 @@ func fromLogEntry(le *logpb.LogEntry) (*logging.Entry, error) {
328313
Resource: le.Resource,
329314
}, nil
330315
}
316+
317+
// Common fetch code for iterators that are backed by vkit iterators.
318+
func iterFetch(pageSize int, pageToken string, pi *iterator.PageInfo, next func() error) (string, error) {
319+
pi.MaxSize = pageSize
320+
pi.Token = pageToken
321+
// Get one item, which will fill the buffer.
322+
if err := next(); err != nil {
323+
return "", err
324+
}
325+
// Collect the rest of the buffer.
326+
for pi.Remaining() > 0 {
327+
if err := next(); err != nil {
328+
return "", err
329+
}
330+
}
331+
return pi.Token, nil
332+
}

logging/logadmin/metrics.go

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import (
1818
"fmt"
1919

2020
vkit "cloud.google.com/go/logging/apiv2"
21-
gax "github.com/googleapis/gax-go"
2221
"golang.org/x/net/context"
2322
"google.golang.org/api/iterator"
2423
logpb "google.golang.org/genproto/googleapis/logging/v2"
@@ -95,9 +94,7 @@ func (c *Client) metricPath(metricID string) string {
9594
// Requires ReadScope or AdminScope.
9695
func (c *Client) Metrics(ctx context.Context) *MetricIterator {
9796
it := &MetricIterator{
98-
ctx: ctx,
99-
client: c.mClient,
100-
req: &logpb.ListLogMetricsRequest{Parent: c.parent()},
97+
it: c.mClient.ListLogMetrics(ctx, &logpb.ListLogMetricsRequest{Parent: c.parent()}),
10198
}
10299
it.pageInfo, it.nextFunc = iterator.NewPageInfo(
103100
it.fetch,
@@ -108,11 +105,9 @@ func (c *Client) Metrics(ctx context.Context) *MetricIterator {
108105

109106
// A MetricIterator iterates over Metrics.
110107
type MetricIterator struct {
111-
ctx context.Context
112-
client *vkit.MetricsClient
108+
it *vkit.LogMetricIterator
113109
pageInfo *iterator.PageInfo
114110
nextFunc func() error
115-
req *logpb.ListLogMetricsRequest
116111
items []*Metric
117112
}
118113

@@ -132,24 +127,14 @@ func (it *MetricIterator) Next() (*Metric, error) {
132127
}
133128

134129
func (it *MetricIterator) fetch(pageSize int, pageToken string) (string, error) {
135-
// TODO(jba): Do this a nicer way if the generated code supports one.
136-
// TODO(jba): If the above TODO can't be done, find a way to pass metadata in the call.
137-
client := logpb.NewMetricsServiceV2Client(it.client.Connection())
138-
var res *logpb.ListLogMetricsResponse
139-
err := gax.Invoke(it.ctx, func(ctx context.Context) error {
140-
it.req.PageSize = trunc32(pageSize)
141-
it.req.PageToken = pageToken
142-
var err error
143-
res, err = client.ListLogMetrics(ctx, it.req)
144-
return err
145-
}, it.client.CallOptions.ListLogMetrics...)
146-
if err != nil {
147-
return "", err
148-
}
149-
for _, sp := range res.Metrics {
150-
it.items = append(it.items, fromLogMetric(sp))
151-
}
152-
return res.NextPageToken, nil
130+
return iterFetch(pageSize, pageToken, it.it.PageInfo(), func() error {
131+
item, err := it.it.Next()
132+
if err != nil {
133+
return err
134+
}
135+
it.items = append(it.items, fromLogMetric(item))
136+
return nil
137+
})
153138
}
154139

155140
func toLogMetric(m *Metric) *logpb.LogMetric {

logging/logadmin/resources.go

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ package logadmin
1616

1717
import (
1818
vkit "cloud.google.com/go/logging/apiv2"
19-
gax "github.com/googleapis/gax-go"
2019
"golang.org/x/net/context"
2120
"google.golang.org/api/iterator"
2221
mrpb "google.golang.org/genproto/googleapis/api/monitoredres"
@@ -30,9 +29,8 @@ import (
3029
// See https://cloud.google.com/logging/docs/api/v2/resource-list for a list of monitored resources.
3130
func (c *Client) ResourceDescriptors(ctx context.Context) *ResourceDescriptorIterator {
3231
it := &ResourceDescriptorIterator{
33-
ctx: ctx,
34-
client: c.lClient,
35-
req: &logpb.ListMonitoredResourceDescriptorsRequest{},
32+
it: c.lClient.ListMonitoredResourceDescriptors(ctx,
33+
&logpb.ListMonitoredResourceDescriptorsRequest{}),
3634
}
3735
it.pageInfo, it.nextFunc = iterator.NewPageInfo(
3836
it.fetch,
@@ -43,11 +41,9 @@ func (c *Client) ResourceDescriptors(ctx context.Context) *ResourceDescriptorIte
4341

4442
// ResourceDescriptorIterator is an iterator over MonitoredResourceDescriptors.
4543
type ResourceDescriptorIterator struct {
46-
ctx context.Context
47-
client *vkit.Client
44+
it *vkit.MonitoredResourceDescriptorIterator
4845
pageInfo *iterator.PageInfo
4946
nextFunc func() error
50-
req *logpb.ListMonitoredResourceDescriptorsRequest
5147
items []*mrpb.MonitoredResourceDescriptor
5248
}
5349

@@ -67,20 +63,12 @@ func (it *ResourceDescriptorIterator) Next() (*mrpb.MonitoredResourceDescriptor,
6763
}
6864

6965
func (it *ResourceDescriptorIterator) fetch(pageSize int, pageToken string) (string, error) {
70-
// TODO(jba): Do this a nicer way if the generated code supports one.
71-
// TODO(jba): If the above TODO can't be done, find a way to pass metadata in the call.
72-
client := logpb.NewLoggingServiceV2Client(it.client.Connection())
73-
var res *logpb.ListMonitoredResourceDescriptorsResponse
74-
err := gax.Invoke(it.ctx, func(ctx context.Context) error {
75-
it.req.PageSize = trunc32(pageSize)
76-
it.req.PageToken = pageToken
77-
var err error
78-
res, err = client.ListMonitoredResourceDescriptors(ctx, it.req)
79-
return err
80-
}, it.client.CallOptions.ListMonitoredResourceDescriptors...)
81-
if err != nil {
82-
return "", err
83-
}
84-
it.items = append(it.items, res.ResourceDescriptors...)
85-
return res.NextPageToken, nil
66+
return iterFetch(pageSize, pageToken, it.it.PageInfo(), func() error {
67+
item, err := it.it.Next()
68+
if err != nil {
69+
return err
70+
}
71+
it.items = append(it.items, item)
72+
return nil
73+
})
8674
}

logging/logadmin/sinks.go

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import (
1818
"fmt"
1919

2020
vkit "cloud.google.com/go/logging/apiv2"
21-
gax "github.com/googleapis/gax-go"
2221
"golang.org/x/net/context"
2322
"google.golang.org/api/iterator"
2423
logpb "google.golang.org/genproto/googleapis/logging/v2"
@@ -109,9 +108,7 @@ func (c *Client) sinkPath(sinkID string) string {
109108
// Requires ReadScope or AdminScope.
110109
func (c *Client) Sinks(ctx context.Context) *SinkIterator {
111110
it := &SinkIterator{
112-
ctx: ctx,
113-
client: c.sClient,
114-
req: &logpb.ListSinksRequest{Parent: c.parent()},
111+
it: c.sClient.ListSinks(ctx, &logpb.ListSinksRequest{Parent: c.parent()}),
115112
}
116113
it.pageInfo, it.nextFunc = iterator.NewPageInfo(
117114
it.fetch,
@@ -122,11 +119,9 @@ func (c *Client) Sinks(ctx context.Context) *SinkIterator {
122119

123120
// A SinkIterator iterates over Sinks.
124121
type SinkIterator struct {
125-
ctx context.Context
126-
client *vkit.ConfigClient
122+
it *vkit.LogSinkIterator
127123
pageInfo *iterator.PageInfo
128124
nextFunc func() error
129-
req *logpb.ListSinksRequest
130125
items []*Sink
131126
}
132127

@@ -146,24 +141,14 @@ func (it *SinkIterator) Next() (*Sink, error) {
146141
}
147142

148143
func (it *SinkIterator) fetch(pageSize int, pageToken string) (string, error) {
149-
// TODO(jba): Do this a nicer way if the generated code supports one.
150-
// TODO(jba): If the above TODO can't be done, find a way to pass metadata in the call.
151-
client := logpb.NewConfigServiceV2Client(it.client.Connection())
152-
var res *logpb.ListSinksResponse
153-
err := gax.Invoke(it.ctx, func(ctx context.Context) error {
154-
it.req.PageSize = trunc32(pageSize)
155-
it.req.PageToken = pageToken
156-
var err error
157-
res, err = client.ListSinks(ctx, it.req)
158-
return err
159-
}, it.client.CallOptions.ListSinks...)
160-
if err != nil {
161-
return "", err
162-
}
163-
for _, sp := range res.Sinks {
164-
it.items = append(it.items, fromLogSink(sp))
165-
}
166-
return res.NextPageToken, nil
144+
return iterFetch(pageSize, pageToken, it.it.PageInfo(), func() error {
145+
item, err := it.it.Next()
146+
if err != nil {
147+
return err
148+
}
149+
it.items = append(it.items, fromLogSink(item))
150+
return nil
151+
})
167152
}
168153

169154
func toLogSink(s *Sink) *logpb.LogSink {

0 commit comments

Comments
 (0)