github.com/TIBCOSoftware/flogo-lib@v0.5.9/util/managed/managed.go (about) 1 package managed 2 3 import ( 4 "fmt" 5 6 "github.com/TIBCOSoftware/flogo-lib/logger" 7 ) 8 9 // Managed is an interface that is implemented by an object that needs to be 10 // managed via start/stop 11 type Managed interface { 12 13 // Start starts the managed object 14 Start() error 15 16 // Stop stops the manged object 17 Stop() error 18 } 19 20 // start starts a "Managed" object 21 func start(managed Managed) (err error) { 22 23 defer func() { 24 if r := recover(); r != nil { 25 var ok bool 26 err, ok = r.(error) 27 if !ok { 28 err = fmt.Errorf("%v", r) 29 } 30 } 31 }() 32 33 return managed.Start() 34 } 35 36 // stop stops a "Managed" object 37 func stop(managed Managed) error { 38 39 defer func() error { 40 if r := recover(); r != nil { 41 err, ok := r.(error) 42 if !ok { 43 err = fmt.Errorf("%v", r) 44 } 45 46 return err 47 } 48 49 return nil 50 }() 51 52 return managed.Stop() 53 } 54 55 // Start starts a Managed object, handles panics and logs details 56 func Start(name string, managed Managed) error { 57 58 logger.Debugf("%s: Starting...", name) 59 err := start(managed) 60 61 if err != nil { 62 logger.Errorf("%s: Error Starting", name) 63 return err 64 } 65 66 logger.Debugf("%s: Started", name) 67 return nil 68 } 69 70 // Stop stops a Managed object, handles panics and logs details 71 func Stop(name string, managed Managed) error { 72 73 logger.Debugf("%s: Stopping...", name) 74 75 err := stop(managed) 76 77 if err != nil { 78 logger.Errorf("Error stopping '%s': %s", name, err.Error()) 79 return err 80 } 81 82 logger.Debugf("%s: Stopped", name) 83 return nil 84 } 85 86 // Initializable is an interface that is implemented by an object that needs to be 87 // initialized 88 type Initializable interface { 89 90 // Initializes the object 91 Init() error 92 }