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 @@
-
-