logging_client.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. // Copyright 2018 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. // AUTO-GENERATED CODE. DO NOT EDIT.
  15. package logging
  16. import (
  17. "math"
  18. "time"
  19. "cloud.google.com/go/internal/version"
  20. gax "github.com/googleapis/gax-go"
  21. "golang.org/x/net/context"
  22. "google.golang.org/api/iterator"
  23. "google.golang.org/api/option"
  24. "google.golang.org/api/transport"
  25. monitoredrespb "google.golang.org/genproto/googleapis/api/monitoredres"
  26. loggingpb "google.golang.org/genproto/googleapis/logging/v2"
  27. "google.golang.org/grpc"
  28. "google.golang.org/grpc/codes"
  29. "google.golang.org/grpc/metadata"
  30. )
  31. // CallOptions contains the retry settings for each method of Client.
  32. type CallOptions struct {
  33. DeleteLog []gax.CallOption
  34. WriteLogEntries []gax.CallOption
  35. ListLogEntries []gax.CallOption
  36. ListMonitoredResourceDescriptors []gax.CallOption
  37. ListLogs []gax.CallOption
  38. }
  39. func defaultClientOptions() []option.ClientOption {
  40. return []option.ClientOption{
  41. option.WithEndpoint("logging.googleapis.com:443"),
  42. option.WithScopes(DefaultAuthScopes()...),
  43. }
  44. }
  45. func defaultCallOptions() *CallOptions {
  46. retry := map[[2]string][]gax.CallOption{
  47. {"default", "idempotent"}: {
  48. gax.WithRetry(func() gax.Retryer {
  49. return gax.OnCodes([]codes.Code{
  50. codes.DeadlineExceeded,
  51. codes.Internal,
  52. codes.Unavailable,
  53. }, gax.Backoff{
  54. Initial: 100 * time.Millisecond,
  55. Max: 1000 * time.Millisecond,
  56. Multiplier: 1.2,
  57. })
  58. }),
  59. },
  60. {"list", "idempotent"}: {
  61. gax.WithRetry(func() gax.Retryer {
  62. return gax.OnCodes([]codes.Code{
  63. codes.DeadlineExceeded,
  64. codes.Internal,
  65. codes.Unavailable,
  66. }, gax.Backoff{
  67. Initial: 100 * time.Millisecond,
  68. Max: 1000 * time.Millisecond,
  69. Multiplier: 1.2,
  70. })
  71. }),
  72. },
  73. }
  74. return &CallOptions{
  75. DeleteLog: retry[[2]string{"default", "idempotent"}],
  76. WriteLogEntries: retry[[2]string{"default", "non_idempotent"}],
  77. ListLogEntries: retry[[2]string{"list", "idempotent"}],
  78. ListMonitoredResourceDescriptors: retry[[2]string{"default", "idempotent"}],
  79. ListLogs: retry[[2]string{"default", "idempotent"}],
  80. }
  81. }
  82. // Client is a client for interacting with Stackdriver Logging API.
  83. type Client struct {
  84. // The connection to the service.
  85. conn *grpc.ClientConn
  86. // The gRPC API client.
  87. client loggingpb.LoggingServiceV2Client
  88. // The call options for this service.
  89. CallOptions *CallOptions
  90. // The x-goog-* metadata to be sent with each request.
  91. xGoogMetadata metadata.MD
  92. }
  93. // NewClient creates a new logging service v2 client.
  94. //
  95. // Service for ingesting and querying logs.
  96. func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error) {
  97. conn, err := transport.DialGRPC(ctx, append(defaultClientOptions(), opts...)...)
  98. if err != nil {
  99. return nil, err
  100. }
  101. c := &Client{
  102. conn: conn,
  103. CallOptions: defaultCallOptions(),
  104. client: loggingpb.NewLoggingServiceV2Client(conn),
  105. }
  106. c.SetGoogleClientInfo()
  107. return c, nil
  108. }
  109. // Connection returns the client's connection to the API service.
  110. func (c *Client) Connection() *grpc.ClientConn {
  111. return c.conn
  112. }
  113. // Close closes the connection to the API service. The user should invoke this when
  114. // the client is no longer required.
  115. func (c *Client) Close() error {
  116. return c.conn.Close()
  117. }
  118. // SetGoogleClientInfo sets the name and version of the application in
  119. // the `x-goog-api-client` header passed on each request. Intended for
  120. // use by Google-written clients.
  121. func (c *Client) SetGoogleClientInfo(keyval ...string) {
  122. kv := append([]string{"gl-go", version.Go()}, keyval...)
  123. kv = append(kv, "gapic", version.Repo, "gax", gax.Version, "grpc", grpc.Version)
  124. c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
  125. }
  126. // DeleteLog deletes all the log entries in a log.
  127. // The log reappears if it receives new entries.
  128. // Log entries written shortly before the delete operation might not be
  129. // deleted.
  130. func (c *Client) DeleteLog(ctx context.Context, req *loggingpb.DeleteLogRequest, opts ...gax.CallOption) error {
  131. ctx = insertMetadata(ctx, c.xGoogMetadata)
  132. opts = append(c.CallOptions.DeleteLog[0:len(c.CallOptions.DeleteLog):len(c.CallOptions.DeleteLog)], opts...)
  133. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  134. var err error
  135. _, err = c.client.DeleteLog(ctx, req, settings.GRPC...)
  136. return err
  137. }, opts...)
  138. return err
  139. }
  140. // WriteLogEntries ## Log entry resources
  141. //
  142. // Writes log entries to Stackdriver Logging. This API method is the
  143. // only way to send log entries to Stackdriver Logging. This method
  144. // is used, directly or indirectly, by the Stackdriver Logging agent
  145. // (fluentd) and all logging libraries configured to use Stackdriver
  146. // Logging.
  147. func (c *Client) WriteLogEntries(ctx context.Context, req *loggingpb.WriteLogEntriesRequest, opts ...gax.CallOption) (*loggingpb.WriteLogEntriesResponse, error) {
  148. ctx = insertMetadata(ctx, c.xGoogMetadata)
  149. opts = append(c.CallOptions.WriteLogEntries[0:len(c.CallOptions.WriteLogEntries):len(c.CallOptions.WriteLogEntries)], opts...)
  150. var resp *loggingpb.WriteLogEntriesResponse
  151. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  152. var err error
  153. resp, err = c.client.WriteLogEntries(ctx, req, settings.GRPC...)
  154. return err
  155. }, opts...)
  156. if err != nil {
  157. return nil, err
  158. }
  159. return resp, nil
  160. }
  161. // ListLogEntries lists log entries. Use this method to retrieve log entries from
  162. // Stackdriver Logging. For ways to export log entries, see
  163. // Exporting Logs (at /logging/docs/export).
  164. func (c *Client) ListLogEntries(ctx context.Context, req *loggingpb.ListLogEntriesRequest, opts ...gax.CallOption) *LogEntryIterator {
  165. ctx = insertMetadata(ctx, c.xGoogMetadata)
  166. opts = append(c.CallOptions.ListLogEntries[0:len(c.CallOptions.ListLogEntries):len(c.CallOptions.ListLogEntries)], opts...)
  167. it := &LogEntryIterator{}
  168. it.InternalFetch = func(pageSize int, pageToken string) ([]*loggingpb.LogEntry, string, error) {
  169. var resp *loggingpb.ListLogEntriesResponse
  170. req.PageToken = pageToken
  171. if pageSize > math.MaxInt32 {
  172. req.PageSize = math.MaxInt32
  173. } else {
  174. req.PageSize = int32(pageSize)
  175. }
  176. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  177. var err error
  178. resp, err = c.client.ListLogEntries(ctx, req, settings.GRPC...)
  179. return err
  180. }, opts...)
  181. if err != nil {
  182. return nil, "", err
  183. }
  184. return resp.Entries, resp.NextPageToken, nil
  185. }
  186. fetch := func(pageSize int, pageToken string) (string, error) {
  187. items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
  188. if err != nil {
  189. return "", err
  190. }
  191. it.items = append(it.items, items...)
  192. return nextPageToken, nil
  193. }
  194. it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
  195. return it
  196. }
  197. // ListMonitoredResourceDescriptors lists the descriptors for monitored resource types used by Stackdriver
  198. // Logging.
  199. func (c *Client) ListMonitoredResourceDescriptors(ctx context.Context, req *loggingpb.ListMonitoredResourceDescriptorsRequest, opts ...gax.CallOption) *MonitoredResourceDescriptorIterator {
  200. ctx = insertMetadata(ctx, c.xGoogMetadata)
  201. opts = append(c.CallOptions.ListMonitoredResourceDescriptors[0:len(c.CallOptions.ListMonitoredResourceDescriptors):len(c.CallOptions.ListMonitoredResourceDescriptors)], opts...)
  202. it := &MonitoredResourceDescriptorIterator{}
  203. it.InternalFetch = func(pageSize int, pageToken string) ([]*monitoredrespb.MonitoredResourceDescriptor, string, error) {
  204. var resp *loggingpb.ListMonitoredResourceDescriptorsResponse
  205. req.PageToken = pageToken
  206. if pageSize > math.MaxInt32 {
  207. req.PageSize = math.MaxInt32
  208. } else {
  209. req.PageSize = int32(pageSize)
  210. }
  211. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  212. var err error
  213. resp, err = c.client.ListMonitoredResourceDescriptors(ctx, req, settings.GRPC...)
  214. return err
  215. }, opts...)
  216. if err != nil {
  217. return nil, "", err
  218. }
  219. return resp.ResourceDescriptors, resp.NextPageToken, nil
  220. }
  221. fetch := func(pageSize int, pageToken string) (string, error) {
  222. items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
  223. if err != nil {
  224. return "", err
  225. }
  226. it.items = append(it.items, items...)
  227. return nextPageToken, nil
  228. }
  229. it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
  230. return it
  231. }
  232. // ListLogs lists the logs in projects, organizations, folders, or billing accounts.
  233. // Only logs that have entries are listed.
  234. func (c *Client) ListLogs(ctx context.Context, req *loggingpb.ListLogsRequest, opts ...gax.CallOption) *StringIterator {
  235. ctx = insertMetadata(ctx, c.xGoogMetadata)
  236. opts = append(c.CallOptions.ListLogs[0:len(c.CallOptions.ListLogs):len(c.CallOptions.ListLogs)], opts...)
  237. it := &StringIterator{}
  238. it.InternalFetch = func(pageSize int, pageToken string) ([]string, string, error) {
  239. var resp *loggingpb.ListLogsResponse
  240. req.PageToken = pageToken
  241. if pageSize > math.MaxInt32 {
  242. req.PageSize = math.MaxInt32
  243. } else {
  244. req.PageSize = int32(pageSize)
  245. }
  246. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  247. var err error
  248. resp, err = c.client.ListLogs(ctx, req, settings.GRPC...)
  249. return err
  250. }, opts...)
  251. if err != nil {
  252. return nil, "", err
  253. }
  254. return resp.LogNames, resp.NextPageToken, nil
  255. }
  256. fetch := func(pageSize int, pageToken string) (string, error) {
  257. items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
  258. if err != nil {
  259. return "", err
  260. }
  261. it.items = append(it.items, items...)
  262. return nextPageToken, nil
  263. }
  264. it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
  265. return it
  266. }
  267. // LogEntryIterator manages a stream of *loggingpb.LogEntry.
  268. type LogEntryIterator struct {
  269. items []*loggingpb.LogEntry
  270. pageInfo *iterator.PageInfo
  271. nextFunc func() error
  272. // InternalFetch is for use by the Google Cloud Libraries only.
  273. // It is not part of the stable interface of this package.
  274. //
  275. // InternalFetch returns results from a single call to the underlying RPC.
  276. // The number of results is no greater than pageSize.
  277. // If there are no more results, nextPageToken is empty and err is nil.
  278. InternalFetch func(pageSize int, pageToken string) (results []*loggingpb.LogEntry, nextPageToken string, err error)
  279. }
  280. // PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
  281. func (it *LogEntryIterator) PageInfo() *iterator.PageInfo {
  282. return it.pageInfo
  283. }
  284. // Next returns the next result. Its second return value is iterator.Done if there are no more
  285. // results. Once Next returns Done, all subsequent calls will return Done.
  286. func (it *LogEntryIterator) Next() (*loggingpb.LogEntry, error) {
  287. var item *loggingpb.LogEntry
  288. if err := it.nextFunc(); err != nil {
  289. return item, err
  290. }
  291. item = it.items[0]
  292. it.items = it.items[1:]
  293. return item, nil
  294. }
  295. func (it *LogEntryIterator) bufLen() int {
  296. return len(it.items)
  297. }
  298. func (it *LogEntryIterator) takeBuf() interface{} {
  299. b := it.items
  300. it.items = nil
  301. return b
  302. }
  303. // MonitoredResourceDescriptorIterator manages a stream of *monitoredrespb.MonitoredResourceDescriptor.
  304. type MonitoredResourceDescriptorIterator struct {
  305. items []*monitoredrespb.MonitoredResourceDescriptor
  306. pageInfo *iterator.PageInfo
  307. nextFunc func() error
  308. // InternalFetch is for use by the Google Cloud Libraries only.
  309. // It is not part of the stable interface of this package.
  310. //
  311. // InternalFetch returns results from a single call to the underlying RPC.
  312. // The number of results is no greater than pageSize.
  313. // If there are no more results, nextPageToken is empty and err is nil.
  314. InternalFetch func(pageSize int, pageToken string) (results []*monitoredrespb.MonitoredResourceDescriptor, nextPageToken string, err error)
  315. }
  316. // PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
  317. func (it *MonitoredResourceDescriptorIterator) PageInfo() *iterator.PageInfo {
  318. return it.pageInfo
  319. }
  320. // Next returns the next result. Its second return value is iterator.Done if there are no more
  321. // results. Once Next returns Done, all subsequent calls will return Done.
  322. func (it *MonitoredResourceDescriptorIterator) Next() (*monitoredrespb.MonitoredResourceDescriptor, error) {
  323. var item *monitoredrespb.MonitoredResourceDescriptor
  324. if err := it.nextFunc(); err != nil {
  325. return item, err
  326. }
  327. item = it.items[0]
  328. it.items = it.items[1:]
  329. return item, nil
  330. }
  331. func (it *MonitoredResourceDescriptorIterator) bufLen() int {
  332. return len(it.items)
  333. }
  334. func (it *MonitoredResourceDescriptorIterator) takeBuf() interface{} {
  335. b := it.items
  336. it.items = nil
  337. return b
  338. }
  339. // StringIterator manages a stream of string.
  340. type StringIterator struct {
  341. items []string
  342. pageInfo *iterator.PageInfo
  343. nextFunc func() error
  344. // InternalFetch is for use by the Google Cloud Libraries only.
  345. // It is not part of the stable interface of this package.
  346. //
  347. // InternalFetch returns results from a single call to the underlying RPC.
  348. // The number of results is no greater than pageSize.
  349. // If there are no more results, nextPageToken is empty and err is nil.
  350. InternalFetch func(pageSize int, pageToken string) (results []string, nextPageToken string, err error)
  351. }
  352. // PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
  353. func (it *StringIterator) PageInfo() *iterator.PageInfo {
  354. return it.pageInfo
  355. }
  356. // Next returns the next result. Its second return value is iterator.Done if there are no more
  357. // results. Once Next returns Done, all subsequent calls will return Done.
  358. func (it *StringIterator) Next() (string, error) {
  359. var item string
  360. if err := it.nextFunc(); err != nil {
  361. return item, err
  362. }
  363. item = it.items[0]
  364. it.items = it.items[1:]
  365. return item, nil
  366. }
  367. func (it *StringIterator) bufLen() int {
  368. return len(it.items)
  369. }
  370. func (it *StringIterator) takeBuf() interface{} {
  371. b := it.items
  372. it.items = nil
  373. return b
  374. }