sh-api: expand top-level server riggings
This commit is contained in:
parent
0d32cf49d7
commit
c1f917efb4
4 changed files with 64 additions and 16 deletions
|
@ -1,29 +1,71 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"database/sql"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
"git.sr.ht/~sircmpwn/searchhut/graph"
|
_ "github.com/lib/pq"
|
||||||
"git.sr.ht/~sircmpwn/searchhut/graph/generated"
|
|
||||||
|
"git.sr.ht/~sircmpwn/getopt"
|
||||||
"github.com/99designs/gqlgen/graphql/handler"
|
"github.com/99designs/gqlgen/graphql/handler"
|
||||||
"github.com/99designs/gqlgen/graphql/playground"
|
"github.com/99designs/gqlgen/graphql/playground"
|
||||||
|
"github.com/go-chi/chi"
|
||||||
|
"github.com/go-chi/chi/middleware"
|
||||||
|
|
||||||
|
"git.sr.ht/~sircmpwn/searchhut/config"
|
||||||
|
"git.sr.ht/~sircmpwn/searchhut/database"
|
||||||
|
"git.sr.ht/~sircmpwn/searchhut/graph"
|
||||||
|
"git.sr.ht/~sircmpwn/searchhut/graph/generated"
|
||||||
)
|
)
|
||||||
|
|
||||||
const defaultPort = "8080"
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
port := os.Getenv("PORT")
|
debug := false
|
||||||
if port == "" {
|
opts, _, err := getopt.Getopts(os.Args, "d")
|
||||||
port = defaultPort
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
for _, opt := range opts {
|
||||||
|
switch opt.Option {
|
||||||
|
case 'd':
|
||||||
|
debug = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
srv := handler.NewDefaultServer(generated.NewExecutableSchema(generated.Config{Resolvers: &graph.Resolver{}}))
|
conf := config.Load()
|
||||||
|
port, ok := conf.Get("searchhut::api", "bind")
|
||||||
|
if !ok {
|
||||||
|
port = ":8080"
|
||||||
|
}
|
||||||
|
|
||||||
http.Handle("/", playground.Handler("GraphQL playground", "/query"))
|
connstr, ok := conf.Get("searchhut", "connection-string")
|
||||||
http.Handle("/query", srv)
|
if !ok {
|
||||||
|
log.Fatal("Configuration missing connection string")
|
||||||
|
}
|
||||||
|
|
||||||
log.Printf("connect to http://localhost:%s/ for GraphQL playground", port)
|
db, err := sql.Open("postgres", connstr)
|
||||||
log.Fatal(http.ListenAndServe(":"+port, nil))
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
schema := generated.NewExecutableSchema(generated.Config{
|
||||||
|
Resolvers: &graph.Resolver{},
|
||||||
|
})
|
||||||
|
srv := handler.NewDefaultServer(schema)
|
||||||
|
|
||||||
|
router := chi.NewRouter()
|
||||||
|
router.Use(database.Middleware(db))
|
||||||
|
router.Use(middleware.RealIP)
|
||||||
|
router.Use(middleware.Logger)
|
||||||
|
router.Use(middleware.Timeout(10 * time.Second))
|
||||||
|
|
||||||
|
router.Handle("/query", srv)
|
||||||
|
if debug {
|
||||||
|
router.Handle("/", playground.Handler("GraphQL playground", "/query"))
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("Running server on %s", port)
|
||||||
|
log.Fatal(http.ListenAndServe(port, router))
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,10 @@ user-agent=
|
||||||
|
|
||||||
[searchhut::api]
|
[searchhut::api]
|
||||||
#
|
#
|
||||||
# The port to bind the API service to.
|
# The address to bind the API service to.
|
||||||
port=8080
|
bind=:8080
|
||||||
|
|
||||||
[searchhut::web]
|
[searchhut::web]
|
||||||
#
|
#
|
||||||
# The port to bind the web service to.
|
# The address to bind the web service to.
|
||||||
port=8081
|
bind=:8081
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -12,9 +12,11 @@ require (
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
git.sr.ht/~sircmpwn/getopt v1.0.0 // indirect
|
||||||
github.com/agnivade/levenshtein v1.1.1 // indirect
|
github.com/agnivade/levenshtein v1.1.1 // indirect
|
||||||
github.com/andybalholm/cascadia v1.2.0 // indirect
|
github.com/andybalholm/cascadia v1.2.0 // indirect
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect
|
github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect
|
||||||
|
github.com/go-chi/chi v1.5.4 // indirect
|
||||||
github.com/go-shiori/dom v0.0.0-20210627111528-4e4722cd0d65 // indirect
|
github.com/go-shiori/dom v0.0.0-20210627111528-4e4722cd0d65 // indirect
|
||||||
github.com/gogs/chardet v0.0.0-20191104214054-4b6791f73a28 // indirect
|
github.com/gogs/chardet v0.0.0-20191104214054-4b6791f73a28 // indirect
|
||||||
github.com/gorilla/websocket v1.5.0 // indirect
|
github.com/gorilla/websocket v1.5.0 // indirect
|
||||||
|
|
4
go.sum
4
go.sum
|
@ -1,4 +1,6 @@
|
||||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
|
git.sr.ht/~sircmpwn/getopt v1.0.0 h1:/pRHjO6/OCbBF4puqD98n6xtPEgE//oq5U8NXjP7ROc=
|
||||||
|
git.sr.ht/~sircmpwn/getopt v1.0.0/go.mod h1:wMEGFFFNuPos7vHmWXfszqImLppbc0wEhh6JBfJIUgw=
|
||||||
github.com/99designs/gqlgen v0.17.12 h1:lH/H5dTYCY5eLNRKXeq22l0wFMavpOnN6v9GAIw+fxY=
|
github.com/99designs/gqlgen v0.17.12 h1:lH/H5dTYCY5eLNRKXeq22l0wFMavpOnN6v9GAIw+fxY=
|
||||||
github.com/99designs/gqlgen v0.17.12/go.mod h1:w1brbeOdqVyNJI553BGwtwdVcYu1LKeYE1opLWN9RgQ=
|
github.com/99designs/gqlgen v0.17.12/go.mod h1:w1brbeOdqVyNJI553BGwtwdVcYu1LKeYE1opLWN9RgQ=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
|
@ -37,6 +39,8 @@ github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48 h1:fRzb/w+pyskVMQ+
|
||||||
github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
|
github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||||
|
github.com/go-chi/chi v1.5.4 h1:QHdzF2szwjqVV4wmByUnTcsbIg7UGaQ0tPF2t5GcAIs=
|
||||||
|
github.com/go-chi/chi v1.5.4/go.mod h1:uaf8YgoFazUOkPBG7fxPftUylNumIev9awIWOENIuEg=
|
||||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
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.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||||
|
|
Loading…
Reference in a new issue