64 lines
1.5 KiB
Go
64 lines
1.5 KiB
Go
package server
|
||
|
||
import (
|
||
"context"
|
||
"strings"
|
||
"time"
|
||
|
||
"git.mchus.pro/mchus/logpile/internal/collector"
|
||
"git.mchus.pro/mchus/logpile/internal/models"
|
||
)
|
||
|
||
type mockConnector struct {
|
||
protocol string
|
||
}
|
||
|
||
func (c *mockConnector) Protocol() string {
|
||
return c.protocol
|
||
}
|
||
|
||
func (c *mockConnector) Collect(ctx context.Context, req collector.Request, emit collector.ProgressFn) (*models.AnalysisResult, error) {
|
||
steps := []collector.Progress{
|
||
{Status: CollectStatusRunning, Progress: 20, Message: "Подключение..."},
|
||
{Status: CollectStatusRunning, Progress: 50, Message: "Сбор инвентаря..."},
|
||
{Status: CollectStatusRunning, Progress: 80, Message: "Нормализация..."},
|
||
}
|
||
for _, step := range steps {
|
||
if !collectorSleep(ctx, 100*time.Millisecond) {
|
||
return nil, ctx.Err()
|
||
}
|
||
if emit != nil {
|
||
emit(step)
|
||
}
|
||
}
|
||
|
||
if strings.Contains(strings.ToLower(req.Host), "fail") {
|
||
return nil, context.DeadlineExceeded
|
||
}
|
||
|
||
return &models.AnalysisResult{
|
||
Events: make([]models.Event, 0),
|
||
FRU: make([]models.FRUInfo, 0),
|
||
Sensors: make([]models.SensorReading, 0),
|
||
Hardware: &models.HardwareConfig{},
|
||
}, nil
|
||
}
|
||
|
||
func testCollectorRegistry() *collector.Registry {
|
||
r := collector.NewRegistry()
|
||
r.Register(&mockConnector{protocol: "redfish"})
|
||
r.Register(&mockConnector{protocol: "ipmi"})
|
||
return r
|
||
}
|
||
|
||
func collectorSleep(ctx context.Context, d time.Duration) bool {
|
||
timer := time.NewTimer(d)
|
||
defer timer.Stop()
|
||
select {
|
||
case <-ctx.Done():
|
||
return false
|
||
case <-timer.C:
|
||
return true
|
||
}
|
||
}
|