mirror of
https://github.com/wahyd4/next-dashboard.git
synced 2026-08-11 13:36:03 +10:00
90 lines
2.4 KiB
Go
90 lines
2.4 KiB
Go
package main
|
|
|
|
import (
|
|
"io/ioutil"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
"gopkg.in/yaml.v2"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/jinzhu/gorm"
|
|
_ "github.com/jinzhu/gorm/dialects/postgres"
|
|
"github.com/wahyd4/next-dashboard/controllers"
|
|
"github.com/wahyd4/next-dashboard/models"
|
|
"github.com/wahyd4/next-dashboard/workers"
|
|
)
|
|
|
|
var (
|
|
httpWorker *workers.HTTPWorker
|
|
dbWorker *workers.DBWorker
|
|
webhookController *controllers.WebHookController
|
|
dashboardController *controllers.DashboardController
|
|
)
|
|
|
|
func init() {
|
|
logrus.Info("Loading configurations")
|
|
content, err := ioutil.ReadFile("config.yaml")
|
|
if err != nil {
|
|
logrus.Fatalf("Can't read config file: %v", err)
|
|
}
|
|
|
|
err = yaml.Unmarshal(content, &models.GlobalConfig)
|
|
if err != nil {
|
|
logrus.Fatalf("Can't unmashal yaml config: %v", err)
|
|
}
|
|
|
|
}
|
|
|
|
func main() {
|
|
db, err := gorm.Open("postgres", "host=localhost port=5432 user=postgres dbname=next_dashboard password=postgres sslmode=disable")
|
|
if err != nil {
|
|
logrus.Fatalf("Can't connect to DB: %v", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
// Migrate the schema
|
|
db.AutoMigrate(&models.HTTPHealth{})
|
|
db.AutoMigrate(&models.DBSummary{})
|
|
db.AutoMigrate(&models.WebHookData{})
|
|
|
|
//setup http worker
|
|
httpWorker = &workers.HTTPWorker{DB: db}
|
|
go httpWorker.SetupHttpEndpointsWorker()
|
|
|
|
//setup db worker
|
|
dbWorker = &workers.DBWorker{DB: db}
|
|
go dbWorker.SetupDBWorker()
|
|
|
|
webhookController = &controllers.WebHookController{DB: db}
|
|
dashboardController = &controllers.DashboardController{DB: db}
|
|
server := gin.Default()
|
|
server.Use(setupCORS())
|
|
server.POST("/webhooks/:name", webhookController.PostData)
|
|
server.GET("/dashboard/db/:name", dashboardController.Database)
|
|
server.GET("/dashboard/http/:name", dashboardController.HTTPEndpoint)
|
|
server.GET("/dashboard/event/:name", dashboardController.Event)
|
|
server.GET("/dashboard", dashboardController.Show)
|
|
server.Run()
|
|
|
|
}
|
|
|
|
func setupCORS() gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
r := c.Request
|
|
w := c.Writer
|
|
|
|
if origin := r.Header.Get("Origin"); origin != "" {
|
|
w.Header().Set("Access-Control-Allow-Origin", origin)
|
|
w.Header().Set("Access-Control-Allow-Methods", "POST, GET")
|
|
w.Header().Set("Access-Control-Expose-Headers", "Link")
|
|
w.Header().Set("Access-Control-Allow-Headers",
|
|
"Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
|
|
}
|
|
if r.Method == "OPTIONS" {
|
|
c.Status(200)
|
|
return
|
|
}
|
|
c.Next()
|
|
}
|
|
}
|