more progress

pull/1/head
Jesse Duffield 5 years ago
parent e5ccc673d9
commit b2e60e1914

@ -175,32 +175,56 @@ func (gui *Gui) renderContainerLogs(mainView *gocui.View, container *commands.Co
mainView.Title = "Logs"
if container.Details.Config.AttachStdin {
logs, err := gui.OSCommand.RunCommandWithOutput("docker logs --since=60m " + container.ID)
if err != nil {
return err
}
return gui.renderString(gui.g, "main", logs)
return gui.renderLogsForTTYContainer(mainView, container, writerID)
}
return gui.renderLogsForRegularContainer(mainView, container, writerID)
}
func (gui *Gui) renderLogsForRegularContainer(mainView *gocui.View, container *commands.Container, writerID int) error {
var cmd *exec.Cmd
cmd = gui.OSCommand.RunCustomCommand("docker logs --since=60m --timestamps --follow " + container.ID)
cmd.Stdout = mainView
go gui.runProcessWithLock(cmd)
return nil
}
func (gui *Gui) runProcessWithLock(cmd *exec.Cmd) {
gui.State.MainProcessChan <- struct{}{}
gui.State.MainProcessMutex.Lock()
cmd.Start()
go func() {
gui.State.MainProcessChan <- struct{}{}
gui.State.MainProcessMutex.Lock()
cmd.Start()
<-gui.State.MainProcessChan
cmd.Process.Kill()
}()
go func() {
<-gui.State.MainProcessChan
cmd.Process.Kill()
}()
cmd.Wait()
gui.State.MainProcessMutex.Unlock()
}
func (gui *Gui) renderLogsForTTYContainer(mainView *gocui.View, container *commands.Container, writerID int) error {
var cmd *exec.Cmd
cmd = gui.OSCommand.RunCustomCommand("docker logs --since=60m --follow " + container.ID)
r, err := cmd.StdoutPipe()
if err != nil {
return err
}
cmd.Wait()
gui.State.MainProcessMutex.Unlock()
go func() {
for {
s := bufio.NewScanner(r)
s.Split(bufio.ScanLines)
for s.Scan() {
mainView.Write(append(s.Bytes(), '\n'))
}
}
}()
go gui.runProcessWithLock(cmd)
return nil
}

Loading…
Cancel
Save