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  }