summaryrefslogtreecommitdiff
path: root/internal/server
diff options
context:
space:
mode:
authorPaul Bütow <pbuetow@mimecast.com>2020-02-22 09:51:55 +0000
committerPaul Bütow <pbuetow@mimecast.com>2020-02-22 09:51:55 +0000
commit7b400fdc922599bdd6f6c6d6c1dc4a664f104365 (patch)
tree84d26907fbe51f827447cc82a4b9c642c91847f5 /internal/server
parent5122df790b77fb915c910e57de260e6ed0563af7 (diff)
background "class" works
Diffstat (limited to 'internal/server')
-rw-r--r--internal/server/background/background.go66
-rw-r--r--internal/server/background/commands.go28
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) {
-}