...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package logadmin
16
17 import (
18 "context"
19 "fmt"
20
21 vkit "cloud.google.com/go/logging/apiv2"
22 logpb "cloud.google.com/go/logging/apiv2/loggingpb"
23 "google.golang.org/api/iterator"
24 )
25
26
27
28
29
30
31 type Metric struct {
32
33
34
35
36
37
38 ID string
39
40
41 Description string
42
43
44
45
46 Filter string
47 }
48
49
50 func (c *Client) CreateMetric(ctx context.Context, m *Metric) error {
51 _, err := c.mClient.CreateLogMetric(ctx, &logpb.CreateLogMetricRequest{
52 Parent: c.parent,
53 Metric: toLogMetric(m),
54 })
55 return err
56 }
57
58
59
60 func (c *Client) DeleteMetric(ctx context.Context, metricID string) error {
61 return c.mClient.DeleteLogMetric(ctx, &logpb.DeleteLogMetricRequest{
62 MetricName: c.metricPath(metricID),
63 })
64 }
65
66
67
68
69 func (c *Client) Metric(ctx context.Context, metricID string) (*Metric, error) {
70 lm, err := c.mClient.GetLogMetric(ctx, &logpb.GetLogMetricRequest{
71 MetricName: c.metricPath(metricID),
72 })
73 if err != nil {
74 return nil, err
75 }
76 return fromLogMetric(lm), nil
77 }
78
79
80
81 func (c *Client) UpdateMetric(ctx context.Context, m *Metric) error {
82 _, err := c.mClient.UpdateLogMetric(ctx, &logpb.UpdateLogMetricRequest{
83 MetricName: c.metricPath(m.ID),
84 Metric: toLogMetric(m),
85 })
86 return err
87 }
88
89 func (c *Client) metricPath(metricID string) string {
90 return fmt.Sprintf("%s/metrics/%s", c.parent, metricID)
91 }
92
93
94
95 func (c *Client) Metrics(ctx context.Context) *MetricIterator {
96 it := &MetricIterator{
97 it: c.mClient.ListLogMetrics(ctx, &logpb.ListLogMetricsRequest{Parent: c.parent}),
98 }
99 it.pageInfo, it.nextFunc = iterator.NewPageInfo(
100 it.fetch,
101 func() int { return len(it.items) },
102 func() interface{} { b := it.items; it.items = nil; return b })
103 return it
104 }
105
106
107 type MetricIterator struct {
108 it *vkit.LogMetricIterator
109 pageInfo *iterator.PageInfo
110 nextFunc func() error
111 items []*Metric
112 }
113
114
115 func (it *MetricIterator) PageInfo() *iterator.PageInfo { return it.pageInfo }
116
117
118
119
120 func (it *MetricIterator) Next() (*Metric, error) {
121 if err := it.nextFunc(); err != nil {
122 return nil, err
123 }
124 item := it.items[0]
125 it.items = it.items[1:]
126 return item, nil
127 }
128
129 func (it *MetricIterator) fetch(pageSize int, pageToken string) (string, error) {
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 })
138 }
139
140 func toLogMetric(m *Metric) *logpb.LogMetric {
141 return &logpb.LogMetric{
142 Name: m.ID,
143 Description: m.Description,
144 Filter: m.Filter,
145 }
146 }
147
148 func fromLogMetric(lm *logpb.LogMetric) *Metric {
149 return &Metric{
150 ID: lm.Name,
151 Description: lm.Description,
152 Filter: lm.Filter,
153 }
154 }
155
View as plain text