summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-06 16:53:34 +0200
committerPaul Buetow <paul@buetow.org>2026-03-06 16:53:34 +0200
commitff85779d14a70825588a80cae33d234153196162 (patch)
tree3f061af5dcaa4a4f219f899281abb189dcfe1e48 /internal
parent3a2aa5f2a8b417b4aa4c9148b245d85fcc22a61c (diff)
refactor: rename flags.Flags to flags.Config (task 383)
Diffstat (limited to 'internal')
-rw-r--r--internal/bpfsetup.go4
-rw-r--r--internal/flags/flags.go30
-rw-r--r--internal/flags/flags_test.go2
-rw-r--r--internal/ior.go32
-rw-r--r--internal/ior_mode_test.go68
-rw-r--r--internal/tui/tui.go6
6 files changed, 71 insertions, 71 deletions
diff --git a/internal/bpfsetup.go b/internal/bpfsetup.go
index 9791930..f8f2c60 100644
--- a/internal/bpfsetup.go
+++ b/internal/bpfsetup.go
@@ -9,7 +9,7 @@ import (
bpf "github.com/aquasecurity/libbpfgo"
)
-func setBPFGlobals(cfg flags.Flags, bpfModule *bpf.Module) error {
+func setBPFGlobals(cfg flags.Config, bpfModule *bpf.Module) error {
// Ignore `ior` process itself from the filter.
if err := bpfModule.InitGlobalVariable("IOR_PID_FILTER", uint32(os.Getpid())); err != nil {
return fmt.Errorf("unable set IOR_PID_FILTER: %w", err)
@@ -23,7 +23,7 @@ func setBPFGlobals(cfg flags.Flags, bpfModule *bpf.Module) error {
return nil
}
-func resizeBPFMaps(cfg flags.Flags, bpfModule *bpf.Module) error {
+func resizeBPFMaps(cfg flags.Config, bpfModule *bpf.Module) error {
if err := resizeBPFMap(bpfModule, "event_map", uint32(cfg.EventMapSize)); err != nil {
return fmt.Errorf("event_map: %w", err)
}
diff --git a/internal/flags/flags.go b/internal/flags/flags.go
index 67842ab..f1285e8 100644
--- a/internal/flags/flags.go
+++ b/internal/flags/flags.go
@@ -15,7 +15,7 @@ import (
)
var (
- current atomic.Pointer[Flags]
+ current atomic.Pointer[Config]
once sync.Once
parseErr error
)
@@ -25,7 +25,7 @@ func init() {
current.Store(&defaults)
}
-type Flags struct {
+type Config struct {
PidFilter int
TidFilter int
EventMapSize int
@@ -49,8 +49,8 @@ type Flags struct {
}
// NewFlags returns a configuration instance initialized with project defaults.
-func NewFlags() Flags {
- return Flags{
+func NewFlags() Config {
+ return Config{
PidFilter: -1,
TidFilter: -1,
EventMapSize: 4096 * 16,
@@ -63,21 +63,21 @@ func NewFlags() Flags {
}
// GetPidFilter returns the active process filter.
-func (f Flags) GetPidFilter() int {
+func (f Config) GetPidFilter() int {
return f.PidFilter
}
// GetTidFilter returns the active thread filter.
-func (f Flags) GetTidFilter() int {
+func (f Config) GetTidFilter() int {
return f.TidFilter
}
// GetTUIExportEnable reports whether TUI CSV export is enabled.
-func (f Flags) GetTUIExportEnable() bool {
+func (f Config) GetTUIExportEnable() bool {
return f.TUIExportEnable
}
-func (f Flags) clone() Flags {
+func (f Config) clone() Config {
out := f
out.TracepointsToAttach = slices.Clone(f.TracepointsToAttach)
out.TracepointsToExclude = slices.Clone(f.TracepointsToExclude)
@@ -85,7 +85,7 @@ func (f Flags) clone() Flags {
return out
}
-func Get() Flags {
+func Get() Config {
cfg := current.Load()
if cfg == nil {
return NewFlags()
@@ -93,12 +93,12 @@ func Get() Flags {
return cfg.clone()
}
-func setCurrent(cfg Flags) {
+func setCurrent(cfg Config) {
snapshot := cfg.clone()
current.Store(&snapshot)
}
-func updateCurrent(update func(*Flags)) {
+func updateCurrent(update func(*Config)) {
for {
old := current.Load()
next := NewFlags()
@@ -115,21 +115,21 @@ func updateCurrent(update func(*Flags)) {
// SetPidFilter updates the active PID filter used for subsequent tracing runs.
func SetPidFilter(pid int) {
- updateCurrent(func(cfg *Flags) {
+ updateCurrent(func(cfg *Config) {
cfg.PidFilter = pid
})
}
// SetTidFilter updates the active TID filter used for subsequent tracing runs.
func SetTidFilter(tid int) {
- updateCurrent(func(cfg *Flags) {
+ updateCurrent(func(cfg *Config) {
cfg.TidFilter = tid
})
}
// SetTUIExportEnable toggles TUI snapshot export file writing.
func SetTUIExportEnable(enabled bool) {
- updateCurrent(func(cfg *Flags) {
+ updateCurrent(func(cfg *Config) {
cfg.TUIExportEnable = enabled
})
}
@@ -221,7 +221,7 @@ func extractTracepointFlags(tracepoints string) (regexes []*regexp.Regexp, err e
return regexes, nil
}
-func (flags Flags) ShouldIAttachTracepoint(tracepointName string) bool {
+func (flags Config) ShouldIAttachTracepoint(tracepointName string) bool {
for _, re := range flags.TracepointsToExclude {
if re.MatchString(tracepointName) {
return false
diff --git a/internal/flags/flags_test.go b/internal/flags/flags_test.go
index 08dd6a2..2469068 100644
--- a/internal/flags/flags_test.go
+++ b/internal/flags/flags_test.go
@@ -9,7 +9,7 @@ import (
"time"
)
-func parseForTest(t *testing.T, args ...string) (Flags, error) {
+func parseForTest(t *testing.T, args ...string) (Config, error) {
t.Helper()
oldCommandLine := flag.CommandLine
diff --git a/internal/ior.go b/internal/ior.go
index 5ebc360..7836ef2 100644
--- a/internal/ior.go
+++ b/internal/ior.go
@@ -64,7 +64,7 @@ func Run() error {
return dispatchRun(flags.Get())
}
-func dispatchRun(cfg flags.Flags) error {
+func dispatchRun(cfg flags.Config) error {
if err := validateRunConfig(cfg); err != nil {
return err
}
@@ -80,7 +80,7 @@ func dispatchRun(cfg flags.Flags) error {
return runTUIFn(cfg, tuiTraceStarterFromRunTrace(cfg, runTraceWithContextFn))
}
-func validateRunConfig(cfg flags.Flags) error {
+func validateRunConfig(cfg flags.Config) error {
if cfg.TestFlames && cfg.PlainMode {
return errors.New("--testflames cannot be combined with -plain")
}
@@ -93,7 +93,7 @@ func validateRunConfig(cfg flags.Flags) error {
return nil
}
-func tuiTestFlamesStarter(cfg flags.Flags) tui.TraceStarter {
+func tuiTestFlamesStarter(cfg flags.Config) tui.TraceStarter {
return func(ctx context.Context) error {
engine, streamBuf, liveTrie := buildTestFlamesRuntime(cfg)
if bindings, ok := tui.RuntimeBindingsFromContext(ctx); ok {
@@ -105,7 +105,7 @@ func tuiTestFlamesStarter(cfg flags.Flags) tui.TraceStarter {
}
}
-func tuiTestLiveFlamesStarter(cfg flags.Flags) tui.TraceStarter {
+func tuiTestLiveFlamesStarter(cfg flags.Config) tui.TraceStarter {
return func(ctx context.Context) error {
engine, streamBuf, liveTrie := buildTestLiveFlamesRuntime(ctx, cfg)
if bindings, ok := tui.RuntimeBindingsFromContext(ctx); ok {
@@ -117,7 +117,7 @@ func tuiTestLiveFlamesStarter(cfg flags.Flags) tui.TraceStarter {
}
}
-func buildTestFlamesRuntime(cfg flags.Flags) (*statsengine.Engine, *eventstream.RingBuffer, *flamegraph.LiveTrie) {
+func buildTestFlamesRuntime(cfg flags.Config) (*statsengine.Engine, *eventstream.RingBuffer, *flamegraph.LiveTrie) {
engine := statsengine.NewEngine(64)
streamBuf := eventstream.NewRingBuffer()
liveTrie := flamegraph.NewLiveTrie(cfg.CollapsedFields, cfg.CountField)
@@ -125,7 +125,7 @@ func buildTestFlamesRuntime(cfg flags.Flags) (*statsengine.Engine, *eventstream.
return engine, streamBuf, liveTrie
}
-func buildTestLiveFlamesRuntime(ctx context.Context, cfg flags.Flags) (*statsengine.Engine, *eventstream.RingBuffer, *flamegraph.LiveTrie) {
+func buildTestLiveFlamesRuntime(ctx context.Context, cfg flags.Config) (*statsengine.Engine, *eventstream.RingBuffer, *flamegraph.LiveTrie) {
engine := statsengine.NewEngine(64)
streamBuf := eventstream.NewRingBuffer()
liveTrie := flamegraph.NewLiveTrie(cfg.CollapsedFields, cfg.CountField)
@@ -160,13 +160,13 @@ func runSyntheticLiveFlames(ctx context.Context, liveTrie *flamegraph.LiveTrie,
}
}
-func shouldRunTraceMode(cfg flags.Flags) bool {
+func shouldRunTraceMode(cfg flags.Config) bool {
return cfg.PlainMode
}
func tuiTraceStarterFromRunTrace(
- baseCfg flags.Flags,
- startTrace func(context.Context, flags.Flags, chan<- struct{}, func(*eventLoop)) error,
+ baseCfg flags.Config,
+ startTrace func(context.Context, flags.Config, chan<- struct{}, func(*eventLoop)) error,
) tui.TraceStarter {
return func(ctx context.Context) error {
bpf.SetLoggerCbs(bpf.Callbacks{
@@ -229,11 +229,11 @@ func tuiTraceStarterFromRunTrace(
}
}
-func runTrace(cfg flags.Flags) error {
+func runTrace(cfg flags.Config) error {
return runTraceWithContext(context.Background(), cfg, nil, nil)
}
-func newEventLoopConfig(cfg flags.Flags) eventLoopConfig {
+func newEventLoopConfig(cfg flags.Config) eventLoopConfig {
fields := make([]string, len(cfg.CollapsedFields))
copy(fields, cfg.CollapsedFields)
return eventLoopConfig{
@@ -263,7 +263,7 @@ func newLogger(verbose bool) func(...any) {
return func(args ...any) { _, _ = fmt.Println(args...) }
}
-func setupBPFModule(parentCtx context.Context, cfg flags.Flags) (*bpf.Module, *probemanager.Manager, func(), error) {
+func setupBPFModule(parentCtx context.Context, cfg flags.Config) (*bpf.Module, *probemanager.Manager, func(), error) {
releaseBindings := func() {}
bpfModule, err := bpf.NewModuleFromFile("ior.bpf.o")
@@ -307,7 +307,7 @@ func setupEventChannel(bpfModule *bpf.Module) (chan []byte, error) {
return ch, nil
}
-func setupTraceContext(parentCtx context.Context, cfg flags.Flags, logln func(...any)) (context.Context, context.CancelFunc, func()) {
+func setupTraceContext(parentCtx context.Context, cfg flags.Config, logln func(...any)) (context.Context, context.CancelFunc, func()) {
ctx := parentCtx
cancel := func() {}
if shouldAutoStopByDuration(cfg) {
@@ -335,7 +335,7 @@ func setupTraceContext(parentCtx context.Context, cfg flags.Flags, logln func(..
return ctx, cancel, stopSignals
}
-func setupProfiling(ctx context.Context, cfg flags.Flags, started chan<- struct{}) (*profilingControl, error) {
+func setupProfiling(ctx context.Context, cfg flags.Config, started chan<- struct{}) (*profilingControl, error) {
control := &profilingControl{
done: make(chan struct{}),
stopExecTrace: func() {},
@@ -443,7 +443,7 @@ func startTraceShutdownWatcher(ctx context.Context, verbose bool, el *eventLoop,
}()
}
-func runTraceWithContext(parentCtx context.Context, cfg flags.Flags, started chan<- struct{}, configure func(*eventLoop)) error {
+func runTraceWithContext(parentCtx context.Context, cfg flags.Config, started chan<- struct{}, configure func(*eventLoop)) error {
if getEUID() != 0 {
return errRootPrivilegesRequired
}
@@ -496,7 +496,7 @@ func signalTraceStarted(started chan<- struct{}) {
close(started)
}
-func shouldAutoStopByDuration(cfg flags.Flags) bool {
+func shouldAutoStopByDuration(cfg flags.Config) bool {
return cfg.PlainMode
}
diff --git a/internal/ior_mode_test.go b/internal/ior_mode_test.go
index 617e567..48b2c36 100644
--- a/internal/ior_mode_test.go
+++ b/internal/ior_mode_test.go
@@ -13,7 +13,7 @@ import (
)
func TestShouldRunTraceMode(t *testing.T) {
- base := flags.Flags{}
+ base := flags.Config{}
if shouldRunTraceMode(base) {
t.Fatalf("expected default mode to use TUI")
@@ -45,7 +45,7 @@ func TestShouldRunTraceMode(t *testing.T) {
}
func TestShouldAutoStopByDuration(t *testing.T) {
- base := flags.Flags{}
+ base := flags.Config{}
if shouldAutoStopByDuration(base) {
t.Fatalf("expected default TUI mode not to auto-stop by duration")
}
@@ -78,24 +78,24 @@ func TestDispatchRunUsesTraceModeWhenRequested(t *testing.T) {
traceCalled := false
tuiCalled := false
- runTraceFn = func(flags.Flags) error {
+ runTraceFn = func(flags.Config) error {
traceCalled = true
return nil
}
- runTUIFn = func(flags.Flags, tui.TraceStarter) error {
+ runTUIFn = func(flags.Config, tui.TraceStarter) error {
tuiCalled = true
return nil
}
- runTUITestFlamesFn = func(flags.Flags, tui.TraceStarter) error {
+ runTUITestFlamesFn = func(flags.Config, tui.TraceStarter) error {
t.Fatalf("runTUITestFlamesFn should not be called in trace mode")
return nil
}
- runTUITestLiveFlamesFn = func(flags.Flags, tui.TraceStarter) error {
+ runTUITestLiveFlamesFn = func(flags.Config, tui.TraceStarter) error {
t.Fatalf("runTUITestLiveFlamesFn should not be called in trace mode")
return nil
}
- cfg := flags.Flags{PlainMode: true}
+ cfg := flags.Config{PlainMode: true}
if err := dispatchRun(cfg); err != nil {
t.Fatalf("dispatchRun returned error: %v", err)
}
@@ -121,24 +121,24 @@ func TestDispatchRunUsesTUIWhenOnlyPprofEnabled(t *testing.T) {
traceCalled := false
tuiCalled := false
- runTraceFn = func(flags.Flags) error {
+ runTraceFn = func(flags.Config) error {
traceCalled = true
return nil
}
- runTUIFn = func(flags.Flags, tui.TraceStarter) error {
+ runTUIFn = func(flags.Config, tui.TraceStarter) error {
tuiCalled = true
return nil
}
- runTUITestFlamesFn = func(flags.Flags, tui.TraceStarter) error {
+ runTUITestFlamesFn = func(flags.Config, tui.TraceStarter) error {
t.Fatalf("runTUITestFlamesFn should not be called for regular TUI mode")
return nil
}
- runTUITestLiveFlamesFn = func(flags.Flags, tui.TraceStarter) error {
+ runTUITestLiveFlamesFn = func(flags.Config, tui.TraceStarter) error {
t.Fatalf("runTUITestLiveFlamesFn should not be called for regular TUI mode")
return nil
}
- cfg := flags.Flags{PprofEnable: true}
+ cfg := flags.Config{PprofEnable: true}
if err := dispatchRun(cfg); err != nil {
t.Fatalf("dispatchRun returned error: %v", err)
}
@@ -163,7 +163,7 @@ func TestDispatchRunUsesTUIStarterWhenNotPlain(t *testing.T) {
}()
traceDone := make(chan struct{}, 1)
- runTraceWithContextFn = func(_ context.Context, _ flags.Flags, started chan<- struct{}, configure func(*eventLoop)) error {
+ runTraceWithContextFn = func(_ context.Context, _ flags.Config, started chan<- struct{}, configure func(*eventLoop)) error {
if configure != nil {
configure(&eventLoop{})
}
@@ -173,7 +173,7 @@ func TestDispatchRunUsesTUIStarterWhenNotPlain(t *testing.T) {
}
tuiCalled := false
- runTUIFn = func(_ flags.Flags, starter tui.TraceStarter) error {
+ runTUIFn = func(_ flags.Config, starter tui.TraceStarter) error {
tuiCalled = true
if starter == nil {
t.Fatalf("expected non-nil starter")
@@ -183,16 +183,16 @@ func TestDispatchRunUsesTUIStarterWhenNotPlain(t *testing.T) {
}
return nil
}
- runTUITestFlamesFn = func(flags.Flags, tui.TraceStarter) error {
+ runTUITestFlamesFn = func(flags.Config, tui.TraceStarter) error {
t.Fatalf("runTUITestFlamesFn should not be called for normal starter path")
return nil
}
- runTUITestLiveFlamesFn = func(flags.Flags, tui.TraceStarter) error {
+ runTUITestLiveFlamesFn = func(flags.Config, tui.TraceStarter) error {
t.Fatalf("runTUITestLiveFlamesFn should not be called for normal starter path")
return nil
}
- cfg := flags.Flags{}
+ cfg := flags.Config{}
if err := dispatchRun(cfg); err != nil {
t.Fatalf("dispatchRun returned error: %v", err)
}
@@ -222,27 +222,27 @@ func TestDispatchRunUsesTestFlamesModeWhenRequested(t *testing.T) {
traceCalled := false
regularTUICalled := false
testFlamesCalled := false
- runTraceFn = func(flags.Flags) error {
+ runTraceFn = func(flags.Config) error {
traceCalled = true
return nil
}
- runTUIFn = func(flags.Flags, tui.TraceStarter) error {
+ runTUIFn = func(flags.Config, tui.TraceStarter) error {
regularTUICalled = true
return nil
}
- runTUITestFlamesFn = func(_ flags.Flags, starter tui.TraceStarter) error {
+ runTUITestFlamesFn = func(_ flags.Config, starter tui.TraceStarter) error {
testFlamesCalled = true
if starter == nil {
t.Fatalf("expected non-nil starter for test flames mode")
}
return starter(context.Background())
}
- runTUITestLiveFlamesFn = func(flags.Flags, tui.TraceStarter) error {
+ runTUITestLiveFlamesFn = func(flags.Config, tui.TraceStarter) error {
t.Fatalf("runTUITestLiveFlamesFn should not be called for --testflames")
return nil
}
- cfg := flags.Flags{TestFlames: true}
+ cfg := flags.Config{TestFlames: true}
if err := dispatchRun(cfg); err != nil {
t.Fatalf("dispatchRun returned error: %v", err)
}
@@ -272,19 +272,19 @@ func TestDispatchRunUsesTestLiveFlamesModeWhenRequested(t *testing.T) {
traceCalled := false
regularTUICalled := false
testLiveFlamesCalled := false
- runTraceFn = func(flags.Flags) error {
+ runTraceFn = func(flags.Config) error {
traceCalled = true
return nil
}
- runTUIFn = func(flags.Flags, tui.TraceStarter) error {
+ runTUIFn = func(flags.Config, tui.TraceStarter) error {
regularTUICalled = true
return nil
}
- runTUITestFlamesFn = func(flags.Flags, tui.TraceStarter) error {
+ runTUITestFlamesFn = func(flags.Config, tui.TraceStarter) error {
t.Fatalf("runTUITestFlamesFn should not be called for --testliveflames")
return nil
}
- runTUITestLiveFlamesFn = func(_ flags.Flags, starter tui.TraceStarter) error {
+ runTUITestLiveFlamesFn = func(_ flags.Config, starter tui.TraceStarter) error {
testLiveFlamesCalled = true
if starter == nil {
t.Fatalf("expected non-nil starter for test live flames mode")
@@ -292,7 +292,7 @@ func TestDispatchRunUsesTestLiveFlamesModeWhenRequested(t *testing.T) {
return starter(context.Background())
}
- cfg := flags.Flags{TestLiveFlames: true}
+ cfg := flags.Config{TestLiveFlames: true}
if err := dispatchRun(cfg); err != nil {
t.Fatalf("dispatchRun returned error: %v", err)
}
@@ -308,7 +308,7 @@ func TestDispatchRunUsesTestLiveFlamesModeWhenRequested(t *testing.T) {
}
func TestValidateRunConfigRejectsTestFlamesWithTraceFlags(t *testing.T) {
- cfg := flags.Flags{TestFlames: true, PlainMode: true}
+ cfg := flags.Config{TestFlames: true, PlainMode: true}
err := validateRunConfig(cfg)
if err == nil {
t.Fatalf("expected error for --testflames with trace-mode flags")
@@ -319,7 +319,7 @@ func TestValidateRunConfigRejectsTestFlamesWithTraceFlags(t *testing.T) {
}
func TestValidateRunConfigRejectsTestLiveFlamesWithTraceFlags(t *testing.T) {
- cfg := flags.Flags{TestLiveFlames: true, PlainMode: true}
+ cfg := flags.Config{TestLiveFlames: true, PlainMode: true}
err := validateRunConfig(cfg)
if err == nil {
t.Fatalf("expected error for --testliveflames with trace-mode flags")
@@ -330,7 +330,7 @@ func TestValidateRunConfigRejectsTestLiveFlamesWithTraceFlags(t *testing.T) {
}
func TestValidateRunConfigRejectsBothTestModes(t *testing.T) {
- cfg := flags.Flags{TestFlames: true, TestLiveFlames: true}
+ cfg := flags.Config{TestFlames: true, TestLiveFlames: true}
err := validateRunConfig(cfg)
if err == nil {
t.Fatalf("expected error when both test flame modes are enabled")
@@ -418,7 +418,7 @@ func TestRunTraceWithContextRequiresRoot(t *testing.T) {
func TestTuiTraceStarterFromRunTracePropagatesError(t *testing.T) {
starter := tuiTraceStarterFromRunTrace(
flags.NewFlags(),
- func(context.Context, flags.Flags, chan<- struct{}, func(*eventLoop)) error {
+ func(context.Context, flags.Config, chan<- struct{}, func(*eventLoop)) error {
return errors.New("startup failed")
},
)
@@ -434,10 +434,10 @@ func TestTuiTraceStarterFromRunTraceUsesContextFilters(t *testing.T) {
base.PidFilter = 11
base.TidFilter = 12
- var gotCfg flags.Flags
+ var gotCfg flags.Config
starter := tuiTraceStarterFromRunTrace(
base,
- func(_ context.Context, cfg flags.Flags, started chan<- struct{}, _ func(*eventLoop)) error {
+ func(_ context.Context, cfg flags.Config, started chan<- struct{}, _ func(*eventLoop)) error {
gotCfg = cfg
close(started)
return nil
@@ -477,7 +477,7 @@ func TestProfilingFilesForMode(t *testing.T) {
func TestTuiTraceStarterFromRunTraceRespectsCancel(t *testing.T) {
starter := tuiTraceStarterFromRunTrace(
flags.NewFlags(),
- func(ctx context.Context, _ flags.Flags, _ chan<- struct{}, _ func(*eventLoop)) error {
+ func(ctx context.Context, _ flags.Config, _ chan<- struct{}, _ func(*eventLoop)) error {
<-ctx.Done()
return ctx.Err()
},
diff --git a/internal/tui/tui.go b/internal/tui/tui.go
index 774be12..d60ee4b 100644
--- a/internal/tui/tui.go
+++ b/internal/tui/tui.go
@@ -183,7 +183,7 @@ func RunWithTraceStarter(starter TraceStarter) error {
}
// RunWithTraceStarterConfig starts the TUI with explicit runtime flags.
-func RunWithTraceStarterConfig(cfg flags.Flags, starter TraceStarter) error {
+func RunWithTraceStarterConfig(cfg flags.Config, starter TraceStarter) error {
model := newModelWithRuntimeConfig(cfg.PidFilter, cfg.PidFilter, cfg.TidFilter, cfg.TUIExportEnable, starter)
program := tea.NewProgram(model)
_, err := program.Run()
@@ -197,7 +197,7 @@ func RunTestFlamesWithTraceStarter(starter TraceStarter) error {
}
// RunTestFlamesWithTraceStarterConfig starts test-flames mode with explicit runtime flags.
-func RunTestFlamesWithTraceStarterConfig(cfg flags.Flags, starter TraceStarter) error {
+func RunTestFlamesWithTraceStarterConfig(cfg flags.Config, starter TraceStarter) error {
model := newModelWithRuntimeConfig(1, 1, -1, cfg.TUIExportEnable, starter)
program := tea.NewProgram(model)
_, err := program.Run()
@@ -253,7 +253,7 @@ func NewModel(initialPID int, startTrace TraceStarter) Model {
}
// NewModelWithConfig creates the top-level TUI model with explicit runtime flags.
-func NewModelWithConfig(cfg flags.Flags, initialPID int, startTrace TraceStarter) Model {
+func NewModelWithConfig(cfg flags.Config, initialPID int, startTrace TraceStarter) Model {
return newModelWithRuntimeConfig(initialPID, cfg.PidFilter, cfg.TidFilter, cfg.TUIExportEnable, startTrace)
}