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  }