-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
80 lines (59 loc) · 1.45 KB
/
Copy pathmain.go
File metadata and controls
80 lines (59 loc) · 1.45 KB
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
69
70
71
72
73
74
75
76
77
78
79
80
package main
import (
"flag"
"net/http"
"os"
"os/signal"
"github.com/diegohce/httprecorder/recorder"
"github.com/diegohce/logger"
)
var (
log *logger.Logger
srv *http.Server
)
func mode() bool {
var recordMode bool
var replayMode bool
flag.BoolVar(&recordMode, "record", false, "Executes httprecorder in record mode")
flag.BoolVar(&replayMode, "replay", false, "Executes httprecorder in replay mode")
flag.Parse()
if recordMode == replayMode {
log.Error().Println("Must be one of -record or -replay")
os.Exit(1)
}
return recordMode
}
func main() {
log = logger.New("httprecorder::")
recordMode := mode()
bindAddr := os.Getenv("HTTPRECORDER_BINDADDR")
if bindAddr == "" {
bindAddr = ":8080"
}
if err := loadConfig(); err != nil {
log.Error().Fatalln(err, "loading config file")
}
var proxies *http.ServeMux
if recordMode {
proxies = createRecordingProxies()
} else {
proxies = createReplayProxies()
}
if recordMode {
log.Info().Println("Starting httprecorder on", bindAddr)
} else {
log.Info().Println("Starting httprecorder in replay mode on", bindAddr)
}
srv = &http.Server{Addr: bindAddr, Handler: proxies}
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, os.Interrupt)
go func() {
_ = <-sigChan
if recordMode {
log.Info().Println("Dumping recorder data to", httprConfig.Filename)
recorder.RRRecorder.Dump(httprConfig.Filename)
}
os.Exit(0)
}()
log.Error().Println(srv.ListenAndServe())
}