mirror of
https://github.com/kubevela/kubevela.git
synced 2026-03-03 18:20:39 +00:00
64 lines
1.4 KiB
Go
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)
|
|
}
|