| // Copyright 2025 Google LLC | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // https://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| // Code generated by protoc-gen-go_gapic. DO NOT EDIT. | |
| package logging | |
| import ( | |
| "bytes" | |
| "context" | |
| "errors" | |
| "fmt" | |
| "log/slog" | |
| "math" | |
| "net/http" | |
| "net/url" | |
| "time" | |
| loggingpb "cloud.google.com/go/logging/apiv2/loggingpb" | |
| longrunningpb "cloud.google.com/go/longrunning/autogen/longrunningpb" | |
| gax "github.com/googleapis/gax-go/v2" | |
| "google.golang.org/api/iterator" | |
| "google.golang.org/api/option" | |
| "google.golang.org/api/option/internaloption" | |
| gtransport "google.golang.org/api/transport/grpc" | |
| httptransport "google.golang.org/api/transport/http" | |
| monitoredrespb "google.golang.org/genproto/googleapis/api/monitoredres" | |
| "google.golang.org/grpc" | |
| "google.golang.org/grpc/codes" | |
| "google.golang.org/protobuf/encoding/protojson" | |
| "google.golang.org/protobuf/proto" | |
| ) | |
| var newClientHook clientHook | |
| // CallOptions contains the retry settings for each method of Client. | |
| type CallOptions struct { | |
| DeleteLog []gax.CallOption | |
| WriteLogEntries []gax.CallOption | |
| ListLogEntries []gax.CallOption | |
| ListMonitoredResourceDescriptors []gax.CallOption | |
| ListLogs []gax.CallOption | |
| TailLogEntries []gax.CallOption | |
| CancelOperation []gax.CallOption | |
| GetOperation []gax.CallOption | |
| ListOperations []gax.CallOption | |
| } | |
| func defaultGRPCClientOptions() []option.ClientOption { | |
| return []option.ClientOption{ | |
| internaloption.WithDefaultEndpoint("logging.googleapis.com:443"), | |
| internaloption.WithDefaultEndpointTemplate("logging.UNIVERSE_DOMAIN:443"), | |
| internaloption.WithDefaultMTLSEndpoint("logging.mtls.googleapis.com:443"), | |
| internaloption.WithDefaultUniverseDomain("googleapis.com"), | |
| internaloption.WithDefaultAudience("https://logging.googleapis.com/"), | |
| internaloption.WithDefaultScopes(DefaultAuthScopes()...), | |
| internaloption.EnableJwtWithScope(), | |
| internaloption.EnableNewAuthLibrary(), | |
| option.WithGRPCDialOption(grpc.WithDefaultCallOptions( | |
| grpc.MaxCallRecvMsgSize(math.MaxInt32))), | |
| } | |
| } | |
| func defaultCallOptions() *CallOptions { | |
| return &CallOptions{ | |
| DeleteLog: []gax.CallOption{ | |
| gax.WithTimeout(60000 * time.Millisecond), | |
| gax.WithRetry(func() gax.Retryer { | |
| return gax.OnCodes([]codes.Code{ | |
| codes.DeadlineExceeded, | |
| codes.Internal, | |
| codes.Unavailable, | |
| }, gax.Backoff{ | |
| Initial: 100 * time.Millisecond, | |
| Max: 60000 * time.Millisecond, | |
| Multiplier: 1.30, | |
| }) | |
| }), | |
| }, | |
| WriteLogEntries: []gax.CallOption{ | |
| gax.WithTimeout(60000 * time.Millisecond), | |
| gax.WithRetry(func() gax.Retryer { | |
| return gax.OnCodes([]codes.Code{ | |
| codes.DeadlineExceeded, | |
| codes.Internal, | |
| codes.Unavailable, | |
| }, gax.Backoff{ | |
| Initial: 100 * time.Millisecond, | |
| Max: 60000 * time.Millisecond, | |
| Multiplier: 1.30, | |
| }) | |
| }), | |
| }, | |
| ListLogEntries: []gax.CallOption{ | |
| gax.WithTimeout(60000 * time.Millisecond), | |
| gax.WithRetry(func() gax.Retryer { | |
| return gax.OnCodes([]codes.Code{ | |
| codes.DeadlineExceeded, | |
| codes.Internal, | |
| codes.Unavailable, | |
| }, gax.Backoff{ | |
| Initial: 100 * time.Millisecond, | |
| Max: 60000 * time.Millisecond, | |
| Multiplier: 1.30, | |
| }) | |
| }), | |
| }, | |
| ListMonitoredResourceDescriptors: []gax.CallOption{ | |
| gax.WithTimeout(60000 * time.Millisecond), | |
| gax.WithRetry(func() gax.Retryer { | |
| return gax.OnCodes([]codes.Code{ | |
| codes.DeadlineExceeded, | |
| codes.Internal, | |
| codes.Unavailable, | |
| }, gax.Backoff{ | |
| Initial: 100 * time.Millisecond, | |
| Max: 60000 * time.Millisecond, | |
| Multiplier: 1.30, | |
| }) | |
| }), | |
| }, | |
| ListLogs: []gax.CallOption{ | |
| gax.WithTimeout(60000 * time.Millisecond), | |
| gax.WithRetry(func() gax.Retryer { | |
| return gax.OnCodes([]codes.Code{ | |
| codes.DeadlineExceeded, | |
| codes.Internal, | |
| codes.Unavailable, | |
| }, gax.Backoff{ | |
| Initial: 100 * time.Millisecond, | |
| Max: 60000 * time.Millisecond, | |
| Multiplier: 1.30, | |
| }) | |
| }), | |
| }, | |
| TailLogEntries: []gax.CallOption{ | |
| gax.WithRetry(func() gax.Retryer { | |
| return gax.OnCodes([]codes.Code{ | |
| codes.DeadlineExceeded, | |
| codes.Internal, | |
| codes.Unavailable, | |
| }, gax.Backoff{ | |
| Initial: 100 * time.Millisecond, | |
| Max: 60000 * time.Millisecond, | |
| Multiplier: 1.30, | |
| }) | |
| }), | |
| }, | |
| CancelOperation: []gax.CallOption{}, | |
| GetOperation: []gax.CallOption{}, | |
| ListOperations: []gax.CallOption{}, | |
| } | |
| } | |
| func defaultRESTCallOptions() *CallOptions { | |
| return &CallOptions{ | |
| DeleteLog: []gax.CallOption{ | |
| gax.WithTimeout(60000 * time.Millisecond), | |
| gax.WithRetry(func() gax.Retryer { | |
| return gax.OnHTTPCodes(gax.Backoff{ | |
| Initial: 100 * time.Millisecond, | |
| Max: 60000 * time.Millisecond, | |
| Multiplier: 1.30, | |
| }, | |
| http.StatusGatewayTimeout, | |
| http.StatusInternalServerError, | |
| http.StatusServiceUnavailable) | |
| }), | |
| }, | |
| WriteLogEntries: []gax.CallOption{ | |
| gax.WithTimeout(60000 * time.Millisecond), | |
| gax.WithRetry(func() gax.Retryer { | |
| return gax.OnHTTPCodes(gax.Backoff{ | |
| Initial: 100 * time.Millisecond, | |
| Max: 60000 * time.Millisecond, | |
| Multiplier: 1.30, | |
| }, | |
| http.StatusGatewayTimeout, | |
| http.StatusInternalServerError, | |
| http.StatusServiceUnavailable) | |
| }), | |
| }, | |
| ListLogEntries: []gax.CallOption{ | |
| gax.WithTimeout(60000 * time.Millisecond), | |
| gax.WithRetry(func() gax.Retryer { | |
| return gax.OnHTTPCodes(gax.Backoff{ | |
| Initial: 100 * time.Millisecond, | |
| Max: 60000 * time.Millisecond, | |
| Multiplier: 1.30, | |
| }, | |
| http.StatusGatewayTimeout, | |
| http.StatusInternalServerError, | |
| http.StatusServiceUnavailable) | |
| }), | |
| }, | |
| ListMonitoredResourceDescriptors: []gax.CallOption{ | |
| gax.WithTimeout(60000 * time.Millisecond), | |
| gax.WithRetry(func() gax.Retryer { | |
| return gax.OnHTTPCodes(gax.Backoff{ | |
| Initial: 100 * time.Millisecond, | |
| Max: 60000 * time.Millisecond, | |
| Multiplier: 1.30, | |
| }, | |
| http.StatusGatewayTimeout, | |
| http.StatusInternalServerError, | |
| http.StatusServiceUnavailable) | |
| }), | |
| }, | |
| ListLogs: []gax.CallOption{ | |
| gax.WithTimeout(60000 * time.Millisecond), | |
| gax.WithRetry(func() gax.Retryer { | |
| return gax.OnHTTPCodes(gax.Backoff{ | |
| Initial: 100 * time.Millisecond, | |
| Max: 60000 * time.Millisecond, | |
| Multiplier: 1.30, | |
| }, | |
| http.StatusGatewayTimeout, | |
| http.StatusInternalServerError, | |
| http.StatusServiceUnavailable) | |
| }), | |
| }, | |
| TailLogEntries: []gax.CallOption{ | |
| gax.WithTimeout(3600000 * time.Millisecond), | |
| gax.WithRetry(func() gax.Retryer { | |
| return gax.OnHTTPCodes(gax.Backoff{ | |
| Initial: 100 * time.Millisecond, | |
| Max: 60000 * time.Millisecond, | |
| Multiplier: 1.30, | |
| }, | |
| http.StatusGatewayTimeout, | |
| http.StatusInternalServerError, | |
| http.StatusServiceUnavailable) | |
| }), | |
| }, | |
| CancelOperation: []gax.CallOption{}, | |
| GetOperation: []gax.CallOption{}, | |
| ListOperations: []gax.CallOption{}, | |
| } | |
| } | |
| // internalClient is an interface that defines the methods available from Cloud Logging API. | |
| type internalClient interface { | |
| Close() error | |
| setGoogleClientInfo(...string) | |
| Connection() *grpc.ClientConn | |
| DeleteLog(context.Context, *loggingpb.DeleteLogRequest, ...gax.CallOption) error | |
| WriteLogEntries(context.Context, *loggingpb.WriteLogEntriesRequest, ...gax.CallOption) (*loggingpb.WriteLogEntriesResponse, error) | |
| ListLogEntries(context.Context, *loggingpb.ListLogEntriesRequest, ...gax.CallOption) *LogEntryIterator | |
| ListMonitoredResourceDescriptors(context.Context, *loggingpb.ListMonitoredResourceDescriptorsRequest, ...gax.CallOption) *MonitoredResourceDescriptorIterator | |
| ListLogs(context.Context, *loggingpb.ListLogsRequest, ...gax.CallOption) *StringIterator | |
| TailLogEntries(context.Context, ...gax.CallOption) (loggingpb.LoggingServiceV2_TailLogEntriesClient, error) | |
| CancelOperation(context.Context, *longrunningpb.CancelOperationRequest, ...gax.CallOption) error | |
| GetOperation(context.Context, *longrunningpb.GetOperationRequest, ...gax.CallOption) (*longrunningpb.Operation, error) | |
| ListOperations(context.Context, *longrunningpb.ListOperationsRequest, ...gax.CallOption) *OperationIterator | |
| } | |
| // Client is a client for interacting with Cloud Logging API. | |
| // Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls. | |
| // | |
| // Service for ingesting and querying logs. | |
| type Client struct { | |
| // The internal transport-dependent client. | |
| internalClient internalClient | |
| // The call options for this service. | |
| CallOptions *CallOptions | |
| } | |
| // Wrapper methods routed to the internal client. | |
| // Close closes the connection to the API service. The user should invoke this when | |
| // the client is no longer required. | |
| func (c *Client) Close() error { | |
| return c.internalClient.Close() | |
| } | |
| // setGoogleClientInfo sets the name and version of the application in | |
| // the `x-goog-api-client` header passed on each request. Intended for | |
| // use by Google-written clients. | |
| func (c *Client) setGoogleClientInfo(keyval ...string) { | |
| c.internalClient.setGoogleClientInfo(keyval...) | |
| } | |
| // Connection returns a connection to the API service. | |
| // | |
| // Deprecated: Connections are now pooled so this method does not always | |
| // return the same resource. | |
| func (c *Client) Connection() *grpc.ClientConn { | |
| return c.internalClient.Connection() | |
| } | |
| // DeleteLog deletes all the log entries in a log for the _Default Log Bucket. The log | |
| // reappears if it receives new entries. Log entries written shortly before | |
| // the delete operation might not be deleted. Entries received after the | |
| // delete operation with a timestamp before the operation will be deleted. | |
| func (c *Client) DeleteLog(ctx context.Context, req *loggingpb.DeleteLogRequest, opts ...gax.CallOption) error { | |
| return c.internalClient.DeleteLog(ctx, req, opts...) | |
| } | |
| // WriteLogEntries writes log entries to Logging. This API method is the | |
| // only way to send log entries to Logging. This method | |
| // is used, directly or indirectly, by the Logging agent | |
| // (fluentd) and all logging libraries configured to use Logging. | |
| // A single request may contain log entries for a maximum of 1000 | |
| // different resources (projects, organizations, billing accounts or | |
| // folders) | |
| func (c *Client) WriteLogEntries(ctx context.Context, req *loggingpb.WriteLogEntriesRequest, opts ...gax.CallOption) (*loggingpb.WriteLogEntriesResponse, error) { | |
| return c.internalClient.WriteLogEntries(ctx, req, opts...) | |
| } | |
| // ListLogEntries lists log entries. Use this method to retrieve log entries that originated | |
| // from a project/folder/organization/billing account. For ways to export log | |
| // entries, see Exporting | |
| // Logs (at https://cloud.google.com/logging/docs/export). | |
| func (c *Client) ListLogEntries(ctx context.Context, req *loggingpb.ListLogEntriesRequest, opts ...gax.CallOption) *LogEntryIterator { | |
| return c.internalClient.ListLogEntries(ctx, req, opts...) | |
| } | |
| // ListMonitoredResourceDescriptors lists the descriptors for monitored resource types used by Logging. | |
| func (c *Client) ListMonitoredResourceDescriptors(ctx context.Context, req *loggingpb.ListMonitoredResourceDescriptorsRequest, opts ...gax.CallOption) *MonitoredResourceDescriptorIterator { | |
| return c.internalClient.ListMonitoredResourceDescriptors(ctx, req, opts...) | |
| } | |
| // ListLogs lists the logs in projects, organizations, folders, or billing accounts. | |
| // Only logs that have entries are listed. | |
| func (c *Client) ListLogs(ctx context.Context, req *loggingpb.ListLogsRequest, opts ...gax.CallOption) *StringIterator { | |
| return c.internalClient.ListLogs(ctx, req, opts...) | |
| } | |
| // TailLogEntries streaming read of log entries as they are ingested. Until the stream is | |
| // terminated, it will continue reading logs. | |
| // | |
| // This method is not supported for the REST transport. | |
| func (c *Client) TailLogEntries(ctx context.Context, opts ...gax.CallOption) (loggingpb.LoggingServiceV2_TailLogEntriesClient, error) { | |
| return c.internalClient.TailLogEntries(ctx, opts...) | |
| } | |
| // CancelOperation is a utility method from google.longrunning.Operations. | |
| func (c *Client) CancelOperation(ctx context.Context, req *longrunningpb.CancelOperationRequest, opts ...gax.CallOption) error { | |
| return c.internalClient.CancelOperation(ctx, req, opts...) | |
| } | |
| // GetOperation is a utility method from google.longrunning.Operations. | |
| func (c *Client) GetOperation(ctx context.Context, req *longrunningpb.GetOperationRequest, opts ...gax.CallOption) (*longrunningpb.Operation, error) { | |
| return c.internalClient.GetOperation(ctx, req, opts...) | |
| } | |
| // ListOperations is a utility method from google.longrunning.Operations. | |
| func (c *Client) ListOperations(ctx context.Context, req *longrunningpb.ListOperationsRequest, opts ...gax.CallOption) *OperationIterator { | |
| return c.internalClient.ListOperations(ctx, req, opts...) | |
| } | |
| // gRPCClient is a client for interacting with Cloud Logging API over gRPC transport. | |
| // | |
| // Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls. | |
| type gRPCClient struct { | |
| // Connection pool of gRPC connections to the service. | |
| connPool gtransport.ConnPool | |
| // Points back to the CallOptions field of the containing Client | |
| CallOptions **CallOptions | |
| // The gRPC API client. | |
| client loggingpb.LoggingServiceV2Client | |
| operationsClient longrunningpb.OperationsClient | |
| // The x-goog-* metadata to be sent with each request. | |
| xGoogHeaders []string | |
| logger *slog.Logger | |
| } | |
| // NewClient creates a new logging service v2 client based on gRPC. | |
| // The returned client must be Closed when it is done being used to clean up its underlying connections. | |
| // | |
| // Service for ingesting and querying logs. | |
| func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error) { | |
| clientOpts := defaultGRPCClientOptions() | |
| if newClientHook != nil { | |
| hookOpts, err := newClientHook(ctx, clientHookParams{}) | |
| if err != nil { | |
| return nil, err | |
| } | |
| clientOpts = append(clientOpts, hookOpts...) | |
| } | |
| connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...) | |
| if err != nil { | |
| return nil, err | |
| } | |
| client := Client{CallOptions: defaultCallOptions()} | |
| c := &gRPCClient{ | |
| connPool: connPool, | |
| client: loggingpb.NewLoggingServiceV2Client(connPool), | |
| CallOptions: &client.CallOptions, | |
| logger: internaloption.GetLogger(opts), | |
| operationsClient: longrunningpb.NewOperationsClient(connPool), | |
| } | |
| c.setGoogleClientInfo() | |
| client.internalClient = c | |
| return &client, nil | |
| } | |
| // Connection returns a connection to the API service. | |
| // | |
| // Deprecated: Connections are now pooled so this method does not always | |
| // return the same resource. | |
| func (c *gRPCClient) Connection() *grpc.ClientConn { | |
| return c.connPool.Conn() | |
| } | |
| // setGoogleClientInfo sets the name and version of the application in | |
| // the `x-goog-api-client` header passed on each request. Intended for | |
| // use by Google-written clients. | |
| func (c *gRPCClient) setGoogleClientInfo(keyval ...string) { | |
| kv := append([]string{"gl-go", gax.GoVersion}, keyval...) | |
| kv = append(kv, "gapic", getVersionClient(), "gax", gax.Version, "grpc", grpc.Version, "pb", protoVersion) | |
| c.xGoogHeaders = []string{ | |
| "x-goog-api-client", gax.XGoogHeader(kv...), | |
| } | |
| } | |
| // Close closes the connection to the API service. The user should invoke this when | |
| // the client is no longer required. | |
| func (c *gRPCClient) Close() error { | |
| return c.connPool.Close() | |
| } | |
| // Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls. | |
| type restClient struct { | |
| // The http endpoint to connect to. | |
| endpoint string | |
| // The http client. | |
| httpClient *http.Client | |
| // The x-goog-* headers to be sent with each request. | |
| xGoogHeaders []string | |
| // Points back to the CallOptions field of the containing Client | |
| CallOptions **CallOptions | |
| logger *slog.Logger | |
| } | |
| // NewRESTClient creates a new logging service v2 rest client. | |
| // | |
| // Service for ingesting and querying logs. | |
| func NewRESTClient(ctx context.Context, opts ...option.ClientOption) (*Client, error) { | |
| clientOpts := append(defaultRESTClientOptions(), opts...) | |
| httpClient, endpoint, err := httptransport.NewClient(ctx, clientOpts...) | |
| if err != nil { | |
| return nil, err | |
| } | |
| callOpts := defaultRESTCallOptions() | |
| c := &restClient{ | |
| endpoint: endpoint, | |
| httpClient: httpClient, | |
| CallOptions: &callOpts, | |
| logger: internaloption.GetLogger(opts), | |
| } | |
| c.setGoogleClientInfo() | |
| return &Client{internalClient: c, CallOptions: callOpts}, nil | |
| } | |
| func defaultRESTClientOptions() []option.ClientOption { | |
| return []option.ClientOption{ | |
| internaloption.WithDefaultEndpoint("https://logging.googleapis.com"), | |
| internaloption.WithDefaultEndpointTemplate("https://logging.UNIVERSE_DOMAIN"), | |
| internaloption.WithDefaultMTLSEndpoint("https://logging.mtls.googleapis.com"), | |
| internaloption.WithDefaultUniverseDomain("googleapis.com"), | |
| internaloption.WithDefaultAudience("https://logging.googleapis.com/"), | |
| internaloption.WithDefaultScopes(DefaultAuthScopes()...), | |
| internaloption.EnableNewAuthLibrary(), | |
| } | |
| } | |
| // setGoogleClientInfo sets the name and version of the application in | |
| // the `x-goog-api-client` header passed on each request. Intended for | |
| // use by Google-written clients. | |
| func (c *restClient) setGoogleClientInfo(keyval ...string) { | |
| kv := append([]string{"gl-go", gax.GoVersion}, keyval...) | |
| kv = append(kv, "gapic", getVersionClient(), "gax", gax.Version, "rest", "UNKNOWN", "pb", protoVersion) | |
| c.xGoogHeaders = []string{ | |
| "x-goog-api-client", gax.XGoogHeader(kv...), | |
| } | |
| } | |
| // Close closes the connection to the API service. The user should invoke this when | |
| // the client is no longer required. | |
| func (c *restClient) Close() error { | |
| // Replace httpClient with nil to force cleanup. | |
| c.httpClient = nil | |
| return nil | |
| } | |
| // Connection returns a connection to the API service. | |
| // | |
| // Deprecated: This method always returns nil. | |
| func (c *restClient) Connection() *grpc.ClientConn { | |
| return nil | |
| } | |
| func (c *gRPCClient) DeleteLog(ctx context.Context, req *loggingpb.DeleteLogRequest, opts ...gax.CallOption) error { | |
| hds := []string{"x-goog-request-params", fmt.Sprintf("%s=%v", "log_name", url.QueryEscape(req.GetLogName()))} | |
| hds = append(c.xGoogHeaders, hds...) | |
| ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...) | |
| opts = append((*c.CallOptions).DeleteLog[0:len((*c.CallOptions).DeleteLog):len((*c.CallOptions).DeleteLog)], opts...) | |
| err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { | |
| var err error | |
| _, err = executeRPC(ctx, c.client.DeleteLog, req, settings.GRPC, c.logger, "DeleteLog") | |
| return err | |
| }, opts...) | |
| return err | |
| } | |
| func (c *gRPCClient) WriteLogEntries(ctx context.Context, req *loggingpb.WriteLogEntriesRequest, opts ...gax.CallOption) (*loggingpb.WriteLogEntriesResponse, error) { | |
| ctx = gax.InsertMetadataIntoOutgoingContext(ctx, c.xGoogHeaders...) | |
| opts = append((*c.CallOptions).WriteLogEntries[0:len((*c.CallOptions).WriteLogEntries):len((*c.CallOptions).WriteLogEntries)], opts...) | |
| var resp *loggingpb.WriteLogEntriesResponse | |
| err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { | |
| var err error | |
| resp, err = executeRPC(ctx, c.client.WriteLogEntries, req, settings.GRPC, c.logger, "WriteLogEntries") | |
| return err | |
| }, opts...) | |
| if err != nil { | |
| return nil, err | |
| } | |
| return resp, nil | |
| } | |
| func (c *gRPCClient) ListLogEntries(ctx context.Context, req *loggingpb.ListLogEntriesRequest, opts ...gax.CallOption) *LogEntryIterator { | |
| ctx = gax.InsertMetadataIntoOutgoingContext(ctx, c.xGoogHeaders...) | |
| opts = append((*c.CallOptions).ListLogEntries[0:len((*c.CallOptions).ListLogEntries):len((*c.CallOptions).ListLogEntries)], opts...) | |
| it := &LogEntryIterator{} | |
| req = proto.Clone(req).(*loggingpb.ListLogEntriesRequest) | |
| it.InternalFetch = func(pageSize int, pageToken string) ([]*loggingpb.LogEntry, string, error) { | |
| resp := &loggingpb.ListLogEntriesResponse{} | |
| if pageToken != "" { | |
| req.PageToken = pageToken | |
| } | |
| if pageSize > math.MaxInt32 { | |
| req.PageSize = math.MaxInt32 | |
| } else if pageSize != 0 { | |
| req.PageSize = int32(pageSize) | |
| } | |
| err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { | |
| var err error | |
| resp, err = executeRPC(ctx, c.client.ListLogEntries, req, settings.GRPC, c.logger, "ListLogEntries") | |
| return err | |
| }, opts...) | |
| if err != nil { | |
| return nil, "", err | |
| } | |
| it.Response = resp | |
| return resp.GetEntries(), resp.GetNextPageToken(), nil | |
| } | |
| fetch := func(pageSize int, pageToken string) (string, error) { | |
| items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) | |
| if err != nil { | |
| return "", err | |
| } | |
| it.items = append(it.items, items...) | |
| return nextPageToken, nil | |
| } | |
| it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) | |
| it.pageInfo.MaxSize = int(req.GetPageSize()) | |
| it.pageInfo.Token = req.GetPageToken() | |
| return it | |
| } | |
| func (c *gRPCClient) ListMonitoredResourceDescriptors(ctx context.Context, req *loggingpb.ListMonitoredResourceDescriptorsRequest, opts ...gax.CallOption) *MonitoredResourceDescriptorIterator { | |
| ctx = gax.InsertMetadataIntoOutgoingContext(ctx, c.xGoogHeaders...) | |
| opts = append((*c.CallOptions).ListMonitoredResourceDescriptors[0:len((*c.CallOptions).ListMonitoredResourceDescriptors):len((*c.CallOptions).ListMonitoredResourceDescriptors)], opts...) | |
| it := &MonitoredResourceDescriptorIterator{} | |
| req = proto.Clone(req).(*loggingpb.ListMonitoredResourceDescriptorsRequest) | |
| it.InternalFetch = func(pageSize int, pageToken string) ([]*monitoredrespb.MonitoredResourceDescriptor, string, error) { | |
| resp := &loggingpb.ListMonitoredResourceDescriptorsResponse{} | |
| if pageToken != "" { | |
| req.PageToken = pageToken | |
| } | |
| if pageSize > math.MaxInt32 { | |
| req.PageSize = math.MaxInt32 | |
| } else if pageSize != 0 { | |
| req.PageSize = int32(pageSize) | |
| } | |
| err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { | |
| var err error | |
| resp, err = executeRPC(ctx, c.client.ListMonitoredResourceDescriptors, req, settings.GRPC, c.logger, "ListMonitoredResourceDescriptors") | |
| return err | |
| }, opts...) | |
| if err != nil { | |
| return nil, "", err | |
| } | |
| it.Response = resp | |
| return resp.GetResourceDescriptors(), resp.GetNextPageToken(), nil | |
| } | |
| fetch := func(pageSize int, pageToken string) (string, error) { | |
| items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) | |
| if err != nil { | |
| return "", err | |
| } | |
| it.items = append(it.items, items...) | |
| return nextPageToken, nil | |
| } | |
| it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) | |
| it.pageInfo.MaxSize = int(req.GetPageSize()) | |
| it.pageInfo.Token = req.GetPageToken() | |
| return it | |
| } | |
| func (c *gRPCClient) ListLogs(ctx context.Context, req *loggingpb.ListLogsRequest, opts ...gax.CallOption) *StringIterator { | |
| hds := []string{"x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))} | |
| hds = append(c.xGoogHeaders, hds...) | |
| ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...) | |
| opts = append((*c.CallOptions).ListLogs[0:len((*c.CallOptions).ListLogs):len((*c.CallOptions).ListLogs)], opts...) | |
| it := &StringIterator{} | |
| req = proto.Clone(req).(*loggingpb.ListLogsRequest) | |
| it.InternalFetch = func(pageSize int, pageToken string) ([]string, string, error) { | |
| resp := &loggingpb.ListLogsResponse{} | |
| if pageToken != "" { | |
| req.PageToken = pageToken | |
| } | |
| if pageSize > math.MaxInt32 { | |
| req.PageSize = math.MaxInt32 | |
| } else if pageSize != 0 { | |
| req.PageSize = int32(pageSize) | |
| } | |
| err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { | |
| var err error | |
| resp, err = executeRPC(ctx, c.client.ListLogs, req, settings.GRPC, c.logger, "ListLogs") | |
| return err | |
| }, opts...) | |
| if err != nil { | |
| return nil, "", err | |
| } | |
| it.Response = resp | |
| return resp.GetLogNames(), resp.GetNextPageToken(), nil | |
| } | |
| fetch := func(pageSize int, pageToken string) (string, error) { | |
| items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) | |
| if err != nil { | |
| return "", err | |
| } | |
| it.items = append(it.items, items...) | |
| return nextPageToken, nil | |
| } | |
| it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) | |
| it.pageInfo.MaxSize = int(req.GetPageSize()) | |
| it.pageInfo.Token = req.GetPageToken() | |
| return it | |
| } | |
| func (c *gRPCClient) TailLogEntries(ctx context.Context, opts ...gax.CallOption) (loggingpb.LoggingServiceV2_TailLogEntriesClient, error) { | |
| ctx = gax.InsertMetadataIntoOutgoingContext(ctx, c.xGoogHeaders...) | |
| var resp loggingpb.LoggingServiceV2_TailLogEntriesClient | |
| opts = append((*c.CallOptions).TailLogEntries[0:len((*c.CallOptions).TailLogEntries):len((*c.CallOptions).TailLogEntries)], opts...) | |
| err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { | |
| var err error | |
| c.logger.DebugContext(ctx, "api streaming client request", "serviceName", serviceName, "rpcName", "TailLogEntries") | |
| resp, err = c.client.TailLogEntries(ctx, settings.GRPC...) | |
| c.logger.DebugContext(ctx, "api streaming client response", "serviceName", serviceName, "rpcName", "TailLogEntries") | |
| return err | |
| }, opts...) | |
| if err != nil { | |
| return nil, err | |
| } | |
| return resp, nil | |
| } | |
| func (c *gRPCClient) CancelOperation(ctx context.Context, req *longrunningpb.CancelOperationRequest, opts ...gax.CallOption) error { | |
| hds := []string{"x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))} | |
| hds = append(c.xGoogHeaders, hds...) | |
| ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...) | |
| opts = append((*c.CallOptions).CancelOperation[0:len((*c.CallOptions).CancelOperation):len((*c.CallOptions).CancelOperation)], opts...) | |
| err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { | |
| var err error | |
| _, err = executeRPC(ctx, c.operationsClient.CancelOperation, req, settings.GRPC, c.logger, "CancelOperation") | |
| return err | |
| }, opts...) | |
| return err | |
| } | |
| func (c *gRPCClient) GetOperation(ctx context.Context, req *longrunningpb.GetOperationRequest, opts ...gax.CallOption) (*longrunningpb.Operation, error) { | |
| hds := []string{"x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))} | |
| hds = append(c.xGoogHeaders, hds...) | |
| ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...) | |
| opts = append((*c.CallOptions).GetOperation[0:len((*c.CallOptions).GetOperation):len((*c.CallOptions).GetOperation)], opts...) | |
| var resp *longrunningpb.Operation | |
| err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { | |
| var err error | |
| resp, err = executeRPC(ctx, c.operationsClient.GetOperation, req, settings.GRPC, c.logger, "GetOperation") | |
| return err | |
| }, opts...) | |
| if err != nil { | |
| return nil, err | |
| } | |
| return resp, nil | |
| } | |
| func (c *gRPCClient) ListOperations(ctx context.Context, req *longrunningpb.ListOperationsRequest, opts ...gax.CallOption) *OperationIterator { | |
| hds := []string{"x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))} | |
| hds = append(c.xGoogHeaders, hds...) | |
| ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...) | |
| opts = append((*c.CallOptions).ListOperations[0:len((*c.CallOptions).ListOperations):len((*c.CallOptions).ListOperations)], opts...) | |
| it := &OperationIterator{} | |
| req = proto.Clone(req).(*longrunningpb.ListOperationsRequest) | |
| it.InternalFetch = func(pageSize int, pageToken string) ([]*longrunningpb.Operation, string, error) { | |
| resp := &longrunningpb.ListOperationsResponse{} | |
| if pageToken != "" { | |
| req.PageToken = pageToken | |
| } | |
| if pageSize > math.MaxInt32 { | |
| req.PageSize = math.MaxInt32 | |
| } else if pageSize != 0 { | |
| req.PageSize = int32(pageSize) | |
| } | |
| err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { | |
| var err error | |
| resp, err = executeRPC(ctx, c.operationsClient.ListOperations, req, settings.GRPC, c.logger, "ListOperations") | |
| return err | |
| }, opts...) | |
| if err != nil { | |
| return nil, "", err | |
| } | |
| it.Response = resp | |
| return resp.GetOperations(), resp.GetNextPageToken(), nil | |
| } | |
| fetch := func(pageSize int, pageToken string) (string, error) { | |
| items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) | |
| if err != nil { | |
| return "", err | |
| } | |
| it.items = append(it.items, items...) | |
| return nextPageToken, nil | |
| } | |
| it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) | |
| it.pageInfo.MaxSize = int(req.GetPageSize()) | |
| it.pageInfo.Token = req.GetPageToken() | |
| return it | |
| } | |
| // DeleteLog deletes all the log entries in a log for the _Default Log Bucket. The log | |
| // reappears if it receives new entries. Log entries written shortly before | |
| // the delete operation might not be deleted. Entries received after the | |
| // delete operation with a timestamp before the operation will be deleted. | |
| func (c *restClient) DeleteLog(ctx context.Context, req *loggingpb.DeleteLogRequest, opts ...gax.CallOption) error { | |
| baseUrl, err := url.Parse(c.endpoint) | |
| if err != nil { | |
| return err | |
| } | |
| baseUrl.Path += fmt.Sprintf("/v2/%v", req.GetLogName()) | |
| params := url.Values{} | |
| params.Add("$alt", "json;enum-encoding=int") | |
| baseUrl.RawQuery = params.Encode() | |
| // Build HTTP headers from client and context metadata. | |
| hds := []string{"x-goog-request-params", fmt.Sprintf("%s=%v", "log_name", url.QueryEscape(req.GetLogName()))} | |
| hds = append(c.xGoogHeaders, hds...) | |
| hds = append(hds, "Content-Type", "application/json") | |
| headers := gax.BuildHeaders(ctx, hds...) | |
| return gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { | |
| if settings.Path != "" { | |
| baseUrl.Path = settings.Path | |
| } | |
| httpReq, err := http.NewRequest("DELETE", baseUrl.String(), nil) | |
| if err != nil { | |
| return err | |
| } | |
| httpReq = httpReq.WithContext(ctx) | |
| httpReq.Header = headers | |
| _, err = executeHTTPRequest(ctx, c.httpClient, httpReq, c.logger, nil, "DeleteLog") | |
| return err | |
| }, opts...) | |
| } | |
| // WriteLogEntries writes log entries to Logging. This API method is the | |
| // only way to send log entries to Logging. This method | |
| // is used, directly or indirectly, by the Logging agent | |
| // (fluentd) and all logging libraries configured to use Logging. | |
| // A single request may contain log entries for a maximum of 1000 | |
| // different resources (projects, organizations, billing accounts or | |
| // folders) | |
| func (c *restClient) WriteLogEntries(ctx context.Context, req *loggingpb.WriteLogEntriesRequest, opts ...gax.CallOption) (*loggingpb.WriteLogEntriesResponse, error) { | |
| m := protojson.MarshalOptions{AllowPartial: true, UseEnumNumbers: true} | |
| jsonReq, err := m.Marshal(req) | |
| if err != nil { | |
| return nil, err | |
| } | |
| baseUrl, err := url.Parse(c.endpoint) | |
| if err != nil { | |
| return nil, err | |
| } | |
| baseUrl.Path += fmt.Sprintf("/v2/entries:write") | |
| params := url.Values{} | |
| params.Add("$alt", "json;enum-encoding=int") | |
| baseUrl.RawQuery = params.Encode() | |
| // Build HTTP headers from client and context metadata. | |
| hds := append(c.xGoogHeaders, "Content-Type", "application/json") | |
| headers := gax.BuildHeaders(ctx, hds...) | |
| opts = append((*c.CallOptions).WriteLogEntries[0:len((*c.CallOptions).WriteLogEntries):len((*c.CallOptions).WriteLogEntries)], opts...) | |
| unm := protojson.UnmarshalOptions{AllowPartial: true, DiscardUnknown: true} | |
| resp := &loggingpb.WriteLogEntriesResponse{} | |
| e := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { | |
| if settings.Path != "" { | |
| baseUrl.Path = settings.Path | |
| } | |
| httpReq, err := http.NewRequest("POST", baseUrl.String(), bytes.NewReader(jsonReq)) | |
| if err != nil { | |
| return err | |
| } | |
| httpReq = httpReq.WithContext(ctx) | |
| httpReq.Header = headers | |
| buf, err := executeHTTPRequest(ctx, c.httpClient, httpReq, c.logger, jsonReq, "WriteLogEntries") | |
| if err != nil { | |
| return err | |
| } | |
| if err := unm.Unmarshal(buf, resp); err != nil { | |
| return err | |
| } | |
| return nil | |
| }, opts...) | |
| if e != nil { | |
| return nil, e | |
| } | |
| return resp, nil | |
| } | |
| // ListLogEntries lists log entries. Use this method to retrieve log entries that originated | |
| // from a project/folder/organization/billing account. For ways to export log | |
| // entries, see Exporting | |
| // Logs (at https://cloud.google.com/logging/docs/export). | |
| func (c *restClient) ListLogEntries(ctx context.Context, req *loggingpb.ListLogEntriesRequest, opts ...gax.CallOption) *LogEntryIterator { | |
| it := &LogEntryIterator{} | |
| req = proto.Clone(req).(*loggingpb.ListLogEntriesRequest) | |
| m := protojson.MarshalOptions{AllowPartial: true, UseEnumNumbers: true} | |
| unm := protojson.UnmarshalOptions{AllowPartial: true, DiscardUnknown: true} | |
| it.InternalFetch = func(pageSize int, pageToken string) ([]*loggingpb.LogEntry, string, error) { | |
| resp := &loggingpb.ListLogEntriesResponse{} | |
| if pageToken != "" { | |
| req.PageToken = pageToken | |
| } | |
| if pageSize > math.MaxInt32 { | |
| req.PageSize = math.MaxInt32 | |
| } else if pageSize != 0 { | |
| req.PageSize = int32(pageSize) | |
| } | |
| jsonReq, err := m.Marshal(req) | |
| if err != nil { | |
| return nil, "", err | |
| } | |
| baseUrl, err := url.Parse(c.endpoint) | |
| if err != nil { | |
| return nil, "", err | |
| } | |
| baseUrl.Path += fmt.Sprintf("/v2/entries:list") | |
| params := url.Values{} | |
| params.Add("$alt", "json;enum-encoding=int") | |
| baseUrl.RawQuery = params.Encode() | |
| // Build HTTP headers from client and context metadata. | |
| hds := append(c.xGoogHeaders, "Content-Type", "application/json") | |
| headers := gax.BuildHeaders(ctx, hds...) | |
| e := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { | |
| if settings.Path != "" { | |
| baseUrl.Path = settings.Path | |
| } | |
| httpReq, err := http.NewRequest("POST", baseUrl.String(), bytes.NewReader(jsonReq)) | |
| if err != nil { | |
| return err | |
| } | |
| httpReq.Header = headers | |
| buf, err := executeHTTPRequest(ctx, c.httpClient, httpReq, c.logger, jsonReq, "ListLogEntries") | |
| if err != nil { | |
| return err | |
| } | |
| if err := unm.Unmarshal(buf, resp); err != nil { | |
| return err | |
| } | |
| return nil | |
| }, opts...) | |
| if e != nil { | |
| return nil, "", e | |
| } | |
| it.Response = resp | |
| return resp.GetEntries(), resp.GetNextPageToken(), nil | |
| } | |
| fetch := func(pageSize int, pageToken string) (string, error) { | |
| items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) | |
| if err != nil { | |
| return "", err | |
| } | |
| it.items = append(it.items, items...) | |
| return nextPageToken, nil | |
| } | |
| it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) | |
| it.pageInfo.MaxSize = int(req.GetPageSize()) | |
| it.pageInfo.Token = req.GetPageToken() | |
| return it | |
| } | |
| // ListMonitoredResourceDescriptors lists the descriptors for monitored resource types used by Logging. | |
| func (c *restClient) ListMonitoredResourceDescriptors(ctx context.Context, req *loggingpb.ListMonitoredResourceDescriptorsRequest, opts ...gax.CallOption) *MonitoredResourceDescriptorIterator { | |
| it := &MonitoredResourceDescriptorIterator{} | |
| req = proto.Clone(req).(*loggingpb.ListMonitoredResourceDescriptorsRequest) | |
| unm := protojson.UnmarshalOptions{AllowPartial: true, DiscardUnknown: true} | |
| it.InternalFetch = func(pageSize int, pageToken string) ([]*monitoredrespb.MonitoredResourceDescriptor, string, error) { | |
| resp := &loggingpb.ListMonitoredResourceDescriptorsResponse{} | |
| if pageToken != "" { | |
| req.PageToken = pageToken | |
| } | |
| if pageSize > math.MaxInt32 { | |
| req.PageSize = math.MaxInt32 | |
| } else if pageSize != 0 { | |
| req.PageSize = int32(pageSize) | |
| } | |
| baseUrl, err := url.Parse(c.endpoint) | |
| if err != nil { | |
| return nil, "", err | |
| } | |
| baseUrl.Path += fmt.Sprintf("/v2/monitoredResourceDescriptors") | |
| params := url.Values{} | |
| params.Add("$alt", "json;enum-encoding=int") | |
| if req.GetPageSize() != 0 { | |
| params.Add("pageSize", fmt.Sprintf("%v", req.GetPageSize())) | |
| } | |
| if req.GetPageToken() != "" { | |
| params.Add("pageToken", fmt.Sprintf("%v", req.GetPageToken())) | |
| } | |
| baseUrl.RawQuery = params.Encode() | |
| // Build HTTP headers from client and context metadata. | |
| hds := append(c.xGoogHeaders, "Content-Type", "application/json") | |
| headers := gax.BuildHeaders(ctx, hds...) | |
| e := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { | |
| if settings.Path != "" { | |
| baseUrl.Path = settings.Path | |
| } | |
| httpReq, err := http.NewRequest("GET", baseUrl.String(), nil) | |
| if err != nil { | |
| return err | |
| } | |
| httpReq.Header = headers | |
| buf, err := executeHTTPRequest(ctx, c.httpClient, httpReq, c.logger, nil, "ListMonitoredResourceDescriptors") | |
| if err != nil { | |
| return err | |
| } | |
| if err := unm.Unmarshal(buf, resp); err != nil { | |
| return err | |
| } | |
| return nil | |
| }, opts...) | |
| if e != nil { | |
| return nil, "", e | |
| } | |
| it.Response = resp | |
| return resp.GetResourceDescriptors(), resp.GetNextPageToken(), nil | |
| } | |
| fetch := func(pageSize int, pageToken string) (string, error) { | |
| items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) | |
| if err != nil { | |
| return "", err | |
| } | |
| it.items = append(it.items, items...) | |
| return nextPageToken, nil | |
| } | |
| it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) | |
| it.pageInfo.MaxSize = int(req.GetPageSize()) | |
| it.pageInfo.Token = req.GetPageToken() | |
| return it | |
| } | |
| // ListLogs lists the logs in projects, organizations, folders, or billing accounts. | |
| // Only logs that have entries are listed. | |
| func (c *restClient) ListLogs(ctx context.Context, req *loggingpb.ListLogsRequest, opts ...gax.CallOption) *StringIterator { | |
| it := &StringIterator{} | |
| req = proto.Clone(req).(*loggingpb.ListLogsRequest) | |
| unm := protojson.UnmarshalOptions{AllowPartial: true, DiscardUnknown: true} | |
| it.InternalFetch = func(pageSize int, pageToken string) ([]string, string, error) { | |
| resp := &loggingpb.ListLogsResponse{} | |
| if pageToken != "" { | |
| req.PageToken = pageToken | |
| } | |
| if pageSize > math.MaxInt32 { | |
| req.PageSize = math.MaxInt32 | |
| } else if pageSize != 0 { | |
| req.PageSize = int32(pageSize) | |
| } | |
| baseUrl, err := url.Parse(c.endpoint) | |
| if err != nil { | |
| return nil, "", err | |
| } | |
| baseUrl.Path += fmt.Sprintf("/v2/%v/logs", req.GetParent()) | |
| params := url.Values{} | |
| params.Add("$alt", "json;enum-encoding=int") | |
| if req.GetPageSize() != 0 { | |
| params.Add("pageSize", fmt.Sprintf("%v", req.GetPageSize())) | |
| } | |
| if req.GetPageToken() != "" { | |
| params.Add("pageToken", fmt.Sprintf("%v", req.GetPageToken())) | |
| } | |
| if items := req.GetResourceNames(); len(items) > 0 { | |
| for _, item := range items { | |
| params.Add("resourceNames", fmt.Sprintf("%v", item)) | |
| } | |
| } | |
| baseUrl.RawQuery = params.Encode() | |
| // Build HTTP headers from client and context metadata. | |
| hds := append(c.xGoogHeaders, "Content-Type", "application/json") | |
| headers := gax.BuildHeaders(ctx, hds...) | |
| e := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { | |
| if settings.Path != "" { | |
| baseUrl.Path = settings.Path | |
| } | |
| httpReq, err := http.NewRequest("GET", baseUrl.String(), nil) | |
| if err != nil { | |
| return err | |
| } | |
| httpReq.Header = headers | |
| buf, err := executeHTTPRequest(ctx, c.httpClient, httpReq, c.logger, nil, "ListLogs") | |
| if err != nil { | |
| return err | |
| } | |
| if err := unm.Unmarshal(buf, resp); err != nil { | |
| return err | |
| } | |
| return nil | |
| }, opts...) | |
| if e != nil { | |
| return nil, "", e | |
| } | |
| it.Response = resp | |
| return resp.GetLogNames(), resp.GetNextPageToken(), nil | |
| } | |
| fetch := func(pageSize int, pageToken string) (string, error) { | |
| items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) | |
| if err != nil { | |
| return "", err | |
| } | |
| it.items = append(it.items, items...) | |
| return nextPageToken, nil | |
| } | |
| it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) | |
| it.pageInfo.MaxSize = int(req.GetPageSize()) | |
| it.pageInfo.Token = req.GetPageToken() | |
| return it | |
| } | |
| // TailLogEntries streaming read of log entries as they are ingested. Until the stream is | |
| // terminated, it will continue reading logs. | |
| // | |
| // This method is not supported for the REST transport. | |
| func (c *restClient) TailLogEntries(ctx context.Context, opts ...gax.CallOption) (loggingpb.LoggingServiceV2_TailLogEntriesClient, error) { | |
| return nil, errors.New("TailLogEntries not yet supported for REST clients") | |
| } | |
| // CancelOperation is a utility method from google.longrunning.Operations. | |
| func (c *restClient) CancelOperation(ctx context.Context, req *longrunningpb.CancelOperationRequest, opts ...gax.CallOption) error { | |
| m := protojson.MarshalOptions{AllowPartial: true, UseEnumNumbers: true} | |
| jsonReq, err := m.Marshal(req) | |
| if err != nil { | |
| return err | |
| } | |
| baseUrl, err := url.Parse(c.endpoint) | |
| if err != nil { | |
| return err | |
| } | |
| baseUrl.Path += fmt.Sprintf("/v2/%v:cancel", req.GetName()) | |
| params := url.Values{} | |
| params.Add("$alt", "json;enum-encoding=int") | |
| baseUrl.RawQuery = params.Encode() | |
| // Build HTTP headers from client and context metadata. | |
| hds := []string{"x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))} | |
| hds = append(c.xGoogHeaders, hds...) | |
| hds = append(hds, "Content-Type", "application/json") | |
| headers := gax.BuildHeaders(ctx, hds...) | |
| return gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { | |
| if settings.Path != "" { | |
| baseUrl.Path = settings.Path | |
| } | |
| httpReq, err := http.NewRequest("POST", baseUrl.String(), bytes.NewReader(jsonReq)) | |
| if err != nil { | |
| return err | |
| } | |
| httpReq = httpReq.WithContext(ctx) | |
| httpReq.Header = headers | |
| _, err = executeHTTPRequest(ctx, c.httpClient, httpReq, c.logger, jsonReq, "CancelOperation") | |
| return err | |
| }, opts...) | |
| } | |
| // GetOperation is a utility method from google.longrunning.Operations. | |
| func (c *restClient) GetOperation(ctx context.Context, req *longrunningpb.GetOperationRequest, opts ...gax.CallOption) (*longrunningpb.Operation, error) { | |
| baseUrl, err := url.Parse(c.endpoint) | |
| if err != nil { | |
| return nil, err | |
| } | |
| baseUrl.Path += fmt.Sprintf("/v2/%v", req.GetName()) | |
| params := url.Values{} | |
| params.Add("$alt", "json;enum-encoding=int") | |
| baseUrl.RawQuery = params.Encode() | |
| // Build HTTP headers from client and context metadata. | |
| hds := []string{"x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))} | |
| hds = append(c.xGoogHeaders, hds...) | |
| hds = append(hds, "Content-Type", "application/json") | |
| headers := gax.BuildHeaders(ctx, hds...) | |
| opts = append((*c.CallOptions).GetOperation[0:len((*c.CallOptions).GetOperation):len((*c.CallOptions).GetOperation)], opts...) | |
| unm := protojson.UnmarshalOptions{AllowPartial: true, DiscardUnknown: true} | |
| resp := &longrunningpb.Operation{} | |
| e := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { | |
| if settings.Path != "" { | |
| baseUrl.Path = settings.Path | |
| } | |
| httpReq, err := http.NewRequest("GET", baseUrl.String(), nil) | |
| if err != nil { | |
| return err | |
| } | |
| httpReq = httpReq.WithContext(ctx) | |
| httpReq.Header = headers | |
| buf, err := executeHTTPRequest(ctx, c.httpClient, httpReq, c.logger, nil, "GetOperation") | |
| if err != nil { | |
| return err | |
| } | |
| if err := unm.Unmarshal(buf, resp); err != nil { | |
| return err | |
| } | |
| return nil | |
| }, opts...) | |
| if e != nil { | |
| return nil, e | |
| } | |
| return resp, nil | |
| } | |
| // ListOperations is a utility method from google.longrunning.Operations. | |
| func (c *restClient) ListOperations(ctx context.Context, req *longrunningpb.ListOperationsRequest, opts ...gax.CallOption) *OperationIterator { | |
| it := &OperationIterator{} | |
| req = proto.Clone(req).(*longrunningpb.ListOperationsRequest) | |
| unm := protojson.UnmarshalOptions{AllowPartial: true, DiscardUnknown: true} | |
| it.InternalFetch = func(pageSize int, pageToken string) ([]*longrunningpb.Operation, string, error) { | |
| resp := &longrunningpb.ListOperationsResponse{} | |
| if pageToken != "" { | |
| req.PageToken = pageToken | |
| } | |
| if pageSize > math.MaxInt32 { | |
| req.PageSize = math.MaxInt32 | |
| } else if pageSize != 0 { | |
| req.PageSize = int32(pageSize) | |
| } | |
| baseUrl, err := url.Parse(c.endpoint) | |
| if err != nil { | |
| return nil, "", err | |
| } | |
| baseUrl.Path += fmt.Sprintf("/v2/%v/operations", req.GetName()) | |
| params := url.Values{} | |
| params.Add("$alt", "json;enum-encoding=int") | |
| if req.GetFilter() != "" { | |
| params.Add("filter", fmt.Sprintf("%v", req.GetFilter())) | |
| } | |
| if req.GetPageSize() != 0 { | |
| params.Add("pageSize", fmt.Sprintf("%v", req.GetPageSize())) | |
| } | |
| if req.GetPageToken() != "" { | |
| params.Add("pageToken", fmt.Sprintf("%v", req.GetPageToken())) | |
| } | |
| baseUrl.RawQuery = params.Encode() | |
| // Build HTTP headers from client and context metadata. | |
| hds := append(c.xGoogHeaders, "Content-Type", "application/json") | |
| headers := gax.BuildHeaders(ctx, hds...) | |
| e := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { | |
| if settings.Path != "" { | |
| baseUrl.Path = settings.Path | |
| } | |
| httpReq, err := http.NewRequest("GET", baseUrl.String(), nil) | |
| if err != nil { | |
| return err | |
| } | |
| httpReq.Header = headers | |
| buf, err := executeHTTPRequest(ctx, c.httpClient, httpReq, c.logger, nil, "ListOperations") | |
| if err != nil { | |
| return err | |
| } | |
| if err := unm.Unmarshal(buf, resp); err != nil { | |
| return err | |
| } | |
| return nil | |
| }, opts...) | |
| if e != nil { | |
| return nil, "", e | |
| } | |
| it.Response = resp | |
| return resp.GetOperations(), resp.GetNextPageToken(), nil | |
| } | |
| fetch := func(pageSize int, pageToken string) (string, error) { | |
| items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) | |
| if err != nil { | |
| return "", err | |
| } | |
| it.items = append(it.items, items...) | |
| return nextPageToken, nil | |
| } | |
| it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) | |
| it.pageInfo.MaxSize = int(req.GetPageSize()) | |
| it.pageInfo.Token = req.GetPageToken() | |
| return it | |
| } |