diff --git a/Makefile b/Makefile index 1b6b1d48..cb50df58 100644 --- a/Makefile +++ b/Makefile @@ -3,11 +3,20 @@ GOBUILD=$(GOCMD) build GOCLEAN=$(GOCMD) clean BASEPATH := $(shell pwd) BUILDDIR=$(BASEPATH)/dist/bin -MAIN= $(BASEPATH)/main.go +UIDIR=$(BASEPATH)/ui +TERMINALDIR=$(BASEPATH)/terminal + +MAIN= $(BASEPATH)/cmd/server/main.go APP_NAME=ekko GOPROXY="https://goproxy.cn,direct" -build_darwin: +build_web: + cd $(UIDIR) && npm install && npm run-script build + cd $(TERMINALDIR) && npm install && npm run-script build + + +build_bin_darwin: build_web + cd $(BASEPATH) GOOS=darwin GOARCH=amd64 $(GOBUILD) -o $(BUILDDIR)/darwin/amd64/$(APP_NAME) $(MAIN) diff --git a/api/.gitkeep b/api/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/build/.gitkeep b/build/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/cmd/params/rules.go b/cmd/params/rules.go deleted file mode 100644 index 03e842f5..00000000 --- a/cmd/params/rules.go +++ /dev/null @@ -1,23 +0,0 @@ -package params - -import ( - "fmt" - "github.com/google/martian/log" - "net/url" -) - -var KubeApiServerUrlValidateFunc = func(p interface{}) error { - val, ok := p.(string) - if !ok { - return fmt.Errorf(validateErrTypeParse, p, "string") - } - if val == "" { - log.Debugf("kube-api-server not set,skip validate") - return nil - } - _, err := url.Parse(val) - if err != nil { - return fmt.Errorf(validateUrlParse, val, err.Error()) - } - return nil -} diff --git a/cmd/params/validator.go b/cmd/params/validator.go deleted file mode 100644 index 5aac5329..00000000 --- a/cmd/params/validator.go +++ /dev/null @@ -1,37 +0,0 @@ -package params - -var ( - validateErrTypeParse = "%v can not parse to %s" - validateUrlParse = "%s is not a valid url: %s" -) - -type paramValidateFunc func(p interface{}) error -type ParamValidateItem struct { - Value string - ValidateFunc paramValidateFunc -} - -func NewParamValidateItem(value string, validateFunc paramValidateFunc) *ParamValidateItem { - return &ParamValidateItem{Value: value, ValidateFunc: validateFunc} -} - -type ParamValidator struct { - items []ParamValidateItem -} - -func NewParamValidator(rules []ParamValidateItem) *ParamValidator { - return &ParamValidator{items: rules} -} - -func (p *ParamValidator) AppendRule(validateItem ParamValidateItem) { - p.items = append(p.items, validateItem) -} - -func (p *ParamValidator) Check() error { - for i := range p.items { - if err := p.items[i].ValidateFunc(p.items[i].Value); err != nil { - return err - } - } - return nil -} diff --git a/cmd/root.go b/cmd/server/main.go similarity index 59% rename from cmd/root.go rename to cmd/server/main.go index 1a97affd..fadad17c 100644 --- a/cmd/root.go +++ b/cmd/server/main.go @@ -1,8 +1,9 @@ -package cmd +package main import ( - "github.com/KubeOperator/ekko/pkg/route" - "github.com/KubeOperator/ekko/pkg/server" + "embed" + "github.com/KubeOperator/ekko/internal/route" + "github.com/KubeOperator/ekko/internal/server" "github.com/spf13/cobra" ) @@ -12,6 +13,12 @@ var ( serverBindPort int ) +//go:embed web/terminal +var embedWebTerminal embed.FS + +//go:embed web/dashboard +var embedWebDashboard embed.FS + func init() { RootCmd.Flags().StringVar(&serverBindHost, "server-bind-host", "", "ekko bind address") RootCmd.Flags().IntVar(&serverBindPort, "server-bind-port", 0, "ekko bind port") @@ -22,6 +29,14 @@ var RootCmd = &cobra.Command{ Use: "ekko", Short: "A dashboard for kubernetes", RunE: func(cmd *cobra.Command, args []string) error { + server.EmbedWebDashboard = embedWebDashboard + server.EmbedWebTerminal = embedWebTerminal return server.Listen(route.InitRoute) }, } + +func main() { + if err := RootCmd.Execute(); err != nil { + panic(err) + } +} diff --git a/example/app_example.yml b/conf/app_example.yml similarity index 100% rename from example/app_example.yml rename to conf/app_example.yml diff --git a/pkg/api/v1/session/session.go b/internal/api/v1/session/session.go similarity index 88% rename from pkg/api/v1/session/session.go rename to internal/api/v1/session/session.go index 25a171e0..d0a3c1bf 100644 --- a/pkg/api/v1/session/session.go +++ b/internal/api/v1/session/session.go @@ -1,7 +1,7 @@ package session import ( - "github.com/KubeOperator/ekko/pkg/service/v1/user" + "github.com/KubeOperator/ekko/internal/service/v1/user" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/context" ) diff --git a/pkg/api/v1/v1.go b/internal/api/v1/v1.go similarity index 72% rename from pkg/api/v1/v1.go rename to internal/api/v1/v1.go index ec9636dd..e48aed4b 100644 --- a/pkg/api/v1/v1.go +++ b/internal/api/v1/v1.go @@ -1,7 +1,7 @@ package v1 import ( - "github.com/KubeOperator/ekko/pkg/api/v1/session" + "github.com/KubeOperator/ekko/internal/api/v1/session" "github.com/kataras/iris/v12" ) diff --git a/pkg/config/config.go b/internal/config/config.go similarity index 92% rename from pkg/config/config.go rename to internal/config/config.go index 3d55304a..13088115 100644 --- a/pkg/config/config.go +++ b/internal/config/config.go @@ -3,13 +3,12 @@ package config import ( "encoding/json" "fmt" - v1 "github.com/KubeOperator/ekko/pkg/model/v1" - "github.com/KubeOperator/ekko/pkg/model/v1/config" + v1 "github.com/KubeOperator/ekko/internal/model/v1" + "github.com/KubeOperator/ekko/internal/model/v1/config" "github.com/coreos/etcd/pkg/fileutil" "github.com/spf13/viper" ) -const configErr = "can not parse config file , %s" const configNotFoundSkipErr = "config file not found in %s, skip" const configReadErr = "can not read config file %s ,%s" const configMergeErr = "can not merge config file, %s" diff --git a/pkg/model/v1/base.go b/internal/model/v1/base.go similarity index 100% rename from pkg/model/v1/base.go rename to internal/model/v1/base.go diff --git a/pkg/model/v1/config/config.go b/internal/model/v1/config/config.go similarity index 91% rename from pkg/model/v1/config/config.go rename to internal/model/v1/config/config.go index aaf1cc53..c82e3cb8 100644 --- a/pkg/model/v1/config/config.go +++ b/internal/model/v1/config/config.go @@ -1,6 +1,6 @@ package config -import v1 "github.com/KubeOperator/ekko/pkg/model/v1" +import v1 "github.com/KubeOperator/ekko/internal/model/v1" type Config struct { v1.BaseModel diff --git a/pkg/model/v1/user/user.go b/internal/model/v1/user/user.go similarity index 89% rename from pkg/model/v1/user/user.go rename to internal/model/v1/user/user.go index a8c0b527..8ca6f10f 100644 --- a/pkg/model/v1/user/user.go +++ b/internal/model/v1/user/user.go @@ -1,6 +1,6 @@ package user -import v1 "github.com/KubeOperator/ekko/pkg/model/v1" +import v1 "github.com/KubeOperator/ekko/internal/model/v1" type User struct { v1.BaseModel `storm:"inline"` diff --git a/pkg/route/proxy/kubernetes.go b/internal/route/proxy/kubernetes.go similarity index 100% rename from pkg/route/proxy/kubernetes.go rename to internal/route/proxy/kubernetes.go diff --git a/pkg/route/proxy/proxy.go b/internal/route/proxy/proxy.go similarity index 100% rename from pkg/route/proxy/proxy.go rename to internal/route/proxy/proxy.go diff --git a/pkg/route/route.go b/internal/route/route.go similarity index 83% rename from pkg/route/route.go rename to internal/route/route.go index 28d33588..c60ba0c0 100644 --- a/pkg/route/route.go +++ b/internal/route/route.go @@ -1,7 +1,7 @@ package route import ( - v1 "github.com/KubeOperator/ekko/pkg/api/v1" + v1 "github.com/KubeOperator/ekko/internal/api/v1" "github.com/kataras/iris/v12" ) diff --git a/pkg/route/terminal/terminal.go b/internal/route/terminal/terminal.go similarity index 78% rename from pkg/route/terminal/terminal.go rename to internal/route/terminal/terminal.go index 4bb90441..cd8b9e2c 100644 --- a/pkg/route/terminal/terminal.go +++ b/internal/route/terminal/terminal.go @@ -1,7 +1,7 @@ package terminal import ( - shell "github.com/KubeOperator/ekko/pkg/terminal" + shell "github.com/KubeOperator/ekko/internal/terminal" "github.com/kataras/iris/v12" ) diff --git a/pkg/route/ws/ws.go b/internal/route/ws/ws.go similarity index 85% rename from pkg/route/ws/ws.go rename to internal/route/ws/ws.go index 1174be14..8d93b6db 100644 --- a/pkg/route/ws/ws.go +++ b/internal/route/ws/ws.go @@ -1,7 +1,7 @@ package ws import ( - shell "github.com/KubeOperator/ekko/pkg/terminal" + shell "github.com/KubeOperator/ekko/internal/terminal" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/context" ) diff --git a/pkg/server/server.go b/internal/server/server.go similarity index 95% rename from pkg/server/server.go rename to internal/server/server.go index f379a1dc..dd9f823f 100644 --- a/pkg/server/server.go +++ b/internal/server/server.go @@ -3,8 +3,8 @@ package server import ( "embed" "fmt" - "github.com/KubeOperator/ekko/pkg/config" - v1Config "github.com/KubeOperator/ekko/pkg/model/v1/config" + "github.com/KubeOperator/ekko/internal/config" + v1Config "github.com/KubeOperator/ekko/internal/model/v1/config" "github.com/asdine/storm/v3" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/sessions" diff --git a/pkg/terminal/shell.go b/internal/service/v1/terminal/shell.go similarity index 100% rename from pkg/terminal/shell.go rename to internal/service/v1/terminal/shell.go diff --git a/pkg/terminal/shell_session_handler.go b/internal/service/v1/terminal/shell_session_handler.go similarity index 100% rename from pkg/terminal/shell_session_handler.go rename to internal/service/v1/terminal/shell_session_handler.go diff --git a/pkg/service/v1/user/user.go b/internal/service/v1/user/user.go similarity index 79% rename from pkg/service/v1/user/user.go rename to internal/service/v1/user/user.go index 53ada351..b335ac2e 100644 --- a/pkg/service/v1/user/user.go +++ b/internal/service/v1/user/user.go @@ -1,8 +1,8 @@ package user import ( - "github.com/KubeOperator/ekko/pkg/model/v1/user" - "github.com/KubeOperator/ekko/pkg/server" + "github.com/KubeOperator/ekko/internal/model/v1/user" + "github.com/KubeOperator/ekko/internal/server" ) type Service interface { diff --git a/pkg/service/v1/user/user_test.go b/internal/service/v1/user/user_test.go similarity index 93% rename from pkg/service/v1/user/user_test.go rename to internal/service/v1/user/user_test.go index 121e3426..6cf9416f 100644 --- a/pkg/service/v1/user/user_test.go +++ b/internal/service/v1/user/user_test.go @@ -2,7 +2,7 @@ package user import ( "fmt" - "github.com/KubeOperator/ekko/pkg/model/v1/user" + "github.com/KubeOperator/ekko/internal/model/v1/user" "github.com/asdine/storm/v3" "testing" ) diff --git a/main.go b/main.go deleted file mode 100644 index f50523c9..00000000 --- a/main.go +++ /dev/null @@ -1,20 +0,0 @@ -package main - -import ( - "embed" - "github.com/KubeOperator/ekko/cmd" - "github.com/KubeOperator/ekko/pkg/server" - "github.com/spf13/cobra" -) - -//go:embed web/terminal -var embedWebTerminal embed.FS - -//go:embed web/dashboard -var embedWebDashboard embed.FS - -func main() { - server.EmbedWebDashboard = embedWebDashboard - server.EmbedWebTerminal = embedWebTerminal - cobra.CheckErr(cmd.RootCmd.Execute()) -} diff --git a/terminal/angular.json b/terminal/angular.json index eeebe155..5ab9f1c6 100644 --- a/terminal/angular.json +++ b/terminal/angular.json @@ -20,7 +20,7 @@ "build": { "builder": "@angular-devkit/build-angular:browser", "options": { - "outputPath": "../web/terminal", + "outputPath": "../cmd/server/web/terminal", "index": "src/index.html", "main": "src/main.ts", "polyfills": "src/polyfills.ts", diff --git a/ui/package-lock.json b/ui/package-lock.json index e61229ad..61ab0f9a 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -1957,6 +1957,80 @@ "webpack-chain": "^6.4.0", "webpack-dev-server": "^3.11.0", "webpack-merge": "^4.2.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.1.tgz", + "integrity": "sha1-yAs/qyi/Y3HmhjMl7uZ+YYt35q0=", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz?cache=0&sync_timestamp=1618559744568&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-flag%2Fdownload%2Fhas-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true, + "optional": true + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-2.0.0.tgz", + "integrity": "sha1-5MrOW4FtQloWa18JfhDNErNgZLA=", + "dev": true, + "optional": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1618561027869&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "vue-loader-v16": { + "version": "npm:vue-loader@16.2.0", + "resolved": "https://registry.nlark.com/vue-loader/download/vue-loader-16.2.0.tgz?cache=0&sync_timestamp=1620718138564&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-loader%2Fdownload%2Fvue-loader-16.2.0.tgz", + "integrity": "sha1-BGpTMI3Ufljv4g3ewe3sAnzjtG4=", + "dev": true, + "optional": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + } + } } }, "@vue/cli-shared-utils": { @@ -13433,80 +13507,6 @@ } } }, - "vue-loader-v16": { - "version": "npm:vue-loader@16.2.0", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.2.0.tgz", - "integrity": "sha512-TitGhqSQ61RJljMmhIGvfWzJ2zk9m1Qug049Ugml6QP3t0e95o0XJjk29roNEiPKJQBEi8Ord5hFuSuELzSp8Q==", - "dev": true, - "optional": true, - "requires": { - "chalk": "^4.1.0", - "hash-sum": "^2.0.0", - "loader-utils": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "optional": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "optional": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "optional": true - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "optional": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "optional": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "vue-router": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.5.1.tgz", diff --git a/ui/src/business/app-layout/header-components/UserSetting.vue b/ui/src/business/app-layout/header-components/UserSetting.vue deleted file mode 100644 index edb911f6..00000000 --- a/ui/src/business/app-layout/header-components/UserSetting.vue +++ /dev/null @@ -1,24 +0,0 @@ - - - - - \ No newline at end of file diff --git a/ui/src/business/app-layout/horizontal-layout/HorizontalHeader.vue b/ui/src/business/app-layout/horizontal-layout/HorizontalHeader.vue index 452dffd2..a00f0eee 100644 --- a/ui/src/business/app-layout/horizontal-layout/HorizontalHeader.vue +++ b/ui/src/business/app-layout/horizontal-layout/HorizontalHeader.vue @@ -5,18 +5,18 @@
- +
diff --git a/ui/src/business/cluster-list/index.vue b/ui/src/business/cluster-list/index.vue index 83b2b911..38035e98 100644 --- a/ui/src/business/cluster-list/index.vue +++ b/ui/src/business/cluster-list/index.vue @@ -15,7 +15,7 @@ diff --git a/ui/src/components/layout/sidebar/SidebarToggleButton.vue b/ui/src/components/layout/sidebar/SidebarToggleButton.vue index f067a3f8..dda83a9e 100644 --- a/ui/src/components/layout/sidebar/SidebarToggleButton.vue +++ b/ui/src/components/layout/sidebar/SidebarToggleButton.vue @@ -1,5 +1,5 @@