diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-06-13 20:23:21 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-06-13 20:23:21 +0200 |
| commit | b41e96b421acda1761e9ba2ee17da16efad436cd (patch) | |
| tree | b6200bf1c3665161b6d76453bb56f7bd5ce32f42 /vendor/cloud.google.com/go/logging/logadmin | |
| parent | f58147fb5ea43427d38c2a4437f35647138fbf9d (diff) | |
vendor: switch from dep to godep
dep tool vendored too much code (100MB) including tests and unused packages.
godep vendored significantly less (12MB) without tests and unused packages.
The main advantage is that pre-Go1.9 toolchain does not run tests
of all vendor packages now.
Diffstat (limited to 'vendor/cloud.google.com/go/logging/logadmin')
14 files changed, 0 insertions, 1975 deletions
diff --git a/vendor/cloud.google.com/go/logging/logadmin/example_entry_iterator_test.go b/vendor/cloud.google.com/go/logging/logadmin/example_entry_iterator_test.go deleted file mode 100644 index 39e6f5758..000000000 --- a/vendor/cloud.google.com/go/logging/logadmin/example_entry_iterator_test.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// 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 -// -// http://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. - -package logadmin_test - -import ( - "fmt" - "time" - - "cloud.google.com/go/logging/logadmin" - "golang.org/x/net/context" - "google.golang.org/api/iterator" -) - -func ExampleClient_Entries() { - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - it := client.Entries(ctx, logadmin.Filter(`logName = "projects/my-project/logs/my-log"`)) - _ = it // TODO: iterate using Next or iterator.Pager. -} - -func ExampleFilter_timestamp() { - // This example demonstrates how to list the last 24 hours of log entries. - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - oneDayAgo := time.Now().Add(-24 * time.Hour) - t := oneDayAgo.Format(time.RFC3339) // Logging API wants timestamps in RFC 3339 format. - it := client.Entries(ctx, logadmin.Filter(fmt.Sprintf(`timestamp > "%s"`, t))) - _ = it // TODO: iterate using Next or iterator.Pager. -} - -func ExampleEntryIterator_Next() { - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - it := client.Entries(ctx) - for { - entry, err := it.Next() - if err == iterator.Done { - break - } - if err != nil { - // TODO: Handle error. - } - fmt.Println(entry) - } -} diff --git a/vendor/cloud.google.com/go/logging/logadmin/example_metric_iterator_test.go b/vendor/cloud.google.com/go/logging/logadmin/example_metric_iterator_test.go deleted file mode 100644 index 2e876e9f8..000000000 --- a/vendor/cloud.google.com/go/logging/logadmin/example_metric_iterator_test.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// 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 -// -// http://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. - -package logadmin_test - -import ( - "fmt" - - "cloud.google.com/go/logging/logadmin" - "golang.org/x/net/context" - "google.golang.org/api/iterator" -) - -func ExampleClient_Metrics() { - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - it := client.Metrics(ctx) - _ = it // TODO: iterate using Next or iterator.Pager. -} - -func ExampleMetricIterator_Next() { - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - it := client.Metrics(ctx) - for { - metric, err := it.Next() - if err == iterator.Done { - break - } - if err != nil { - // TODO: Handle error. - } - fmt.Println(metric) - } -} diff --git a/vendor/cloud.google.com/go/logging/logadmin/example_paging_test.go b/vendor/cloud.google.com/go/logging/logadmin/example_paging_test.go deleted file mode 100644 index 036eeeb99..000000000 --- a/vendor/cloud.google.com/go/logging/logadmin/example_paging_test.go +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// 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 -// -// http://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. - -package logadmin_test - -import ( - "bytes" - "flag" - "fmt" - "html/template" - "log" - "net/http" - - "cloud.google.com/go/logging" - "cloud.google.com/go/logging/logadmin" - "golang.org/x/net/context" - "google.golang.org/api/iterator" -) - -var ( - client *logadmin.Client - projectID = flag.String("project-id", "", "ID of the project to use") -) - -func ExampleClient_Entries_pagination() { - // This example demonstrates how to iterate through items a page at a time - // even if each successive page is fetched by a different process. It is a - // complete web server that displays pages of log entries. To run it as a - // standalone program, rename both the package and this function to "main". - ctx := context.Background() - flag.Parse() - if *projectID == "" { - log.Fatal("-project-id missing") - } - var err error - client, err = logadmin.NewClient(ctx, *projectID) - if err != nil { - log.Fatalf("creating logging client: %v", err) - } - - http.HandleFunc("/entries", handleEntries) - log.Print("listening on 8080") - log.Fatal(http.ListenAndServe(":8080", nil)) -} - -var pageTemplate = template.Must(template.New("").Parse(` -<table> - {{range .Entries}} - <tr><td>{{.}}</td></tr> - {{end}} -</table> -{{if .Next}} - <a href="/entries?pageToken={{.Next}}">Next Page</a> -{{end}} -`)) - -func handleEntries(w http.ResponseWriter, r *http.Request) { - ctx := context.Background() - filter := fmt.Sprintf(`logName = "projects/%s/logs/testlog"`, *projectID) - it := client.Entries(ctx, logadmin.Filter(filter)) - var entries []*logging.Entry - nextTok, err := iterator.NewPager(it, 5, r.URL.Query().Get("pageToken")).NextPage(&entries) - if err != nil { - http.Error(w, fmt.Sprintf("problem getting the next page: %v", err), http.StatusInternalServerError) - return - } - data := struct { - Entries []*logging.Entry - Next string - }{ - entries, - nextTok, - } - var buf bytes.Buffer - if err := pageTemplate.Execute(&buf, data); err != nil { - http.Error(w, fmt.Sprintf("problem executing page template: %v", err), http.StatusInternalServerError) - } - if _, err := buf.WriteTo(w); err != nil { - log.Printf("writing response: %v", err) - } -} diff --git a/vendor/cloud.google.com/go/logging/logadmin/example_resource_iterator_test.go b/vendor/cloud.google.com/go/logging/logadmin/example_resource_iterator_test.go deleted file mode 100644 index fe67e2333..000000000 --- a/vendor/cloud.google.com/go/logging/logadmin/example_resource_iterator_test.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// 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 -// -// http://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. - -package logadmin_test - -import ( - "fmt" - - "cloud.google.com/go/logging/logadmin" - "golang.org/x/net/context" - "google.golang.org/api/iterator" -) - -func ExampleClient_ResourceDescriptors() { - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - it := client.ResourceDescriptors(ctx) - _ = it // TODO: iterate using Next or iterator.Pager. -} - -func ExampleResourceDescriptorIterator_Next() { - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - it := client.ResourceDescriptors(ctx) - for { - rdesc, err := it.Next() - if err == iterator.Done { - break - } - if err != nil { - // TODO: Handle error. - } - fmt.Println(rdesc) - } -} diff --git a/vendor/cloud.google.com/go/logging/logadmin/example_sink_iterator_test.go b/vendor/cloud.google.com/go/logging/logadmin/example_sink_iterator_test.go deleted file mode 100644 index 918fd9ffb..000000000 --- a/vendor/cloud.google.com/go/logging/logadmin/example_sink_iterator_test.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// 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 -// -// http://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. - -package logadmin_test - -import ( - "fmt" - - "cloud.google.com/go/logging/logadmin" - "golang.org/x/net/context" - "google.golang.org/api/iterator" -) - -func ExampleClient_Sinks() { - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - it := client.Sinks(ctx) - _ = it // TODO: iterate using Next or iterator.Pager. -} - -func ExampleSinkIterator_Next() { - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - it := client.Sinks(ctx) - for { - sink, err := it.Next() - if err == iterator.Done { - break - } - if err != nil { - // TODO: Handle error. - } - fmt.Println(sink) - } -} diff --git a/vendor/cloud.google.com/go/logging/logadmin/examples_test.go b/vendor/cloud.google.com/go/logging/logadmin/examples_test.go deleted file mode 100644 index 0926dd5fd..000000000 --- a/vendor/cloud.google.com/go/logging/logadmin/examples_test.go +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// 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 -// -// http://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. - -package logadmin_test - -import ( - "fmt" - - "cloud.google.com/go/logging/logadmin" - "golang.org/x/net/context" -) - -func ExampleNewClient() { - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - // Use client to manage logs, metrics and sinks. - // Close the client when finished. - if err := client.Close(); err != nil { - // TODO: Handle error. - } -} - -func ExampleClient_DeleteLog() { - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - err = client.DeleteLog(ctx, "my-log") - if err != nil { - // TODO: Handle error. - } -} - -func ExampleClient_CreateMetric() { - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - err = client.CreateMetric(ctx, &logadmin.Metric{ - ID: "severe-errors", - Description: "entries at ERROR or higher severities", - Filter: "severity >= ERROR", - }) - if err != nil { - // TODO: Handle error. - } -} - -func ExampleClient_DeleteMetric() { - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - if err := client.DeleteMetric(ctx, "severe-errors"); err != nil { - // TODO: Handle error. - } -} - -func ExampleClient_Metric() { - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - m, err := client.Metric(ctx, "severe-errors") - if err != nil { - // TODO: Handle error. - } - fmt.Println(m) -} - -func ExampleClient_UpdateMetric() { - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - err = client.UpdateMetric(ctx, &logadmin.Metric{ - ID: "severe-errors", - Description: "entries at high severities", - Filter: "severity > ERROR", - }) - if err != nil { - // TODO: Handle error. - } -} - -func ExampleClient_CreateSink() { - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - sink, err := client.CreateSink(ctx, &logadmin.Sink{ - ID: "severe-errors-to-gcs", - Destination: "storage.googleapis.com/my-bucket", - Filter: "severity >= ERROR", - }) - if err != nil { - // TODO: Handle error. - } - fmt.Println(sink) -} - -func ExampleClient_DeleteSink() { - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - if err := client.DeleteSink(ctx, "severe-errors-to-gcs"); err != nil { - // TODO: Handle error. - } -} - -func ExampleClient_Sink() { - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - s, err := client.Sink(ctx, "severe-errors-to-gcs") - if err != nil { - // TODO: Handle error. - } - fmt.Println(s) -} - -func ExampleClient_UpdateSink() { - ctx := context.Background() - client, err := logadmin.NewClient(ctx, "my-project") - if err != nil { - // TODO: Handle error. - } - sink, err := client.UpdateSink(ctx, &logadmin.Sink{ - ID: "severe-errors-to-gcs", - Destination: "storage.googleapis.com/my-other-bucket", - Filter: "severity >= ERROR", - }) - if err != nil { - // TODO: Handle error. - } - fmt.Println(sink) -} diff --git a/vendor/cloud.google.com/go/logging/logadmin/logadmin.go b/vendor/cloud.google.com/go/logging/logadmin/logadmin.go deleted file mode 100644 index 9ea728c8b..000000000 --- a/vendor/cloud.google.com/go/logging/logadmin/logadmin.go +++ /dev/null @@ -1,402 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// 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 -// -// http://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. - -// These features are missing now, but will likely be added: -// - There is no way to specify CallOptions. - -// Package logadmin contains a Stackdriver Logging client that can be used -// for reading logs and working with sinks, metrics and monitored resources. -// For a client that can write logs, see package cloud.google.com/go/logging. -// -// The client uses Logging API v2. -// See https://cloud.google.com/logging/docs/api/v2/ for an introduction to the API. -// -// Note: This package is in beta. Some backwards-incompatible changes may occur. -package logadmin // import "cloud.google.com/go/logging/logadmin" - -import ( - "errors" - "fmt" - "math" - "net/http" - "net/url" - "strings" - "time" - - "cloud.google.com/go/internal/version" - "cloud.google.com/go/logging" - vkit "cloud.google.com/go/logging/apiv2" - "cloud.google.com/go/logging/internal" - "github.com/golang/protobuf/ptypes" - gax "github.com/googleapis/gax-go" - "golang.org/x/net/context" - "google.golang.org/api/iterator" - "google.golang.org/api/option" - logtypepb "google.golang.org/genproto/googleapis/logging/type" - logpb "google.golang.org/genproto/googleapis/logging/v2" - "google.golang.org/grpc/codes" - // Import the following so EntryIterator can unmarshal log protos. - _ "google.golang.org/genproto/googleapis/cloud/audit" -) - -// Client is a Logging client. A Client is associated with a single Cloud project. -type Client struct { - lClient *vkit.Client // logging client - sClient *vkit.ConfigClient // sink client - mClient *vkit.MetricsClient // metric client - projectID string - closed bool -} - -// NewClient returns a new logging client associated with the provided project ID. -// -// By default NewClient uses AdminScope. To use a different scope, call -// NewClient using a WithScopes option (see https://godoc.org/google.golang.org/api/option#WithScopes). -func NewClient(ctx context.Context, projectID string, opts ...option.ClientOption) (*Client, error) { - // Check for '/' in project ID to reserve the ability to support various owning resources, - // in the form "{Collection}/{Name}", for instance "organizations/my-org". - if strings.ContainsRune(projectID, '/') { - return nil, errors.New("logging: project ID contains '/'") - } - opts = append([]option.ClientOption{ - option.WithEndpoint(internal.ProdAddr), - option.WithScopes(logging.AdminScope), - }, opts...) - lc, err := vkit.NewClient(ctx, opts...) - if err != nil { - return nil, err - } - // TODO(jba): pass along any client options that should be provided to all clients. - sc, err := vkit.NewConfigClient(ctx, option.WithGRPCConn(lc.Connection())) - if err != nil { - return nil, err - } - mc, err := vkit.NewMetricsClient(ctx, option.WithGRPCConn(lc.Connection())) - if err != nil { - return nil, err - } - // Retry some non-idempotent methods on INTERNAL, because it happens sometimes - // and in all observed cases the operation did not complete. - retryerOnInternal := func() gax.Retryer { - return gax.OnCodes([]codes.Code{ - codes.Internal, - }, gax.Backoff{ - Initial: 100 * time.Millisecond, - Max: 1000 * time.Millisecond, - Multiplier: 1.2, - }) - } - mc.CallOptions.CreateLogMetric = []gax.CallOption{gax.WithRetry(retryerOnInternal)} - mc.CallOptions.UpdateLogMetric = []gax.CallOption{gax.WithRetry(retryerOnInternal)} - - lc.SetGoogleClientInfo("gccl", version.Repo) - sc.SetGoogleClientInfo("gccl", version.Repo) - mc.SetGoogleClientInfo("gccl", version.Repo) - client := &Client{ - lClient: lc, - sClient: sc, - mClient: mc, - projectID: projectID, - } - return client, nil -} - -// parent returns the string used in many RPCs to denote the parent resource of the log. -func (c *Client) parent() string { - return "projects/" + c.projectID -} - -// Close closes the client. -func (c *Client) Close() error { - if c.closed { - return nil - } - // Return only the first error. Since all clients share an underlying connection, - // Closes after the first always report a "connection is closing" error. - err := c.lClient.Close() - _ = c.sClient.Close() - _ = c.mClient.Close() - c.closed = true - return err -} - -// DeleteLog deletes a log and all its log entries. The log will reappear if it receives new entries. -// logID identifies the log within the project. An example log ID is "syslog". Requires AdminScope. -func (c *Client) DeleteLog(ctx context.Context, logID string) error { - return c.lClient.DeleteLog(ctx, &logpb.DeleteLogRequest{ - LogName: internal.LogPath(c.parent(), logID), - }) -} - -func toHTTPRequest(p *logtypepb.HttpRequest) (*logging.HTTPRequest, error) { - if p == nil { - return nil, nil - } - u, err := url.Parse(p.RequestUrl) - if err != nil { - return nil, err - } - var dur time.Duration - if p.Latency != nil { - dur, err = ptypes.Duration(p.Latency) - if err != nil { - return nil, err - } - } - hr := &http.Request{ - Method: p.RequestMethod, - URL: u, - Header: map[string][]string{}, - } - if p.UserAgent != "" { - hr.Header.Set("User-Agent", p.UserAgent) - } - if p.Referer != "" { - hr.Header.Set("Referer", p.Referer) - } - return &logging.HTTPRequest{ - Request: hr, - RequestSize: p.RequestSize, - Status: int(p.Status), - ResponseSize: p.ResponseSize, - Latency: dur, - RemoteIP: p.RemoteIp, - CacheHit: p.CacheHit, - CacheValidatedWithOriginServer: p.CacheValidatedWithOriginServer, - }, nil -} - -// An EntriesOption is an option for listing log entries. -type EntriesOption interface { - set(*logpb.ListLogEntriesRequest) -} - -// ProjectIDs sets the project IDs or project numbers from which to retrieve -// log entries. Examples of a project ID: "my-project-1A", "1234567890". -func ProjectIDs(pids []string) EntriesOption { return projectIDs(pids) } - -type projectIDs []string - -func (p projectIDs) set(r *logpb.ListLogEntriesRequest) { - r.ResourceNames = make([]string, len(p)) - for i, v := range p { - r.ResourceNames[i] = fmt.Sprintf("projects/%s", v) - } -} - -// Filter sets an advanced logs filter for listing log entries (see -// https://cloud.google.com/logging/docs/view/advanced_filters). The filter is -// compared against all log entries in the projects specified by ProjectIDs. -// Only entries that match the filter are retrieved. An empty filter (the -// default) matches all log entries. -// -// In the filter string, log names must be written in their full form, as -// "projects/PROJECT-ID/logs/LOG-ID". Forward slashes in LOG-ID must be -// replaced by %2F before calling Filter. -// -// Timestamps in the filter string must be written in RFC 3339 format. See the -// timestamp example. -func Filter(f string) EntriesOption { return filter(f) } - -type filter string - -func (f filter) set(r *logpb.ListLogEntriesRequest) { r.Filter = string(f) } - -// NewestFirst causes log entries to be listed from most recent (newest) to -// least recent (oldest). By default, they are listed from oldest to newest. -func NewestFirst() EntriesOption { return newestFirst{} } - -type newestFirst struct{} - -func (newestFirst) set(r *logpb.ListLogEntriesRequest) { r.OrderBy = "timestamp desc" } - -// Entries returns an EntryIterator for iterating over log entries. By default, -// the log entries will be restricted to those from the project passed to -// NewClient. This may be overridden by passing a ProjectIDs option. Requires ReadScope or AdminScope. -func (c *Client) Entries(ctx context.Context, opts ...EntriesOption) *EntryIterator { - it := &EntryIterator{ - it: c.lClient.ListLogEntries(ctx, listLogEntriesRequest(c.projectID, opts)), - } - it.pageInfo, it.nextFunc = iterator.NewPageInfo( - it.fetch, - func() int { return len(it.items) }, - func() interface{} { b := it.items; it.items = nil; return b }) - return it -} - -func listLogEntriesRequest(projectID string, opts []EntriesOption) *logpb.ListLogEntriesRequest { - req := &logpb.ListLogEntriesRequest{ - ResourceNames: []string{"projects/" + projectID}, - } - for _, opt := range opts { - opt.set(req) - } - return req -} - -// An EntryIterator iterates over log entries. -type EntryIterator struct { - it *vkit.LogEntryIterator - pageInfo *iterator.PageInfo - nextFunc func() error - items []*logging.Entry -} - -// PageInfo supports pagination. See https://godoc.org/google.golang.org/api/iterator package for details. -func (it *EntryIterator) PageInfo() *iterator.PageInfo { return it.pageInfo } - -// Next returns the next result. Its second return value is iterator.Done -// (https://godoc.org/google.golang.org/api/iterator) if there are no more -// results. Once Next returns Done, all subsequent calls will return Done. -func (it *EntryIterator) Next() (*logging.Entry, error) { - if err := it.nextFunc(); err != nil { - return nil, err - } - item := it.items[0] - it.items = it.items[1:] - return item, nil -} - -func (it *EntryIterator) fetch(pageSize int, pageToken string) (string, error) { - return iterFetch(pageSize, pageToken, it.it.PageInfo(), func() error { - item, err := it.it.Next() - if err != nil { - return err - } - e, err := fromLogEntry(item) - if err != nil { - return err - } - it.items = append(it.items, e) - return nil - }) -} - -func trunc32(i int) int32 { - if i > math.MaxInt32 { - i = math.MaxInt32 - } - return int32(i) -} - -var slashUnescaper = strings.NewReplacer("%2F", "/", "%2f", "/") - -func fromLogEntry(le *logpb.LogEntry) (*logging.Entry, error) { - time, err := ptypes.Timestamp(le.Timestamp) - if err != nil { - return nil, err - } - var payload interface{} - switch x := le.Payload.(type) { - case *logpb.LogEntry_TextPayload: - payload = x.TextPayload - - case *logpb.LogEntry_ProtoPayload: - var d ptypes.DynamicAny - if err := ptypes.UnmarshalAny(x.ProtoPayload, &d); err != nil { - return nil, fmt.Errorf("logging: unmarshalling proto payload: %v", err) - } - payload = d.Message - - case *logpb.LogEntry_JsonPayload: - // Leave this as a Struct. - // TODO(jba): convert to map[string]interface{}? - payload = x.JsonPayload - - default: - return nil, fmt.Errorf("logging: unknown payload type: %T", le.Payload) - } - hr, err := toHTTPRequest(le.HttpRequest) - if err != nil { - return nil, err - } - return &logging.Entry{ - Timestamp: time, - Severity: logging.Severity(le.Severity), - Payload: payload, - Labels: le.Labels, - InsertID: le.InsertId, - HTTPRequest: hr, - Operation: le.Operation, - LogName: slashUnescaper.Replace(le.LogName), - Resource: le.Resource, - Trace: le.Trace, - }, nil -} - -// Logs lists the logs owned by the parent resource of the client. -func (c *Client) Logs(ctx context.Context) *LogIterator { - it := &LogIterator{ - parentResource: c.parent(), - it: c.lClient.ListLogs(ctx, &logpb.ListLogsRequest{Parent: c.parent()}), - } - it.pageInfo, it.nextFunc = iterator.NewPageInfo( - it.fetch, - func() int { return len(it.items) }, - func() interface{} { b := it.items; it.items = nil; return b }) - return it -} - -// A LogIterator iterates over logs. -type LogIterator struct { - parentResource string - it *vkit.StringIterator - pageInfo *iterator.PageInfo - nextFunc func() error - items []string -} - -// PageInfo supports pagination. See https://godoc.org/google.golang.org/api/iterator package for details. -func (it *LogIterator) PageInfo() *iterator.PageInfo { return it.pageInfo } - -// Next returns the next result. Its second return value is iterator.Done -// (https://godoc.org/google.golang.org/api/iterator) if there are no more -// results. Once Next returns Done, all subsequent calls will return Done. -func (it *LogIterator) Next() (string, error) { - if err := it.nextFunc(); err != nil { - return "", err - } - item := it.items[0] - it.items = it.items[1:] - return item, nil -} - -func (it *LogIterator) fetch(pageSize int, pageToken string) (string, error) { - return iterFetch(pageSize, pageToken, it.it.PageInfo(), func() error { - logPath, err := it.it.Next() - if err != nil { - return err - } - logID := internal.LogIDFromPath(it.parentResource, logPath) - it.items = append(it.items, logID) - return nil - }) -} - -// Common fetch code for iterators that are backed by vkit iterators. -func iterFetch(pageSize int, pageToken string, pi *iterator.PageInfo, next func() error) (string, error) { - pi.MaxSize = pageSize - pi.Token = pageToken - // Get one item, which will fill the buffer. - if err := next(); err != nil { - return "", err - } - // Collect the rest of the buffer. - for pi.Remaining() > 0 { - if err := next(); err != nil { - return "", err - } - } - return pi.Token, nil -} diff --git a/vendor/cloud.google.com/go/logging/logadmin/logadmin_test.go b/vendor/cloud.google.com/go/logging/logadmin/logadmin_test.go deleted file mode 100644 index 1753f84f6..000000000 --- a/vendor/cloud.google.com/go/logging/logadmin/logadmin_test.go +++ /dev/null @@ -1,274 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// 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 -// -// http://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. - -// TODO(jba): test that OnError is getting called appropriately. - -package logadmin - -import ( - "flag" - "log" - "net/http" - "net/url" - "os" - "reflect" - "testing" - "time" - - "cloud.google.com/go/internal/testutil" - "cloud.google.com/go/logging" - ltesting "cloud.google.com/go/logging/internal/testing" - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes" - durpb "github.com/golang/protobuf/ptypes/duration" - structpb "github.com/golang/protobuf/ptypes/struct" - "golang.org/x/net/context" - "google.golang.org/api/option" - mrpb "google.golang.org/genproto/googleapis/api/monitoredres" - audit "google.golang.org/genproto/googleapis/cloud/audit" - logtypepb "google.golang.org/genproto/googleapis/logging/type" - logpb "google.golang.org/genproto/googleapis/logging/v2" - "google.golang.org/grpc" -) - -var ( - client *Client - testProjectID string -) - -var ( - // If true, this test is using the production service, not a fake. - integrationTest bool - - newClient func(ctx context.Context, projectID string) *Client -) - -func TestMain(m *testing.M) { - flag.Parse() // needed for testing.Short() - ctx := context.Background() - testProjectID = testutil.ProjID() - if testProjectID == "" || testing.Short() { - integrationTest = false - if testProjectID != "" { - log.Print("Integration tests skipped in short mode (using fake instead)") - } - testProjectID = "PROJECT_ID" - addr, err := ltesting.NewServer() - if err != nil { - log.Fatalf("creating fake server: %v", err) - } - newClient = func(ctx context.Context, projectID string) *Client { - conn, err := grpc.Dial(addr, grpc.WithInsecure(), grpc.WithBlock()) - if err != nil { - log.Fatalf("dialing %q: %v", addr, err) - } - c, err := NewClient(ctx, projectID, option.WithGRPCConn(conn)) - if err != nil { - log.Fatalf("creating client for fake at %q: %v", addr, err) - } - return c - } - } else { - integrationTest = true - ts := testutil.TokenSource(ctx, logging.AdminScope) - if ts == nil { - log.Fatal("The project key must be set. See CONTRIBUTING.md for details") - } - log.Printf("running integration tests with project %s", testProjectID) - newClient = func(ctx context.Context, projectID string) *Client { - c, err := NewClient(ctx, projectID, option.WithTokenSource(ts), - option.WithGRPCDialOption(grpc.WithBlock())) - if err != nil { - log.Fatalf("creating prod client: %v", err) - } - return c - } - } - client = newClient(ctx, testProjectID) - initMetrics(ctx) - cleanup := initSinks(ctx) - exit := m.Run() - cleanup() - client.Close() - os.Exit(exit) -} - -// EntryIterator and DeleteLog are tested in the logging package. - -func TestClientClose(t *testing.T) { - c := newClient(context.Background(), testProjectID) - if err := c.Close(); err != nil { - t.Errorf("want got %v, want nil", err) - } -} - -func TestFromLogEntry(t *testing.T) { - now := time.Now() - res := &mrpb.MonitoredResource{Type: "global"} - ts, err := ptypes.TimestampProto(now) - if err != nil { - t.Fatal(err) - } - logEntry := logpb.LogEntry{ - LogName: "projects/PROJECT_ID/logs/LOG_ID", - Resource: res, - Payload: &logpb.LogEntry_TextPayload{TextPayload: "hello"}, - Timestamp: ts, - Severity: logtypepb.LogSeverity_INFO, - InsertId: "123", - HttpRequest: &logtypepb.HttpRequest{ - RequestMethod: "GET", - RequestUrl: "http:://example.com/path?q=1", - RequestSize: 100, - Status: 200, - ResponseSize: 25, - Latency: &durpb.Duration{Seconds: 100}, - UserAgent: "user-agent", - RemoteIp: "127.0.0.1", - Referer: "referer", - CacheHit: true, - CacheValidatedWithOriginServer: true, - }, - Labels: map[string]string{ - "a": "1", - "b": "two", - "c": "true", - }, - } - u, err := url.Parse("http:://example.com/path?q=1") - if err != nil { - t.Fatal(err) - } - want := &logging.Entry{ - LogName: "projects/PROJECT_ID/logs/LOG_ID", - Resource: res, - Timestamp: now.In(time.UTC), - Severity: logging.Info, - Payload: "hello", - Labels: map[string]string{ - "a": "1", - "b": "two", - "c": "true", - }, - InsertID: "123", - HTTPRequest: &logging.HTTPRequest{ - Request: &http.Request{ - Method: "GET", - URL: u, - Header: map[string][]string{ - "User-Agent": []string{"user-agent"}, - "Referer": []string{"referer"}, - }, - }, - RequestSize: 100, - Status: 200, - ResponseSize: 25, - Latency: 100 * time.Second, - RemoteIP: "127.0.0.1", - CacheHit: true, - CacheValidatedWithOriginServer: true, - }, - } - got, err := fromLogEntry(&logEntry) - if err != nil { - t.Fatal(err) - } - // Test sub-values separately because %+v and %#v do not follow pointers. - // TODO(jba): use a differ or pretty-printer. - if !reflect.DeepEqual(got.HTTPRequest.Request, want.HTTPRequest.Request) { - t.Fatalf("HTTPRequest.Request:\ngot %+v\nwant %+v", got.HTTPRequest.Request, want.HTTPRequest.Request) - } - if !reflect.DeepEqual(got.HTTPRequest, want.HTTPRequest) { - t.Fatalf("HTTPRequest:\ngot %+v\nwant %+v", got.HTTPRequest, want.HTTPRequest) - } - if !reflect.DeepEqual(got, want) { - t.Errorf("FullEntry:\ngot %+v\nwant %+v", got, want) - } - - // Proto payload. - alog := &audit.AuditLog{ - ServiceName: "svc", - MethodName: "method", - ResourceName: "shelves/S/books/B", - } - any, err := ptypes.MarshalAny(alog) - if err != nil { - t.Fatal(err) - } - logEntry = logpb.LogEntry{ - LogName: "projects/PROJECT_ID/logs/LOG_ID", - Resource: res, - Timestamp: ts, - Payload: &logpb.LogEntry_ProtoPayload{ProtoPayload: any}, - } - got, err = fromLogEntry(&logEntry) - if err != nil { - t.Fatal(err) - } - if !ltesting.PayloadEqual(got.Payload, alog) { - t.Errorf("got %+v, want %+v", got.Payload, alog) - } - - // JSON payload. - jstruct := &structpb.Struct{Fields: map[string]*structpb.Value{ - "f": &structpb.Value{Kind: &structpb.Value_NumberValue{NumberValue: 3.1}}, - }} - logEntry = logpb.LogEntry{ - LogName: "projects/PROJECT_ID/logs/LOG_ID", - Resource: res, - Timestamp: ts, - Payload: &logpb.LogEntry_JsonPayload{JsonPayload: jstruct}, - } - got, err = fromLogEntry(&logEntry) - if err != nil { - t.Fatal(err) - } - if !ltesting.PayloadEqual(got.Payload, jstruct) { - t.Errorf("got %+v, want %+v", got.Payload, jstruct) - } -} - -func TestListLogEntriesRequest(t *testing.T) { - for _, test := range []struct { - opts []EntriesOption - projectIDs []string - filter string - orderBy string - }{ - // Default is client's project ID, empty filter and orderBy. - {nil, - []string{"PROJECT_ID"}, "", ""}, - {[]EntriesOption{NewestFirst(), Filter("f")}, - []string{"PROJECT_ID"}, "f", "timestamp desc"}, - {[]EntriesOption{ProjectIDs([]string{"foo"})}, - []string{"foo"}, "", ""}, - {[]EntriesOption{NewestFirst(), Filter("f"), ProjectIDs([]string{"foo"})}, - []string{"foo"}, "f", "timestamp desc"}, - {[]EntriesOption{NewestFirst(), Filter("f"), ProjectIDs([]string{"foo"})}, - []string{"foo"}, "f", "timestamp desc"}, - // If there are repeats, last one wins. - {[]EntriesOption{NewestFirst(), Filter("no"), ProjectIDs([]string{"foo"}), Filter("f")}, - []string{"foo"}, "f", "timestamp desc"}, - } { - got := listLogEntriesRequest("PROJECT_ID", test.opts) - want := &logpb.ListLogEntriesRequest{ - ResourceNames: []string{"projects/" + test.projectIDs[0]}, - Filter: test.filter, - OrderBy: test.orderBy, - } - if !proto.Equal(got, want) { - t.Errorf("%v:\ngot %v\nwant %v", test.opts, got, want) - } - } -} diff --git a/vendor/cloud.google.com/go/logging/logadmin/metrics.go b/vendor/cloud.google.com/go/logging/logadmin/metrics.go deleted file mode 100644 index 9374ac46a..000000000 --- a/vendor/cloud.google.com/go/logging/logadmin/metrics.go +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// 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 -// -// http://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. - -package logadmin - -import ( - "fmt" - - vkit "cloud.google.com/go/logging/apiv2" - "golang.org/x/net/context" - "google.golang.org/api/iterator" - logpb "google.golang.org/genproto/googleapis/logging/v2" -) - -// Metric describes a logs-based metric. The value of the metric is the -// number of log entries that match a logs filter. -// -// Metrics are a feature of Stackdriver Monitoring. -// See https://cloud.google.com/monitoring/api/v3/metrics for more about them. -type Metric struct { - // ID is a client-assigned metric identifier. Example: - // "severe_errors". Metric identifiers are limited to 1000 - // characters and can include only the following characters: A-Z, - // a-z, 0-9, and the special characters _-.,+!*',()%/\. The - // forward-slash character (/) denotes a hierarchy of name pieces, - // and it cannot be the first character of the name. - ID string - - // Description describes this metric. It is used in documentation. - Description string - - // Filter is an advanced logs filter (see - // https://cloud.google.com/logging/docs/view/advanced_filters). - // Example: "logName:syslog AND severity>=ERROR". - Filter string -} - -// CreateMetric creates a logs-based metric. -func (c *Client) CreateMetric(ctx context.Context, m *Metric) error { - _, err := c.mClient.CreateLogMetric(ctx, &logpb.CreateLogMetricRequest{ - Parent: c.parent(), - Metric: toLogMetric(m), - }) - return err -} - -// DeleteMetric deletes a log-based metric. -// The provided metric ID is the metric identifier. For example, "severe_errors". -func (c *Client) DeleteMetric(ctx context.Context, metricID string) error { - return c.mClient.DeleteLogMetric(ctx, &logpb.DeleteLogMetricRequest{ - MetricName: c.metricPath(metricID), - }) -} - -// Metric gets a logs-based metric. -// The provided metric ID is the metric identifier. For example, "severe_errors". -// Requires ReadScope or AdminScope. -func (c *Client) Metric(ctx context.Context, metricID string) (*Metric, error) { - lm, err := c.mClient.GetLogMetric(ctx, &logpb.GetLogMetricRequest{ - MetricName: c.metricPath(metricID), - }) - if err != nil { - return nil, err - } - return fromLogMetric(lm), nil -} - -// UpdateMetric creates a logs-based metric if it does not exist, or updates an -// existing one. -func (c *Client) UpdateMetric(ctx context.Context, m *Metric) error { - _, err := c.mClient.UpdateLogMetric(ctx, &logpb.UpdateLogMetricRequest{ - MetricName: c.metricPath(m.ID), - Metric: toLogMetric(m), - }) - return err -} - -func (c *Client) metricPath(metricID string) string { - return fmt.Sprintf("%s/metrics/%s", c.parent(), metricID) -} - -// Metrics returns a MetricIterator for iterating over all Metrics in the Client's project. -// Requires ReadScope or AdminScope. -func (c *Client) Metrics(ctx context.Context) *MetricIterator { - it := &MetricIterator{ - it: c.mClient.ListLogMetrics(ctx, &logpb.ListLogMetricsRequest{Parent: c.parent()}), - } - it.pageInfo, it.nextFunc = iterator.NewPageInfo( - it.fetch, - func() int { return len(it.items) }, - func() interface{} { b := it.items; it.items = nil; return b }) - return it -} - -// A MetricIterator iterates over Metrics. -type MetricIterator struct { - it *vkit.LogMetricIterator - pageInfo *iterator.PageInfo - nextFunc func() error - items []*Metric -} - -// PageInfo supports pagination. See the google.golang.org/api/iterator package for details. -func (it *MetricIterator) PageInfo() *iterator.PageInfo { return it.pageInfo } - -// Next returns the next result. Its second return value is Done if there are -// no more results. Once Next returns Done, all subsequent calls will return -// Done. -func (it *MetricIterator) Next() (*Metric, error) { - if err := it.nextFunc(); err != nil { - return nil, err - } - item := it.items[0] - it.items = it.items[1:] - return item, nil -} - -func (it *MetricIterator) fetch(pageSize int, pageToken string) (string, error) { - return iterFetch(pageSize, pageToken, it.it.PageInfo(), func() error { - item, err := it.it.Next() - if err != nil { - return err - } - it.items = append(it.items, fromLogMetric(item)) - return nil - }) -} - -func toLogMetric(m *Metric) *logpb.LogMetric { - return &logpb.LogMetric{ - Name: m.ID, - Description: m.Description, - Filter: m.Filter, - } -} - -func fromLogMetric(lm *logpb.LogMetric) *Metric { - return &Metric{ - ID: lm.Name, - Description: lm.Description, - Filter: lm.Filter, - } -} diff --git a/vendor/cloud.google.com/go/logging/logadmin/metrics_test.go b/vendor/cloud.google.com/go/logging/logadmin/metrics_test.go deleted file mode 100644 index f3f148e1b..000000000 --- a/vendor/cloud.google.com/go/logging/logadmin/metrics_test.go +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// 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 -// -// http://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. - -package logadmin - -import ( - "log" - "reflect" - "testing" - "time" - - "cloud.google.com/go/internal/testutil" - "golang.org/x/net/context" - "google.golang.org/api/iterator" -) - -var metricIDs = testutil.NewUIDSpace("GO-CLIENT-TEST-METRIC") - -// Initializes the tests before they run. -func initMetrics(ctx context.Context) { - // Clean up from aborted tests. - it := client.Metrics(ctx) -loop: - for { - m, err := it.Next() - switch err { - case nil: - if metricIDs.Older(m.ID, 24*time.Hour) { - client.DeleteMetric(ctx, m.ID) - } - case iterator.Done: - break loop - default: - log.Printf("cleanupMetrics: %v", err) - return - } - } -} - -func TestCreateDeleteMetric(t *testing.T) { - ctx := context.Background() - metric := &Metric{ - ID: metricIDs.New(), - Description: "DESC", - Filter: "FILTER", - } - if err := client.CreateMetric(ctx, metric); err != nil { - t.Fatal(err) - } - defer client.DeleteMetric(ctx, metric.ID) - - got, err := client.Metric(ctx, metric.ID) - if err != nil { - t.Fatal(err) - } - if want := metric; !reflect.DeepEqual(got, want) { - t.Errorf("got %+v, want %+v", got, want) - } - - if err := client.DeleteMetric(ctx, metric.ID); err != nil { - t.Fatal(err) - } - - if _, err := client.Metric(ctx, metric.ID); err == nil { - t.Fatal("got no error, expected one") - } -} - -func TestUpdateMetric(t *testing.T) { - ctx := context.Background() - metric := &Metric{ - ID: metricIDs.New(), - Description: "DESC", - Filter: "FILTER", - } - - // Updating a non-existent metric creates a new one. - if err := client.UpdateMetric(ctx, metric); err != nil { - t.Fatal(err) - } - defer client.DeleteMetric(ctx, metric.ID) - got, err := client.Metric(ctx, metric.ID) - if err != nil { - t.Fatal(err) - } - if want := metric; !reflect.DeepEqual(got, want) { - t.Errorf("got %+v, want %+v", got, want) - } - - // Updating an existing metric changes it. - metric.Description = "CHANGED" - if err := client.UpdateMetric(ctx, metric); err != nil { - t.Fatal(err) - } - got, err = client.Metric(ctx, metric.ID) - if err != nil { - t.Fatal(err) - } - if want := metric; !reflect.DeepEqual(got, want) { - t.Errorf("got %+v, want %+v", got, want) - } -} - -func TestListMetrics(t *testing.T) { - ctx := context.Background() - - var metrics []*Metric - want := map[string]*Metric{} - for i := 0; i < 10; i++ { - m := &Metric{ - ID: metricIDs.New(), - Description: "DESC", - Filter: "FILTER", - } - metrics = append(metrics, m) - want[m.ID] = m - } - for _, m := range metrics { - if err := client.CreateMetric(ctx, m); err != nil { - t.Fatalf("Create(%q): %v", m.ID, err) - } - defer client.DeleteMetric(ctx, m.ID) - } - - got := map[string]*Metric{} - it := client.Metrics(ctx) - for { - m, err := it.Next() - if err == iterator.Done { - break - } - if err != nil { - t.Fatal(err) - } - // If tests run simultaneously, we may have more metrics than we - // created. So only check for our own. - if _, ok := want[m.ID]; ok { - got[m.ID] = m - } - } - if !reflect.DeepEqual(got, want) { - t.Errorf("got %+v, want %+v", got, want) - } -} diff --git a/vendor/cloud.google.com/go/logging/logadmin/resources.go b/vendor/cloud.google.com/go/logging/logadmin/resources.go deleted file mode 100644 index 79e8fdbc9..000000000 --- a/vendor/cloud.google.com/go/logging/logadmin/resources.go +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// 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 -// -// http://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. - -package logadmin - -import ( - vkit "cloud.google.com/go/logging/apiv2" - "golang.org/x/net/context" - "google.golang.org/api/iterator" - mrpb "google.golang.org/genproto/googleapis/api/monitoredres" - logpb "google.golang.org/genproto/googleapis/logging/v2" -) - -// ResourceDescriptors returns a ResourceDescriptorIterator -// for iterating over MonitoredResourceDescriptors. Requires ReadScope or AdminScope. -// See https://cloud.google.com/logging/docs/api/v2/#monitored-resources for an explanation of -// monitored resources. -// See https://cloud.google.com/logging/docs/api/v2/resource-list for a list of monitored resources. -func (c *Client) ResourceDescriptors(ctx context.Context) *ResourceDescriptorIterator { - it := &ResourceDescriptorIterator{ - it: c.lClient.ListMonitoredResourceDescriptors(ctx, - &logpb.ListMonitoredResourceDescriptorsRequest{}), - } - it.pageInfo, it.nextFunc = iterator.NewPageInfo( - it.fetch, - func() int { return len(it.items) }, - func() interface{} { b := it.items; it.items = nil; return b }) - return it -} - -// ResourceDescriptorIterator is an iterator over MonitoredResourceDescriptors. -type ResourceDescriptorIterator struct { - it *vkit.MonitoredResourceDescriptorIterator - pageInfo *iterator.PageInfo - nextFunc func() error - items []*mrpb.MonitoredResourceDescriptor -} - -// PageInfo supports pagination. See the google.golang.org/api/iterator package for details. -func (it *ResourceDescriptorIterator) PageInfo() *iterator.PageInfo { return it.pageInfo } - -// Next returns the next result. Its second return value is Done if there are -// no more results. Once Next returns Done, all subsequent calls will return -// Done. -func (it *ResourceDescriptorIterator) Next() (*mrpb.MonitoredResourceDescriptor, error) { - if err := it.nextFunc(); err != nil { - return nil, err - } - item := it.items[0] - it.items = it.items[1:] - return item, nil -} - -func (it *ResourceDescriptorIterator) fetch(pageSize int, pageToken string) (string, error) { - return iterFetch(pageSize, pageToken, it.it.PageInfo(), func() error { - item, err := it.it.Next() - if err != nil { - return err - } - it.items = append(it.items, item) - return nil - }) -} diff --git a/vendor/cloud.google.com/go/logging/logadmin/resources_test.go b/vendor/cloud.google.com/go/logging/logadmin/resources_test.go deleted file mode 100644 index 067d3d7ab..000000000 --- a/vendor/cloud.google.com/go/logging/logadmin/resources_test.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// 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 -// -// http://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. - -package logadmin - -import ( - "testing" - - "golang.org/x/net/context" - "google.golang.org/api/iterator" -) - -func TestMonitoredResourceDescriptors(t *testing.T) { - // We can't create MonitoredResourceDescriptors, and there is no guarantee - // about what the service will return. So we just check that the result is - // non-empty. - it := client.ResourceDescriptors(context.Background()) - n := 0 -loop: - for { - _, err := it.Next() - switch err { - case nil: - n++ - case iterator.Done: - break loop - default: - t.Fatal(err) - } - } - if n == 0 { - t.Fatal("Next: got no MetricResourceDescriptors, expected at least one") - } - // TODO(jba) test pagination. -} diff --git a/vendor/cloud.google.com/go/logging/logadmin/sinks.go b/vendor/cloud.google.com/go/logging/logadmin/sinks.go deleted file mode 100644 index 588c7afd3..000000000 --- a/vendor/cloud.google.com/go/logging/logadmin/sinks.go +++ /dev/null @@ -1,169 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// 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 -// -// http://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. - -package logadmin - -import ( - "fmt" - - vkit "cloud.google.com/go/logging/apiv2" - "golang.org/x/net/context" - "google.golang.org/api/iterator" - logpb "google.golang.org/genproto/googleapis/logging/v2" -) - -// Sink describes a sink used to export log entries outside Stackdriver -// Logging. Incoming log entries matching a filter are exported to a -// destination (a Cloud Storage bucket, BigQuery dataset or Cloud Pub/Sub -// topic). -// -// For more information, see https://cloud.google.com/logging/docs/export/using_exported_logs. -// (The Sinks in this package are what the documentation refers to as "project sinks".) -type Sink struct { - // ID is a client-assigned sink identifier. Example: - // "my-severe-errors-to-pubsub". - // Sink identifiers are limited to 1000 characters - // and can include only the following characters: A-Z, a-z, - // 0-9, and the special characters "_-.". - ID string - - // Destination is the export destination. See - // https://cloud.google.com/logging/docs/api/tasks/exporting-logs. - // Examples: "storage.googleapis.com/a-bucket", - // "bigquery.googleapis.com/projects/a-project-id/datasets/a-dataset". - Destination string - - // Filter optionally specifies an advanced logs filter (see - // https://cloud.google.com/logging/docs/view/advanced_filters) that - // defines the log entries to be exported. Example: "logName:syslog AND - // severity>=ERROR". If omitted, all entries are returned. - Filter string -} - -// CreateSink creates a Sink. It returns an error if the Sink already exists. -// Requires AdminScope. -func (c *Client) CreateSink(ctx context.Context, sink *Sink) (*Sink, error) { - ls, err := c.sClient.CreateSink(ctx, &logpb.CreateSinkRequest{ - Parent: c.parent(), - Sink: toLogSink(sink), - }) - if err != nil { - fmt.Printf("Sink: %+v\n", toLogSink(sink)) - return nil, err - } - return fromLogSink(ls), nil -} - -// DeleteSink deletes a sink. The provided sinkID is the sink's identifier, such as -// "my-severe-errors-to-pubsub". -// Requires AdminScope. -func (c *Client) DeleteSink(ctx context.Context, sinkID string) error { - return c.sClient.DeleteSink(ctx, &logpb.DeleteSinkRequest{ - SinkName: c.sinkPath(sinkID), - }) -} - -// Sink gets a sink. The provided sinkID is the sink's identifier, such as -// "my-severe-errors-to-pubsub". -// Requires ReadScope or AdminScope. -func (c *Client) Sink(ctx context.Context, sinkID string) (*Sink, error) { - ls, err := c.sClient.GetSink(ctx, &logpb.GetSinkRequest{ - SinkName: c.sinkPath(sinkID), - }) - if err != nil { - return nil, err - } - return fromLogSink(ls), nil -} - -// UpdateSink updates an existing Sink, or creates a new one if the Sink doesn't exist. -// Requires AdminScope. -func (c *Client) UpdateSink(ctx context.Context, sink *Sink) (*Sink, error) { - ls, err := c.sClient.UpdateSink(ctx, &logpb.UpdateSinkRequest{ - SinkName: c.sinkPath(sink.ID), - Sink: toLogSink(sink), - }) - if err != nil { - return nil, err - } - return fromLogSink(ls), err -} - -func (c *Client) sinkPath(sinkID string) string { - return fmt.Sprintf("%s/sinks/%s", c.parent(), sinkID) -} - -// Sinks returns a SinkIterator for iterating over all Sinks in the Client's project. -// Requires ReadScope or AdminScope. -func (c *Client) Sinks(ctx context.Context) *SinkIterator { - it := &SinkIterator{ - it: c.sClient.ListSinks(ctx, &logpb.ListSinksRequest{Parent: c.parent()}), - } - it.pageInfo, it.nextFunc = iterator.NewPageInfo( - it.fetch, - func() int { return len(it.items) }, - func() interface{} { b := it.items; it.items = nil; return b }) - return it -} - -// A SinkIterator iterates over Sinks. -type SinkIterator struct { - it *vkit.LogSinkIterator - pageInfo *iterator.PageInfo - nextFunc func() error - items []*Sink -} - -// PageInfo supports pagination. See the google.golang.org/api/iterator package for details. -func (it *SinkIterator) PageInfo() *iterator.PageInfo { return it.pageInfo } - -// Next returns the next result. Its second return value is Done if there are -// no more results. Once Next returns Done, all subsequent calls will return -// Done. -func (it *SinkIterator) Next() (*Sink, error) { - if err := it.nextFunc(); err != nil { - return nil, err - } - item := it.items[0] - it.items = it.items[1:] - return item, nil -} - -func (it *SinkIterator) fetch(pageSize int, pageToken string) (string, error) { - return iterFetch(pageSize, pageToken, it.it.PageInfo(), func() error { - item, err := it.it.Next() - if err != nil { - return err - } - it.items = append(it.items, fromLogSink(item)) - return nil - }) -} - -func toLogSink(s *Sink) *logpb.LogSink { - return &logpb.LogSink{ - Name: s.ID, - Destination: s.Destination, - Filter: s.Filter, - OutputVersionFormat: logpb.LogSink_V2, - } -} - -func fromLogSink(ls *logpb.LogSink) *Sink { - return &Sink{ - ID: ls.Name, - Destination: ls.Destination, - Filter: ls.Filter, - } -} diff --git a/vendor/cloud.google.com/go/logging/logadmin/sinks_test.go b/vendor/cloud.google.com/go/logging/logadmin/sinks_test.go deleted file mode 100644 index a75125303..000000000 --- a/vendor/cloud.google.com/go/logging/logadmin/sinks_test.go +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// 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 -// -// http://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. - -// TODO(jba): document in CONTRIBUTING.md that service account must be given "Logs Configuration Writer" IAM role for sink tests to pass. -// TODO(jba): [cont] (1) From top left menu, go to IAM & Admin. (2) In Roles dropdown for acct, select Logging > Logs Configuration Writer. (3) Save. -// TODO(jba): Also, cloud-logs@google.com must have Owner permission on the GCS bucket named for the test project. - -package logadmin - -import ( - "log" - "reflect" - "testing" - "time" - - "cloud.google.com/go/internal/testutil" - "cloud.google.com/go/storage" - "golang.org/x/net/context" - "google.golang.org/api/iterator" - "google.golang.org/api/option" -) - -var sinkIDs = testutil.NewUIDSpace("GO-CLIENT-TEST-SINK") - -const testFilter = "" - -var testSinkDestination string - -// Called just before TestMain calls m.Run. -// Returns a cleanup function to be called after the tests finish. -func initSinks(ctx context.Context) func() { - // Create a unique GCS bucket so concurrent tests don't interfere with each other. - bucketIDs := testutil.NewUIDSpace(testProjectID + "-log-sink") - testBucket := bucketIDs.New() - testSinkDestination = "storage.googleapis.com/" + testBucket - var storageClient *storage.Client - if integrationTest { - // Create a unique bucket as a sink destination, and give the cloud logging account - // owner right. - ts := testutil.TokenSource(ctx, storage.ScopeFullControl) - var err error - storageClient, err = storage.NewClient(ctx, option.WithTokenSource(ts)) - if err != nil { - log.Fatalf("new storage client: %v", err) - } - bucket := storageClient.Bucket(testBucket) - if err := bucket.Create(ctx, testProjectID, nil); err != nil { - log.Fatalf("creating storage bucket %q: %v", testBucket, err) - } - if err := bucket.ACL().Set(ctx, "group-cloud-logs@google.com", storage.RoleOwner); err != nil { - log.Fatalf("setting owner role: %v", err) - } - } - // Clean up from aborted tests. - it := client.Sinks(ctx) - for { - s, err := it.Next() - if err == iterator.Done { - break - } - if err != nil { - log.Printf("listing sinks: %v", err) - break - } - if sinkIDs.Older(s.ID, 24*time.Hour) { - client.DeleteSink(ctx, s.ID) // ignore error - } - } - if integrationTest { - for _, bn := range bucketNames(ctx, storageClient) { - if bucketIDs.Older(bn, 24*time.Hour) { - storageClient.Bucket(bn).Delete(ctx) // ignore error - } - } - return func() { - if err := storageClient.Bucket(testBucket).Delete(ctx); err != nil { - log.Printf("deleting %q: %v", testBucket, err) - } - storageClient.Close() - } - } - return func() {} -} - -// Collect the name of all buckets for the test project. -func bucketNames(ctx context.Context, client *storage.Client) []string { - var names []string - it := client.Buckets(ctx, testProjectID) -loop: - for { - b, err := it.Next() - switch err { - case nil: - names = append(names, b.Name) - case iterator.Done: - break loop - default: - log.Printf("listing buckets: %v", err) - break loop - } - } - return names -} - -func TestCreateDeleteSink(t *testing.T) { - ctx := context.Background() - sink := &Sink{ - ID: sinkIDs.New(), - Destination: testSinkDestination, - Filter: testFilter, - } - got, err := client.CreateSink(ctx, sink) - if err != nil { - t.Fatal(err) - } - defer client.DeleteSink(ctx, sink.ID) - if want := sink; !reflect.DeepEqual(got, want) { - t.Errorf("got %+v, want %+v", got, want) - } - got, err = client.Sink(ctx, sink.ID) - if err != nil { - t.Fatal(err) - } - if want := sink; !reflect.DeepEqual(got, want) { - t.Errorf("got %+v, want %+v", got, want) - } - - if err := client.DeleteSink(ctx, sink.ID); err != nil { - t.Fatal(err) - } - - if _, err := client.Sink(ctx, sink.ID); err == nil { - t.Fatal("got no error, expected one") - } -} - -func TestUpdateSink(t *testing.T) { - ctx := context.Background() - sink := &Sink{ - ID: sinkIDs.New(), - Destination: testSinkDestination, - Filter: testFilter, - } - - // Updating a non-existent sink creates a new one. - got, err := client.UpdateSink(ctx, sink) - if err != nil { - t.Fatal(err) - } - defer client.DeleteSink(ctx, sink.ID) - if want := sink; !reflect.DeepEqual(got, want) { - t.Errorf("got %+v, want %+v", got, want) - } - got, err = client.Sink(ctx, sink.ID) - if err != nil { - t.Fatal(err) - } - if want := sink; !reflect.DeepEqual(got, want) { - t.Errorf("got %+v, want %+v", got, want) - } - - // Updating an existing sink changes it. - sink.Filter = "" - if _, err := client.UpdateSink(ctx, sink); err != nil { - t.Fatal(err) - } - got, err = client.Sink(ctx, sink.ID) - if err != nil { - t.Fatal(err) - } - if want := sink; !reflect.DeepEqual(got, want) { - t.Errorf("got %+v, want %+v", got, want) - } -} - -func TestListSinks(t *testing.T) { - ctx := context.Background() - var sinks []*Sink - want := map[string]*Sink{} - for i := 0; i < 4; i++ { - s := &Sink{ - ID: sinkIDs.New(), - Destination: testSinkDestination, - Filter: testFilter, - } - sinks = append(sinks, s) - want[s.ID] = s - } - for _, s := range sinks { - if _, err := client.CreateSink(ctx, s); err != nil { - t.Fatalf("Create(%q): %v", s.ID, err) - } - defer client.DeleteSink(ctx, s.ID) - } - - got := map[string]*Sink{} - it := client.Sinks(ctx) - for { - s, err := it.Next() - if err == iterator.Done { - break - } - if err != nil { - t.Fatal(err) - } - // If tests run simultaneously, we may have more sinks than we - // created. So only check for our own. - if _, ok := want[s.ID]; ok { - got[s.ID] = s - } - } - if !reflect.DeepEqual(got, want) { - t.Errorf("got %+v, want %+v", got, want) - } -} |
