mirror of
https://github.com/wahyd4/next-dashboard.git
synced 2026-08-09 04:26:06 +10:00
62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
package workers
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/jinzhu/gorm"
|
|
_ "github.com/jinzhu/gorm/dialects/postgres"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/wahyd4/next-dashboard/models"
|
|
)
|
|
|
|
type DBWorker struct {
|
|
DB *gorm.DB
|
|
}
|
|
|
|
func (worker *DBWorker) SetupDBWorker() {
|
|
dbConfig := models.GlobalConfig.DB
|
|
|
|
db := setupConnection(dbConfig)
|
|
DoRequest:
|
|
for _, check := range dbConfig.Checks {
|
|
sendQuery(db, dbConfig, check)
|
|
}
|
|
time.Sleep(time.Second * time.Duration(models.GlobalConfig.Frequency))
|
|
goto DoRequest
|
|
}
|
|
|
|
func setupConnection(dbConfig *models.DBConfig) *gorm.DB {
|
|
db, err := gorm.Open(dbConfig.Type, dbConfig.URL)
|
|
if err != nil {
|
|
logrus.Fatalf("Can't connect to target monitoring DB: %v", err)
|
|
}
|
|
return db
|
|
}
|
|
|
|
func sendQuery(db *gorm.DB, dbConfig *models.DBConfig, check *models.DBCheck) {
|
|
logrus.Info("Log db summary")
|
|
var count int64
|
|
|
|
if check.Field != "" {
|
|
db.Table(check.Table).Where(fmt.Sprintf("%s = ?", check.Field), check.Value).Count(&count)
|
|
|
|
db.Create(&models.DBSummary{
|
|
Database: dbConfig.Database,
|
|
Table: check.Table,
|
|
Field: check.Field,
|
|
Value: check.Value,
|
|
Name: check.Name,
|
|
Count: count,
|
|
})
|
|
} else {
|
|
db.Table(check.Table).Count(&count)
|
|
db.Create(&models.DBSummary{
|
|
Database: dbConfig.Database,
|
|
Table: check.Table,
|
|
Name: check.Name,
|
|
Count: count,
|
|
})
|
|
}
|
|
}
|