]> Sergey Matveev's repositories - btrtrc.git/blob - util/loghttp.go
399750aad4d06f221c18a759095b0dbf9e1c45d4
[btrtrc.git] / util / loghttp.go
1 package util
2
3 import (
4         "log"
5         "net"
6         "net/http"
7         _ "net/http/pprof"
8 )
9
10 func LoggedHTTPServe(addr string) *http.ServeMux {
11         if addr == "" {
12                 addr = "localhost:6061"
13         }
14         netAddr, err := net.ResolveTCPAddr("tcp", addr)
15         if err != nil {
16                 log.Fatalf("error resolving http addr: %s", err)
17         }
18         var conn net.Listener
19         for try := 0; try < 100; try++ {
20                 conn, err = net.ListenTCP("tcp", netAddr)
21                 if err == nil {
22                         break
23                 }
24                 netAddr.Port++
25         }
26         if err != nil {
27                 log.Fatalf("error creating http conn: %#v", err)
28         }
29         log.Printf("starting http server on http://%s", conn.Addr())
30         mux := http.NewServeMux()
31         go func() {
32                 defer conn.Close()
33                 err = (&http.Server{
34                         Handler: mux,
35                 }).Serve(conn)
36                 if err != nil {
37                         log.Fatalf("error serving http: %s", err)
38                 }
39         }()
40         return mux
41 }