github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/catgo/cat-go/cat/cat.go (about)

     1  package cat
     2  
     3  import (
     4  	"errors"
     5  	"os"
     6  	"sync/atomic"
     7  )
     8  
     9  var isEnabled uint32 = 0
    10  
    11  type HostConfig struct {
    12  	Host string
    13  	Port int
    14  }
    15  
    16  func ResetLogger(l ILogger) {
    17  	logger.logger = l
    18  }
    19  
    20  func InitWithServer(domain string, services []HostConfig) error {
    21  
    22  	if err := config.Init(domain, false); err != nil {
    23  		return err
    24  	}
    25  
    26  	for _, x := range services {
    27  		config.httpServerAddresses = append(config.httpServerAddresses, serverAddress{
    28  			host: x.Host,
    29  			port: x.Port,
    30  		})
    31  	}
    32  
    33  	if !enable() {
    34  		return errors.New("cannot init twice")
    35  	}
    36  
    37  	logger.Info("Cat has been enabled.")
    38  
    39  	go background(&router)
    40  	go background(&monitor)
    41  	go background(&sender)
    42  	aggregator.Background()
    43  	return nil
    44  
    45  }
    46  
    47  func Init(domain string) {
    48  	if err := config.Init(domain, true); err != nil {
    49  		logger.Warning("Cat initialize failed.")
    50  		return
    51  	}
    52  	if !enable() {
    53  		return
    54  	}
    55  	logger.Info("Cat has been enabled.")
    56  
    57  	go background(&router)
    58  	go background(&monitor)
    59  	go background(&sender)
    60  	aggregator.Background()
    61  }
    62  
    63  func enable() bool {
    64  	return atomic.SwapUint32(&isEnabled, 1) == 0
    65  }
    66  
    67  func disable() {
    68  	if atomic.SwapUint32(&isEnabled, 0) == 1 {
    69  		logger.Info("Cat has been disabled.")
    70  	}
    71  }
    72  
    73  func IsEnabled() bool {
    74  	return atomic.LoadUint32(&isEnabled) > 0
    75  }
    76  
    77  func Shutdown() {
    78  	scheduler.shutdown()
    79  }
    80  
    81  func DebugOn() {
    82  	logger.logger.SetOutput(os.Stdout)
    83  }