Files
2018-03-15 09:22:43 +11:00

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()
}
}