mirror of
https://github.com/amir20/dozzle.git
synced 2025-12-21 21:33:18 +01:00
Fixes memory leaks
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -5,3 +5,4 @@ node_modules
|
|||||||
static
|
static
|
||||||
a_main-packr.go
|
a_main-packr.go
|
||||||
dozzle
|
dozzle
|
||||||
|
gin-bin
|
||||||
|
|||||||
57
main.go
57
main.go
@@ -122,6 +122,10 @@ func streamLogs(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer reader.Close()
|
defer reader.Close()
|
||||||
|
go func() {
|
||||||
|
<-r.Context().Done()
|
||||||
|
reader.Close()
|
||||||
|
}()
|
||||||
|
|
||||||
w.Header().Set("Content-Type", "text/event-stream")
|
w.Header().Set("Content-Type", "text/event-stream")
|
||||||
w.Header().Set("Cache-Control", "no-cache")
|
w.Header().Set("Cache-Control", "no-cache")
|
||||||
@@ -133,17 +137,15 @@ func streamLogs(w http.ResponseWriter, r *http.Request) {
|
|||||||
for {
|
for {
|
||||||
_, err := reader.Read(hdr)
|
_, err := reader.Read(hdr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Panicln(err)
|
break
|
||||||
}
|
}
|
||||||
count := binary.BigEndian.Uint32(hdr[4:])
|
count := binary.BigEndian.Uint32(hdr[4:])
|
||||||
n, err := reader.Read(content[:count])
|
n, err := reader.Read(content[:count])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
_, err = fmt.Fprintf(w, "data: %s\n\n", content[:n])
|
_, err = fmt.Fprintf(w, "data: %s\n\n", content[:n])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
f.Flush()
|
f.Flush()
|
||||||
@@ -166,25 +168,38 @@ func streamEvents(w http.ResponseWriter, r *http.Request) {
|
|||||||
defer cancel()
|
defer cancel()
|
||||||
messages, _ := dockerClient.Events(ctx)
|
messages, _ := dockerClient.Events(ctx)
|
||||||
|
|
||||||
for message := range messages {
|
for {
|
||||||
switch message.Action {
|
exit := false
|
||||||
case "connect":
|
select {
|
||||||
fallthrough
|
case message, closed := <-messages:
|
||||||
case "disconnect":
|
if closed {
|
||||||
fallthrough
|
log.Println("Breaking from messages")
|
||||||
case "create":
|
exit = true
|
||||||
fallthrough
|
|
||||||
case "destroy":
|
|
||||||
_, err := fmt.Fprintf(w, "event: containers-changed\n")
|
|
||||||
_, err = fmt.Fprintf(w, "data: %s\n\n", message.Action)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
log.Println(err)
|
|
||||||
break
|
|
||||||
}
|
}
|
||||||
f.Flush()
|
switch message.Action {
|
||||||
default:
|
case "connect":
|
||||||
// Do nothing
|
fallthrough
|
||||||
|
case "disconnect":
|
||||||
|
fallthrough
|
||||||
|
case "create":
|
||||||
|
fallthrough
|
||||||
|
case "destroy":
|
||||||
|
_, err := fmt.Fprintf(w, "event: containers-changed\n")
|
||||||
|
_, err = fmt.Fprintf(w, "data: %s\n\n", message.Action)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
f.Flush()
|
||||||
|
}
|
||||||
|
case <-r.Context().Done():
|
||||||
|
cancel()
|
||||||
|
exit = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if exit {
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user