bitbucket.org/Aishee/synsec@v0.0.0-20210414005726-236fc01a153d/cmd/synsec/api.go (about) 1 package main 2 3 import ( 4 "fmt" 5 6 "bitbucket.org/Aishee/synsec/pkg/apiserver" 7 "bitbucket.org/Aishee/synsec/pkg/csconfig" 8 "bitbucket.org/Aishee/synsec/pkg/types" 9 log "github.com/sirupsen/logrus" 10 ) 11 12 func initAPIServer(cConfig *csconfig.Config) (*apiserver.APIServer, error) { 13 apiServer, err := apiserver.NewServer(cConfig.API.Server) 14 if err != nil { 15 return nil, fmt.Errorf("unable to run local API: %s", err) 16 } 17 18 return apiServer, nil 19 } 20 21 func serveAPIServer(apiServer *apiserver.APIServer) { 22 apiTomb.Go(func() error { 23 defer types.CatchPanic("synsec/serveAPIServer") 24 go func() { 25 defer types.CatchPanic("synsec/runAPIServer") 26 if err := apiServer.Run(); err != nil { 27 log.Fatalf(err.Error()) 28 } 29 }() 30 <-apiTomb.Dying() // lock until go routine is dying 31 log.Infof("serve: shutting down api server") 32 if err := apiServer.Shutdown(); err != nil { 33 return err 34 } 35 return nil 36 }) 37 }