diff options
| author | Paul Bütow <pbuetow@mimecast.com> | 2020-02-22 09:51:55 +0000 |
|---|---|---|
| committer | Paul Bütow <pbuetow@mimecast.com> | 2020-02-22 09:51:55 +0000 |
| commit | 7b400fdc922599bdd6f6c6d6c1dc4a664f104365 (patch) | |
| tree | 84d26907fbe51f827447cc82a4b9c642c91847f5 /internal/server | |
| parent | 5122df790b77fb915c910e57de260e6ed0563af7 (diff) | |
background "class" works
Diffstat (limited to 'internal/server')
| -rw-r--r-- | internal/server/background/background.go | 66 | ||||
| -rw-r--r-- | internal/server/background/commands.go | 28 |
2 files changed, 66 insertions, 28 deletions
diff --git a/internal/server/background/background.go b/internal/server/background/background.go new file mode 100644 index 0000000..d31c1f2 --- /dev/null +++ b/internal/server/background/background.go @@ -0,0 +1,66 @@ +package background + +import ( + "context" + "sync" + + "github.com/mimecast/dtail/internal/io/logger" +) + +type job struct { + cancel context.CancelFunc + done <-chan struct{} +} + +type Background struct { + mutex sync.Mutex + jobs map[string]job +} + +func NewBackground() *Background { + return &Background{ + jobs: make(map[string]job), + } +} + +func (b Background) Add(name string, cancel context.CancelFunc, done <-chan struct{}) { + b.mutex.Lock() + defer b.mutex.Unlock() + + logger.Debug("background", name, "adding job") + b.jobs[name] = job{cancel, done} +} + +func (b Background) get(name string) (job, bool) { + b.mutex.Lock() + defer b.mutex.Unlock() + + job, ok := b.jobs[name] + return job, ok +} + +func (b Background) delete(name string) { + b.mutex.Lock() + defer b.mutex.Unlock() + + delete(b.jobs, name) +} + +func (b Background) Stop(name string) { + logger.Debug("background", name, "stopping job") + job, ok := b.get(name) + + if !ok { + logger.Debug("background", name, "no such job") + return + } + + logger.Debug("background", name, "canceling job") + job.cancel() + + logger.Debug("background", name, "waiting for job to complete") + <-job.done + + logger.Debug("background", name, "deleting job") + b.delete(name) +} diff --git a/internal/server/background/commands.go b/internal/server/background/commands.go deleted file mode 100644 index f789150..0000000 --- a/internal/server/background/commands.go +++ /dev/null @@ -1,28 +0,0 @@ -package background - -import ( - "context" - "sync" -) - -type command struct { - cancel context.CancelFunc - done chan struct{} -} - -type Commands struct { - mutex sync.Mutex - commands map[string]command -} - -func NewCommands() *Commands { - return &Commands{ - commands: make(map[string]command), - } -} - -func (b Commands) Add(argc int, args []string, cancel context.CancelFunc, done <-chan struct{}) { -} - -func (h Commands) Stop(argc int, args []string) { -} |
