/
main.go
68 lines (57 loc) · 1.34 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
62
63
64
65
66
67
68
package main
import (
"context"
"flag"
"net"
"net/http"
"os"
"github.com/go-logr/zapr"
"github.com/houz42/alertmanager-delivery/handler"
"github.com/supremind/pkg/log"
"github.com/supremind/pkg/shutdown"
"gopkg.in/yaml.v2"
)
func main() {
address := flag.String("address", ":41357", "delivery server listen address")
config := flag.String("config", "", "path to config file")
verbose := flag.Bool("verbose", false, "verbose output")
flag.Parse()
log.SetLogger(zapr.NewLogger(log.ZapLogger(*verbose)))
log := log.WithName("main")
confFile, e := os.Open(*config)
if e != nil {
log.Error(e, "open config file")
os.Exit(1)
}
defer confFile.Close()
conf := &handler.Config{}
if e := yaml.NewDecoder(confFile).Decode(conf); e != nil {
log.Error(e, "decode config file")
os.Exit(1)
}
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
mux, e := handler.Serve(ctx, conf)
if e != nil {
log.Error(e, "config server")
os.Exit(1)
}
l, e := net.Listen("tcp", *address)
if e != nil {
log.Error(e, "listen", "address", *address)
os.Exit(1)
}
s := http.Server{
Addr: *address,
Handler: mux,
}
go func() {
shutdown.BornToDie(ctx)
s.Shutdown(ctx)
}()
log.Info("starting delivery server", "address", *address)
if e := s.Serve(l); e != nil {
log.Error(e, "server down with error")
os.Exit(1)
}
}