From 0858fcf17a5bcddd690419880114da0a56aa4308 Mon Sep 17 00:00:00 2001 From: Hiram Chirino Date: Mon, 1 Jun 2020 10:23:14 -0400 Subject: [PATCH] feat: adding a rest api to get and update the gateway configuration file. --- go.mod | 2 ++ go.sum | 4 ++++ internal/cmd/config/add/upstream/cmd.go | 7 +------ internal/cmd/config/cmd.go | 13 +++++++++++++ internal/cmd/config/link/cmd.go | 7 +------ internal/cmd/config/mount/cmd.go | 8 +------- internal/cmd/serve/cmd.go | 13 +++++++++---- 7 files changed, 31 insertions(+), 23 deletions(-) diff --git a/go.mod b/go.mod index 5846eeb..e67874e 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,8 @@ require ( github.com/chirino/graphql v0.0.0-20200523142529-5ceea4b22455 github.com/fsnotify/fsnotify v1.4.7 github.com/ghodss/yaml v1.0.0 + github.com/go-chi/chi v4.1.1+incompatible + github.com/go-chi/render v1.0.1 github.com/pkg/errors v0.9.1 github.com/spf13/cobra v1.0.0 github.com/spf13/pflag v1.0.5 // indirect diff --git a/go.sum b/go.sum index 0ce2c13..7174be1 100644 --- a/go.sum +++ b/go.sum @@ -30,6 +30,10 @@ github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-chi/chi v4.1.1+incompatible h1:MmTgB0R8Bt/jccxp+t6S/1VGIKdJw5J74CK/c9tTfA4= +github.com/go-chi/chi v4.1.1+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= +github.com/go-chi/render v1.0.1 h1:4/5tis2cKaNdnv9zFLfXzcquC9HbeZgCnxGnKrltBS8= +github.com/go-chi/render v1.0.1/go.mod h1:pq4Rr7HbnsdaeHagklXub+p6Wd16Af5l9koip1OvJns= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= diff --git a/internal/cmd/config/add/upstream/cmd.go b/internal/cmd/config/add/upstream/cmd.go index 7a874ff..78f868f 100644 --- a/internal/cmd/config/add/upstream/cmd.go +++ b/internal/cmd/config/add/upstream/cmd.go @@ -13,7 +13,6 @@ import ( "github.com/chirino/graphql-gw/internal/gateway" "github.com/chirino/graphql/schema" "github.com/spf13/cobra" - "gopkg.in/yaml.v2" ) var ( @@ -113,15 +112,11 @@ func run(cmd *cobra.Command, args []string) { } // Update the config - c.Upstreams[upstreamName] = gateway.UpstreamWrapper{Upstream: upstream} - configYml, err := yaml.Marshal(&c) - configFile := filepath.Join("./", config.File) - err = ioutil.WriteFile(configFile, configYml, 0644) + err = config.Store(*c) if err != nil { log.Fatalf(root.Verbosity, err) } - log.Printf(`upstream added`) } diff --git a/internal/cmd/config/cmd.go b/internal/cmd/config/cmd.go index 4c4a090..8e240bc 100644 --- a/internal/cmd/config/cmd.go +++ b/internal/cmd/config/cmd.go @@ -62,3 +62,16 @@ func Load(config *Config) error { return nil } + +func Store(config Config) error { + configYml, err := yaml.Marshal(&config) + if err != nil { + return err + } + + err = ioutil.WriteFile(File, configYml, 0644) + if err != nil { + return err + } + return nil +} \ No newline at end of file diff --git a/internal/cmd/config/link/cmd.go b/internal/cmd/config/link/cmd.go index 0ba357c..699554e 100644 --- a/internal/cmd/config/link/cmd.go +++ b/internal/cmd/config/link/cmd.go @@ -1,8 +1,6 @@ package new import ( - "io/ioutil" - "path/filepath" "strings" "github.com/chirino/graphql-gw/internal/cmd/config" @@ -10,7 +8,6 @@ import ( "github.com/chirino/graphql-gw/internal/gateway" "github.com/chirino/graphql/schema" "github.com/spf13/cobra" - "gopkg.in/yaml.v2" ) var ( @@ -111,9 +108,7 @@ func run(_ *cobra.Command, _ []string) { c.Types = append(c.Types, *t) } - configYml, err := yaml.Marshal(c) - configFile := filepath.Join("./", config.File) - err = ioutil.WriteFile(configFile, configYml, 0644) + err = config.Store(*c) if err != nil { log.Fatalf(root.Verbosity, err) } diff --git a/internal/cmd/config/mount/cmd.go b/internal/cmd/config/mount/cmd.go index 17b7af7..3828973 100644 --- a/internal/cmd/config/mount/cmd.go +++ b/internal/cmd/config/mount/cmd.go @@ -1,15 +1,11 @@ package new import ( - "io/ioutil" - "path/filepath" - "github.com/chirino/graphql-gw/internal/cmd/config" "github.com/chirino/graphql-gw/internal/cmd/root" "github.com/chirino/graphql-gw/internal/gateway" "github.com/chirino/graphql/schema" "github.com/spf13/cobra" - "gopkg.in/yaml.v2" ) var ( @@ -92,9 +88,7 @@ func run(_ *cobra.Command, _ []string) { c.Types = append(c.Types, *t) } - configYml, err := yaml.Marshal(c) - configFile := filepath.Join("./", config.File) - err = ioutil.WriteFile(configFile, configYml, 0644) + err = config.Store(*c) if err != nil { log.Fatalf(root.Verbosity, err) } diff --git a/internal/cmd/serve/cmd.go b/internal/cmd/serve/cmd.go index 24cb58b..de9538e 100644 --- a/internal/cmd/serve/cmd.go +++ b/internal/cmd/serve/cmd.go @@ -13,9 +13,12 @@ import ( "github.com/chirino/graphql-gw/internal/cmd/config" "github.com/chirino/graphql-gw/internal/cmd/root" "github.com/chirino/graphql-gw/internal/gateway" + "github.com/chirino/graphql-gw/internal/gateway/admin" "github.com/chirino/graphql/graphiql" "github.com/chirino/graphql/httpgql" "github.com/fsnotify/fsnotify" + "github.com/go-chi/chi" + "github.com/go-chi/chi/middleware" "github.com/spf13/cobra" ) @@ -169,10 +172,12 @@ func mountGatewayOnHttpServer(c *config.Config) error { gatewayHandler.Indent = " " } graphqlURL := fmt.Sprintf("%s/graphql", c.Server.URL) - mux := http.NewServeMux() - mux.Handle("/graphql", gatewayHandler) - mux.Handle("/", graphiql.New(graphqlURL, true)) - c.Server.Config.Handler = mux + r := chi.NewRouter() + r.Use(middleware.Logger) + r.Mount("/admin", admin.CreateHttpHandler()) + r.Handle("/graphql", gatewayHandler) + r.Handle("/", graphiql.New(graphqlURL, true)) + c.Server.Config.Handler = r config.Value.Log.Printf("GraphQL endpoint running at %s", graphqlURL) config.Value.Log.Printf("GraphQL UI running at %s", c.Server.URL) return nil