@@ -22,24 +22,12 @@ import (
2222 "errors"
2323 "fmt"
2424 "github.com/rabbitstack/fibratus/pkg/alertsender"
25- "github.com/rabbitstack/fibratus/pkg/kevent/ktypes"
2625 evlog "github.com/rabbitstack/fibratus/pkg/util/eventlog"
2726 "golang.org/x/sys/windows"
2827 "hash/crc32"
2928 "strings"
3029)
3130
32- const (
33- // source represents the event source that generates the alerts
34- source = "Fibratus"
35- // levels designates the supported eventlog levels
36- levels = uint32 (evlog .Info | evlog .Warn | evlog .Erro )
37- // msgFile specifies the location of the eventlog message DLL
38- msgFile = "%ProgramFiles%\\ Fibratus\\ fibratus.dll"
39- // keyName represents the registry key under which the eventlog source is registered
40- keyName = `SYSTEM\CurrentControlSet\Services\EventLog`
41- )
42-
4331const minIDChars = 12
4432
4533type eventlog struct {
@@ -56,14 +44,14 @@ func makeSender(config alertsender.Config) (alertsender.Sender, error) {
5644 if ! ok {
5745 return nil , alertsender .ErrInvalidConfig (alertsender .Eventlog )
5846 }
59- sourceName , err := windows .UTF16PtrFromString (source )
47+ sourceName , err := windows .UTF16PtrFromString (evlog . Source )
6048 if err != nil {
6149 return nil , fmt .Errorf ("could not convert source name: %v" , err )
6250 }
6351
64- err = evlog .Install (source , msgFile , keyName , false , levels , uint32 ( len ( ktypes . Categories ())) )
52+ err = evlog .Install (evlog . Levels )
6553 if err != nil {
66- if ! errors .Is (err , evlog.ErrKeyExists {} ) {
54+ if ! errors .Is (err , evlog .ErrKeyExists ) {
6755 return nil , err
6856 }
6957 }
@@ -77,24 +65,11 @@ func makeSender(config alertsender.Config) (alertsender.Sender, error) {
7765
7866// Send logs the alert to the eventlog.
7967func (s * eventlog ) Send (alert alertsender.Alert ) error {
80- var etype uint16
81- switch alert .Severity {
82- case alertsender .Normal :
83- etype = windows .EVENTLOG_INFORMATION_TYPE
84- case alertsender .Medium :
85- etype = windows .EVENTLOG_WARNING_TYPE
86- case alertsender .High , alertsender .Critical :
87- etype = windows .EVENTLOG_ERROR_TYPE
88- default :
89- etype = windows .EVENTLOG_INFORMATION_TYPE
90- }
91-
92- var eventID uint32
93-
68+ var code uint16
9469 // despite the event id is 4-byte long
9570 // we can only use 2 bytes to store the
96- // event identifier . Calculate the hash
97- // of the event id from alert identifier
71+ // event code . Calculate the hash
72+ // of the event code from alert identifier
9873 // but keeping in mind collisions are
9974 // possible since we're mapping a larger
10075 // space to a smaller one
@@ -105,8 +80,7 @@ func (s *eventlog) Send(alert alertsender.Alert) error {
10580 id := strings .Replace (alert .ID , "-" , "" , - 1 )
10681 h := crc32 .ChecksumIEEE ([]byte (id [:minIDChars ]))
10782 // take the lower 16 bits of the CRC32 hash
108- eid := uint16 (h & 0xFFFF )
109- eventID = uint32 (eid )
83+ code = uint16 (h & 0xFFFF )
11084 }
11185
11286 msg := alert .String (s .config .Verbose )
@@ -119,7 +93,10 @@ func (s *eventlog) Send(alert alertsender.Alert) error {
11993 return fmt .Errorf ("could not convert eventlog message to UTF16: %v: %s" , err , msg )
12094 }
12195
122- return windows .ReportEvent (s .log , etype , 0 , eventID , uintptr (0 ), 1 , 0 , & m , nil )
96+ return windows .ReportEvent (s .log , windows .EVENTLOG_INFORMATION_TYPE , 0 ,
97+ evlog .EventID (windows .EVENTLOG_INFORMATION_TYPE , code ),
98+ uintptr (0 ),
99+ 1 , 0 , & m , nil )
123100}
124101
125102// Shutdown deregisters the event source.
0 commit comments