-
Notifications
You must be signed in to change notification settings - Fork 19
/
exitSignal.go
59 lines (53 loc) · 1.19 KB
/
exitSignal.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
package rt
import (
"net/http"
"os"
"os/signal"
"syscall"
)
// Mode represents rt running mode, either "client" or "server"
var Mode string
func exitSignalHandlers() {
c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
infoLog.Printf("close signal received: %+v\n", <-c)
if Mode == "server" {
os.Exit(1)
} else {
counter := 0
for {
if counter > 2 {
break
}
client := &http.Client{}
URL := "http://" + ipAndPort + "/server-cleanup"
req, err := http.NewRequest("GET", URL, nil)
if err != nil {
errorLog.Println(err)
infoLog.Println("retrying...")
counter = counter + 1
continue
}
req.SetBasicAuth(username, password)
resp, err := client.Do(req)
if err != nil {
errorLog.Println(err)
infoLog.Println("retrying...")
counter = counter + 1
continue
}
if resp.StatusCode == http.StatusUnauthorized {
errorLog.Println("Authentication failed")
return
} else if resp.StatusCode == http.StatusOK {
infoLog.Println("Server cleanup successful")
break
} else {
counter = counter + 1
errorLog.Printf("status code: %v\n", resp.StatusCode)
continue
}
}
os.Exit(1)
}
}