Skip to content

Commit

Permalink
Issue #129: Keep TUI running even after all processes exit
Browse files Browse the repository at this point in the history
  • Loading branch information
F1bonacc1 committed Jan 28, 2024
1 parent 046de78 commit e7dbe22
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 25 deletions.
6 changes: 5 additions & 1 deletion src/cmd/project_runner.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,11 @@ func runTui(project *app.ProjectRunner) int {
//defer quiet()()
go startTui(project)
exitCode := project.Run()
tui.Stop()
if !*pcFlags.KeepTuiOn {
tui.Stop()
} else {
tui.Wait()
}
return exitCode
}

Expand Down
1 change: 1 addition & 0 deletions src/cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ func init() {
opts.AddAdmitter(nsAdmitter)

rootCmd.Flags().BoolVarP(pcFlags.Headless, "tui", "t", *pcFlags.Headless, "enable TUI (-t=false) (env: "+config.EnvVarNameTui+")")
rootCmd.PersistentFlags().BoolVar(pcFlags.KeepTuiOn, "keep-tui", *pcFlags.KeepTuiOn, "keep TUI running even after all processes exit")
rootCmd.PersistentFlags().BoolVar(pcFlags.NoServer, "no-server", *pcFlags.NoServer, "disable HTTP server (env: "+config.EnvVarNameNoServer+")")
rootCmd.Flags().BoolVarP(pcFlags.HideDisabled, "hide-disabled", "d", *pcFlags.HideDisabled, "hide disabled processes")
rootCmd.Flags().IntVarP(pcFlags.RefreshRate, "ref-rate", "r", *pcFlags.RefreshRate, "TUI refresh rate in seconds")
Expand Down
42 changes: 18 additions & 24 deletions src/config/Flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,36 +49,30 @@ type Flags struct {
SortColumn *string
IsReverseSort *bool
NoServer *bool
KeepTuiOn *bool
}

// NewFlags returns new configuration flags.
func NewFlags() *Flags {
return &Flags{
RefreshRate: intPtr(DefaultRefreshRate),
Headless: boolPtr(getTuiDefault()),
PortNum: intPtr(getPortDefault()),
Address: strPtr(DefaultAddress),
LogLength: intPtr(DefaultLogLength),
LogLevel: strPtr(DefaultLogLevel),
LogFile: strPtr(GetLogFilePath()),
LogFollow: boolPtr(false),
LogTailLength: intPtr(math.MaxInt),
NoDependencies: boolPtr(false),
HideDisabled: boolPtr(false),
SortColumn: strPtr(DefaultSortColumn),
IsReverseSort: boolPtr(false),
NoServer: boolPtr(getNoServerDefault()),
RefreshRate: toPtr(DefaultRefreshRate),
Headless: toPtr(getTuiDefault()),
PortNum: toPtr(getPortDefault()),
Address: toPtr(DefaultAddress),
LogLength: toPtr(DefaultLogLength),
LogLevel: toPtr(DefaultLogLevel),
LogFile: toPtr(GetLogFilePath()),
LogFollow: toPtr(false),
LogTailLength: toPtr(math.MaxInt),
NoDependencies: toPtr(false),
HideDisabled: toPtr(false),
SortColumn: toPtr(DefaultSortColumn),
IsReverseSort: toPtr(false),
NoServer: toPtr(getNoServerDefault()),
KeepTuiOn: toPtr(false),
}
}

func boolPtr(b bool) *bool {
return &b
}

func intPtr(i int) *int {
return &i
}

func strPtr(s string) *string {
return &s
func toPtr[T any](t T) *T {
return &t
}
10 changes: 10 additions & 0 deletions src/tui/view.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ type pcView struct {
cancelFn context.CancelFunc
cancelLogFn context.CancelFunc
cancelSigFn context.CancelFunc
ctxApp context.Context
cancelAppFn context.CancelFunc
selectedNsMtx sync.Mutex
selectedNs string
selectedNsChanged atomic.Bool
Expand Down Expand Up @@ -92,6 +94,7 @@ func newPcView(project app.IProject) *pcView {
procColumns: map[ColumnID]string{},
selectedNs: AllNS,
}
pv.ctxApp, pv.cancelAppFn = context.WithCancel(context.Background())
pv.statTable = pv.createStatTable()
go pv.loadProcNames()
pv.startMonitoring()
Expand Down Expand Up @@ -278,6 +281,7 @@ func (pv *pcView) handleShutDown() {
time.Sleep(time.Second)
pv.stopFollowLog()
pv.appView.Stop()
pv.cancelAppFn()
}
func (pv *pcView) attentionMessage(message string) {
pv.statTable.SetCell(0, 2, tview.NewTableCell(message).
Expand Down Expand Up @@ -463,3 +467,9 @@ func Stop() {
pcv.handleShutDown()
}
}

func Wait() {
if pcv != nil {
<-pcv.ctxApp.Done()
}
}

0 comments on commit e7dbe22

Please sign in to comment.