Skip to content

Commit

Permalink
Move power event watcher to its own package
Browse files Browse the repository at this point in the history
  • Loading branch information
RebeccaMahany committed Jul 10, 2023
1 parent db755b0 commit 9eba669
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 8 deletions.
9 changes: 5 additions & 4 deletions cmd/launcher/svc_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"github.com/kolide/launcher/pkg/log/eventlog"
"github.com/kolide/launcher/pkg/log/locallogger"
"github.com/kolide/launcher/pkg/log/teelogger"
"github.com/kolide/launcher/pkg/windows/eventwatcher"

"golang.org/x/sys/windows/svc"
"golang.org/x/sys/windows/svc/debug"
Expand Down Expand Up @@ -148,8 +149,8 @@ func (w *winSvc) Execute(args []string, r <-chan svc.ChangeRequest, changes chan
level.Debug(w.logger).Log("msg", "windows service starting")
changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted}

p := newPowerEventWatcher(log.With(w.logger, "component", "power_event_watcher"))
p.subscribeToPowerEvents()
p := eventwatcher.New(log.With(w.logger, "component", "power_event_watcher"))
p.SubscribeToPowerEvents()

ctx, cancel := context.WithCancel(context.Background())
defer cancel()
Expand All @@ -161,7 +162,7 @@ func (w *winSvc) Execute(args []string, r <-chan svc.ChangeRequest, changes chan
if err != nil {
level.Info(w.logger).Log("msg", "runLauncher exited", "err", err)
level.Debug(w.logger).Log("msg", "runLauncher exited", "err", err, "stack", fmt.Sprintf("%+v", err))
p.shutdown()
p.Shutdown()
changes <- svc.Status{State: svc.Stopped, Accepts: cmdsAccepted}
os.Exit(1)
}
Expand All @@ -171,7 +172,7 @@ func (w *winSvc) Execute(args []string, r <-chan svc.ChangeRequest, changes chan
// functionality. Instead, signal that as a stop to the service
// manager, and exit. We rely on the service manager to restart.
level.Info(w.logger).Log("msg", "runLauncher exited cleanly")
p.shutdown()
p.Shutdown()
changes <- svc.Status{State: svc.Stopped, Accepts: cmdsAccepted}
os.Exit(0)
}()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//go:build windows
// +build windows

package main
package eventwatcher

import (
"encoding/xml"
Expand Down Expand Up @@ -41,7 +41,7 @@ const (
operationSuccessfulMsg = "The operation completed successfully."
)

func newPowerEventWatcher(logger log.Logger) *powerEventWatcher {
func New(logger log.Logger) *powerEventWatcher {
evtApi := syscall.NewLazyDLL("wevtapi.dll")

return &powerEventWatcher{
Expand All @@ -53,7 +53,7 @@ func newPowerEventWatcher(logger log.Logger) *powerEventWatcher {
}

// subscribeToPowerEvents sets up a subscription to relevant power events with a callback to `onPowerEvent`.
func (p *powerEventWatcher) subscribeToPowerEvents() {
func (p *powerEventWatcher) SubscribeToPowerEvents() {
// WINEVENT_CHANNEL_GLOBAL_SYSTEM is "System"
channelPath, err := syscall.UTF16PtrFromString("System")
if err != nil {
Expand Down Expand Up @@ -92,7 +92,7 @@ func (p *powerEventWatcher) subscribeToPowerEvents() {
p.subscriptionHandle = subscriptionHandle
}

func (p *powerEventWatcher) shutdown() {
func (p *powerEventWatcher) Shutdown() {
// EvtClose: https://learn.microsoft.com/en-us/windows/win32/api/winevt/nf-winevt-evtclose
ret, _, err := p.unsubscribeProcedure.Call(p.subscriptionHandle)
level.Debug(p.logger).Log("msg", "unsubscribed from power events", "ret", fmt.Sprintf("%+v", ret), "last_err", err)
Expand Down

0 comments on commit 9eba669

Please sign in to comment.