Startup daemons using system tasks
This commit is contained in:
parent
43a3bd98a1
commit
701cac997c
24
shezmu.go
24
shezmu.go
|
@ -94,7 +94,6 @@ func (s *Shezmu) AddDaemon(d Daemon) {
|
||||||
base.logger = s.Logger
|
base.logger = s.Logger
|
||||||
base.shutdown = s.shutdownSystem
|
base.shutdown = s.shutdownSystem
|
||||||
|
|
||||||
go d.Startup()
|
|
||||||
s.daemons = append(s.daemons, d)
|
s.daemons = append(s.daemons, d)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,6 +109,11 @@ func (s *Shezmu) StartDaemons() {
|
||||||
for i := 0; i < s.NumWorkers; i++ {
|
for i := 0; i < s.NumWorkers; i++ {
|
||||||
go s.runWorker()
|
go s.runWorker()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s.Logger.Println("Setting up daemons")
|
||||||
|
for _, d := range s.daemons {
|
||||||
|
s.setupDaemon(d)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// StopDaemons stops all running daemons.
|
// StopDaemons stops all running daemons.
|
||||||
|
@ -127,6 +131,22 @@ func (s *Shezmu) StopDaemons() {
|
||||||
fmt.Println(s.runtimeStats.Fetch(stats.Latency))
|
fmt.Println(s.runtimeStats.Fetch(stats.Latency))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Shezmu) setupDaemon(d Daemon) {
|
||||||
|
defer func() {
|
||||||
|
if err := recover(); err != nil {
|
||||||
|
s.Logger.Printf("Failed to setup daemon %s due to process termination", d)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
s.queue <- &task{
|
||||||
|
daemon: d,
|
||||||
|
actor: d.Startup,
|
||||||
|
createdAt: time.Now(),
|
||||||
|
system: true,
|
||||||
|
name: "startup",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Shezmu) runWorker() {
|
func (s *Shezmu) runWorker() {
|
||||||
s.wgWorkers.Add(1)
|
s.wgWorkers.Add(1)
|
||||||
defer s.wgWorkers.Done()
|
defer s.wgWorkers.Done()
|
||||||
|
@ -180,7 +200,7 @@ func (s *Shezmu) processSystemTask(t *task) {
|
||||||
t.createdAt = time.Now()
|
t.createdAt = time.Now()
|
||||||
s.queue <- t // Restarting task
|
s.queue <- t // Restarting task
|
||||||
} else {
|
} else {
|
||||||
s.Logger.Printf("System task %s has stopped\n", t)
|
s.Logger.Printf("System task %s finished\n", t)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue