diff --git a/webapp/backend/pkg/notify/notify.go b/webapp/backend/pkg/notify/notify.go index 0530474..a8f7d98 100644 --- a/webapp/backend/pkg/notify/notify.go +++ b/webapp/backend/pkg/notify/notify.go @@ -31,7 +31,7 @@ type Notify struct { Payload Payload } -func (n *Notify) Send(level string, payload interface{}) error { +func (n *Notify) Send() error { //validate that the Payload is populated sendDate := time.Now() n.Payload.Date = sendDate.Format(time.RFC3339) diff --git a/webapp/backend/pkg/web/handler/send_test_notification.go b/webapp/backend/pkg/web/handler/send_test_notification.go new file mode 100644 index 0000000..5afee0e --- /dev/null +++ b/webapp/backend/pkg/web/handler/send_test_notification.go @@ -0,0 +1,39 @@ +package handler + +import ( + "fmt" + "github.com/analogj/scrutiny/webapp/backend/pkg/config" + dbModels "github.com/analogj/scrutiny/webapp/backend/pkg/models/db" + "github.com/analogj/scrutiny/webapp/backend/pkg/notify" + "github.com/gin-gonic/gin" + "net/http" + "os" +) + +// Send test notification +func SendTestNotification(c *gin.Context) { + appConfig := c.MustGet("CONFIG").(config.Interface) + + testNotify := notify.Notify{ + Config: appConfig, + Payload: notify.Payload{ + Mailer: os.Args[0], + Subject: fmt.Sprintf("Scrutiny SMART error (EmailTest) detected on disk: XXXXX"), + FailureType: "EmailTest", + Device: "/dev/sda", + DeviceType: "ata", + DeviceString: "/dev/sda", + Message: "TEST EMAIL from smartd for device: /dev/sda", + }, + } + err := testNotify.Send() + if err != nil { + c.JSON(http.StatusOK, gin.H{ + "success": false, + }) + } else { + c.JSON(http.StatusOK, dbModels.DeviceWrapper{ + Success: true, + }) + } +} diff --git a/webapp/backend/pkg/web/middleware/config.go b/webapp/backend/pkg/web/middleware/config.go new file mode 100644 index 0000000..026f5aa --- /dev/null +++ b/webapp/backend/pkg/web/middleware/config.go @@ -0,0 +1,13 @@ +package middleware + +import ( + "github.com/analogj/scrutiny/webapp/backend/pkg/config" + "github.com/gin-gonic/gin" +) + +func ConfigMiddleware(appConfig config.Interface) gin.HandlerFunc { + return func(c *gin.Context) { + c.Set("CONFIG", appConfig) + c.Next() + } +} diff --git a/webapp/backend/pkg/database/sqlite3.go b/webapp/backend/pkg/web/middleware/sqlite3.go similarity index 90% rename from webapp/backend/pkg/database/sqlite3.go rename to webapp/backend/pkg/web/middleware/sqlite3.go index 3f4fc45..72792c7 100644 --- a/webapp/backend/pkg/database/sqlite3.go +++ b/webapp/backend/pkg/web/middleware/sqlite3.go @@ -1,4 +1,4 @@ -package database +package middleware import ( "fmt" @@ -8,7 +8,7 @@ import ( _ "github.com/jinzhu/gorm/dialects/sqlite" ) -func DatabaseHandler(dbPath string) gin.HandlerFunc { +func DatabaseMiddleware(dbPath string) gin.HandlerFunc { //var database *gorm.DB fmt.Printf("Trying to connect to database stored: %s", dbPath) database, err := gorm.Open("sqlite3", dbPath) diff --git a/webapp/backend/pkg/web/server.go b/webapp/backend/pkg/web/server.go index 156e598..532b9c5 100644 --- a/webapp/backend/pkg/web/server.go +++ b/webapp/backend/pkg/web/server.go @@ -3,8 +3,8 @@ package web import ( "fmt" "github.com/analogj/scrutiny/webapp/backend/pkg/config" - "github.com/analogj/scrutiny/webapp/backend/pkg/database" "github.com/analogj/scrutiny/webapp/backend/pkg/web/handler" + "github.com/analogj/scrutiny/webapp/backend/pkg/web/middleware" "github.com/gin-gonic/gin" "net/http" ) @@ -16,7 +16,8 @@ type AppEngine struct { func (ae *AppEngine) Setup() *gin.Engine { r := gin.Default() - r.Use(database.DatabaseHandler(ae.Config.GetString("web.database.location"))) + r.Use(middleware.DatabaseMiddleware(ae.Config.GetString("web.database.location"))) + r.Use(middleware.ConfigMiddleware(ae.Config)) api := r.Group("/api") {