Files
2026-08-30 17:41:46 +08:00

45 lines
706 B
Go

package powerreport
import (
"sync"
"sync/atomic"
)
type Manager struct {
access sync.Mutex
recorder atomic.Pointer[Recorder]
}
func NewManager() *Manager {
return &Manager{}
}
func (m *Manager) Start(options Options) error {
m.access.Lock()
defer m.access.Unlock()
if m.recorder.Load() != nil {
return nil
}
recorder := NewRecorder(options)
err := recorder.Start()
if err != nil {
return err
}
m.recorder.Store(recorder)
return nil
}
func (m *Manager) Close() error {
m.access.Lock()
defer m.access.Unlock()
recorder := m.recorder.Swap(nil)
if recorder == nil {
return nil
}
return recorder.Close()
}
func (m *Manager) Recorder() *Recorder {
return m.recorder.Load()
}