opensnitch/daemon/tasks/base.go

56 lines
1.6 KiB
Go
Raw Normal View History

package tasks
import (
"context"
)
// TaskBase holds the common fields of every task.
// Warning: don't define fields in tasks with these names.
type TaskBase struct {
Ctx context.Context
Cancel context.CancelFunc
Results chan interface{}
Errors chan error
StopChan chan struct{}
// Stop the task if the daemon is disconnected from the GUI (server).
// Some tasks don't need to run if the daemon is not connected to the GUI,
// like PIDMonitor, SocketsMonitor,etc.
// There might be other tasks that will perform some actions, and they
// may send a notification on finish.
StopOnDisconnect bool
}
// Task defines the interface for tasks that the task manager will execute.
type Task interface {
// Start starts the task, potentially running it asynchronously.
Start(ctx context.Context, cancel context.CancelFunc) error
// Stop stops the task.
Stop() error
Pause() error
Resume() error
// Results returns a channel that can be used to receive task results.
Results() <-chan interface{}
// channel used to send errors
Errors() <-chan error
}
// TaskNotification is the data we receive when a new task is started from
// the GUI (server).
// The notification.data field will contain a string like:
// '{"name": "...", "data": {"interval": "3s", "...": ...} }'
//
// where Name is the task to start, sa defined by the Name var of each task,
// and Data is the configuration of each task (a map[string]string, converted by the json package).
type TaskNotification struct {
// Data of the task.
Data map[string]string
// Name of the task.
Name string
}