55 lines
1.4 KiB
Go
55 lines
1.4 KiB
Go
package ports
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/logcorrelator/logcorrelator/internal/domain"
|
|
)
|
|
|
|
// EventSource defines the interface for log sources.
|
|
type EventSource interface {
|
|
// Start begins reading events and sending them to the channel.
|
|
// Returns an error if the source cannot be started.
|
|
Start(ctx context.Context, eventChan chan<- *domain.NormalizedEvent) error
|
|
|
|
// Stop gracefully stops the source.
|
|
Stop() error
|
|
|
|
// Name returns the source name.
|
|
Name() string
|
|
}
|
|
|
|
// CorrelatedLogSink defines the interface for correlated log destinations.
|
|
type CorrelatedLogSink interface {
|
|
// Write sends a correlated log to the sink.
|
|
Write(ctx context.Context, log domain.CorrelatedLog) error
|
|
|
|
// Flush flushes any buffered logs.
|
|
Flush(ctx context.Context) error
|
|
|
|
// Close closes the sink.
|
|
Close() error
|
|
|
|
// Name returns the sink name.
|
|
Name() string
|
|
}
|
|
|
|
// TimeProvider abstracts time for testability.
|
|
type TimeProvider interface {
|
|
Now() time.Time
|
|
}
|
|
|
|
// CorrelationProcessor defines the interface for the correlation service.
|
|
// This allows for easier testing and alternative implementations.
|
|
type CorrelationProcessor interface {
|
|
// ProcessEvent processes an incoming event and returns correlated logs.
|
|
ProcessEvent(event *domain.NormalizedEvent) []domain.CorrelatedLog
|
|
|
|
// Flush forces emission of remaining buffered events.
|
|
Flush() []domain.CorrelatedLog
|
|
|
|
// GetBufferSizes returns the current buffer sizes for monitoring.
|
|
GetBufferSizes() (int, int)
|
|
}
|