You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

458 lines
18 KiB

  1. // Copyright 2019 Google LLC
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // https://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. // Code generated by gapic-generator. DO NOT EDIT.
  15. package monitoring
  16. import (
  17. "context"
  18. "math"
  19. "time"
  20. "github.com/golang/protobuf/proto"
  21. gax "github.com/googleapis/gax-go/v2"
  22. "google.golang.org/api/iterator"
  23. "google.golang.org/api/option"
  24. "google.golang.org/api/transport"
  25. metricpb "google.golang.org/genproto/googleapis/api/metric"
  26. monitoredrespb "google.golang.org/genproto/googleapis/api/monitoredres"
  27. monitoringpb "google.golang.org/genproto/googleapis/monitoring/v3"
  28. "google.golang.org/grpc"
  29. "google.golang.org/grpc/codes"
  30. "google.golang.org/grpc/metadata"
  31. )
  32. // MetricCallOptions contains the retry settings for each method of MetricClient.
  33. type MetricCallOptions struct {
  34. ListMonitoredResourceDescriptors []gax.CallOption
  35. GetMonitoredResourceDescriptor []gax.CallOption
  36. ListMetricDescriptors []gax.CallOption
  37. GetMetricDescriptor []gax.CallOption
  38. CreateMetricDescriptor []gax.CallOption
  39. DeleteMetricDescriptor []gax.CallOption
  40. ListTimeSeries []gax.CallOption
  41. CreateTimeSeries []gax.CallOption
  42. }
  43. func defaultMetricClientOptions() []option.ClientOption {
  44. return []option.ClientOption{
  45. option.WithEndpoint("monitoring.googleapis.com:443"),
  46. option.WithScopes(DefaultAuthScopes()...),
  47. }
  48. }
  49. func defaultMetricCallOptions() *MetricCallOptions {
  50. retry := map[[2]string][]gax.CallOption{
  51. {"default", "idempotent"}: {
  52. gax.WithRetry(func() gax.Retryer {
  53. return gax.OnCodes([]codes.Code{
  54. codes.DeadlineExceeded,
  55. codes.Unavailable,
  56. }, gax.Backoff{
  57. Initial: 100 * time.Millisecond,
  58. Max: 60000 * time.Millisecond,
  59. Multiplier: 1.3,
  60. })
  61. }),
  62. },
  63. }
  64. return &MetricCallOptions{
  65. ListMonitoredResourceDescriptors: retry[[2]string{"default", "idempotent"}],
  66. GetMonitoredResourceDescriptor: retry[[2]string{"default", "idempotent"}],
  67. ListMetricDescriptors: retry[[2]string{"default", "idempotent"}],
  68. GetMetricDescriptor: retry[[2]string{"default", "idempotent"}],
  69. CreateMetricDescriptor: retry[[2]string{"default", "non_idempotent"}],
  70. DeleteMetricDescriptor: retry[[2]string{"default", "idempotent"}],
  71. ListTimeSeries: retry[[2]string{"default", "idempotent"}],
  72. CreateTimeSeries: retry[[2]string{"default", "non_idempotent"}],
  73. }
  74. }
  75. // MetricClient is a client for interacting with Stackdriver Monitoring API.
  76. //
  77. // Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
  78. type MetricClient struct {
  79. // The connection to the service.
  80. conn *grpc.ClientConn
  81. // The gRPC API client.
  82. metricClient monitoringpb.MetricServiceClient
  83. // The call options for this service.
  84. CallOptions *MetricCallOptions
  85. // The x-goog-* metadata to be sent with each request.
  86. xGoogMetadata metadata.MD
  87. }
  88. // NewMetricClient creates a new metric service client.
  89. //
  90. // Manages metric descriptors, monitored resource descriptors, and
  91. // time series data.
  92. func NewMetricClient(ctx context.Context, opts ...option.ClientOption) (*MetricClient, error) {
  93. conn, err := transport.DialGRPC(ctx, append(defaultMetricClientOptions(), opts...)...)
  94. if err != nil {
  95. return nil, err
  96. }
  97. c := &MetricClient{
  98. conn: conn,
  99. CallOptions: defaultMetricCallOptions(),
  100. metricClient: monitoringpb.NewMetricServiceClient(conn),
  101. }
  102. c.setGoogleClientInfo()
  103. return c, nil
  104. }
  105. // Connection returns the client's connection to the API service.
  106. func (c *MetricClient) Connection() *grpc.ClientConn {
  107. return c.conn
  108. }
  109. // Close closes the connection to the API service. The user should invoke this when
  110. // the client is no longer required.
  111. func (c *MetricClient) Close() error {
  112. return c.conn.Close()
  113. }
  114. // setGoogleClientInfo sets the name and version of the application in
  115. // the `x-goog-api-client` header passed on each request. Intended for
  116. // use by Google-written clients.
  117. func (c *MetricClient) setGoogleClientInfo(keyval ...string) {
  118. kv := append([]string{"gl-go", versionGo()}, keyval...)
  119. kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version)
  120. c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
  121. }
  122. // ListMonitoredResourceDescriptors lists monitored resource descriptors that match a filter. This method does
  123. // not require a Stackdriver account.
  124. func (c *MetricClient) ListMonitoredResourceDescriptors(ctx context.Context, req *monitoringpb.ListMonitoredResourceDescriptorsRequest, opts ...gax.CallOption) *MonitoredResourceDescriptorIterator {
  125. ctx = insertMetadata(ctx, c.xGoogMetadata)
  126. opts = append(c.CallOptions.ListMonitoredResourceDescriptors[0:len(c.CallOptions.ListMonitoredResourceDescriptors):len(c.CallOptions.ListMonitoredResourceDescriptors)], opts...)
  127. it := &MonitoredResourceDescriptorIterator{}
  128. req = proto.Clone(req).(*monitoringpb.ListMonitoredResourceDescriptorsRequest)
  129. it.InternalFetch = func(pageSize int, pageToken string) ([]*monitoredrespb.MonitoredResourceDescriptor, string, error) {
  130. var resp *monitoringpb.ListMonitoredResourceDescriptorsResponse
  131. req.PageToken = pageToken
  132. if pageSize > math.MaxInt32 {
  133. req.PageSize = math.MaxInt32
  134. } else {
  135. req.PageSize = int32(pageSize)
  136. }
  137. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  138. var err error
  139. resp, err = c.metricClient.ListMonitoredResourceDescriptors(ctx, req, settings.GRPC...)
  140. return err
  141. }, opts...)
  142. if err != nil {
  143. return nil, "", err
  144. }
  145. return resp.ResourceDescriptors, resp.NextPageToken, nil
  146. }
  147. fetch := func(pageSize int, pageToken string) (string, error) {
  148. items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
  149. if err != nil {
  150. return "", err
  151. }
  152. it.items = append(it.items, items...)
  153. return nextPageToken, nil
  154. }
  155. it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
  156. it.pageInfo.MaxSize = int(req.PageSize)
  157. return it
  158. }
  159. // GetMonitoredResourceDescriptor gets a single monitored resource descriptor. This method does not require a
  160. // Stackdriver account.
  161. func (c *MetricClient) GetMonitoredResourceDescriptor(ctx context.Context, req *monitoringpb.GetMonitoredResourceDescriptorRequest, opts ...gax.CallOption) (*monitoredrespb.MonitoredResourceDescriptor, error) {
  162. ctx = insertMetadata(ctx, c.xGoogMetadata)
  163. opts = append(c.CallOptions.GetMonitoredResourceDescriptor[0:len(c.CallOptions.GetMonitoredResourceDescriptor):len(c.CallOptions.GetMonitoredResourceDescriptor)], opts...)
  164. var resp *monitoredrespb.MonitoredResourceDescriptor
  165. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  166. var err error
  167. resp, err = c.metricClient.GetMonitoredResourceDescriptor(ctx, req, settings.GRPC...)
  168. return err
  169. }, opts...)
  170. if err != nil {
  171. return nil, err
  172. }
  173. return resp, nil
  174. }
  175. // ListMetricDescriptors lists metric descriptors that match a filter. This method does not require
  176. // a Stackdriver account.
  177. func (c *MetricClient) ListMetricDescriptors(ctx context.Context, req *monitoringpb.ListMetricDescriptorsRequest, opts ...gax.CallOption) *MetricDescriptorIterator {
  178. ctx = insertMetadata(ctx, c.xGoogMetadata)
  179. opts = append(c.CallOptions.ListMetricDescriptors[0:len(c.CallOptions.ListMetricDescriptors):len(c.CallOptions.ListMetricDescriptors)], opts...)
  180. it := &MetricDescriptorIterator{}
  181. req = proto.Clone(req).(*monitoringpb.ListMetricDescriptorsRequest)
  182. it.InternalFetch = func(pageSize int, pageToken string) ([]*metricpb.MetricDescriptor, string, error) {
  183. var resp *monitoringpb.ListMetricDescriptorsResponse
  184. req.PageToken = pageToken
  185. if pageSize > math.MaxInt32 {
  186. req.PageSize = math.MaxInt32
  187. } else {
  188. req.PageSize = int32(pageSize)
  189. }
  190. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  191. var err error
  192. resp, err = c.metricClient.ListMetricDescriptors(ctx, req, settings.GRPC...)
  193. return err
  194. }, opts...)
  195. if err != nil {
  196. return nil, "", err
  197. }
  198. return resp.MetricDescriptors, resp.NextPageToken, nil
  199. }
  200. fetch := func(pageSize int, pageToken string) (string, error) {
  201. items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
  202. if err != nil {
  203. return "", err
  204. }
  205. it.items = append(it.items, items...)
  206. return nextPageToken, nil
  207. }
  208. it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
  209. it.pageInfo.MaxSize = int(req.PageSize)
  210. return it
  211. }
  212. // GetMetricDescriptor gets a single metric descriptor. This method does not require a Stackdriver
  213. // account.
  214. func (c *MetricClient) GetMetricDescriptor(ctx context.Context, req *monitoringpb.GetMetricDescriptorRequest, opts ...gax.CallOption) (*metricpb.MetricDescriptor, error) {
  215. ctx = insertMetadata(ctx, c.xGoogMetadata)
  216. opts = append(c.CallOptions.GetMetricDescriptor[0:len(c.CallOptions.GetMetricDescriptor):len(c.CallOptions.GetMetricDescriptor)], opts...)
  217. var resp *metricpb.MetricDescriptor
  218. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  219. var err error
  220. resp, err = c.metricClient.GetMetricDescriptor(ctx, req, settings.GRPC...)
  221. return err
  222. }, opts...)
  223. if err != nil {
  224. return nil, err
  225. }
  226. return resp, nil
  227. }
  228. // CreateMetricDescriptor creates a new metric descriptor.
  229. // User-created metric descriptors define
  230. // custom metrics (at /monitoring/custom-metrics).
  231. func (c *MetricClient) CreateMetricDescriptor(ctx context.Context, req *monitoringpb.CreateMetricDescriptorRequest, opts ...gax.CallOption) (*metricpb.MetricDescriptor, error) {
  232. ctx = insertMetadata(ctx, c.xGoogMetadata)
  233. opts = append(c.CallOptions.CreateMetricDescriptor[0:len(c.CallOptions.CreateMetricDescriptor):len(c.CallOptions.CreateMetricDescriptor)], opts...)
  234. var resp *metricpb.MetricDescriptor
  235. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  236. var err error
  237. resp, err = c.metricClient.CreateMetricDescriptor(ctx, req, settings.GRPC...)
  238. return err
  239. }, opts...)
  240. if err != nil {
  241. return nil, err
  242. }
  243. return resp, nil
  244. }
  245. // DeleteMetricDescriptor deletes a metric descriptor. Only user-created
  246. // custom metrics (at /monitoring/custom-metrics) can be deleted.
  247. func (c *MetricClient) DeleteMetricDescriptor(ctx context.Context, req *monitoringpb.DeleteMetricDescriptorRequest, opts ...gax.CallOption) error {
  248. ctx = insertMetadata(ctx, c.xGoogMetadata)
  249. opts = append(c.CallOptions.DeleteMetricDescriptor[0:len(c.CallOptions.DeleteMetricDescriptor):len(c.CallOptions.DeleteMetricDescriptor)], opts...)
  250. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  251. var err error
  252. _, err = c.metricClient.DeleteMetricDescriptor(ctx, req, settings.GRPC...)
  253. return err
  254. }, opts...)
  255. return err
  256. }
  257. // ListTimeSeries lists time series that match a filter. This method does not require a
  258. // Stackdriver account.
  259. func (c *MetricClient) ListTimeSeries(ctx context.Context, req *monitoringpb.ListTimeSeriesRequest, opts ...gax.CallOption) *TimeSeriesIterator {
  260. ctx = insertMetadata(ctx, c.xGoogMetadata)
  261. opts = append(c.CallOptions.ListTimeSeries[0:len(c.CallOptions.ListTimeSeries):len(c.CallOptions.ListTimeSeries)], opts...)
  262. it := &TimeSeriesIterator{}
  263. req = proto.Clone(req).(*monitoringpb.ListTimeSeriesRequest)
  264. it.InternalFetch = func(pageSize int, pageToken string) ([]*monitoringpb.TimeSeries, string, error) {
  265. var resp *monitoringpb.ListTimeSeriesResponse
  266. req.PageToken = pageToken
  267. if pageSize > math.MaxInt32 {
  268. req.PageSize = math.MaxInt32
  269. } else {
  270. req.PageSize = int32(pageSize)
  271. }
  272. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  273. var err error
  274. resp, err = c.metricClient.ListTimeSeries(ctx, req, settings.GRPC...)
  275. return err
  276. }, opts...)
  277. if err != nil {
  278. return nil, "", err
  279. }
  280. return resp.TimeSeries, resp.NextPageToken, nil
  281. }
  282. fetch := func(pageSize int, pageToken string) (string, error) {
  283. items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
  284. if err != nil {
  285. return "", err
  286. }
  287. it.items = append(it.items, items...)
  288. return nextPageToken, nil
  289. }
  290. it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
  291. it.pageInfo.MaxSize = int(req.PageSize)
  292. return it
  293. }
  294. // CreateTimeSeries creates or adds data to one or more time series.
  295. // The response is empty if all time series in the request were written.
  296. // If any time series could not be written, a corresponding failure message is
  297. // included in the error response.
  298. func (c *MetricClient) CreateTimeSeries(ctx context.Context, req *monitoringpb.CreateTimeSeriesRequest, opts ...gax.CallOption) error {
  299. ctx = insertMetadata(ctx, c.xGoogMetadata)
  300. opts = append(c.CallOptions.CreateTimeSeries[0:len(c.CallOptions.CreateTimeSeries):len(c.CallOptions.CreateTimeSeries)], opts...)
  301. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  302. var err error
  303. _, err = c.metricClient.CreateTimeSeries(ctx, req, settings.GRPC...)
  304. return err
  305. }, opts...)
  306. return err
  307. }
  308. // MetricDescriptorIterator manages a stream of *metricpb.MetricDescriptor.
  309. type MetricDescriptorIterator struct {
  310. items []*metricpb.MetricDescriptor
  311. pageInfo *iterator.PageInfo
  312. nextFunc func() error
  313. // InternalFetch is for use by the Google Cloud Libraries only.
  314. // It is not part of the stable interface of this package.
  315. //
  316. // InternalFetch returns results from a single call to the underlying RPC.
  317. // The number of results is no greater than pageSize.
  318. // If there are no more results, nextPageToken is empty and err is nil.
  319. InternalFetch func(pageSize int, pageToken string) (results []*metricpb.MetricDescriptor, nextPageToken string, err error)
  320. }
  321. // PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
  322. func (it *MetricDescriptorIterator) PageInfo() *iterator.PageInfo {
  323. return it.pageInfo
  324. }
  325. // Next returns the next result. Its second return value is iterator.Done if there are no more
  326. // results. Once Next returns Done, all subsequent calls will return Done.
  327. func (it *MetricDescriptorIterator) Next() (*metricpb.MetricDescriptor, error) {
  328. var item *metricpb.MetricDescriptor
  329. if err := it.nextFunc(); err != nil {
  330. return item, err
  331. }
  332. item = it.items[0]
  333. it.items = it.items[1:]
  334. return item, nil
  335. }
  336. func (it *MetricDescriptorIterator) bufLen() int {
  337. return len(it.items)
  338. }
  339. func (it *MetricDescriptorIterator) takeBuf() interface{} {
  340. b := it.items
  341. it.items = nil
  342. return b
  343. }
  344. // MonitoredResourceDescriptorIterator manages a stream of *monitoredrespb.MonitoredResourceDescriptor.
  345. type MonitoredResourceDescriptorIterator struct {
  346. items []*monitoredrespb.MonitoredResourceDescriptor
  347. pageInfo *iterator.PageInfo
  348. nextFunc func() error
  349. // InternalFetch is for use by the Google Cloud Libraries only.
  350. // It is not part of the stable interface of this package.
  351. //
  352. // InternalFetch returns results from a single call to the underlying RPC.
  353. // The number of results is no greater than pageSize.
  354. // If there are no more results, nextPageToken is empty and err is nil.
  355. InternalFetch func(pageSize int, pageToken string) (results []*monitoredrespb.MonitoredResourceDescriptor, nextPageToken string, err error)
  356. }
  357. // PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
  358. func (it *MonitoredResourceDescriptorIterator) PageInfo() *iterator.PageInfo {
  359. return it.pageInfo
  360. }
  361. // Next returns the next result. Its second return value is iterator.Done if there are no more
  362. // results. Once Next returns Done, all subsequent calls will return Done.
  363. func (it *MonitoredResourceDescriptorIterator) Next() (*monitoredrespb.MonitoredResourceDescriptor, error) {
  364. var item *monitoredrespb.MonitoredResourceDescriptor
  365. if err := it.nextFunc(); err != nil {
  366. return item, err
  367. }
  368. item = it.items[0]
  369. it.items = it.items[1:]
  370. return item, nil
  371. }
  372. func (it *MonitoredResourceDescriptorIterator) bufLen() int {
  373. return len(it.items)
  374. }
  375. func (it *MonitoredResourceDescriptorIterator) takeBuf() interface{} {
  376. b := it.items
  377. it.items = nil
  378. return b
  379. }
  380. // TimeSeriesIterator manages a stream of *monitoringpb.TimeSeries.
  381. type TimeSeriesIterator struct {
  382. items []*monitoringpb.TimeSeries
  383. pageInfo *iterator.PageInfo
  384. nextFunc func() error
  385. // InternalFetch is for use by the Google Cloud Libraries only.
  386. // It is not part of the stable interface of this package.
  387. //
  388. // InternalFetch returns results from a single call to the underlying RPC.
  389. // The number of results is no greater than pageSize.
  390. // If there are no more results, nextPageToken is empty and err is nil.
  391. InternalFetch func(pageSize int, pageToken string) (results []*monitoringpb.TimeSeries, nextPageToken string, err error)
  392. }
  393. // PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
  394. func (it *TimeSeriesIterator) PageInfo() *iterator.PageInfo {
  395. return it.pageInfo
  396. }
  397. // Next returns the next result. Its second return value is iterator.Done if there are no more
  398. // results. Once Next returns Done, all subsequent calls will return Done.
  399. func (it *TimeSeriesIterator) Next() (*monitoringpb.TimeSeries, error) {
  400. var item *monitoringpb.TimeSeries
  401. if err := it.nextFunc(); err != nil {
  402. return item, err
  403. }
  404. item = it.items[0]
  405. it.items = it.items[1:]
  406. return item, nil
  407. }
  408. func (it *TimeSeriesIterator) bufLen() int {
  409. return len(it.items)
  410. }
  411. func (it *TimeSeriesIterator) takeBuf() interface{} {
  412. b := it.items
  413. it.items = nil
  414. return b
  415. }