This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
package network
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/itworx/pulse/internal/host"
|
||||
"github.com/itworx/pulse/internal/service"
|
||||
)
|
||||
|
||||
type Aggregator struct {
|
||||
Host host.Provider
|
||||
Services service.Provider
|
||||
Limits Limits
|
||||
Now func() time.Time
|
||||
}
|
||||
|
||||
func (a Aggregator) Snapshot(ctx context.Context) (Snapshot, error) {
|
||||
if ctx == nil {
|
||||
return Snapshot{}, errors.New("network context is nil")
|
||||
}
|
||||
if err := ctx.Err(); err != nil {
|
||||
return Snapshot{}, err
|
||||
}
|
||||
now := time.Now().UTC()
|
||||
if a.Now != nil {
|
||||
now = a.Now().UTC()
|
||||
}
|
||||
hostSnapshot := host.UnknownSnapshot(now, "host", "agent", "source_unavailable")
|
||||
if a.Host != nil {
|
||||
next, err := a.Host.Snapshot(ctx)
|
||||
if err != nil {
|
||||
if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) {
|
||||
return Snapshot{}, err
|
||||
}
|
||||
hostSnapshot = host.UnknownSnapshot(now, "host", "agent", "source_unavailable")
|
||||
} else {
|
||||
hostSnapshot = next
|
||||
}
|
||||
}
|
||||
serviceSnapshot := service.UnknownSnapshot(now, "source_unavailable")
|
||||
if a.Services != nil {
|
||||
next, err := a.Services.Snapshot(ctx)
|
||||
if err != nil {
|
||||
if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) {
|
||||
return Snapshot{}, err
|
||||
}
|
||||
serviceSnapshot = service.UnknownSnapshot(now, "source_unavailable")
|
||||
} else {
|
||||
serviceSnapshot = next
|
||||
}
|
||||
}
|
||||
return BuildSnapshot(now, hostSnapshot, serviceSnapshot, nil, nil, a.Limits)
|
||||
}
|
||||
Reference in New Issue
Block a user