50 lines
1.0 KiB
Go
50 lines
1.0 KiB
Go
|
// Package autorun contains code to manage automatic runs
|
||
|
package autorun
|
||
|
|
||
|
import "sync"
|
||
|
|
||
|
const (
|
||
|
// StatusScheduled indicates that OONI is scheduled to run
|
||
|
// periodically in the background.
|
||
|
StatusScheduled = "scheduled"
|
||
|
|
||
|
// StatusStopped indicates that OONI is not scheduled to
|
||
|
// run periodically in the background.
|
||
|
StatusStopped = "stopped"
|
||
|
|
||
|
// StatusRunning indicates that OONI is currently
|
||
|
// running in the background.
|
||
|
StatusRunning = "running"
|
||
|
)
|
||
|
|
||
|
// Manager manages automatic runs
|
||
|
type Manager interface {
|
||
|
LogShow() error
|
||
|
LogStream() error
|
||
|
Start() error
|
||
|
Status() (string, error)
|
||
|
Stop() error
|
||
|
}
|
||
|
|
||
|
var (
|
||
|
registry map[string]Manager
|
||
|
mtx sync.Mutex
|
||
|
)
|
||
|
|
||
|
func register(platform string, manager Manager) {
|
||
|
defer mtx.Unlock()
|
||
|
mtx.Lock()
|
||
|
if registry == nil {
|
||
|
registry = make(map[string]Manager)
|
||
|
}
|
||
|
registry[platform] = manager
|
||
|
}
|
||
|
|
||
|
// Get gets the specified autorun manager. This function
|
||
|
// returns nil if no autorun manager exists.
|
||
|
func Get(platform string) Manager {
|
||
|
defer mtx.Unlock()
|
||
|
mtx.Lock()
|
||
|
return registry[platform]
|
||
|
}
|