Files
kubevela/pkg/server/api-server.go
天元 6480873e81 change import headers
Signed-off-by: 天元 <jianbo.sjb@alibaba-inc.com>
2020-11-27 11:08:54 +08:00

64 lines
1.4 KiB
Go

package server
import (
"context"
"net/http"
"time"
"github.com/pkg/errors"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
"github.com/oam-dev/kubevela/apis/types"
"github.com/oam-dev/kubevela/pkg/oam/discoverymapper"
)
// APIServer run a restful API server for dashboard
type APIServer struct {
server *http.Server
KubeClient client.Client
dm discoverymapper.DiscoveryMapper
}
// New will create APIServer
func New(c types.Args, port, staticPath string) (*APIServer, error) {
newClient, err := client.New(c.Config, client.Options{Scheme: c.Schema})
if err != nil {
return nil, err
}
dm, err := discoverymapper.New(c.Config)
if err != nil {
return nil, err
}
s := &APIServer{
KubeClient: newClient,
dm: dm,
}
server := &http.Server{
Addr: port,
Handler: s.setupRoute(staticPath),
ReadTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
}
server.SetKeepAlivesEnabled(true)
s.server = server
return s, nil
}
// Launch will start the apiserver
func (s *APIServer) Launch(errChan chan<- error) {
go func() {
err := s.server.ListenAndServe()
if err != nil && errors.Is(err, http.ErrServerClosed) {
errChan <- err
}
}()
}
// Shutdown will close the apiserver
func (s *APIServer) Shutdown(ctx context.Context) error {
ctrl.Log.Info("sever shutting down")
return s.server.Shutdown(ctx)
}