2014-07-23 01:54:58 +10:00
|
|
|
package util
|
|
|
|
|
|
|
|
import (
|
|
|
|
"log"
|
|
|
|
"net"
|
|
|
|
"net/http"
|
2014-11-19 20:00:43 -06:00
|
|
|
_ "net/http/pprof"
|
2014-07-23 01:54:58 +10:00
|
|
|
)
|
|
|
|
|
2014-11-18 14:35:32 -06:00
|
|
|
func LoggedHTTPServe(addr string) *http.ServeMux {
|
2014-11-18 09:56:05 -06:00
|
|
|
if addr == "" {
|
|
|
|
addr = "localhost:6061"
|
|
|
|
}
|
2014-07-23 01:54:58 +10:00
|
|
|
netAddr, err := net.ResolveTCPAddr("tcp", addr)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("error resolving http addr: %s", err)
|
|
|
|
}
|
2014-11-16 23:24:25 -06:00
|
|
|
var conn net.Listener
|
|
|
|
for try := 0; try < 100; try++ {
|
|
|
|
conn, err = net.ListenTCP("tcp", netAddr)
|
|
|
|
if err == nil {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
netAddr.Port++
|
|
|
|
}
|
2014-07-23 01:54:58 +10:00
|
|
|
if err != nil {
|
2014-11-16 23:24:25 -06:00
|
|
|
log.Fatalf("error creating http conn: %#v", err)
|
2014-07-23 01:54:58 +10:00
|
|
|
}
|
|
|
|
log.Printf("starting http server on http://%s", conn.Addr())
|
2014-11-19 20:00:43 -06:00
|
|
|
mux := http.DefaultServeMux
|
2014-07-23 01:54:58 +10:00
|
|
|
go func() {
|
|
|
|
defer conn.Close()
|
2014-11-18 14:35:32 -06:00
|
|
|
err = (&http.Server{
|
|
|
|
Handler: mux,
|
|
|
|
}).Serve(conn)
|
2014-07-23 01:54:58 +10:00
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("error serving http: %s", err)
|
|
|
|
}
|
|
|
|
}()
|
2014-11-18 14:35:32 -06:00
|
|
|
return mux
|
2014-07-23 01:54:58 +10:00
|
|
|
}
|