Skip to content

Commit 0a69b5b

Browse files
committed
internal/metrics: fix detection of GCE environment
appengine.IsAppEngine mistakenly returns false, as it relies on the app being built with the appenginevm build constraint. This is not set, as we're supplying our own Docker image. The playground is always running either locally or on appengine. We can rely on metadata.OnGCE being correct. Other calls that are made to the appengine library either use the metadata server or environment variables, and do not rely on a constraint being set. They also panic if the metadata server is unavailable. For golang/go#44822 Change-Id: I1de5fda4bfd1e909f1fd54cc44770525827a9c1a Reviewed-on: https://go-review.googlesource.com/c/playground/+/303469 Trust: Alexander Rakoczy <alex@golang.org> Run-TryBot: Alexander Rakoczy <alex@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
1 parent 3398ffb commit 0a69b5b

File tree

3 files changed

+21
-16
lines changed

3 files changed

+21
-16
lines changed

internal/metrics/service.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,10 @@ func GCEResource(jobName string) (*MonitoredResource, error) {
145145
//
146146
// The resource will be in StackDrvier's gae_instance type.
147147
func GAEResource(ctx context.Context) (*MonitoredResource, error) {
148-
if !appengine.IsAppEngine() {
148+
// appengine.IsAppEngine is confusingly false as we're using a custom
149+
// container and building without the appenginevm build constraint.
150+
// Check metadata.OnGCE instead.
151+
if !metadata.OnGCE() {
149152
return nil, fmt.Errorf("not running on appengine")
150153
}
151154
projID, err := metadata.ProjectID()

main.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313

1414
"cloud.google.com/go/compute/metadata"
1515
"cloud.google.com/go/datastore"
16+
"golang.org/x/playground/internal/metrics"
1617
)
1718

1819
var log = newStdLogger()
@@ -44,7 +45,7 @@ func main() {
4445
}
4546
s.log = log
4647
return nil
47-
})
48+
}, enableMetrics)
4849
if err != nil {
4950
log.Fatalf("Error creating server: %v", err)
5051
}
@@ -71,6 +72,21 @@ func main() {
7172
log.Fatalf("Error listening on :%v: %v", port, http.ListenAndServe(":"+port, s))
7273
}
7374

75+
func enableMetrics(s *server) error {
76+
gr, err := metrics.GAEResource(context.Background())
77+
if err != nil {
78+
s.log.Printf("metrics.GAEResource() = _, %q", err)
79+
}
80+
ms, err := metrics.NewService(gr, views)
81+
if err != nil {
82+
s.log.Printf("Failed to initialize metrics: metrics.NewService() = _, %q. (not on GCP?)", err)
83+
}
84+
if ms != nil && !metadata.OnGCE() {
85+
s.mux.Handle("/metrics", ms)
86+
}
87+
return nil
88+
}
89+
7490
func projectID() string {
7591
id, err := metadata.ProjectID()
7692
if err != nil && os.Getenv("GAE_INSTANCE") != "" {

server.go

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,12 @@
55
package main
66

77
import (
8-
"context"
98
"fmt"
109
"net/http"
1110
"os"
1211
"strings"
1312
"time"
1413

15-
"cloud.google.com/go/compute/metadata"
16-
"golang.org/x/playground/internal/metrics"
1714
"golang.org/x/tools/godoc/static"
1815
)
1916

@@ -46,17 +43,6 @@ func newServer(options ...func(s *server) error) (*server, error) {
4643
s.modtime = fi.ModTime()
4744
}
4845
}
49-
gr, err := metrics.GAEResource(context.Background())
50-
if err != nil {
51-
s.log.Printf("metrics.GaeService() = _, %q", err)
52-
}
53-
ms, err := metrics.NewService(gr, views)
54-
if err != nil {
55-
s.log.Printf("Failed to initialize metrics: metrics.NewService() = _, %q. (not on GCP?)", err)
56-
}
57-
if ms != nil && !metadata.OnGCE() {
58-
s.mux.Handle("/statusz", ms)
59-
}
6046
s.init()
6147
return s, nil
6248
}

0 commit comments

Comments
 (0)