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
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"git.sr.ht/~sircmpwn/searchhut/graph"
|
||||
"git.sr.ht/~sircmpwn/searchhut/graph/generated"
|
||||
_ "github.com/lib/pq"
|
||||
|
||||
"git.sr.ht/~sircmpwn/getopt"
|
||||
"github.com/99designs/gqlgen/graphql/handler"
|
||||
"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() {
|
||||
port := os.Getenv("PORT")
|
||||
if port == "" {
|
||||
port = defaultPort
|
||||
debug := false
|
||||
opts, _, err := getopt.Getopts(os.Args, "d")
|
||||
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"))
|
||||
http.Handle("/query", srv)
|
||||
connstr, ok := conf.Get("searchhut", "connection-string")
|
||||
if !ok {
|
||||
log.Fatal("Configuration missing connection string")
|
||||
}
|
||||
|
||||
log.Printf("connect to http://localhost:%s/ for GraphQL playground", port)
|
||||
log.Fatal(http.ListenAndServe(":"+port, nil))
|
||||
db, err := sql.Open("postgres", connstr)
|
||||
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]
|
||||
#
|
||||
# The port to bind the API service to.
|
||||
port=8080
|
||||
# The address to bind the API service to.
|
||||
bind=:8080
|
||||
|
||||
[searchhut::web]
|
||||
#
|
||||
# The port to bind the web service to.
|
||||
port=8081
|
||||
# The address to bind the web service to.
|
||||
bind=:8081
|
||||
|
|
2
go.mod
2
go.mod
|
@ -12,9 +12,11 @@ require (
|
|||
)
|
||||
|
||||
require (
|
||||
git.sr.ht/~sircmpwn/getopt v1.0.0 // indirect
|
||||
github.com/agnivade/levenshtein v1.1.1 // indirect
|
||||
github.com/andybalholm/cascadia v1.2.0 // 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/gogs/chardet v0.0.0-20191104214054-4b6791f73a28 // 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=
|
||||
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/go.mod h1:w1brbeOdqVyNJI553BGwtwdVcYu1LKeYE1opLWN9RgQ=
|
||||
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/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
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-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||
|
|
Loading…
Reference in a new issue