@@ -16,6 +16,12 @@ type AppManager interface {
1616// ManagerOption configures the behavior of a Manager.
1717type ManagerOption func (* manager )
1818
19+ func ManagerName (name string ) ManagerOption {
20+ return func (m * manager ) {
21+ m .name = name
22+ }
23+ }
24+
1925func ManagerShutdownTimeout (dur time.Duration ) ManagerOption {
2026 return func (m * manager ) {
2127 m .shutdownTimeout = dur
@@ -26,6 +32,7 @@ func ManagerShutdownTimeout(dur time.Duration) ManagerOption {
2632// Runnables can declare a dependency on another runnable. Dependencies are started first and stopped last.
2733func NewManager (opts ... ManagerOption ) AppManager {
2834 m := & manager {
35+ name : "manager" ,
2936 shutdownTimeout : 10 * time .Second ,
3037 }
3138
@@ -40,10 +47,13 @@ func NewManager(opts ...ManagerOption) AppManager {
4047}
4148
4249type manager struct {
50+ name string
4351 containers []* managerContainer
4452 shutdownTimeout time.Duration
4553}
4654
55+ func (m * manager ) runnableName () string { return m .name }
56+
4757func (m * manager ) Add (runnable Runnable , dependencies ... Runnable ) {
4858 container := m .insertRunnable (runnable )
4959 for _ , dep := range dependencies {
@@ -80,15 +90,15 @@ func (m *manager) Run(ctx context.Context) error {
8090 // run the runnables in Go routines.
8191 for _ , c := range m .containers {
8292 c .launch (completedChan , dying )
83- logger .Info ("started" , "runnable" , "manager /"+ c .name ())
93+ logger .Info ("started" , "runnable" , m . runnableName () + " /"+ c .name ())
8494 }
8595
8696 // block until group is cancelled, or a runnable dies.
8797 select {
8898 case <- ctx .Done ():
89- logger .Info ("starting shutdown" , "runnable" , "manager" , "reason" , "context cancelled" )
99+ logger .Info ("starting shutdown" , "runnable" , m . runnableName () , "reason" , "context cancelled" )
90100 case c := <- dying :
91- logger .Info ("starting shutdown" , "runnable" , "manager" , "reason" , c .name ()+ " died" )
101+ logger .Info ("starting shutdown" , "runnable" , m . runnableName () , "reason" , c .name ()+ " died" )
92102 }
93103
94104 // starting shutdown
@@ -117,7 +127,7 @@ func (m *manager) Run(ctx context.Context) error {
117127 }
118128
119129 if ! cancelled .contains (c ) {
120- logger .Info ("cancelled" , "runnable" , "manager /"+ c .name ())
130+ logger .Info ("cancelled" , "runnable" , m . runnableName () + " /"+ c .name ())
121131 c .shutdown ()
122132 cancelled .insert (c )
123133 }
@@ -129,9 +139,9 @@ func (m *manager) Run(ctx context.Context) error {
129139 completed .insert (c )
130140
131141 if c .err == nil || errors .Is (c .err , context .Canceled ) {
132- logger .Info ("stopped" , "runnable" , "manager /"+ c .name ())
142+ logger .Info ("stopped" , "runnable" , m . runnableName () + " /"+ c .name ())
133143 } else {
134- logger .Info ("stopped with error" , "runnable" , "manager /"+ c .name (), "error" , c .err )
144+ logger .Info ("stopped with error" , "runnable" , m . runnableName () + " /"+ c .name (), "error" , c .err )
135145 }
136146
137147 if len (completed ) == len (m .containers ) {
@@ -146,15 +156,15 @@ func (m *manager) Run(ctx context.Context) error {
146156 errs := []string {}
147157 for _ , c := range m .containers {
148158 if ! completed .contains (c ) {
149- logger .Info ("still running" , "runnable" , "manager /"+ c .name ())
159+ logger .Info ("still running" , "runnable" , m . runnableName () + " /"+ c .name ())
150160 errs = append (errs , fmt .Sprintf ("%s is still running" , c .name ()))
151161 }
152162 if c .err != nil && ! errors .Is (c .err , context .Canceled ) {
153163 errs = append (errs , fmt .Sprintf ("%s crashed with %+v" , c .name (), c .err ))
154164 }
155165 }
156166
157- logger .Info ("shutdown complete" , "runnable" , "manager" )
167+ logger .Info ("shutdown complete" , "runnable" , m . runnableName () )
158168
159169 if len (errs ) != 0 {
160170 return fmt .Errorf ("manager: %s" , strings .Join (errs , ", " ))
0 commit comments