Skip to content

Commit

Permalink
perf: Remove webcli (#1931)
Browse files Browse the repository at this point in the history
* perf: remove webcli
Signed-off-by: 逆流而上 <[email protected]>

* perf: remove webcli
Signed-off-by: 逆流而上 <[email protected]>

* perf: remove webcli
Signed-off-by: 逆流而上 <[email protected]>
  • Loading branch information
DokiDoki1103 authored Jun 6, 2024
1 parent c6e7dd0 commit 16e1fa5
Show file tree
Hide file tree
Showing 10 changed files with 34 additions and 430 deletions.
2 changes: 1 addition & 1 deletion api/api_routers/websocket/websocket.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import (
// Routes routes
func Routes() chi.Router {
r := chi.NewRouter()
r.Get("/docker_console", controller.GetDockerConsole().Get)
r.Get("/docker_console", controller.GetWebCli().HandleWS)
r.Get("/docker_log", controller.GetDockerLog().Get)
r.Get("/monitor_message", controller.GetMonitorMessage().Get)
r.Get("/new_monitor_message", controller.GetMonitorMessage().Get)
Expand Down
36 changes: 23 additions & 13 deletions api/controller/websocket.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ package controller

import (
"context"
webcli "github.com/goodrain/rainbond/api/webcli/app"
"github.com/goodrain/rainbond/config/configs"
"github.com/gorilla/websocket"
"net/http"
"os"
"path"
Expand All @@ -33,24 +35,32 @@ import (
"github.com/sirupsen/logrus"
)

var app *webcli.App

func GetWebCli() *webcli.App {
if app == nil {
app = &webcli.App{}
app.SetUpgrader(&websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
Subprotocols: []string{"webtty"},
CheckOrigin: func(r *http.Request) bool {
return true
},
})
//create kube client and config
if err := app.CreateKubeClient(); err != nil {
logrus.Errorf("create kube client error: %v", err)
}
}
return app
}

// DockerConsole docker console
type DockerConsole struct {
socketproxy proxy.Proxy
}

var dockerConsole *DockerConsole

// GetDockerConsole get Docker console
func GetDockerConsole() *DockerConsole {
if dockerConsole != nil {
return dockerConsole
}
dockerConsole = &DockerConsole{
socketproxy: proxy.CreateProxy("dockerconsole", "websocket", configs.Default().APIConfig.DockerConsoleServers),
}
return dockerConsole
}

// Get get
func (d DockerConsole) Get(w http.ResponseWriter, r *http.Request) {
d.socketproxy.Proxy(w, r)
Expand Down
129 changes: 10 additions & 119 deletions api/webcli/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,25 +23,17 @@ import (
"crypto/md5"
"encoding/hex"
"encoding/json"
"errors"
"fmt"
"net"
"net/http"
"strings"
"text/template"

"github.com/sirupsen/logrus"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"net/http"
"strings"

"github.com/barnettZQG/gotty/server"
"github.com/barnettZQG/gotty/webtty"
httputil "github.com/goodrain/rainbond/util/http"
k8sutil "github.com/goodrain/rainbond/util/k8s"
"github.com/gorilla/websocket"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/yudai/umutex"
api "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/serializer"
Expand All @@ -58,13 +50,7 @@ var ExecuteCommandFailed float64

// App -
type App struct {
options *Options

upgrader *websocket.Upgrader

titleTemplate *template.Template

onceMutex *umutex.UnblockingMutex
upgrader *websocket.Upgrader
restClient *restclient.RESTClient
coreClient *kubernetes.Clientset
config *restclient.Config
Expand All @@ -87,9 +73,6 @@ type Options struct {
K8SConfPath string
}

// Version -
var Version = "0.0.2"

// DefaultOptions -
var DefaultOptions = Options{
Address: "",
Expand All @@ -113,84 +96,13 @@ type InitMessage struct {
Namespace string `json:"namespace"`
}

func checkSameOrigin(r *http.Request) bool {
return true
// SetUpgrader -
func (app *App) SetUpgrader(u *websocket.Upgrader) {
app.upgrader = u
}

// New -
func New(options *Options) (*App, error) {
titleTemplate, _ := template.New("title").Parse(options.TitleFormat)
app := &App{
options: options,
upgrader: &websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
Subprotocols: []string{"webtty"},
CheckOrigin: checkSameOrigin,
},
titleTemplate: titleTemplate,
onceMutex: umutex.New(),
}
//create kube client and config
if err := app.createKubeClient(); err != nil {
return nil, err
}
return app, nil
}

// Run Run
func (app *App) Run() error {

endpoint := net.JoinHostPort(app.options.Address, app.options.Port)

wsHandler := http.HandlerFunc(app.handleWS)
health := http.HandlerFunc(app.healthCheck)

var siteMux = http.NewServeMux()

siteHandler := http.Handler(siteMux)

siteHandler = wrapHeaders(siteHandler)

exporter := NewExporter()
prometheus.MustRegister(exporter)

wsMux := http.NewServeMux()
wsMux.Handle("/", siteHandler)
wsMux.Handle("/docker_console", wsHandler)
wsMux.Handle("/health", health)
wsMux.Handle("/metrics", promhttp.Handler())

siteHandler = http.Handler(wsMux)

siteHandler = wrapLogger(siteHandler)

server, err := app.makeServer(endpoint, &siteHandler)
if err != nil {
return errors.New("Failed to build server: " + err.Error())
}
go func() {
logrus.Printf("webcli listen %s", endpoint)
logrus.Fatal(server.ListenAndServe())
logrus.Printf("Exiting...")
}()
return nil
}

func (app *App) makeServer(addr string, handler *http.Handler) (*http.Server, error) {
server := &http.Server{
Addr: addr,
Handler: *handler,
}

return server, nil
}

func (app *App) healthCheck(w http.ResponseWriter, r *http.Request) {
httputil.ReturnSuccess(r, w, map[string]string{"status": "health", "info": "webcli service health"})
}

func (app *App) handleWS(w http.ResponseWriter, r *http.Request) {
// HandleWS -
func (app *App) HandleWS(w http.ResponseWriter, r *http.Request) {
logrus.Printf("New client connected: %s", r.RemoteAddr)

if r.Method != "GET" {
Expand Down Expand Up @@ -281,14 +193,8 @@ func (app *App) handleWS(w http.ResponseWriter, r *http.Request) {
return
}
}

// Exit -
func (app *App) Exit() (firstCall bool) {
return true
}

func (app *App) createKubeClient() error {
config, err := k8sutil.NewRestConfig(app.options.K8SConfPath)
func (app *App) CreateKubeClient() error {
config, err := k8sutil.NewRestConfig("")
if err != nil {
return err
}
Expand Down Expand Up @@ -364,21 +270,6 @@ func (app *App) NewRequest(podName, namespace, containerName string, command []s
return req
}

func wrapLogger(handler http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
rw := &responseWrapper{w, 200}
handler.ServeHTTP(rw, r)
logrus.Printf("%s %d %s %s", r.RemoteAddr, rw.status, r.Method, r.URL.Path)
})
}

func wrapHeaders(handler http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Server", "GoTTY/"+Version)
handler.ServeHTTP(w, r)
})
}

func md5Func(str string) string {
h := md5.New()
h.Write([]byte(str))
Expand Down
57 changes: 0 additions & 57 deletions api/webcli/cmd/main.go

This file was deleted.

2 changes: 0 additions & 2 deletions cmd/api/option/option.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ type Config struct {
APIAddrSSL string
DBConnectionInfo string
EventLogServers []string
DockerConsoleServers []string
EventLogEndpoints []string
NodeAPI []string
BuilderAPI []string
Expand Down Expand Up @@ -114,7 +113,6 @@ func (a *APIServer) AddFlags(fs *pflag.FlagSet) {
fs.BoolVar(&a.ShowSQL, "show-sql", false, "The trigger for showing sql.")
fs.StringVar(&a.GrctlImage, "shell-image", "registry.cn-hangzhou.aliyuncs.com/goodrain/rbd-shell:v5.13.0-release", "use shell image")

fs.StringSliceVar(&a.DockerConsoleServers, "docker-console", []string{"rbd-webcli:7171"}, "docker console address")
fs.StringVar(&a.PrometheusEndpoint, "prom-api", "rbd-monitor:9999", "The service DNS name of Prometheus api. Default to rbd-monitor:9999")
fs.StringVar(&a.RbdHub, "hub-api", "http://rbd-hub:5000", "the rbd-hub server api")
fs.StringSliceVar(&a.NodeAPI, "node-api", []string{"rbd-node:6100"}, "the rbd-node server api")
Expand Down
73 changes: 0 additions & 73 deletions cmd/webcli/option/option.go

This file was deleted.

Loading

0 comments on commit 16e1fa5

Please sign in to comment.