mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
Improve listeners and handlers (#350)
* improve listeners and handlers * add to route handlers * separate create/delete/update events * removed useless interface
This commit is contained in:
@@ -34,7 +34,7 @@ func (s *Server) handleAppCreate(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
err = Api.FireBeforeAppUpdate(ctx, wapp.App)
|
||||
err = Api.FireBeforeAppCreate(ctx, wapp.App)
|
||||
if err != nil {
|
||||
log.WithError(err).Errorln(models.ErrAppsCreate)
|
||||
c.JSON(http.StatusInternalServerError, simpleError(err))
|
||||
@@ -48,7 +48,7 @@ func (s *Server) handleAppCreate(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
err = Api.FireAfterAppUpdate(ctx, wapp.App)
|
||||
err = Api.FireAfterAppCreate(ctx, wapp.App)
|
||||
if err != nil {
|
||||
log.WithError(err).Errorln(models.ErrAppsCreate)
|
||||
c.JSON(http.StatusInternalServerError, simpleError(err))
|
||||
|
||||
@@ -28,11 +28,25 @@ func handleAppDelete(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
if err := Api.Datastore.RemoveApp(ctx, appName); err != nil {
|
||||
err = Api.FireAfterAppDelete(ctx, appName)
|
||||
if err != nil {
|
||||
log.WithError(err).Errorln(models.ErrAppsRemoving)
|
||||
c.JSON(http.StatusInternalServerError, simpleError(err))
|
||||
return
|
||||
}
|
||||
|
||||
if err = Api.Datastore.RemoveApp(ctx, appName); err != nil {
|
||||
log.WithError(err).Debug(models.ErrAppsRemoving)
|
||||
c.JSON(http.StatusInternalServerError, simpleError(models.ErrAppsRemoving))
|
||||
return
|
||||
}
|
||||
|
||||
err = Api.FireAfterAppDelete(ctx, appName)
|
||||
if err != nil {
|
||||
log.WithError(err).Errorln(models.ErrAppsRemoving)
|
||||
c.JSON(http.StatusInternalServerError, simpleError(err))
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"message": "App deleted"})
|
||||
}
|
||||
|
||||
@@ -29,6 +29,14 @@ func handleAppUpdate(c *gin.Context) {
|
||||
}
|
||||
|
||||
wapp.App.Name = c.Param("app")
|
||||
|
||||
err = Api.FireAfterAppUpdate(ctx, wapp.App)
|
||||
if err != nil {
|
||||
log.WithError(err).Errorln(models.ErrAppsUpdate)
|
||||
c.JSON(http.StatusInternalServerError, simpleError(err))
|
||||
return
|
||||
}
|
||||
|
||||
app, err := Api.Datastore.UpdateApp(ctx, wapp.App)
|
||||
if err != nil {
|
||||
log.WithError(err).Debug(models.ErrAppsUpdate)
|
||||
@@ -36,6 +44,13 @@ func handleAppUpdate(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
err = Api.FireAfterAppUpdate(ctx, wapp.App)
|
||||
if err != nil {
|
||||
log.WithError(err).Errorln(models.ErrAppsUpdate)
|
||||
c.JSON(http.StatusInternalServerError, simpleError(err))
|
||||
return
|
||||
}
|
||||
|
||||
wapp.App = app
|
||||
|
||||
// Nothing to update right now in apps
|
||||
|
||||
82
api/server/listeners.go
Normal file
82
api/server/listeners.go
Normal file
@@ -0,0 +1,82 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/iron-io/functions/api/ifaces"
|
||||
"github.com/iron-io/functions/api/models"
|
||||
)
|
||||
|
||||
// AddAppCreateListener adds a listener that will be notified on App created.
|
||||
func (s *Server) AddAppCreateListener(listener ifaces.AppCreateListener) {
|
||||
s.AppCreateListeners = append(s.AppCreateListeners, listener)
|
||||
}
|
||||
|
||||
// AddAppUpdateListener adds a listener that will be notified on App updated.
|
||||
func (s *Server) AddAppUpdateListener(listener ifaces.AppUpdateListener) {
|
||||
s.AppUpdateListeners = append(s.AppUpdateListeners, listener)
|
||||
}
|
||||
|
||||
// AddAppDeleteListener adds a listener that will be notified on App deleted.
|
||||
func (s *Server) AddAppDeleteListener(listener ifaces.AppDeleteListener) {
|
||||
s.AppDeleteListeners = append(s.AppDeleteListeners, listener)
|
||||
}
|
||||
|
||||
func (s *Server) FireBeforeAppCreate(ctx context.Context, app *models.App) error {
|
||||
for _, l := range s.AppCreateListeners {
|
||||
err := l.BeforeAppCreate(ctx, app)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Server) FireAfterAppCreate(ctx context.Context, app *models.App) error {
|
||||
for _, l := range s.AppCreateListeners {
|
||||
err := l.AfterAppCreate(ctx, app)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Server) FireBeforeAppUpdate(ctx context.Context, app *models.App) error {
|
||||
for _, l := range s.AppUpdateListeners {
|
||||
err := l.BeforeAppUpdate(ctx, app)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Server) FireAfterAppUpdate(ctx context.Context, app *models.App) error {
|
||||
for _, l := range s.AppUpdateListeners {
|
||||
err := l.AfterAppUpdate(ctx, app)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Server) FireBeforeAppDelete(ctx context.Context, appName string) error {
|
||||
for _, l := range s.AppDeleteListeners {
|
||||
err := l.BeforeAppDelete(ctx, appName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Server) FireAfterAppDelete(ctx context.Context, appName string) error {
|
||||
for _, l := range s.AppDeleteListeners {
|
||||
err := l.AfterAppDelete(ctx, appName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -25,12 +25,14 @@ import (
|
||||
var Api *Server
|
||||
|
||||
type Server struct {
|
||||
Runner *runner.Runner
|
||||
Router *gin.Engine
|
||||
MQ models.MessageQueue
|
||||
AppListeners []ifaces.AppListener
|
||||
SpecialHandlers []ifaces.SpecialHandler
|
||||
Enqueue models.Enqueue
|
||||
Runner *runner.Runner
|
||||
Router *gin.Engine
|
||||
MQ models.MessageQueue
|
||||
AppCreateListeners []ifaces.AppCreateListener
|
||||
AppUpdateListeners []ifaces.AppUpdateListener
|
||||
AppDeleteListeners []ifaces.AppDeleteListener
|
||||
SpecialHandlers []ifaces.SpecialHandler
|
||||
Enqueue models.Enqueue
|
||||
|
||||
tasks chan task.Request
|
||||
|
||||
@@ -94,31 +96,6 @@ func (s *Server) primeCache(ctx context.Context) {
|
||||
logrus.Info("cached prime")
|
||||
}
|
||||
|
||||
// AddAppListener adds a listener that will be notified on App changes.
|
||||
func (s *Server) AddAppListener(listener ifaces.AppListener) {
|
||||
s.AppListeners = append(s.AppListeners, listener)
|
||||
}
|
||||
|
||||
func (s *Server) FireBeforeAppUpdate(ctx context.Context, app *models.App) error {
|
||||
for _, l := range s.AppListeners {
|
||||
err := l.BeforeAppUpdate(ctx, app)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Server) FireAfterAppUpdate(ctx context.Context, app *models.App) error {
|
||||
for _, l := range s.AppListeners {
|
||||
err := l.AfterAppUpdate(ctx, app)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Server) AddSpecialHandler(handler ifaces.SpecialHandler) {
|
||||
s.SpecialHandlers = append(s.SpecialHandlers, handler)
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package server
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"context"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/iron-io/functions/api/models"
|
||||
)
|
||||
@@ -12,6 +13,11 @@ type SpecialHandlerContext struct {
|
||||
ginContext *gin.Context
|
||||
}
|
||||
|
||||
func (c *SpecialHandlerContext) Context() context.Context {
|
||||
ctx, _ := c.ginContext.Get("ctx")
|
||||
return ctx.(context.Context)
|
||||
}
|
||||
|
||||
func (c *SpecialHandlerContext) Request() *http.Request {
|
||||
return c.ginContext.Request
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user