61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
package generalnode
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/alexohneander/flotte/pkg/models"
|
|
"github.com/alexohneander/flotte/pkg/types/request"
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func registerSerivce(req request.ServiceRegister) error {
|
|
db, err := gorm.Open(sqlite.Open("flotte.db"), &gorm.Config{})
|
|
if err != nil {
|
|
fmt.Println("failed to connect database")
|
|
return err
|
|
}
|
|
|
|
err = db.Create(&models.Service{Name: req.Name, NodeType: req.NodeType, Address: req.Address, Port: req.Port, Status: "running"}).Error
|
|
if err != nil {
|
|
fmt.Println("failed to create service")
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func checkHealth() {
|
|
db, err := gorm.Open(sqlite.Open("flotte.db"), &gorm.Config{})
|
|
if err != nil {
|
|
fmt.Println("failed to connect database")
|
|
}
|
|
|
|
for {
|
|
var services []models.Service
|
|
db.Find(&services, models.Service{})
|
|
for _, service := range services {
|
|
resp, err := http.Get("http://" + service.Address + ":" + service.Port + "/ping")
|
|
if err != nil {
|
|
fmt.Println("error: ", err)
|
|
fmt.Println("delete service ", service.Name)
|
|
db.Unscoped().Delete(&service, service.ID)
|
|
}
|
|
|
|
if resp != nil && resp.StatusCode != 200 {
|
|
fmt.Println("delete service ", service.Name)
|
|
db.Unscoped().Delete(&service, service.ID)
|
|
}
|
|
|
|
if resp != nil && resp.StatusCode == 200 {
|
|
fmt.Println("service ", service.Name, " is healthy")
|
|
}
|
|
}
|
|
|
|
time.Sleep(30 * time.Second)
|
|
}
|
|
|
|
}
|