sh-api: expand top-level server riggings

This commit is contained in:
Drew DeVault 2022-07-09 15:39:04 +02:00
parent 0d32cf49d7
commit c1f917efb4
4 changed files with 64 additions and 16 deletions

View file

@ -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))
} }

View file

@ -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
View file

@ -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
View file

@ -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=