Skip to content

Commit

Permalink
Merge branch 'main' into otel-bump-v0.102.1
Browse files Browse the repository at this point in the history
  • Loading branch information
okankoAMZ authored Jul 25, 2024
2 parents 276a564 + e7cd3a6 commit 0967c52
Show file tree
Hide file tree
Showing 13 changed files with 332 additions and 38 deletions.
18 changes: 9 additions & 9 deletions .github/workflows/application-signals-e2e-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,69 +19,69 @@ concurrency:

jobs:
java-eks-e2e-test:
uses: aws-observability/aws-application-signals-test-framework/.github/workflows/java-eks-e2e-test.yml@consolidate-release
uses: aws-observability/aws-application-signals-test-framework/.github/workflows/java-eks-e2e-test.yml@main
secrets: inherit
with:
aws-region: us-east-1
test-cluster-name: 'e2e-cw-agent-test'
caller-workflow-name: 'main-build'

java-ec2-default-e2e-test:
uses: aws-observability/aws-application-signals-test-framework/.github/workflows/java-ec2-default-e2e-test.yml@consolidate-release
uses: aws-observability/aws-application-signals-test-framework/.github/workflows/java-ec2-default-e2e-test.yml@main
secrets: inherit
with:
aws-region: us-east-1
caller-workflow-name: 'main-build'

java-ec2-asg-e2e-test:
uses: aws-observability/aws-application-signals-test-framework/.github/workflows/java-ec2-asg-e2e-test.yml@consolidate-release
uses: aws-observability/aws-application-signals-test-framework/.github/workflows/java-ec2-asg-e2e-test.yml@main
secrets: inherit
with:
aws-region: us-east-1
caller-workflow-name: 'main-build'

java-metric-limiter-e2e-test:
needs: [ java-eks-e2e-test ]
uses: aws-observability/aws-application-signals-test-framework/.github/workflows/java-eks-e2e-test.yml@consolidate-release
uses: aws-observability/aws-application-signals-test-framework/.github/workflows/java-metric-limiter-e2e-test.yml@main
secrets: inherit
with:
aws-region: us-east-1
test-cluster-name: 'e2e-cw-agent-test'
caller-workflow-name: 'main-build'

java-k8s-e2e-test:
uses: aws-observability/aws-application-signals-test-framework/.github/workflows/java-k8s-e2e-test.yml@consolidate-release
uses: aws-observability/aws-application-signals-test-framework/.github/workflows/java-k8s-e2e-test.yml@main
secrets: inherit
with:
aws-region: us-east-1
caller-workflow-name: 'main-build'

python-eks-e2e-test:
needs: [ java-metric-limiter-e2e-test ]
uses: aws-observability/aws-application-signals-test-framework/.github/workflows/python-eks-e2e-test.yml@consolidate-release
uses: aws-observability/aws-application-signals-test-framework/.github/workflows/python-eks-e2e-test.yml@main
secrets: inherit
with:
aws-region: us-east-1
test-cluster-name: 'e2e-cw-agent-test'
caller-workflow-name: 'main-build'

python-ec2-default-e2e-test:
uses: aws-observability/aws-application-signals-test-framework/.github/workflows/python-ec2-default-e2e-test.yml@consolidate-release
uses: aws-observability/aws-application-signals-test-framework/.github/workflows/python-ec2-default-e2e-test.yml@main
secrets: inherit
with:
aws-region: us-east-1
caller-workflow-name: 'main-build'

python-ec2-asg-e2e-test:
uses: aws-observability/aws-application-signals-test-framework/.github/workflows/python-ec2-asg-e2e-test.yml@consolidate-release
uses: aws-observability/aws-application-signals-test-framework/.github/workflows/python-ec2-asg-e2e-test.yml@main
secrets: inherit
with:
aws-region: us-east-1
caller-workflow-name: 'main-build'

python-k8s-e2e-test:
needs: [ java-k8s-e2e-test ]
uses: aws-observability/aws-application-signals-test-framework/.github/workflows/python-k8s-e2e-test.yml@consolidate-release
uses: aws-observability/aws-application-signals-test-framework/.github/workflows/python-k8s-e2e-test.yml@main
secrets: inherit
with:
aws-region: us-east-1
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ ifeq ($(shell uname -s),Darwin)
endif
endif

amazon-cloudwatch-agent-windows:
amazon-cloudwatch-agent-windows: copy-version-file
@echo Building CloudWatchAgent for Windows with AMD64
$(WIN_BUILD)/config-downloader.exe github.com/aws/amazon-cloudwatch-agent/cmd/config-downloader
$(WIN_BUILD)/config-translator.exe github.com/aws/amazon-cloudwatch-agent/cmd/config-translator
Expand Down
6 changes: 6 additions & 0 deletions RELEASE_NOTES
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
========================================================================
Amazon CloudWatch Agent 1.300042.1 (2024-07-16)
========================================================================
Bug Fixes:
* [Container Insights/Prometheus] Fix Prometheus file-path start-up issue in Containers

========================================================================
Amazon CloudWatch Agent 1.300042.0 (2024-07-10)
========================================================================
Expand Down
102 changes: 102 additions & 0 deletions plugins/inputs/windows_event_log/service_monitor.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT

//go:build windows
// +build windows

package windows_event_log

import (
"errors"
"log"
"time"

"golang.org/x/sys/windows/svc"
"golang.org/x/sys/windows/svc/mgr"
)

const (
serviceCheckInterval = 10 * time.Second

serviceName = "eventlog"
)

var (
errServiceNotRunning = errors.New("service is not running")
)

type statusChecker interface {
Query() (svc.Status, error)
}

type serviceMonitor struct {
listeners []chan struct{}
done chan struct{}
}

func newServiceMonitor() *serviceMonitor {
return &serviceMonitor{
listeners: []chan struct{}{},
}
}

func (m *serviceMonitor) start() {
manager, err := mgr.Connect()
if err != nil {
log.Printf("E! [windows_event_log] Unable to connect to Windows service manager: %v", err)
return
}

service, err := manager.OpenService(serviceName)
if err != nil {
log.Printf("E! [windows_event_log] Unable to observe Windows event log service: %v", err)
return
}

ticker := time.NewTicker(serviceCheckInterval)
defer ticker.Stop()

// get initial service PID
oldPID, _ := getPID(service)
for {
select {
case <-ticker.C:
newPID, err := getPID(service)
if err == nil && oldPID != newPID {
log.Printf("D! [windows_event_log] Detected Windows event log service restart")
oldPID = newPID
m.notify()
}
case <-m.done:
return
}
}
}

func (m *serviceMonitor) stop() {
close(m.done)
}

func (m *serviceMonitor) addListener(listener chan struct{}) {
m.listeners = append(m.listeners, listener)
}

func (m *serviceMonitor) notify() {
for _, l := range m.listeners {
select {
case l <- struct{}{}:
default:
}
}
}

func getPID(service statusChecker) (uint32, error) {
status, err := service.Query()
if err != nil {
return 0, err
}
if status.State == svc.Running {
return status.ProcessId, nil
}
return 0, errServiceNotRunning
}
62 changes: 62 additions & 0 deletions plugins/inputs/windows_event_log/service_monitor_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT

//go:build windows
// +build windows

package windows_event_log

import (
"errors"
"testing"

"github.com/stretchr/testify/assert"
"golang.org/x/sys/windows/svc"
)

type mockStatusCheck struct {
status svc.Status
err error
}

func (m *mockStatusCheck) Query() (svc.Status, error) {
return m.status, m.err
}

func TestGetPID(t *testing.T) {
testErr := errors.New("test error")
testCases := map[string]struct {
status svc.Status
err error
wantPID uint32
wantErr error
}{
"WithQueryError": {
err: testErr,
wantPID: 0,
wantErr: testErr,
},
"WithStoppedService": {
status: svc.Status{
State: svc.Stopped,
ProcessId: 0,
},
wantPID: 0,
wantErr: errServiceNotRunning,
},
"WithRunningService": {
status: svc.Status{
State: svc.Running,
ProcessId: 123,
},
wantPID: 123,
},
}
for name, testCase := range testCases {
t.Run(name, func(t *testing.T) {
gotPID, gotErr := getPID(&mockStatusCheck{status: testCase.status, err: testCase.err})
assert.Equal(t, testCase.wantPID, gotPID)
assert.Equal(t, testCase.wantErr, gotErr)
})
}
}
4 changes: 4 additions & 0 deletions plugins/inputs/windows_event_log/windows_event_log.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@ func (s *Plugin) Start(acc telegraf.Accumulator) error {
if alreadyRan {
return nil
}

monitor := newServiceMonitor()
for _, eventConfig := range s.Events {
// Assume no 2 EventConfigs have the same combination of:
// LogGroupName, LogStreamName, Name.
Expand Down Expand Up @@ -115,8 +117,10 @@ func (s *Plugin) Start(acc telegraf.Accumulator) error {
if err != nil {
return err
}
monitor.addListener(eventLog.ResubscribeCh())
s.newEvents = append(s.newEvents, eventLog)
}
go monitor.start()
return nil
}

Expand Down
Loading

0 comments on commit 0967c52

Please sign in to comment.