flotte/internal/general-node/service_registry.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)
}
}