Files
agentx-techsummit-loadtest/cmd/api/main.go
T
2020-09-23 14:46:48 -04:00

47 lines
950 B
Go

package main
import (
"context"
"log"
"os"
"os/signal"
"syscall"
"time"
"github.com/RedVentures/agentx-loadtest-lunchandlearn/cmd/api/http"
)
func main() {
rl, err := http.NewMaxConcurrencyRateLimiter(50)
if err != nil {
log.Fatal(err)
}
s := &http.Server{
RateLimiter: rl,
}
// Allow app to listen for OS Interrupts and SIGTERMS.
serverErrors := make(chan error, 1)
osSignals := make(chan os.Signal, 1)
signal.Notify(osSignals, os.Interrupt, syscall.SIGTERM)
go func() {
serverErrors <- s.Run()
}()
// Handling for server errors and OS signals.
select {
case err := <-serverErrors:
log.Fatalf("error starting server: %v", err.Error())
case <-osSignals:
log.Println("starting server shutdown...")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
err := s.Shutdown(ctx)
if err != nil {
log.Fatalf("error trying to shutdown http server: %v", err.Error())
}
}
}