42 lines
977 B
Go
42 lines
977 B
Go
// FILE: src/internal/source/source.go
|
|
package source
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
)
|
|
|
|
// LogEntry represents a single log record
|
|
type LogEntry struct {
|
|
Time time.Time `json:"time"`
|
|
Source string `json:"source"`
|
|
Level string `json:"level,omitempty"`
|
|
Message string `json:"message"`
|
|
Fields json.RawMessage `json:"fields,omitempty"`
|
|
RawSize int64 `json:"-"`
|
|
}
|
|
|
|
// Source represents an input data stream
|
|
type Source interface {
|
|
// Subscribe returns a channel that receives log entries
|
|
Subscribe() <-chan LogEntry
|
|
|
|
// Start begins reading from the source
|
|
Start() error
|
|
|
|
// Stop gracefully shuts down the source
|
|
Stop()
|
|
|
|
// GetStats returns source statistics
|
|
GetStats() SourceStats
|
|
}
|
|
|
|
// SourceStats contains statistics about a source
|
|
type SourceStats struct {
|
|
Type string
|
|
TotalEntries uint64
|
|
DroppedEntries uint64
|
|
StartTime time.Time
|
|
LastEntryTime time.Time
|
|
Details map[string]any
|
|
} |