-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
84 lines (69 loc) · 1.83 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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package main
import (
"context"
"fmt"
"net/http"
"os"
"os/signal"
"time"
"github.com/sirupsen/logrus"
)
var count int64
var sema = make(chan struct{}, 1)
func main() {
logrus.SetFormatter(&logrus.JSONFormatter{})
port := os.Getenv("PORT")
if port == "" {
port = "80"
}
mux := http.DefaultServeMux
//mux.HandleFunc("/grokit", func(w http.ResponseWriter, r *http.Request) {
// fmt.Println("received connection to / from", r.RemoteAddr)
// w.WriteHeader(http.StatusOK)
// r.Body.Close()
//
// //b, err := io.ReadAll(r.Body)
// //if err != nil {
// // logrus.Print("body read err", err)
// //}
// //fmt.Println("body:", string(b))
// sema <- struct{}{}
// count++
// fmt.Println("count", count)
// <-sema
//})
mux.HandleFunc("/endpoint1", func(w http.ResponseWriter, r *http.Request) {
fmt.Println("received connection to endpoint1 from", r.RemoteAddr)
w.WriteHeader(http.StatusOK)
sema <- struct{}{}
count++
fmt.Println("count", count)
<-sema
})
mux.HandleFunc("/endpoint2", func(w http.ResponseWriter, r *http.Request) {
fmt.Println("received connection to endpoint2 from", r.RemoteAddr)
w.WriteHeader(http.StatusOK)
sema <- struct{}{}
count++
fmt.Println("count", count)
<-sema
})
fmt.Println("starting http listener")
srv := http.Server{Addr: ":" + port, Handler: mux}
go func() {
err := srv.ListenAndServe()
if err != nil && err != http.ErrServerClosed {
logrus.WithError(err).Fatalln("failed to listen")
}
}()
//Wait for interrupt signal to gracefully shutdown the server with a timeout of 2 seconds
quit := make(chan os.Signal)
signal.Notify(quit, os.Interrupt)
<-quit
ctx, _ := context.WithTimeout(context.Background(), 2*time.Second)
err := srv.Shutdown(ctx)
if err != nil {
logrus.WithError(err).Fatalln("graceful shutdown failed")
}
logrus.Infoln("closed listener")
}