mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-04-28 19:41:17 +00:00
208 lines
6.2 KiB
Go
208 lines
6.2 KiB
Go
package ai
|
|
|
|
import (
|
|
"context"
|
|
"github.com/rcourtman/pulse-go-rewrite/internal/agentexec"
|
|
"github.com/rcourtman/pulse-go-rewrite/internal/ai/providers"
|
|
"github.com/rcourtman/pulse-go-rewrite/internal/resources"
|
|
)
|
|
|
|
// mockProvider implements providers.Provider for testing
|
|
type mockProvider struct {
|
|
chatFunc func(ctx context.Context, req providers.ChatRequest) (*providers.ChatResponse, error)
|
|
testConnectionFunc func(ctx context.Context) error
|
|
nameFunc func() string
|
|
listModelsFunc func(ctx context.Context) ([]providers.ModelInfo, error)
|
|
}
|
|
|
|
func (m *mockProvider) Chat(ctx context.Context, req providers.ChatRequest) (*providers.ChatResponse, error) {
|
|
if m.chatFunc != nil {
|
|
return m.chatFunc(ctx, req)
|
|
}
|
|
return &providers.ChatResponse{Content: "Default mock response"}, nil
|
|
}
|
|
|
|
func (m *mockProvider) TestConnection(ctx context.Context) error {
|
|
if m.testConnectionFunc != nil {
|
|
return m.testConnectionFunc(ctx)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (m *mockProvider) Name() string {
|
|
if m.nameFunc != nil {
|
|
return m.nameFunc()
|
|
}
|
|
return "mock"
|
|
}
|
|
|
|
func (m *mockProvider) ListModels(ctx context.Context) ([]providers.ModelInfo, error) {
|
|
if m.listModelsFunc != nil {
|
|
return m.listModelsFunc(ctx)
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
// mockThresholdProvider implements patrol.ThresholdProvider for testing
|
|
type mockThresholdProvider struct {
|
|
nodeCPU float64
|
|
nodeMemory float64
|
|
guestMem float64
|
|
guestDisk float64
|
|
storage float64
|
|
}
|
|
|
|
func (m *mockThresholdProvider) GetNodeCPUThreshold() float64 { return m.nodeCPU }
|
|
func (m *mockThresholdProvider) GetNodeMemoryThreshold() float64 { return m.nodeMemory }
|
|
func (m *mockThresholdProvider) GetGuestCPUThreshold() float64 { return 0 }
|
|
func (m *mockThresholdProvider) GetGuestMemoryThreshold() float64 { return m.guestMem }
|
|
func (m *mockThresholdProvider) GetGuestDiskThreshold() float64 { return m.guestDisk }
|
|
func (m *mockThresholdProvider) GetStorageThreshold() float64 { return m.storage }
|
|
|
|
type mockResourceProvider struct {
|
|
ResourceProvider
|
|
getAllFunc func() []resources.Resource
|
|
getStatsFunc func() resources.StoreStats
|
|
getSummaryFunc func() resources.ResourceSummary
|
|
getInfrastructureFunc func() []resources.Resource
|
|
getWorkloadsFunc func() []resources.Resource
|
|
getByTypeFunc func(t resources.ResourceType) []resources.Resource
|
|
getTopCPUFunc func(limit int, types []resources.ResourceType) []resources.Resource
|
|
getTopMemoryFunc func(limit int, types []resources.ResourceType) []resources.Resource
|
|
getTopDiskFunc func(limit int, types []resources.ResourceType) []resources.Resource
|
|
getRelatedFunc func(resourceID string) map[string][]resources.Resource
|
|
findContainerHostFunc func(containerNameOrID string) string
|
|
}
|
|
|
|
func (m *mockResourceProvider) GetAll() []resources.Resource {
|
|
if m.getAllFunc != nil {
|
|
return m.getAllFunc()
|
|
}
|
|
return nil
|
|
}
|
|
func (m *mockResourceProvider) GetStats() resources.StoreStats {
|
|
if m.getStatsFunc != nil {
|
|
return m.getStatsFunc()
|
|
}
|
|
return resources.StoreStats{}
|
|
}
|
|
func (m *mockResourceProvider) GetResourceSummary() resources.ResourceSummary {
|
|
if m.getSummaryFunc != nil {
|
|
return m.getSummaryFunc()
|
|
}
|
|
return resources.ResourceSummary{}
|
|
}
|
|
func (m *mockResourceProvider) GetInfrastructure() []resources.Resource {
|
|
if m.getInfrastructureFunc != nil {
|
|
return m.getInfrastructureFunc()
|
|
}
|
|
return nil
|
|
}
|
|
func (m *mockResourceProvider) GetWorkloads() []resources.Resource {
|
|
if m.getWorkloadsFunc != nil {
|
|
return m.getWorkloadsFunc()
|
|
}
|
|
return nil
|
|
}
|
|
func (m *mockResourceProvider) GetType(t resources.ResourceType) []resources.Resource { return nil }
|
|
func (m *mockResourceProvider) GetByType(t resources.ResourceType) []resources.Resource {
|
|
if m.getByTypeFunc != nil {
|
|
return m.getByTypeFunc(t)
|
|
}
|
|
return nil
|
|
}
|
|
func (m *mockResourceProvider) GetTopByCPU(limit int, types []resources.ResourceType) []resources.Resource {
|
|
if m.getTopCPUFunc != nil {
|
|
return m.getTopCPUFunc(limit, types)
|
|
}
|
|
return nil
|
|
}
|
|
func (m *mockResourceProvider) GetTopByMemory(limit int, types []resources.ResourceType) []resources.Resource {
|
|
if m.getTopMemoryFunc != nil {
|
|
return m.getTopMemoryFunc(limit, types)
|
|
}
|
|
return nil
|
|
}
|
|
func (m *mockResourceProvider) GetTopByDisk(limit int, types []resources.ResourceType) []resources.Resource {
|
|
if m.getTopDiskFunc != nil {
|
|
return m.getTopDiskFunc(limit, types)
|
|
}
|
|
return nil
|
|
}
|
|
func (m *mockResourceProvider) GetRelated(resourceID string) map[string][]resources.Resource {
|
|
if m.getRelatedFunc != nil {
|
|
return m.getRelatedFunc(resourceID)
|
|
}
|
|
return nil
|
|
}
|
|
func (m *mockResourceProvider) FindContainerHost(containerNameOrID string) string {
|
|
if m.findContainerHostFunc != nil {
|
|
return m.findContainerHostFunc(containerNameOrID)
|
|
}
|
|
return ""
|
|
}
|
|
|
|
type mockAgentServer struct {
|
|
agents []agentexec.ConnectedAgent
|
|
executeFunc func(ctx context.Context, agentID string, cmd agentexec.ExecuteCommandPayload) (*agentexec.CommandResultPayload, error)
|
|
}
|
|
|
|
func (m *mockAgentServer) GetConnectedAgents() []agentexec.ConnectedAgent {
|
|
return m.agents
|
|
}
|
|
|
|
func (m *mockAgentServer) ExecuteCommand(ctx context.Context, agentID string, cmd agentexec.ExecuteCommandPayload) (*agentexec.CommandResultPayload, error) {
|
|
if m.executeFunc != nil {
|
|
return m.executeFunc(ctx, agentID, cmd)
|
|
}
|
|
return &agentexec.CommandResultPayload{Success: true, Stdout: "Mock output"}, nil
|
|
}
|
|
|
|
type mockPolicy struct {
|
|
decision agentexec.PolicyDecision
|
|
}
|
|
|
|
func (m *mockPolicy) Evaluate(command string) agentexec.PolicyDecision {
|
|
return m.decision
|
|
}
|
|
|
|
type mockMetadataProvider struct {
|
|
lastGuestID string
|
|
lastGuestURL string
|
|
lastDockerID string
|
|
lastDockerURL string
|
|
lastHostID string
|
|
lastHostURL string
|
|
}
|
|
|
|
func (m *mockMetadataProvider) SetGuestURL(id, url string) error {
|
|
m.lastGuestID = id
|
|
m.lastGuestURL = url
|
|
return nil
|
|
}
|
|
|
|
func (m *mockMetadataProvider) SetDockerURL(id, url string) error {
|
|
m.lastDockerID = id
|
|
m.lastDockerURL = url
|
|
return nil
|
|
}
|
|
|
|
func (m *mockMetadataProvider) SetHostURL(id, url string) error {
|
|
m.lastHostID = id
|
|
m.lastHostURL = url
|
|
return nil
|
|
}
|
|
|
|
type mockLicenseStore struct {
|
|
features map[string]bool
|
|
state string
|
|
valid bool
|
|
}
|
|
|
|
func (m *mockLicenseStore) HasFeature(feature string) bool {
|
|
return m.features[feature]
|
|
}
|
|
|
|
func (m *mockLicenseStore) GetLicenseStateString() (string, bool) {
|
|
return m.state, m.valid
|
|
}
|