Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(178)

Side by Side Diff: go/src/infra/gae/epclient/epclient.go

Issue 1153473008: A client/server helper wrapper for endpoints in Go. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: rm newline Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // The following comment allows `go generate` to correctly generate clients
6 // for all endpoints services located in the "infra/gae/epservice" package.
7 //go:generate goapp run epclient.go
8
9 // EPClient will auto-generate endpoints clients from Google Cloud Endpoint
10 // service definitions. The tool assumes that:
11 // * all go endpoint service definitions occur in a package which has
12 // a public method `RegisterEndpointsService(*endpoints.Server) error`, and
13 // that calling this method will register the endpoints service with the
14 // provided server or return an error.
15 // * goapp exists in PATH (and understands all the import paths in the
16 // defined services)
17 // * google-api-go-generator exists in PATH.
18 package main
19
20 import (
21 "flag"
22 "fmt"
23 "net/http"
24 "os"
25 "os/exec"
26 "path/filepath"
27 "time"
28 )
29
30 var (
31 servicePackagesBase = flag.String("pkgs", "infra",
32 "base Go package to walk to find service definitions.")
33 outDir = flag.String("outdir", ".",
34 "The directory to generate the client libraries in.")
35 )
36
37 const discoveryURL = "http://localhost:8080/_ah/api/discovery/v1/apis"
38
39 func boom(err error) {
40 if err != nil {
41 panic(err)
42 }
43 }
44
45 func parseFlags() {
46 var err error
47 flag.Parse()
48 if *outDir == "" {
49 if *outDir, err = os.Getwd(); err != nil {
50 panic(err)
51 }
52 }
53 if *outDir, err = filepath.Abs(*outDir); err != nil {
54 panic(err)
55 }
56 }
57
58 func startServer() func() {
59 boom(exec.Command("goapp", "install", "infra/gae/epservice").Run())
60 server := exec.Command("epservice", "-base", *servicePackagesBase)
61 server.Stdout = os.Stdout
62 server.Stderr = os.Stderr
63 if err := server.Start(); err != nil {
64 panic(err)
65 }
66
67 deadline := time.Now().Add(time.Second * 5)
68 for {
69 if time.Now().After(deadline) {
70 panic("waited too long for server to start!")
71 }
72 rsp, err := http.Get(discoveryURL)
73 if err == nil && rsp.StatusCode == 200 {
74 break
75 }
76 time.Sleep(time.Millisecond * 200)
77 }
78 fmt.Println("Discovery service up")
79
80 return func() {
81 server.Process.Signal(os.Interrupt)
82 server.Wait()
83 }
84 }
85
86 func generate() {
87 gencmd := exec.Command("google-api-go-generator", "-discoveryurl", disco veryURL, "-gendir", *outDir, "-cache=false")
88 gencmd.Stdout = os.Stdout
89 gencmd.Stderr = os.Stderr
90 if err := gencmd.Run(); err != nil {
91 panic(err)
92 }
93 }
94
95 func mustHave(executable string) {
96 _, err := exec.LookPath(executable)
97 if err != nil {
98 panic(executable + " must be on your path")
99 }
100 }
101
102 func main() {
103 mustHave("goapp")
104 mustHave("google-api-go-generator")
105
106 parseFlags()
107
108 stop := startServer()
109 defer stop()
110 generate()
111
112 // inject DoWithRetries methods.
113 }
OLDNEW
« no previous file with comments | « go/src/infra/gae/epclient/dumb_counter/v1/v1.infra_testing ('k') | go/src/infra/gae/epclient/epclient.infra_testing » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698