diff --git a/internal/general-node/node.go b/internal/general-node/node.go index c72df14..adbb72e 100644 --- a/internal/general-node/node.go +++ b/internal/general-node/node.go @@ -1,24 +1,12 @@ package generalnode -import "github.com/gin-gonic/gin" +import ( + "github.com/gin-gonic/gin" +) func Start() { router := gin.Default() - - // Get Status - router.GET("/status", func(c *gin.Context) { - c.JSON(200, gin.H{ - "message": "pong", - }) - }) - - // Add Service - router.POST("/service", func(c *gin.Context) { - c.JSON(200, gin.H{ - "serviceName": "service1", - "status": "registered", - }) - }) + router = registerRoutes(router) router.Run("localhost:8000") // listen and serve on 0.0.0.0:8000 } diff --git a/internal/general-node/routes.go b/internal/general-node/routes.go new file mode 100644 index 0000000..5ef52ad --- /dev/null +++ b/internal/general-node/routes.go @@ -0,0 +1,38 @@ +package generalnode + +import ( + "encoding/json" + + "github.com/alexohneander/flotte/pkg/types/request" + respone "github.com/alexohneander/flotte/pkg/types/response" + "github.com/gin-gonic/gin" +) + +func registerRoutes(router *gin.Engine) *gin.Engine { + // Get Status + router.GET("/ping", func(c *gin.Context) { + c.JSON(200, gin.H{ + "message": "pong", + }) + }) + + // Add Service + router.POST("/service", func(c *gin.Context) { + defer c.Request.Body.Close() + var req request.ServiceRegister + err := json.NewDecoder(c.Request.Body).Decode(&req) + + if err != nil { + c.JSON(400, gin.H{ + "message": err.Error(), + }) + } + + c.JSON(200, respone.ServiceRegister{ + ServiceName: req.Name, + Status: "registered", + }) + }) + + return router +} diff --git a/internal/map-node/node.go b/internal/map-node/node.go index 0e1b21f..5110733 100644 --- a/internal/map-node/node.go +++ b/internal/map-node/node.go @@ -1,13 +1,57 @@ package mapnode -import "github.com/gin-gonic/gin" +import ( + "bytes" + "encoding/json" + "fmt" + "log" + "net/http" + + "github.com/alexohneander/flotte/pkg/types/request" + "github.com/gin-gonic/gin" +) func Start() { + err := registerAsMapNode() + if err != nil { + panic(err) + } + router := gin.Default() - router.GET("/ping", func(c *gin.Context) { - c.JSON(200, gin.H{ - "message": "pong", - }) - }) + router = registerRoutes(router) + router.Run("localhost:4000") // listen and serve on 0.0.0.0:4000 } + +func registerAsMapNode() error { + // http post request to general-node + serviceRegisterReq := request.ServiceRegister{ + Name: "map-01", + NodeType: "map", + Address: "localhost", + Port: 4000, + } + + json_data, err := json.Marshal(serviceRegisterReq) + if err != nil { + log.Fatal(err) + return err + } + + resp, err := http.Post("http://localhost:8000/service", "application/json", + bytes.NewBuffer(json_data)) + + if err != nil { + log.Fatal(err) + return err + } + + defer resp.Body.Close() + var res map[string]interface{} + + json.NewDecoder(resp.Body).Decode(&res) + + fmt.Println(res) + + return nil +} diff --git a/internal/map-node/routes.go b/internal/map-node/routes.go new file mode 100644 index 0000000..63a8ee9 --- /dev/null +++ b/internal/map-node/routes.go @@ -0,0 +1,14 @@ +package mapnode + +import "github.com/gin-gonic/gin" + +func registerRoutes(router *gin.Engine) *gin.Engine { + + router.GET("/ping", func(c *gin.Context) { + c.JSON(200, gin.H{ + "message": "pong", + }) + }) + + return router +} diff --git a/internal/reduce-node/node.go b/internal/reduce-node/node.go index 2c7c702..331d169 100644 --- a/internal/reduce-node/node.go +++ b/internal/reduce-node/node.go @@ -3,11 +3,17 @@ package reducenode import "github.com/gin-gonic/gin" func Start() { + err := registerAsReduceNode() + if err != nil { + panic(err) + } + router := gin.Default() - router.GET("/ping", func(c *gin.Context) { - c.JSON(200, gin.H{ - "message": "pong", - }) - }) - router.Run() // listen and serve on 0.0.0.0:8080 + router = registerRoutes(router) + + router.Run("localhost:4001") // listen and serve on 0.0.0.0:4001 +} + +func registerAsReduceNode() error { + return nil } diff --git a/internal/reduce-node/routes.go b/internal/reduce-node/routes.go new file mode 100644 index 0000000..8f1f289 --- /dev/null +++ b/internal/reduce-node/routes.go @@ -0,0 +1,14 @@ +package reducenode + +import "github.com/gin-gonic/gin" + +func registerRoutes(router *gin.Engine) *gin.Engine { + + router.GET("/ping", func(c *gin.Context) { + c.JSON(200, gin.H{ + "message": "pong", + }) + }) + + return router +} diff --git a/pkg/types/request/service_register.go b/pkg/types/request/service_register.go new file mode 100644 index 0000000..e8dea27 --- /dev/null +++ b/pkg/types/request/service_register.go @@ -0,0 +1,8 @@ +package request + +type ServiceRegister struct { + Name string `json:"name"` + NodeType string `json:"nodeType"` + Address string `json:"address"` + Port int `json:"port"` +} diff --git a/pkg/types/response/service_register.go b/pkg/types/response/service_register.go new file mode 100644 index 0000000..1fe026f --- /dev/null +++ b/pkg/types/response/service_register.go @@ -0,0 +1,6 @@ +package response + +type ServiceRegister struct { + ServiceName string `json:"serviceName"` + Status string `json:"status"` +}