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 }