Browse Source

metrics: log HTTP requests when logLevel is debug (#1687)

pull/1689/head
Alessandro Ros 2 years ago committed by GitHub
parent
commit
2a5e6e2651
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 9
      internal/core/api.go
  2. 40
      internal/core/hls_server.go
  3. 15
      internal/core/http_set_trusted_proxies.go
  4. 13
      internal/core/metrics.go
  5. 8
      internal/core/pprof.go
  6. 45
      internal/core/webrtc_server.go

9
internal/core/api.go

@ -118,8 +118,8 @@ type api struct {
parent apiParent parent apiParent
ln net.Listener ln net.Listener
httpServer *http.Server
mutex sync.Mutex mutex sync.Mutex
s *http.Server
} }
func newAPI( func newAPI(
@ -153,7 +153,6 @@ func newAPI(
} }
router := gin.New() router := gin.New()
router.SetTrustedProxies(nil) router.SetTrustedProxies(nil)
mwLog := httpLoggerMiddleware(a) mwLog := httpLoggerMiddleware(a)
@ -199,12 +198,12 @@ func newAPI(
group.POST("/v1/webrtcconns/kick/:id", a.onWebRTCConnsKick) group.POST("/v1/webrtcconns/kick/:id", a.onWebRTCConnsKick)
} }
a.s = &http.Server{ a.httpServer = &http.Server{
Handler: router, Handler: router,
ErrorLog: log.New(&nilWriter{}, "", 0), ErrorLog: log.New(&nilWriter{}, "", 0),
} }
go a.s.Serve(ln) go a.httpServer.Serve(ln)
a.log(logger.Info, "listener opened on "+address) a.log(logger.Info, "listener opened on "+address)
@ -213,7 +212,7 @@ func newAPI(
func (a *api) close() { func (a *api) close() {
a.log(logger.Info, "listener is closing") a.log(logger.Info, "listener is closing")
a.s.Shutdown(context.Background()) a.httpServer.Shutdown(context.Background())
a.ln.Close() // in case Shutdown() is called before Serve() a.ln.Close() // in case Shutdown() is called before Serve()
} }

40
internal/core/hls_server.go

@ -63,7 +63,6 @@ type hlsServer struct {
partDuration conf.StringDuration partDuration conf.StringDuration
segmentMaxSize conf.StringSize segmentMaxSize conf.StringSize
allowOrigin string allowOrigin string
trustedProxies conf.IPsOrCIDRs
directory string directory string
readBufferCount int readBufferCount int
pathManager *pathManager pathManager *pathManager
@ -74,7 +73,7 @@ type hlsServer struct {
ctxCancel func() ctxCancel func()
wg sync.WaitGroup wg sync.WaitGroup
ln net.Listener ln net.Listener
tlsConfig *tls.Config httpServer *http.Server
muxers map[string]*hlsMuxer muxers map[string]*hlsMuxer
// in // in
@ -135,7 +134,6 @@ func newHLSServer(
partDuration: partDuration, partDuration: partDuration,
segmentMaxSize: segmentMaxSize, segmentMaxSize: segmentMaxSize,
allowOrigin: allowOrigin, allowOrigin: allowOrigin,
trustedProxies: trustedProxies,
directory: directory, directory: directory,
readBufferCount: readBufferCount, readBufferCount: readBufferCount,
pathManager: pathManager, pathManager: pathManager,
@ -144,7 +142,6 @@ func newHLSServer(
ctx: ctx, ctx: ctx,
ctxCancel: ctxCancel, ctxCancel: ctxCancel,
ln: ln, ln: ln,
tlsConfig: tlsConfig,
muxers: make(map[string]*hlsMuxer), muxers: make(map[string]*hlsMuxer),
chPathSourceReady: make(chan *path), chPathSourceReady: make(chan *path),
chPathSourceNotReady: make(chan *path), chPathSourceNotReady: make(chan *path),
@ -153,6 +150,17 @@ func newHLSServer(
chAPIMuxerList: make(chan hlsServerAPIMuxersListReq), chAPIMuxerList: make(chan hlsServerAPIMuxersListReq),
} }
router := gin.New()
httpSetTrustedProxies(router, trustedProxies)
router.NoRoute(httpLoggerMiddleware(s), httpServerHeaderMiddleware, s.onRequest)
s.httpServer = &http.Server{
Handler: router,
TLSConfig: tlsConfig,
ErrorLog: log.New(&nilWriter{}, "", 0),
}
s.log(logger.Info, "listener opened on "+address) s.log(logger.Info, "listener opened on "+address)
s.pathManager.hlsServerSet(s) s.pathManager.hlsServerSet(s)
@ -181,26 +189,10 @@ func (s *hlsServer) close() {
func (s *hlsServer) run() { func (s *hlsServer) run() {
defer s.wg.Done() defer s.wg.Done()
router := gin.New() if s.httpServer.TLSConfig != nil {
go s.httpServer.ServeTLS(s.ln, "", "")
tmp := make([]string, len(s.trustedProxies))
for i, entry := range s.trustedProxies {
tmp[i] = entry.String()
}
router.SetTrustedProxies(tmp)
router.NoRoute(httpLoggerMiddleware(s), httpServerHeaderMiddleware, s.onRequest)
hs := &http.Server{
Handler: router,
TLSConfig: s.tlsConfig,
ErrorLog: log.New(&nilWriter{}, "", 0),
}
if s.tlsConfig != nil {
go hs.ServeTLS(s.ln, "", "")
} else { } else {
go hs.Serve(s.ln) go s.httpServer.Serve(s.ln)
} }
outer: outer:
@ -258,7 +250,7 @@ outer:
s.ctxCancel() s.ctxCancel()
hs.Shutdown(context.Background()) s.httpServer.Shutdown(context.Background())
s.ln.Close() // in case Shutdown() is called before Serve() s.ln.Close() // in case Shutdown() is called before Serve()
s.pathManager.hlsServerSet(nil) s.pathManager.hlsServerSet(nil)

15
internal/core/http_set_trusted_proxies.go

@ -0,0 +1,15 @@
package core
import (
"github.com/gin-gonic/gin"
"github.com/aler9/mediamtx/internal/conf"
)
func httpSetTrustedProxies(router *gin.Engine, trustedProxies conf.IPsOrCIDRs) {
tmp := make([]string, len(trustedProxies))
for i, entry := range trustedProxies {
tmp[i] = entry.String()
}
router.SetTrustedProxies(tmp)
}

13
internal/core/metrics.go

@ -26,7 +26,7 @@ type metrics struct {
parent metricsParent parent metricsParent
ln net.Listener ln net.Listener
server *http.Server httpServer *http.Server
mutex sync.Mutex mutex sync.Mutex
pathManager apiPathManager pathManager apiPathManager
rtspServer apiRTSPServer rtspServer apiRTSPServer
@ -52,23 +52,26 @@ func newMetrics(
router := gin.New() router := gin.New()
router.SetTrustedProxies(nil) router.SetTrustedProxies(nil)
router.GET("/metrics", m.onMetrics)
m.server = &http.Server{ mwLog := httpLoggerMiddleware(m)
router.NoRoute(mwLog)
router.GET("/metrics", mwLog, m.onMetrics)
m.httpServer = &http.Server{
Handler: router, Handler: router,
ErrorLog: log.New(&nilWriter{}, "", 0), ErrorLog: log.New(&nilWriter{}, "", 0),
} }
m.log(logger.Info, "listener opened on "+address) m.log(logger.Info, "listener opened on "+address)
go m.server.Serve(m.ln) go m.httpServer.Serve(m.ln)
return m, nil return m, nil
} }
func (m *metrics) close() { func (m *metrics) close() {
m.log(logger.Info, "listener is closing") m.log(logger.Info, "listener is closing")
m.server.Shutdown(context.Background()) m.httpServer.Shutdown(context.Background())
m.ln.Close() // in case Shutdown() is called before Serve() m.ln.Close() // in case Shutdown() is called before Serve()
} }

8
internal/core/pprof.go

@ -20,7 +20,7 @@ type pprof struct {
parent pprofParent parent pprofParent
ln net.Listener ln net.Listener
server *http.Server httpServer *http.Server
} }
func newPPROF( func newPPROF(
@ -37,21 +37,21 @@ func newPPROF(
ln: ln, ln: ln,
} }
pp.server = &http.Server{ pp.httpServer = &http.Server{
Handler: http.DefaultServeMux, Handler: http.DefaultServeMux,
ErrorLog: log.New(&nilWriter{}, "", 0), ErrorLog: log.New(&nilWriter{}, "", 0),
} }
pp.log(logger.Info, "listener opened on "+address) pp.log(logger.Info, "listener opened on "+address)
go pp.server.Serve(pp.ln) go pp.httpServer.Serve(pp.ln)
return pp, nil return pp, nil
} }
func (pp *pprof) close() { func (pp *pprof) close() {
pp.log(logger.Info, "listener is closing") pp.log(logger.Info, "listener is closing")
pp.server.Shutdown(context.Background()) pp.httpServer.Shutdown(context.Background())
pp.ln.Close() // in case Shutdown() is called before Serve() pp.ln.Close() // in case Shutdown() is called before Serve()
} }

45
internal/core/webrtc_server.go

@ -80,9 +80,10 @@ type webRTCServer struct {
ctx context.Context ctx context.Context
ctxCancel func() ctxCancel func()
ln net.Listener ln net.Listener
requestPool *httpRequestPool
httpServer *http.Server
udpMuxLn net.PacketConn udpMuxLn net.PacketConn
tcpMuxLn net.Listener tcpMuxLn net.Listener
tlsConfig *tls.Config
conns map[*webRTCConn]struct{} conns map[*webRTCConn]struct{}
iceHostNAT1To1IPs []string iceHostNAT1To1IPs []string
iceUDPMux ice.UDPMux iceUDPMux ice.UDPMux
@ -170,7 +171,6 @@ func newWebRTCServer(
ln: ln, ln: ln,
udpMuxLn: udpMuxLn, udpMuxLn: udpMuxLn,
tcpMuxLn: tcpMuxLn, tcpMuxLn: tcpMuxLn,
tlsConfig: tlsConfig,
iceUDPMux: iceUDPMux, iceUDPMux: iceUDPMux,
iceTCPMux: iceTCPMux, iceTCPMux: iceTCPMux,
iceHostNAT1To1IPs: iceHostNAT1To1IPs, iceHostNAT1To1IPs: iceHostNAT1To1IPs,
@ -182,6 +182,19 @@ func newWebRTCServer(
done: make(chan struct{}), done: make(chan struct{}),
} }
s.requestPool = newHTTPRequestPool()
router := gin.New()
httpSetTrustedProxies(router, trustedProxies)
router.NoRoute(s.requestPool.mw, httpLoggerMiddleware(s), httpServerHeaderMiddleware, s.onRequest)
s.httpServer = &http.Server{
Handler: router,
TLSConfig: tlsConfig,
ErrorLog: log.New(&nilWriter{}, "", 0),
}
str := "listener opened on " + address + " (HTTP)" str := "listener opened on " + address + " (HTTP)"
if udpMuxLn != nil { if udpMuxLn != nil {
str += ", " + iceUDPMuxAddress + " (ICE/UDP)" str += ", " + iceUDPMuxAddress + " (ICE/UDP)"
@ -214,29 +227,10 @@ func (s *webRTCServer) close() {
func (s *webRTCServer) run() { func (s *webRTCServer) run() {
defer close(s.done) defer close(s.done)
rp := newHTTPRequestPool() if s.httpServer.TLSConfig != nil {
defer rp.close() go s.httpServer.ServeTLS(s.ln, "", "")
router := gin.New()
tmp := make([]string, len(s.trustedProxies))
for i, entry := range s.trustedProxies {
tmp[i] = entry.String()
}
router.SetTrustedProxies(tmp)
router.NoRoute(rp.mw, httpLoggerMiddleware(s), httpServerHeaderMiddleware, s.onRequest)
hs := &http.Server{
Handler: router,
TLSConfig: s.tlsConfig,
ErrorLog: log.New(&nilWriter{}, "", 0),
}
if s.tlsConfig != nil {
go hs.ServeTLS(s.ln, "", "")
} else { } else {
go hs.Serve(s.ln) go s.httpServer.Serve(s.ln)
} }
var wg sync.WaitGroup var wg sync.WaitGroup
@ -307,8 +301,9 @@ outer:
s.ctxCancel() s.ctxCancel()
hs.Shutdown(context.Background()) s.httpServer.Shutdown(context.Background())
s.ln.Close() // in case Shutdown() is called before Serve() s.ln.Close() // in case Shutdown() is called before Serve()
s.requestPool.close()
wg.Wait() wg.Wait()

Loading…
Cancel
Save