summaryrefslogtreecommitdiff
path: root/internal/probemanager
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-02-25 22:58:40 +0200
committerPaul Buetow <paul@buetow.org>2026-02-25 22:58:40 +0200
commit4c34b9efcd539c819648c927d7e3f53220df8ad2 (patch)
treef9de9fd650a2d16316ba2c159990d891c9de5189 /internal/probemanager
parent67e10f34c92e93343adbd690b3b21e455e863bd3 (diff)
Fix stream paused scrolling and apply pending TUI/probe updates
Diffstat (limited to 'internal/probemanager')
-rw-r--r--internal/probemanager/manager.go16
-rw-r--r--internal/probemanager/manager_test.go26
2 files changed, 42 insertions, 0 deletions
diff --git a/internal/probemanager/manager.go b/internal/probemanager/manager.go
index 65dd52b..b991c7c 100644
--- a/internal/probemanager/manager.go
+++ b/internal/probemanager/manager.go
@@ -260,6 +260,22 @@ func (m *Manager) ActiveCount() (active, total int) {
return active, total
}
+// IsActive reports whether the syscall probe is currently active.
+func (m *Manager) IsActive(syscall string) bool {
+ if m == nil || syscall == "" {
+ return false
+ }
+
+ m.mu.Lock()
+ defer m.mu.Unlock()
+
+ entry, ok := m.probes[syscall]
+ if !ok {
+ return false
+ }
+ return entry.active
+}
+
func (m *Manager) Close() error {
if m == nil {
return nil
diff --git a/internal/probemanager/manager_test.go b/internal/probemanager/manager_test.go
index 1fcce6d..b000ced 100644
--- a/internal/probemanager/manager_test.go
+++ b/internal/probemanager/manager_test.go
@@ -214,3 +214,29 @@ func TestManagerAttachAllPicksUpNewTracepointsOnLaterCall(t *testing.T) {
t.Fatalf("unexpected syscall ordering/content: %+v", states)
}
}
+
+func TestManagerIsActiveReflectsCurrentState(t *testing.T) {
+ attacher := &fakeAttacher{
+ programs: map[string]*fakeProgram{
+ "handle_sys_enter_read": {},
+ "handle_sys_exit_read": {},
+ },
+ errs: map[string]error{},
+ }
+ mgr := NewManager(attacher)
+ if err := mgr.AttachAll(nil, []string{"sys_enter_read", "sys_exit_read"}); err != nil {
+ t.Fatalf("AttachAll returned error: %v", err)
+ }
+ if !mgr.IsActive("read") {
+ t.Fatalf("expected read to be active")
+ }
+ if err := mgr.Detach("read"); err != nil {
+ t.Fatalf("Detach returned error: %v", err)
+ }
+ if mgr.IsActive("read") {
+ t.Fatalf("expected read to be inactive after detach")
+ }
+ if mgr.IsActive("does_not_exist") {
+ t.Fatalf("expected unknown syscall to be inactive")
+ }
+}