Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
3ae2bd3
Fixing bug to successfully kill AppHealth Gracefully & VMWatch. (#59)
klugorosado Mar 19, 2024
7a9c4ff
Bump to v2.0.9
frank-pang-msft Mar 19, 2024
8dae5e7
Switch to use systemd-run to launch vmwatch
dpoole73 Apr 22, 2024
fc430b0
correct typo
dpoole73 Apr 22, 2024
c864997
make sure bash files are lf line endings
dpoole73 Apr 22, 2024
e4c00e9
feedback
dpoole73 Apr 23, 2024
0c9a693
feedback
dpoole73 Apr 24, 2024
b30ee91
feedback
dpoole73 Apr 24, 2024
fea2ebd
fix test issue. There seems to be a non-deterministic case where the…
dpoole73 Apr 24, 2024
3e94eb6
revert
dpoole73 Apr 24, 2024
23cb651
correcting the search term
dpoole73 Apr 24, 2024
043d2a2
Merge pull request #64 from Azure/dev/dpoole/cgroup-using-systemd-run
dpoole73 Apr 26, 2024
152b39c
Updating vmwatch binaries to 1.1.0 package
dpoole73 Apr 30, 2024
6596189
bump version to 2.0.10
zmyzheng Apr 30, 2024
b552134
Merge pull request #65 from Azure/dev/dpoole/update-vmwatch-4-30
dpoole73 Apr 30, 2024
e8e69f4
Merge pull request #66 from Azure/release-2.0.10
zmyzheng Apr 30, 2024
b56f2ad
Adding Kusto Telemetry to ApplicationHealthLinux v2 (#63)
klugorosado May 2, 2024
30a2d4c
update the latest vmwatch binaries (1.1.1)
dpoole73 May 2, 2024
bd1dbc0
Merge pull request #67 from Azure/dev/dpoole/update-vmwatch-5-2
dpoole73 May 3, 2024
6279931
Removing Unnecessary Telemetry Events and Log CustomMetrics Changes o…
klugorosado May 3, 2024
f9ff9c5
Change the commandline used for systemd-run depeding on the installed…
dpoole73 May 6, 2024
5b29a32
feedback
dpoole73 May 6, 2024
6d2ff1e
Merge pull request #69 from Azure/dpoole/systemd-run-commandline-fix
dpoole73 May 6, 2024
c7b28f0
fix(cgroups): Fixing the check for systemd-run
dpoole73 May 14, 2024
c84eb7b
fix error check
dpoole73 May 14, 2024
89379ba
fix accidental edit
dpoole73 May 14, 2024
486672b
preserving the original logic
dpoole73 May 14, 2024
c079e29
revert accidental new variable creation
dpoole73 May 14, 2024
03446f8
feedback
dpoole73 May 15, 2024
baa630d
corrected test to match the new way the error shows up based on previ…
dpoole73 May 15, 2024
4b71f92
Adding CodeQL Code Scanning Workflow (#71)
klugorosado May 16, 2024
b484db3
Changes to support running devcontainer based tests on Mac Silicon (#72)
dpoole73 May 16, 2024
3051598
fix(cgroups): Fixing the check for systemd-run (#70)
dpoole73 May 16, 2024
e698028
Adding CodeQL Code Scanning Workflow (#71) (#73)
klugorosado May 16, 2024
af6cd72
fix: Update manifest.xml version to 2.0.11
klugorosado May 16, 2024
62444c8
bump version to 2.0.11 (#74)
zmyzheng May 17, 2024
aefdba0
Improve logging to kusto for better debugging (#77)
frank-pang-msft May 21, 2024
f723cfd
AppHealthLinux manifest version bump to 2.0.12
zmyzheng May 23, 2024
46fbe02
update VMWatch binary
zmyzheng May 23, 2024
b2b0c04
AppHealthLinux manifest version bump to 2.0.12 (#81)
zmyzheng May 23, 2024
ab885dc
Bump to v2.0.12: VMWatch Integration (#60)
frank-pang-msft Jun 11, 2024
93f8e0f
Bump google.golang.org/protobuf from 1.27.1 to 1.33.0
dependabot[bot] Jun 11, 2024
f9cd527
fix(shim): Fix timing issue in shim script
dpoole73 Jun 13, 2024
784f7cc
fix(shim): Fix timing issue in shim script (#85)
dpoole73 Jun 13, 2024
78910a6
chore(script): Update the script tp upload the test binaries to use t…
dpoole73 Jun 13, 2024
d2d9562
chore(script): Update the script to upload the test binaries to use t…
dpoole73 Jun 17, 2024
212543d
chore(logging): Logging the error code if kill fails
dpoole73 Jun 20, 2024
7b47889
chore(logging): Logging the error code if kill fails (#87)
dpoole73 Jun 20, 2024
cf66d11
Implementing New Sequence Number Management and Fixing how we get the…
klugorosado Jun 28, 2024
3ec3e5b
Refactoring Telemetry Package and replacing go-kit Logger for Slog Lo…
klugorosado Jul 2, 2024
403f33e
Merge branch 'feature/v2/WindowsMigration' into feature/v2/sync
klugorosado Jul 31, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ _testmain.go
*.exe
*.test
*.prof
mrseq

# Dont ignore VMWATCH Binary
!vmwatch_windows_*.exe
30 changes: 9 additions & 21 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,37 +17,29 @@
"preLaunchTask": "make devcontainer"
},
{
"name": "devcontainer run - enable",
"name": "devcontainer run - uninstall",
"type": "go",
"request": "launch",
"mode": "exec",
"program": "/var/lib/waagent/Extension/bin/applicationhealth-extension",
"cwd": "${workspaceFolder}",
"args" : [
"enable"
"uninstall"
],
"preLaunchTask": "make devcontainer"
},
{
"name": "devcontainer run - uninstall",
"name": "devcontainer run - enable",
"type": "go",
"request": "launch",
"mode": "exec",
"program": "/var/lib/waagent/Extension/bin/applicationhealth-extension",
"cwd": "${workspaceFolder}",
"args" : [
"uninstall"
"enable"
],
"preLaunchTask": "make devcontainer"
},
{
"name": "Run integration tests",
"type": "node-terminal",
"request": "launch",
"command": "./integration-test/run.sh",
"cwd": "${workspaceFolder}",
"preLaunchTask": "make binary - linux"
},
{
"name": "devcontainer run - enable NOBUILD",
"type": "go",
Expand All @@ -60,16 +52,12 @@
]
},
{
"name": "devcontainer run - uninstall",
"type": "go",
"name": "Run integration tests",
"type": "node-terminal",
"request": "launch",
"mode": "exec",
"program": "/var/lib/waagent/Extension/bin/applicationhealth-extension",
"command": "./integration-test/run.sh",
"cwd": "${workspaceFolder}",
"args" : [
"uninstall"
],
"preLaunchTask": "make devcontainer"
}
"preLaunchTask": "make binary - linux"
},
]
}
15 changes: 10 additions & 5 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,35 +1,40 @@
module github.com/Azure/applicationhealth-extension-linux

go 1.22
go 1.22

require (
github.com/Azure/azure-docker-extension v0.0.0-20160802215703-0dd2f199467d
github.com/Azure/azure-extension-platform v0.0.0-20240327184133-73b5b3b55955
github.com/Azure/azure-extension-platform v0.0.0-20240521173920-6b2acfda81e9
github.com/containerd/cgroups/v3 v3.0.2
github.com/opencontainers/runtime-spec v1.0.2
github.com/pkg/errors v0.9.1
github.com/samber/slog-formatter v1.0.0
github.com/stretchr/testify v1.8.0
github.com/xeipuuv/gojsonschema v0.0.0-20160623135812-c539bca196be
golang.org/x/sys v0.20.0
)

require github.com/go-kit/log v0.2.0
require (
github.com/go-kit/log v0.2.0
go.uber.org/mock v0.4.0
)

require (
github.com/cilium/ebpf v0.9.1 // indirect
github.com/coreos/go-systemd/v22 v22.3.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/docker/go-units v0.4.0 // indirect
github.com/go-logfmt/logfmt v0.5.1 // indirect
github.com/go-logfmt/logfmt v0.5.1 // indirect
github.com/godbus/dbus/v5 v5.0.4 // indirect
github.com/google/go-cmp v0.5.8 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/samber/lo v1.38.1 // indirect
github.com/samber/slog-multi v1.0.0 // indirect
github.com/sirupsen/logrus v1.9.0 // indirect
github.com/xeipuuv/gojsonpointer v0.0.0-20151027082146-e0fe6f683076 // indirect
github.com/xeipuuv/gojsonreference v0.0.0-20150808065054-e02fc20de94c // indirect
golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 // indirect
google.golang.org/protobuf v1.27.1 // indirect
golang.org/x/sys v0.2.0 // indirect
google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
11 changes: 9 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@ github.com/go-kit/log v0.2.0 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw=
github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og=
github.com/go-kit/log v0.2.0 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw=
github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
Expand All @@ -33,6 +38,8 @@ github.com/opencontainers/runtime-spec v1.0.2 h1:UfAcuLBJB9Coz72x1hgl8O5RVzTdNia
github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
Expand All @@ -59,8 +66,8 @@ github.com/xeipuuv/gojsonschema v0.0.0-20160623135812-c539bca196be h1:sRGd3e18iz
github.com/xeipuuv/gojsonschema v0.0.0-20160623135812-c539bca196be/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA=
go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc=
golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w=
go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU=
go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
Expand Down
2 changes: 1 addition & 1 deletion integration-test/env/Extension/bin/upload-zip.sh
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,4 @@ cd /tmp/linux_artifact/caps/ApplicationHealthLinuxTest/v2/ServiceGroupRoot/unzip

# upload it to the storage account
echo "Uploading linux.zip to container: $container"
az storage blob upload --account-name vmwatchtest --subscription $subscription --container-name $container --name linux.zip --file /tmp/vmwatch.zip --overwrite
az storage blob upload --account-name vmwatchtestpackages --subscription $subscription --container-name $container --name linux.zip --file /tmp/vmwatch.zip --overwrite --auth-mode login
1 change: 1 addition & 0 deletions integration-test/test/parallel/2_handler-commands.bats
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/usr/bin/env bats

setup(){
load "../test_helper"
load "../test_helper"
build_docker_image
container_name="handler-command_$BATS_TEST_NUMBER"
Expand Down
3 changes: 3 additions & 0 deletions integration-test/test/parallel/7_vmwatch.bats
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#!/usr/bin/env bats

setup(){
load "../test_helper"
_load_bats_libs
load "../test_helper"
_load_bats_libs
build_docker_image
Expand All @@ -12,6 +14,7 @@ setup(){
teardown(){
rm -rf "$certs_dir"
cleanup
cleanup
}

@test "handler command: enable - vm watch disabled - vmwatch settings omitted" {
Expand Down
14 changes: 11 additions & 3 deletions integration-test/test/test_helper.bash
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,20 @@ build_docker_image_nocache() {
docker build --no-cache -q -f $DOCKERFILE -t $IMAGE . 1>&2
}

# This function builds a Docker image for testing purposes, if it already doesn't exist.
# This function builds a Docker image for testing purposes, if it already doesn't exist.
build_docker_image_nocache() {
# Check if the image already exists
echo "Building test image $IMAGE..."
docker build --no-cache -q -f $DOCKERFILE -t $IMAGE . 1>&2
}

# This function builds a Docker image for testing purposes, if it already doesn't exist.
build_docker_image() {
# Check if the image already exists
if [ -z "$(docker images -q $IMAGE)" ]; then
echo "Building test image $IMAGE..."
docker build -q -f $DOCKERFILE -t $IMAGE . 1>&2
echo "Building test image $IMAGE..."
docker build -q -f $DOCKERFILE -t $IMAGE . 1>&2
else
echo "Test image $IMAGE already exists. Skipping build."
fi
Expand Down Expand Up @@ -205,7 +213,7 @@ verify_state_change_timestamps() {
[[ "$diff" -ge "${expectedTimeDifferences[$index-1]}" ]]
fi
index=$index+1
prevDate=$currentDate
prevDate=$currentDate
done
done <<< "$1"
}
Expand Down
99 changes: 99 additions & 0 deletions internal/seqno/mock_seqno.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

65 changes: 65 additions & 0 deletions internal/seqno/seqno.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package seqno

import (
"log/slog"

"github.com/Azure/applicationhealth-extension-linux/pkg/logging"
"github.com/Azure/azure-extension-platform/pkg/extensionerrors"
"github.com/Azure/azure-extension-platform/pkg/seqno"
)

type SequenceNumberManager interface {
// GetCurrentSequenceNumber returns the current sequence number the extension is using
GetCurrentSequenceNumber(el *slog.Logger, name, version string) (uint, error)

// GetSequenceNumber retrieves the sequence number from the MRSEQ file
GetSequenceNumber(name, version string) (uint, error)

// SetSequenceNumber sets the sequence number to the MRSEQ file.
SetSequenceNumber(name, version string, seqNo uint) error

// FindSeqNum returns the requested the sequence number from either the environment variable or
// the most recently used file under the config folder.
// Note that this is different than just choosing the highest number, which may be incorrect
FindSeqNum(configFolder string) (uint, error)
}

type SeqNumManager struct {
}

func (s *SeqNumManager) GetSequenceNumber(name string, version string) (uint, error) {
retriever := &seqno.ProdSequenceNumberRetriever{}
return retriever.GetSequenceNumber(name, version)
}

// SetSequenceNumber sets the sequence number for the given extension name and version.
// It takes the extension name, extension version, and sequence number as parameters.
// The sequence number is an integer that represents the order in which the extension was installed.
// It returns an error if there was a problem setting the sequence number.
func (s *SeqNumManager) SetSequenceNumber(name, version string, seqNo uint) error {
return seqno.SetSequenceNumber(name, version, seqNo)
}

// FindSeqNum returns the requested the sequence number from either the environment variable or
// the most recently used file under the config folder.
// Note that this is different than just choosing the highest number, which may be incorrect
func (s *SeqNumManager) FindSeqNum(configFolder string) (uint, error) {
return seqno.FindSeqNum(logging.NewNopLogger(), configFolder)
}

// GetCurrentSequenceNumber returns the current sequence number the extension is using
func (s *SeqNumManager) GetCurrentSequenceNumber(el *slog.Logger, name, version string) (sn uint, _ error) {
sequenceNumber, err := s.GetSequenceNumber(name, version)
if err == extensionerrors.ErrNotFound || err == extensionerrors.ErrNoMrseqFile {
// If we can't find the sequence number, then it's possible that the extension
// hasn't been installed yet. Go back to 0.
el.Info("Couldn't find current sequence number, likely first execution of the extension, returning sequence number 0")
return 0, nil
}

return sequenceNumber, err
}

func New() SequenceNumberManager {
return &SeqNumManager{}
}
Loading