aboutsummaryrefslogtreecommitdiffhomepage
path: root/vendor/google.golang.org/appengine/capability/capability.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/google.golang.org/appengine/capability/capability.go')
-rw-r--r--vendor/google.golang.org/appengine/capability/capability.go52
1 files changed, 52 insertions, 0 deletions
diff --git a/vendor/google.golang.org/appengine/capability/capability.go b/vendor/google.golang.org/appengine/capability/capability.go
new file mode 100644
index 0000000..3a60bd5
--- /dev/null
+++ b/vendor/google.golang.org/appengine/capability/capability.go
@@ -0,0 +1,52 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+/*
+Package capability exposes information about outages and scheduled downtime
+for specific API capabilities.
+
+This package does not work in App Engine "flexible environment".
+
+Example:
+ if !capability.Enabled(c, "datastore_v3", "write") {
+ // show user a different page
+ }
+*/
+package capability // import "google.golang.org/appengine/capability"
+
+import (
+ "golang.org/x/net/context"
+
+ "google.golang.org/appengine/internal"
+ "google.golang.org/appengine/log"
+
+ pb "google.golang.org/appengine/internal/capability"
+)
+
+// Enabled returns whether an API's capabilities are enabled.
+// The wildcard "*" capability matches every capability of an API.
+// If the underlying RPC fails (if the package is unknown, for example),
+// false is returned and information is written to the application log.
+func Enabled(ctx context.Context, api, capability string) bool {
+ req := &pb.IsEnabledRequest{
+ Package: &api,
+ Capability: []string{capability},
+ }
+ res := &pb.IsEnabledResponse{}
+ if err := internal.Call(ctx, "capability_service", "IsEnabled", req, res); err != nil {
+ log.Warningf(ctx, "capability.Enabled: RPC failed: %v", err)
+ return false
+ }
+ switch *res.SummaryStatus {
+ case pb.IsEnabledResponse_ENABLED,
+ pb.IsEnabledResponse_SCHEDULED_FUTURE,
+ pb.IsEnabledResponse_SCHEDULED_NOW:
+ return true
+ case pb.IsEnabledResponse_UNKNOWN:
+ log.Errorf(ctx, "capability.Enabled: unknown API capability %s/%s", api, capability)
+ return false
+ default:
+ return false
+ }
+}