commit inicial do projeto

This commit is contained in:
Júnior
2025-05-23 10:44:32 -03:00
commit 8f04473c0b
106 changed files with 5673 additions and 0 deletions

View File

@ -0,0 +1,57 @@
package monitor
import (
"log"
"net/http"
"os"
"strings"
"sync"
"time"
)
var (
peers = make(map[string]bool)
peersLock sync.RWMutex
heartbeatFreq = 3 * time.Second
)
func StartHeartbeatMonitor() {
peerList := strings.Split(os.Getenv("DEJO_PEERS"), ",")
for _, p := range peerList {
peers[p] = false // Inicialmente offline
}
go func() {
ticker := time.NewTicker(heartbeatFreq)
for range ticker.C {
checkPeers(peerList)
}
}()
}
func checkPeers(peerList []string) {
for _, peer := range peerList {
go func(p string) {
resp, err := http.Get(p + "/ping")
peersLock.Lock()
defer peersLock.Unlock()
if err != nil || resp.StatusCode != http.StatusOK {
if peers[p] {
log.Printf("⚠️ Peer %s está OFFLINE", p)
}
peers[p] = false
} else {
if !peers[p] {
log.Printf("✅ Peer %s voltou ONLINE", p)
}
peers[p] = true
}
} (peer)
}
}
func IsPeerOnline(peer string) bool {
peersLock.RLock()
defer peersLock.RUnlock()
return peers[peer]
}

View File

@ -0,0 +1,43 @@
package monitor
import (
"sync"
"time"
)
type Monitor struct {
peers map[string]bool
mutex sync.RWMutex
heartbeatFn func(peer string) bool
}
func NewMonitor(heartbeatFn func(peer string) bool) *Monitor {
return &Monitor{
peers: make(map[string]bool),
heartbeatFn: heartbeatFn,
}
}
func (m *Monitor) Start(peers []string) {
for _, peer := range peers {
go func(p string) {
for {
m.updateStatus(p)
time.Sleep(5 * time.Second)
}
}(peer)
}
}
func (m *Monitor) updateStatus(peer string) {
alive := m.heartbeatFn(peer)
m.mutex.Lock()
defer m.mutex.Unlock()
m.peers[peer] = alive
}
func (m *Monitor) IsPeerOnline(peer string) bool {
m.mutex.RLock()
defer m.mutex.RUnlock()
return m.peers[peer]
}