Bug #1 - processSourceA: utilise bEventHasValidTTL en mode one_to_many au lieu de eventsMatch qui comparait les timestamps originaux. Apres ~10s les requetes A devenaient toutes orphelines alors que la session KA etait active. Bug #4 - checkPendingOrphansForCorrelation: meme correction, cle identique = meme connexion en one_to_many, pas besoin de comparer les timestamps. Bug #3 - cleanNetworkBufferByTTL: expiration B => emission immediate des pending orphans associes (ils ne peuvent plus jamais corréler). Bug #2 - Orchestrateur: goroutine ticker 250ms appelle EmitPendingOrphans() pour drainer les orphans independamment du flux d'evenements entrants. EmitPendingOrphans() expose la methode comme publique thread-safe. Tests: 4 nouveaux tests de non-regression (un par bug). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
58 lines
1.7 KiB
Go
58 lines
1.7 KiB
Go
package ports
|
|
|
|
import (
|
|
"context"
|
|
|
|
"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
|
|
|
|
// Reopen closes and reopens the sink (for log rotation on SIGHUP).
|
|
// Optional: only FileSink implements this.
|
|
Reopen() error
|
|
}
|
|
|
|
// 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
|
|
|
|
// EmitPendingOrphans emits orphan A events whose delay has expired.
|
|
// Called periodically by the Orchestrator ticker so orphans are not blocked
|
|
// waiting for the next incoming event.
|
|
EmitPendingOrphans() []domain.CorrelatedLog
|
|
|
|
// GetBufferSizes returns the current buffer sizes for monitoring.
|
|
GetBufferSizes() (int, int)
|
|
}
|