-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
61 lines (48 loc) · 1.36 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package main
import (
"fmt"
"net/http"
"os"
"os/signal"
"syscall"
"github.com/go-chi/chi/v5"
flags "github.com/jessevdk/go-flags"
"go.uber.org/zap"
"github.com/btschwartz12/clips/server"
)
type arguments struct {
Port int `short:"p" long:"port" description:"Port to listen on" default:"8000"`
VarDir string `long:"var-dir" env:"CLIPS_VAR_DIR" description:"Directory for storing temporary files" default:"var"`
ConfigFile string `long:"config-file" env:"CLIPS_CONFIG_FILE" description:"Path to config file" required:"true"`
}
var args arguments
func main() {
_, err := flags.Parse(&args)
if err != nil {
panic(fmt.Errorf("error parsing flags: %s", err))
}
var l *zap.Logger
l, _ = zap.NewDevelopment()
logger := l.Sugar()
s := &server.Server{}
err = s.Init(logger, args.VarDir, args.ConfigFile)
if err != nil {
logger.Fatalw("error initializing server", "error", err)
}
defer s.Teardown()
r := chi.NewRouter()
r.Mount("/", s.Router())
errChan := make(chan error, 1)
quit := make(chan os.Signal, 1)
signal.Notify(quit, os.Interrupt, syscall.SIGTERM)
go func() {
logger.Infow("starting http server", "port", args.Port)
errChan <- http.ListenAndServe(fmt.Sprintf(":%d", args.Port), r)
}()
select {
case err = <-errChan:
logger.Fatalw("http server failed", "error", err)
case <-quit:
logger.Infow("shutting down gracefully")
}
}