From a5cc432bf537c46ee8eaf1261bd588bf59c093c8 Mon Sep 17 00:00:00 2001 From: Seokho Son Date: Wed, 2 Oct 2024 21:34:32 +0900 Subject: [PATCH] Activate dynamic endpoint for swagger API dashboard --- docker-compose.yaml | 49 ++++++++++++++++++---------------- src/api/rest/docs/docs.go | 2 +- src/api/rest/docs/swagger.json | 1 - src/api/rest/docs/swagger.yaml | 2 +- src/api/rest/server/server.go | 20 +++++++++----- src/core/model/common.go | 1 + src/main.go | 29 +++----------------- 7 files changed, 45 insertions(+), 59 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index c64f40f47..59334f0b4 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -28,6 +28,9 @@ services: - ./container-volume/cb-tumblebug-container/log/:/app/log/ environment: # - TB_ROOT_PATH=/app + # # Enable TB_SELF_ENDPOINT to specify an endpoint for CB-TB API (default: localhost:1323) + # # Use public IP if you want to access the API Dashboard from outside of localhost + # - TB_SELF_ENDPOINT=xxx.xxx.xxx.xxx:1323 - TB_SPIDER_REST_URL=http://cb-spider:1024/spider - TB_ETCD_ENDPOINTS=http://cb-tumblebug-etcd:2379 # - TB_ETCD_AUTH_ENABLED=true @@ -42,7 +45,6 @@ services: # - TB_API_USERNAME=default # - TB_API_PASSWORD=default # - TB_AUTOCONTROL_DURATION_MS=10000 - # - TB_SELF_ENDPOINT=localhost:1323 # - TB_DRAGONFLY_REST_URL=http://cb-dragonfly:9090/dragonfly # - TB_DEFAULT_NAMESPACE=default # - TB_DEFAULT_CREDENTIALHOLDER=admin @@ -161,28 +163,29 @@ services: retries: 3 start_period: 10s - # Swagger UI - swagger-ui: - image: swaggerapi/swagger-ui - container_name: swagger-ui - networks: - - external_network - ports: - - 1325:8080 - volumes: - # cb-tumblebug swagger.yaml mount - - ./src/api/rest/docs/swagger.yaml:/swagger.yaml - environment: - # Options: https://github.com/swagger-api/swagger-ui/blob/37b8c1a8b67200dd425216ab8f97b725a429a5c0/docs/usage/configuration.md#docker - - SWAGGER_JSON=/swagger.yaml - logging: - # Disable logging - driver: "none" - healthcheck: - test: [ "CMD", "curl", "-f", "localhost", "1325"] - timeout: 5s - retries: 3 - start_period: 3s + # # Swagger UI + # swagger-ui: + # image: swaggerapi/swagger-ui + # container_name: swagger-ui + # networks: + # - external_network + # ports: + # - 1325:8080 + # volumes: + # # cb-tumblebug swagger.yaml mount + # - ./src/api/rest/docs/swagger.yaml:/swagger.yaml + # environment: + # # Options: https://github.com/swagger-api/swagger-ui/blob/37b8c1a8b67200dd425216ab8f97b725a429a5c0/docs/usage/configuration.md#docker + # - SWAGGER_JSON=/swagger.yaml + # - QUERY_CONFIG_ENABLED=true + # logging: + # # Disable logging + # driver: "none" + # healthcheck: + # test: [ "CMD", "curl", "-f", "localhost", "1325"] + # timeout: 5s + # retries: 3 + # start_period: 3s # # cb-tumblebug-etcd-conf # cb-tumblebug-etcd-conf: diff --git a/src/api/rest/docs/docs.go b/src/api/rest/docs/docs.go index 06d338292..aeea23553 100644 --- a/src/api/rest/docs/docs.go +++ b/src/api/rest/docs/docs.go @@ -14724,7 +14724,7 @@ const docTemplate = `{ // SwaggerInfo holds exported Swagger Info so clients can modify it var SwaggerInfo = &swag.Spec{ Version: "latest", - Host: "localhost:1323", + Host: "", BasePath: "/tumblebug", Schemes: []string{}, Title: "CB-Tumblebug REST API", diff --git a/src/api/rest/docs/swagger.json b/src/api/rest/docs/swagger.json index ad126b01f..6a2159379 100644 --- a/src/api/rest/docs/swagger.json +++ b/src/api/rest/docs/swagger.json @@ -14,7 +14,6 @@ }, "version": "latest" }, - "host": "localhost:1323", "basePath": "/tumblebug", "paths": { "/auth/test": { diff --git a/src/api/rest/docs/swagger.yaml b/src/api/rest/docs/swagger.yaml index 90df97696..f43533d60 100644 --- a/src/api/rest/docs/swagger.yaml +++ b/src/api/rest/docs/swagger.yaml @@ -12,7 +12,7 @@ info: url: http://www.apache.org/licenses/LICENSE-2.0.html version: latest servers: -- url: //localhost:1323/tumblebug +- url: /tumblebug paths: /auth/test: get: diff --git a/src/api/rest/server/server.go b/src/api/rest/server/server.go index 865cf961a..f8b749a27 100644 --- a/src/api/rest/server/server.go +++ b/src/api/rest/server/server.go @@ -19,6 +19,7 @@ import ( // "log" "os/signal" + "strings" "sync" "syscall" "time" @@ -28,6 +29,7 @@ import ( "github.com/rs/zerolog/log" + "github.com/cloud-barista/cb-tumblebug/src/api/rest/docs" "github.com/cloud-barista/cb-tumblebug/src/api/rest/server/auth" rest_common "github.com/cloud-barista/cb-tumblebug/src/api/rest/server/common" @@ -88,7 +90,7 @@ const ( ) // RunServer func start Rest API server -func RunServer(port string) { +func RunServer() { log.Info().Msg("REST API Server is starting") @@ -119,6 +121,7 @@ func RunServer(port string) { //e.colorer.Printf(banner, e.colorer.Red("v"+Version), e.colorer.Blue(website)) // Route for system management + docs.SwaggerInfo.Host = model.SelfEndpoint swaggerRedirect := func(c echo.Context) error { return c.Redirect(http.StatusMovedPermanently, "/tumblebug/api/index.html") } @@ -515,10 +518,14 @@ func RunServer(port string) { g.PUT("/:nsId/testDeleteObjectAssociation/:resourceType/:resourceId", rest_resource.RestTestDeleteObjectAssociation) g.GET("/:nsId/testGetAssociatedObjectCount/:resourceType/:resourceId", rest_resource.RestTestGetAssociatedObjectCount) - selfEndpoint := os.Getenv("TB_SELF_ENDPOINT") - apiServer := "http://" + selfEndpoint + "/tumblebug/readyz" - apiDashboard := "http://localhost:1325" - mapUI := "http://localhost:1324" + selfEndpoint := strings.Split(model.SelfEndpoint, ":") + selfIp := selfEndpoint[0] + selfPort := selfEndpoint[1] + + apiServer := fmt.Sprintf("http://%s:%s/tumblebug/readyz", selfIp, selfPort) + //apiDashboard := fmt.Sprintf("http://%s:%s", selfIp, "1325") + apiDashboard := fmt.Sprintf("http://%s:%s/tumblebug/api", selfIp, selfPort) + mapUI := fmt.Sprintf("http://%s:%s", selfIp, "1324") fmt.Print(resetColor) fmt.Printf(" Default Namespace: %s%s%s\n", warningColor, model.DefaultNamespace, resetColor) @@ -565,9 +572,8 @@ func RunServer(port string) { } }(&wg) - port = fmt.Sprintf(":%s", port) model.SystemReady = true - if err := e.Start(port); err != nil && err != http.ErrServerClosed { + if err := e.Start(":" + selfPort); err != nil && err != http.ErrServerClosed { log.Error().Err(err).Msg("Error in Starting CB-Tumblebug API Server") e.Logger.Panic("Shuttig down the server: ", err) } diff --git a/src/core/model/common.go b/src/core/model/common.go index af5507464..faf86bf72 100644 --- a/src/core/model/common.go +++ b/src/core/model/common.go @@ -73,6 +73,7 @@ var AutocontrolDurationMs string var DefaultNamespace string var DefaultCredentialHolder string var EtcdEndpoints string +var SelfEndpoint string var MyDB *sql.DB var err error var ORM *xorm.Engine diff --git a/src/main.go b/src/main.go index bf299726e..9c143ca76 100644 --- a/src/main.go +++ b/src/main.go @@ -18,7 +18,6 @@ import ( "bufio" "context" "encoding/csv" - "flag" "fmt" "os" "os/user" @@ -51,6 +50,7 @@ import ( func init() { model.SystemReady = false + model.SelfEndpoint = common.NVL(os.Getenv("TB_SELF_ENDPOINT"), "localhost:1323") model.SpiderRestUrl = common.NVL(os.Getenv("TB_SPIDER_REST_URL"), "http://localhost:1024/spider") model.DragonflyRestUrl = common.NVL(os.Getenv("TB_DRAGONFLY_REST_URL"), "http://localhost:9090/dragonfly") model.TerrariumRestUrl = common.NVL(os.Getenv("TB_TERRARIUM_REST_URL"), "http://localhost:8888/terrarium") @@ -61,6 +61,7 @@ func init() { model.AutocontrolDurationMs = common.NVL(os.Getenv("TB_AUTOCONTROL_DURATION_MS"), "10000") model.DefaultNamespace = common.NVL(os.Getenv("TB_DEFAULT_NAMESPACE"), "default") model.DefaultCredentialHolder = common.NVL(os.Getenv("TB_DEFAULT_CREDENTIALHOLDER"), "admin") + // Etcd model.EtcdEndpoints = common.NVL(os.Getenv("TB_ETCD_ENDPOINTS"), "localhost:2379") @@ -412,7 +413,6 @@ func addIndexes() error { // @license.name Apache 2.0 // @license.url http://www.apache.org/licenses/LICENSE-2.0.html -// @host localhost:1323 // @BasePath /tumblebug // @securityDefinitions.basic BasicAuth @@ -423,31 +423,8 @@ func addIndexes() error { // @description Type "Bearer" followed by a space and JWT token ([TBD] Get token in http://xxx.xxx.xxx.xxx:xxx/auth) func main() { - // giving a default value of "1323" - port := flag.String("port", "1323", "port number for the restapiserver to listen to") - flag.Parse() - - // validate arguments from flag - validationFlag := true - // validation: port - // set validationFlag to false if your number is not in [1-65535] range - if portInt, err := strconv.Atoi(*port); err == nil { - if portInt < 1 || portInt > 65535 { - validationFlag = false - } - } else { - validationFlag = false - } - if !validationFlag { - fmt.Printf("%s is not a valid port number.\n", *port) - fmt.Printf("Please retry with a valid port number (ex: -port=[1-65535]).\n") - os.Exit(1) - } - //Ticker for MCI Orchestration Policy - log.Info().Msg("[Initiate Multi-Cloud Orchestration]") - autoControlDuration, _ := strconv.Atoi(model.AutocontrolDurationMs) //ms ticker := time.NewTicker(time.Millisecond * time.Duration(autoControlDuration)) go func() { @@ -483,7 +460,7 @@ func main() { // Start REST Server go func() { - restServer.RunServer(*port) + restServer.RunServer() wg.Done() }()