Skip to content

Commit 9513e2c

Browse files
committed
Add server management features to tray UI
- Implemented methods for enabling/disabling servers and managing quarantine status. - Added dynamic server and quarantine menus to reflect current server states. - Enhanced server status display with connection indicators and tool counts. - Updated server action handling for improved user interaction in the tray UI.
1 parent b6f242e commit 9513e2c

3 files changed

Lines changed: 582 additions & 145 deletions

File tree

internal/server/server.go

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,100 @@ func (s *Server) UnquarantineServer(serverName string) error {
463463
return s.storageManager.QuarantineUpstreamServer(serverName, false)
464464
}
465465

466+
// EnableServer enables/disables a server via tray UI
467+
func (s *Server) EnableServer(serverName string, enabled bool) error {
468+
err := s.storageManager.EnableUpstreamServer(serverName, enabled)
469+
if err != nil {
470+
return err
471+
}
472+
473+
// Update upstream manager
474+
if enabled {
475+
// Get server config and add to upstream manager
476+
serverConfig, err := s.storageManager.GetUpstreamServer(serverName)
477+
if err != nil {
478+
return fmt.Errorf("failed to get server config: %w", err)
479+
}
480+
481+
if err := s.upstreamManager.AddServer(serverName, serverConfig); err != nil {
482+
s.logger.Warn("Failed to connect to upstream server after enabling",
483+
zap.String("server", serverName),
484+
zap.Error(err))
485+
}
486+
} else {
487+
// Remove from upstream manager
488+
s.upstreamManager.RemoveServer(serverName)
489+
}
490+
491+
// Trigger configuration save
492+
s.OnUpstreamServerChange()
493+
494+
return nil
495+
}
496+
497+
// QuarantineServer sets quarantine status via tray UI
498+
func (s *Server) QuarantineServer(serverName string, quarantined bool) error {
499+
err := s.storageManager.QuarantineUpstreamServer(serverName, quarantined)
500+
if err != nil {
501+
return err
502+
}
503+
504+
// Trigger configuration save
505+
s.OnUpstreamServerChange()
506+
507+
return nil
508+
}
509+
510+
// GetAllServers returns information about all servers for tray UI
511+
func (s *Server) GetAllServers() ([]map[string]interface{}, error) {
512+
servers, err := s.storageManager.ListUpstreamServers()
513+
if err != nil {
514+
return nil, err
515+
}
516+
517+
var result []map[string]interface{}
518+
for _, server := range servers {
519+
// Get connection status and tool count
520+
toolCount := 0
521+
connected := false
522+
connecting := false
523+
lastError := ""
524+
525+
if client, exists := s.upstreamManager.GetClient(server.Name); exists {
526+
connectionStatus := client.GetConnectionStatus()
527+
if c, ok := connectionStatus["connected"].(bool); ok {
528+
connected = c
529+
}
530+
if c, ok := connectionStatus["connecting"].(bool); ok {
531+
connecting = c
532+
}
533+
if e, ok := connectionStatus["last_error"].(string); ok {
534+
lastError = e
535+
}
536+
537+
if connected {
538+
toolCount = s.getServerToolCount(server.Name)
539+
}
540+
}
541+
542+
result = append(result, map[string]interface{}{
543+
"name": server.Name,
544+
"url": server.URL,
545+
"command": server.Command,
546+
"protocol": server.Protocol,
547+
"enabled": server.Enabled,
548+
"quarantined": server.Quarantined,
549+
"connected": connected,
550+
"connecting": connecting,
551+
"tool_count": toolCount,
552+
"last_error": lastError,
553+
"created": server.Created,
554+
})
555+
}
556+
557+
return result, nil
558+
}
559+
466560
// getServerToolCount returns the number of tools for a specific server
467561
func (s *Server) getServerToolCount(serverID string) int {
468562
client, exists := s.upstreamManager.GetClient(serverID)

0 commit comments

Comments
 (0)