mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-03-19 05:37:51 +08:00
### What problem does this PR solve? 1. Resolve standard user can access admin service 2. Get RAGFlow service status 3. Fix minio status fetching ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue) - [x] New Feature (non-breaking change which adds functionality) --------- Signed-off-by: Jin Hai <haijin.chn@gmail.com>
77 lines
1.9 KiB
Go
77 lines
1.9 KiB
Go
package admin
|
|
|
|
import (
|
|
"ragflow/internal/common"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
// ServerStatusStore is a thread-safe global server status storage
|
|
type ServerStatusStore struct {
|
|
mu sync.RWMutex
|
|
servers map[string]*common.BaseMessage // key: server_id
|
|
}
|
|
|
|
// GlobalServerStatusStore is the global instance
|
|
var GlobalServerStatusStore = &ServerStatusStore{
|
|
servers: make(map[string]*common.BaseMessage),
|
|
}
|
|
|
|
// UpdateStatus updates or adds a server status
|
|
func (s *ServerStatusStore) UpdateStatus(serverName string, status *common.BaseMessage) {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
s.servers[serverName] = status
|
|
}
|
|
|
|
// GetStatus gets a single server status
|
|
func (s *ServerStatusStore) GetStatus(serverName string) (*common.BaseMessage, bool) {
|
|
s.mu.RLock()
|
|
defer s.mu.RUnlock()
|
|
status, ok := s.servers[serverName]
|
|
return status, ok
|
|
}
|
|
|
|
// GetAllStatuses gets all server statuses
|
|
func (s *ServerStatusStore) GetAllStatuses() []*common.BaseMessage {
|
|
s.mu.RLock()
|
|
defer s.mu.RUnlock()
|
|
result := make([]*common.BaseMessage, 0, len(s.servers))
|
|
for _, status := range s.servers {
|
|
result = append(result, status)
|
|
}
|
|
return result
|
|
}
|
|
|
|
// GetStatusesByType gets server statuses by type
|
|
func (s *ServerStatusStore) GetStatusesByType(serverType common.ServerType) []*common.BaseMessage {
|
|
s.mu.RLock()
|
|
defer s.mu.RUnlock()
|
|
result := make([]*common.BaseMessage, 0)
|
|
for _, status := range s.servers {
|
|
if status.ServerType == serverType {
|
|
result = append(result, status)
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
// RemoveStatus removes a server status
|
|
func (s *ServerStatusStore) RemoveStatus(serverID string) {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
delete(s.servers, serverID)
|
|
}
|
|
|
|
// CleanupStaleStatuses cleans up servers that haven't reported for a specified duration
|
|
func (s *ServerStatusStore) CleanupStaleStatuses(maxAge time.Duration) {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
now := time.Now()
|
|
for id, status := range s.servers {
|
|
if now.Sub(status.Timestamp) > maxAge {
|
|
delete(s.servers, id)
|
|
}
|
|
}
|
|
}
|