@@ -24,6 +24,7 @@ type EventForwarder struct {
2424 currentFilePath string
2525 lastRotation time.Time
2626 fileMutex sync.Mutex
27+ wg sync.WaitGroup
2728}
2829
2930// FastFinderEvent represents an event to be forwarded
@@ -133,6 +134,7 @@ func InitializeEventForwarding(config *ForwardingConfig) error {
133134 httpClient : httpClient ,
134135 }
135136
137+ eventForwarder .wg .Add (1 )
136138 // Start the forwarding goroutine
137139 go eventForwarder .forwardingLoop ()
138140
@@ -190,6 +192,30 @@ func ForwardAlertEvent(ruleName, filePath string, fileSize int64, fileHash strin
190192 ForwardEvent ("alert" , "high" , fmt .Sprintf ("YARA rule match: %s in %s" , ruleName , filePath ), metadata )
191193}
192194
195+ // ForwardGrepMatchEvent forwards a Grep match event
196+ func ForwardGrepMatchEvent (pattern , filePath string , fileSize int64 , metadata map [string ]string ) {
197+ if metadata == nil {
198+ metadata = make (map [string ]string )
199+ }
200+ metadata ["grep_pattern" ] = pattern
201+ metadata ["file_path" ] = filePath
202+ metadata ["file_size" ] = fmt .Sprintf ("%d" , fileSize )
203+
204+ ForwardEvent ("alert" , "high" , fmt .Sprintf ("Grep match: %s in %s" , pattern , filePath ), metadata )
205+ }
206+
207+ // ForwardChecksumMatchEvent forwards a Checksum match event
208+ func ForwardChecksumMatchEvent (checksum , filePath string , fileSize int64 , metadata map [string ]string ) {
209+ if metadata == nil {
210+ metadata = make (map [string ]string )
211+ }
212+ metadata ["checksum" ] = checksum
213+ metadata ["file_path" ] = filePath
214+ metadata ["file_size" ] = fmt .Sprintf ("%d" , fileSize )
215+
216+ ForwardEvent ("alert" , "high" , fmt .Sprintf ("Checksum match: %s in %s" , checksum , filePath ), metadata )
217+ }
218+
193219// ForwardScanCompleteEvent forwards scan completion statistics
194220func ForwardScanCompleteEvent (filesScanned , matchesFound , errorsEncountered int , duration time.Duration ) {
195221 if eventForwarder == nil {
@@ -243,6 +269,7 @@ func (ef *EventForwarder) shouldForwardEvent(eventType, severity string) bool {
243269
244270// forwardingLoop runs the periodic event forwarding
245271func (ef * EventForwarder ) forwardingLoop () {
272+ defer ef .wg .Done ()
246273 ticker := time .NewTicker (time .Duration (ef .config .FlushTime ) * time .Second )
247274 defer ticker .Stop ()
248275
@@ -466,11 +493,14 @@ func (ef *EventForwarder) cleanOldFiles() {
466493// StopEventForwarding stops the event forwarding system
467494func StopEventForwarding () {
468495 if eventForwarder != nil {
496+ close (eventForwarder .stopChannel )
497+ eventForwarder .wg .Wait ()
498+
469499 // Close current file if open
470500 if eventForwarder .currentFile != nil {
471501 eventForwarder .currentFile .Close ()
502+ eventForwarder .currentFile = nil
472503 }
473- close (eventForwarder .stopChannel )
474504 eventForwarder = nil
475505 }
476506}
0 commit comments