mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
missing routers
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -5,7 +5,6 @@ iron.json
|
|||||||
dj.config.json
|
dj.config.json
|
||||||
dj.cluster.*.json
|
dj.cluster.*.json
|
||||||
script.tar.gz
|
script.tar.gz
|
||||||
router
|
|
||||||
app.zip
|
app.zip
|
||||||
/app
|
/app
|
||||||
vendor/
|
vendor/
|
||||||
|
|||||||
32
api/server/router/apps_create.go
Normal file
32
api/server/router/apps_create.go
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/iron-io/functions/api/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
func handleAppCreate(c *gin.Context) {
|
||||||
|
store := c.MustGet("store").(models.Datastore)
|
||||||
|
log := c.MustGet("log").(logrus.FieldLogger)
|
||||||
|
|
||||||
|
app := &models.App{}
|
||||||
|
|
||||||
|
err := c.BindJSON(app)
|
||||||
|
if err != nil {
|
||||||
|
log.WithError(err).Debug(models.ErrInvalidJSON)
|
||||||
|
c.JSON(http.StatusBadRequest, simpleError(models.ErrInvalidJSON))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
app, err = store.StoreApp(app)
|
||||||
|
if err != nil {
|
||||||
|
log.WithError(err).Debug(models.ErrAppsCreate)
|
||||||
|
c.JSON(http.StatusInternalServerError, simpleError(models.ErrAppsCreate))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, app)
|
||||||
|
}
|
||||||
25
api/server/router/apps_destroy.go
Normal file
25
api/server/router/apps_destroy.go
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/iron-io/functions/api/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
func handleAppDestroy(c *gin.Context) {
|
||||||
|
store := c.MustGet("store").(models.Datastore)
|
||||||
|
log := c.MustGet("log").(logrus.FieldLogger)
|
||||||
|
|
||||||
|
appName := c.Param("app")
|
||||||
|
err := store.RemoveApp(appName)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.WithError(err).Debug(models.ErrAppsRemoving)
|
||||||
|
c.JSON(http.StatusInternalServerError, simpleError(models.ErrAppsRemoving))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, nil)
|
||||||
|
}
|
||||||
31
api/server/router/apps_get.go
Normal file
31
api/server/router/apps_get.go
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/iron-io/functions/api/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
func handleAppGet(c *gin.Context) {
|
||||||
|
store := c.MustGet("store").(models.Datastore)
|
||||||
|
log := c.MustGet("log").(logrus.FieldLogger)
|
||||||
|
|
||||||
|
appName := c.Param("app")
|
||||||
|
app, err := store.GetApp(appName)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.WithError(err).Error(models.ErrAppsGet)
|
||||||
|
c.JSON(http.StatusInternalServerError, simpleError(models.ErrAppsGet))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if app == nil {
|
||||||
|
log.WithError(err).Error(models.ErrAppsNotFound)
|
||||||
|
c.JSON(http.StatusNotFound, simpleError(models.ErrAppsNotFound))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, app)
|
||||||
|
}
|
||||||
25
api/server/router/apps_list.go
Normal file
25
api/server/router/apps_list.go
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/iron-io/functions/api/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
func handleAppList(c *gin.Context) {
|
||||||
|
store := c.MustGet("store").(models.Datastore)
|
||||||
|
log := c.MustGet("log").(logrus.FieldLogger)
|
||||||
|
|
||||||
|
filter := &models.AppFilter{}
|
||||||
|
|
||||||
|
apps, err := store.GetApps(filter)
|
||||||
|
if err != nil {
|
||||||
|
log.WithError(err).Debug(models.ErrAppsList)
|
||||||
|
c.JSON(http.StatusInternalServerError, simpleError(models.ErrAppsList))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, apps)
|
||||||
|
}
|
||||||
34
api/server/router/apps_update.go
Normal file
34
api/server/router/apps_update.go
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/iron-io/functions/api/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
func handleAppUpdate(c *gin.Context) {
|
||||||
|
store := c.MustGet("store").(models.Datastore)
|
||||||
|
log := c.MustGet("log").(logrus.FieldLogger)
|
||||||
|
|
||||||
|
app := &models.App{}
|
||||||
|
|
||||||
|
err := c.BindJSON(app)
|
||||||
|
if err != nil {
|
||||||
|
log.WithError(err).Debug(models.ErrInvalidJSON)
|
||||||
|
c.JSON(http.StatusBadRequest, simpleError(models.ErrInvalidJSON))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
app.Name = c.Param("app")
|
||||||
|
|
||||||
|
app, err = store.StoreApp(app)
|
||||||
|
if err != nil {
|
||||||
|
log.WithError(err).Debug(models.ErrAppsUpdate)
|
||||||
|
c.JSON(http.StatusInternalServerError, simpleError(models.ErrAppsUpdate))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, app)
|
||||||
|
}
|
||||||
11
api/server/router/ping.go
Normal file
11
api/server/router/ping.go
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func handlePing(c *gin.Context) {
|
||||||
|
c.JSON(http.StatusNotImplemented, "Not Implemented")
|
||||||
|
}
|
||||||
37
api/server/router/router.go
Normal file
37
api/server/router/router.go
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/iron-io/functions/api/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Start(engine *gin.Engine) {
|
||||||
|
engine.GET("/", handlePing)
|
||||||
|
engine.GET("/version", handleVersion)
|
||||||
|
|
||||||
|
v1 := engine.Group("/v1")
|
||||||
|
{
|
||||||
|
v1.GET("/apps", handleAppList)
|
||||||
|
v1.POST("/apps", handleAppCreate)
|
||||||
|
|
||||||
|
v1.GET("/apps/:app", handleAppGet)
|
||||||
|
v1.POST("/apps/:app", handleAppUpdate)
|
||||||
|
v1.DELETE("/apps/:app", handleAppDestroy)
|
||||||
|
|
||||||
|
apps := v1.Group("/apps/:app")
|
||||||
|
{
|
||||||
|
apps.GET("/routes", handleRouteList)
|
||||||
|
apps.POST("/routes", handleRouteCreate)
|
||||||
|
apps.GET("/routes/:route", handleRouteGet)
|
||||||
|
apps.POST("/routes/:route", handleRouteUpdate)
|
||||||
|
apps.DELETE("/routes/:route", handleRouteDestroy)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
engine.GET("/r/:app/*route", handleRunner)
|
||||||
|
}
|
||||||
|
|
||||||
|
func simpleError(err error) *models.Error {
|
||||||
|
return &models.Error{&models.ErrorBody{Message: err.Error()}}
|
||||||
|
}
|
||||||
34
api/server/router/routes_create.go
Normal file
34
api/server/router/routes_create.go
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/iron-io/functions/api/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
func handleRouteCreate(c *gin.Context) {
|
||||||
|
store := c.MustGet("store").(models.Datastore)
|
||||||
|
log := c.MustGet("log").(logrus.FieldLogger)
|
||||||
|
|
||||||
|
route := &models.Route{}
|
||||||
|
|
||||||
|
err := c.BindJSON(route)
|
||||||
|
if err != nil {
|
||||||
|
log.WithError(err).Debug(models.ErrInvalidJSON)
|
||||||
|
c.JSON(http.StatusBadRequest, simpleError(models.ErrInvalidJSON))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
route.AppName = c.Param("app")
|
||||||
|
|
||||||
|
route, err = store.StoreRoute(route)
|
||||||
|
if err != nil {
|
||||||
|
log.WithError(err).Debug(models.ErrRoutesCreate)
|
||||||
|
c.JSON(http.StatusInternalServerError, simpleError(models.ErrRoutesCreate))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, route)
|
||||||
|
}
|
||||||
26
api/server/router/routes_destroy.go
Normal file
26
api/server/router/routes_destroy.go
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/iron-io/functions/api/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
func handleRouteDestroy(c *gin.Context) {
|
||||||
|
store := c.MustGet("store").(models.Datastore)
|
||||||
|
log := c.MustGet("log").(logrus.FieldLogger)
|
||||||
|
|
||||||
|
appName := c.Param("app")
|
||||||
|
routeName := c.Param("route")
|
||||||
|
err := store.RemoveRoute(appName, routeName)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.WithError(err).Debug(models.ErrRoutesRemoving)
|
||||||
|
c.JSON(http.StatusInternalServerError, simpleError(models.ErrRoutesRemoving))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, nil)
|
||||||
|
}
|
||||||
28
api/server/router/routes_get.go
Normal file
28
api/server/router/routes_get.go
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/iron-io/functions/api/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
func handleRouteGet(c *gin.Context) {
|
||||||
|
store := c.MustGet("store").(models.Datastore)
|
||||||
|
log := c.MustGet("log").(logrus.FieldLogger)
|
||||||
|
|
||||||
|
appName := c.Param("app")
|
||||||
|
routeName := c.Param("route")
|
||||||
|
|
||||||
|
route, err := store.GetRoute(appName, routeName)
|
||||||
|
if err != nil {
|
||||||
|
log.WithError(err).Error(models.ErrRoutesGet)
|
||||||
|
c.JSON(http.StatusInternalServerError, simpleError(models.ErrRoutesGet))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.WithFields(logrus.Fields{"route": route}).Debug("Got route")
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, route)
|
||||||
|
}
|
||||||
31
api/server/router/routes_list.go
Normal file
31
api/server/router/routes_list.go
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/iron-io/functions/api/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
func handleRouteList(c *gin.Context) {
|
||||||
|
store := c.MustGet("store").(models.Datastore)
|
||||||
|
log := c.MustGet("log").(logrus.FieldLogger)
|
||||||
|
|
||||||
|
appName := c.Param("app")
|
||||||
|
|
||||||
|
filter := &models.RouteFilter{
|
||||||
|
AppName: appName,
|
||||||
|
}
|
||||||
|
|
||||||
|
routes, err := store.GetRoutes(filter)
|
||||||
|
if err != nil {
|
||||||
|
log.WithError(err).Error(models.ErrRoutesGet)
|
||||||
|
c.JSON(http.StatusInternalServerError, simpleError(models.ErrRoutesGet))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.WithFields(logrus.Fields{"routes": routes}).Debug("Got routes")
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, routes)
|
||||||
|
}
|
||||||
35
api/server/router/routes_update.go
Normal file
35
api/server/router/routes_update.go
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/iron-io/functions/api/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
func handleRouteUpdate(c *gin.Context) {
|
||||||
|
store := c.MustGet("store").(models.Datastore)
|
||||||
|
log := c.MustGet("log").(logrus.FieldLogger)
|
||||||
|
|
||||||
|
route := &models.Route{}
|
||||||
|
appName := c.Param("app")
|
||||||
|
|
||||||
|
err := c.BindJSON(route)
|
||||||
|
if err != nil {
|
||||||
|
log.WithError(err).Debug(models.ErrInvalidJSON)
|
||||||
|
c.JSON(http.StatusBadRequest, simpleError(models.ErrInvalidJSON))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
route.AppName = appName
|
||||||
|
|
||||||
|
route, err = store.StoreRoute(route)
|
||||||
|
if err != nil {
|
||||||
|
log.WithError(err).Debug(models.ErrAppsCreate)
|
||||||
|
c.JSON(http.StatusInternalServerError, simpleError(models.ErrAppsCreate))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, route)
|
||||||
|
}
|
||||||
19
api/server/router/runner.go
Normal file
19
api/server/router/runner.go
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/iron-io/functions/api/runner"
|
||||||
|
)
|
||||||
|
|
||||||
|
func handleRunner(c *gin.Context) {
|
||||||
|
log := c.MustGet("log").(logrus.FieldLogger)
|
||||||
|
|
||||||
|
err := runner.Run(c)
|
||||||
|
if err != nil {
|
||||||
|
log.Debug(err)
|
||||||
|
c.JSON(http.StatusInternalServerError, simpleError(err))
|
||||||
|
}
|
||||||
|
}
|
||||||
11
api/server/router/version.go
Normal file
11
api/server/router/version.go
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func handleVersion(c *gin.Context) {
|
||||||
|
c.JSON(http.StatusNotImplemented, "Not Implemented")
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user