From 663b79a98662b0a00baecc9e993c8f01c5ee9869 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 09:27:30 +0200 Subject: [PATCH 01/17] Bump github.com/docker/docker in /tools in the go_modules group (#3146) Bumps the go_modules group in /tools with 1 update: [github.com/docker/docker](https://github.com/docker/docker). Updates `github.com/docker/docker` from 27.1.0+incompatible to 27.1.1+incompatible - [Release notes](https://github.com/docker/docker/releases) - [Commits](https://github.com/docker/docker/compare/v27.1.0...v27.1.1) --- updated-dependencies: - dependency-name: github.com/docker/docker dependency-type: indirect dependency-group: go_modules ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tools/go.mod | 2 +- tools/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/go.mod b/tools/go.mod index ced0cc8631..9129c3d9dc 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -68,7 +68,7 @@ require ( github.com/distribution/reference v0.6.0 // indirect github.com/docker/cli v26.1.4+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker v27.1.0+incompatible // indirect + github.com/docker/docker v27.1.1+incompatible // indirect github.com/docker/docker-credential-helpers v0.8.2 // indirect github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-units v0.5.0 // indirect diff --git a/tools/go.sum b/tools/go.sum index 178a3f9bb4..152c2cc8ce 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -171,8 +171,8 @@ github.com/docker/cli v26.1.4+incompatible h1:I8PHdc0MtxEADqYJZvhBrW9bo8gawKwwen github.com/docker/cli v26.1.4+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v27.1.0+incompatible h1:rEHVQc4GZ0MIQKifQPHSFGV/dVgaZafgRf8fCPtDYBs= -github.com/docker/docker v27.1.0+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v27.1.1+incompatible h1:hO/M4MtV36kzKldqnA37IWhebRA+LnqqcqDja6kVaKY= +github.com/docker/docker v27.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= From a75bf90d4a458ed0ca915b337fb99d3eb96a4682 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 07:39:29 +0000 Subject: [PATCH 02/17] Bump github.com/envoyproxy/protoc-gen-validate from 1.0.4 to 1.1.0 (#3145) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [github.com/envoyproxy/protoc-gen-validate](https://github.com/envoyproxy/protoc-gen-validate) from 1.0.4 to 1.1.0. - [Release notes](https://github.com/envoyproxy/protoc-gen-validate/releases) - [Changelog](https://github.com/bufbuild/protoc-gen-validate/blob/main/.goreleaser.yaml) - [Commits](https://github.com/envoyproxy/protoc-gen-validate/compare/v1.0.4...v1.1.0) --- updated-dependencies: - dependency-name: github.com/envoyproxy/protoc-gen-validate dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jiří Čtvrtka <62988319+JiriCtvrtka@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 8859589f17..3e72751dfb 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,7 @@ require ( github.com/davecgh/go-spew v1.1.1 github.com/docker/docker v25.0.3+incompatible github.com/docker/go-connections v0.5.0 - github.com/envoyproxy/protoc-gen-validate v1.0.4 + github.com/envoyproxy/protoc-gen-validate v1.1.0 github.com/go-co-op/gocron v1.37.0 github.com/go-openapi/errors v0.22.0 github.com/go-openapi/runtime v0.28.0 diff --git a/go.sum b/go.sum index 9735fa6fe1..861706e8d4 100644 --- a/go.sum +++ b/go.sum @@ -206,8 +206,8 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= -github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= +github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= +github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= From f78a793e8b44eb2b69f90c70a1acb9a8d433aaf4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Aug 2024 14:02:52 +0300 Subject: [PATCH 03/17] Bump golang.org/x/sys from 0.23.0 to 0.24.0 (#3147) Bumps [golang.org/x/sys](https://github.com/golang/sys) from 0.23.0 to 0.24.0. - [Commits](https://github.com/golang/sys/compare/v0.23.0...v0.24.0) --- updated-dependencies: - dependency-name: golang.org/x/sys dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 3e72751dfb..fcf00c0948 100644 --- a/go.mod +++ b/go.mod @@ -79,7 +79,7 @@ require ( go.starlark.net v0.0.0-20230717150657-8a3343210976 golang.org/x/crypto v0.26.0 golang.org/x/sync v0.8.0 - golang.org/x/sys v0.23.0 + golang.org/x/sys v0.24.0 golang.org/x/text v0.17.0 golang.org/x/tools v0.24.0 google.golang.org/genproto/googleapis/api v0.0.0-20240723171418-e6d459c13d2a diff --git a/go.sum b/go.sum index 861706e8d4..a10a28b660 100644 --- a/go.sum +++ b/go.sum @@ -1009,8 +1009,8 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= -golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= +golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= From c65a43c3c8895e97c942c0ff891b2ddb1a63e06c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Aug 2024 08:22:49 +0000 Subject: [PATCH 04/17] Bump @typescript-eslint/eslint-plugin from 8.0.1 to 8.1.0 in /cli-tests (#3148) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.0.1 to 8.1.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.1.0/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jiří Čtvrtka <62988319+JiriCtvrtka@users.noreply.github.com> --- cli-tests/package-lock.json | 120 ++++++++++++++++++------------------ cli-tests/package.json | 2 +- 2 files changed, 61 insertions(+), 61 deletions(-) diff --git a/cli-tests/package-lock.json b/cli-tests/package-lock.json index c5c4e0df95..60f9920b97 100644 --- a/cli-tests/package-lock.json +++ b/cli-tests/package-lock.json @@ -20,7 +20,7 @@ "devDependencies": { "@types/promise-retry": "^1.1.3", "@types/shelljs": "^0.8.12", - "@typescript-eslint/eslint-plugin": "^8.0.1", + "@typescript-eslint/eslint-plugin": "^8.1.0", "@typescript-eslint/parser": "^7.18.0", "eslint": "8.57", "eslint-config-airbnb-base": "^15.0.0", @@ -251,16 +251,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.1.tgz", - "integrity": "sha512-5g3Y7GDFsJAnY4Yhvk8sZtFfV6YNF2caLzjrRPUBzewjPCaj0yokePB4LJSobyCzGMzjZZYFbwuzbfDHlimXbQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.1.0.tgz", + "integrity": "sha512-LlNBaHFCEBPHyD4pZXb35mzjGkuGKXU5eeCA1SxvHfiRES0E82dOounfVpL4DCqYvJEKab0bZIA0gCRpdLKkCw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.0.1", - "@typescript-eslint/type-utils": "8.0.1", - "@typescript-eslint/utils": "8.0.1", - "@typescript-eslint/visitor-keys": "8.0.1", + "@typescript-eslint/scope-manager": "8.1.0", + "@typescript-eslint/type-utils": "8.1.0", + "@typescript-eslint/utils": "8.1.0", + "@typescript-eslint/visitor-keys": "8.1.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -284,13 +284,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.0.1.tgz", - "integrity": "sha512-NpixInP5dm7uukMiRyiHjRKkom5RIFA4dfiHvalanD2cF0CLUuQqxfg8PtEUo9yqJI2bBhF+pcSafqnG3UBnRQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.1.0.tgz", + "integrity": "sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.0.1", - "@typescript-eslint/visitor-keys": "8.0.1" + "@typescript-eslint/types": "8.1.0", + "@typescript-eslint/visitor-keys": "8.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -301,9 +301,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.1.tgz", - "integrity": "sha512-PpqTVT3yCA/bIgJ12czBuE3iBlM3g4inRSC5J0QOdQFAn07TYrYEQBBKgXH1lQpglup+Zy6c1fxuwTk4MTNKIw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz", + "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -314,12 +314,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.1.tgz", - "integrity": "sha512-W5E+o0UfUcK5EgchLZsyVWqARmsM7v54/qEq6PY3YI5arkgmCzHiuk0zKSJJbm71V0xdRna4BGomkCTXz2/LkQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.1.0.tgz", + "integrity": "sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.0.1", + "@typescript-eslint/types": "8.1.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -376,13 +376,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.0.1.tgz", - "integrity": "sha512-+/UT25MWvXeDX9YaHv1IS6KI1fiuTto43WprE7pgSMswHbn1Jm9GEM4Txp+X74ifOWV8emu2AWcbLhpJAvD5Ng==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.1.0.tgz", + "integrity": "sha512-oLYvTxljVvsMnldfl6jIKxTaU7ok7km0KDrwOt1RHYu6nxlhN3TIx8k5Q52L6wR33nOwDgM7VwW1fT1qMNfFIA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "8.0.1", - "@typescript-eslint/utils": "8.0.1", + "@typescript-eslint/typescript-estree": "8.1.0", + "@typescript-eslint/utils": "8.1.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -400,9 +400,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.1.tgz", - "integrity": "sha512-PpqTVT3yCA/bIgJ12czBuE3iBlM3g4inRSC5J0QOdQFAn07TYrYEQBBKgXH1lQpglup+Zy6c1fxuwTk4MTNKIw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz", + "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -413,13 +413,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.1.tgz", - "integrity": "sha512-8V9hriRvZQXPWU3bbiUV4Epo7EvgM6RTs+sUmxp5G//dBGy402S7Fx0W0QkB2fb4obCF8SInoUzvTYtc3bkb5w==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.1.0.tgz", + "integrity": "sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.0.1", - "@typescript-eslint/visitor-keys": "8.0.1", + "@typescript-eslint/types": "8.1.0", + "@typescript-eslint/visitor-keys": "8.1.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -441,12 +441,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.1.tgz", - "integrity": "sha512-W5E+o0UfUcK5EgchLZsyVWqARmsM7v54/qEq6PY3YI5arkgmCzHiuk0zKSJJbm71V0xdRna4BGomkCTXz2/LkQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.1.0.tgz", + "integrity": "sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.0.1", + "@typescript-eslint/types": "8.1.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -547,15 +547,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.0.1.tgz", - "integrity": "sha512-CBFR0G0sCt0+fzfnKaciu9IBsKvEKYwN9UZ+eeogK1fYHg4Qxk1yf/wLQkLXlq8wbU2dFlgAesxt8Gi76E8RTA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.1.0.tgz", + "integrity": "sha512-ypRueFNKTIFwqPeJBfeIpxZ895PQhNyH4YID6js0UoBImWYoSjBsahUn9KMiJXh94uOjVBgHD9AmkyPsPnFwJA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.0.1", - "@typescript-eslint/types": "8.0.1", - "@typescript-eslint/typescript-estree": "8.0.1" + "@typescript-eslint/scope-manager": "8.1.0", + "@typescript-eslint/types": "8.1.0", + "@typescript-eslint/typescript-estree": "8.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -569,13 +569,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.0.1.tgz", - "integrity": "sha512-NpixInP5dm7uukMiRyiHjRKkom5RIFA4dfiHvalanD2cF0CLUuQqxfg8PtEUo9yqJI2bBhF+pcSafqnG3UBnRQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.1.0.tgz", + "integrity": "sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.0.1", - "@typescript-eslint/visitor-keys": "8.0.1" + "@typescript-eslint/types": "8.1.0", + "@typescript-eslint/visitor-keys": "8.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -586,9 +586,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.1.tgz", - "integrity": "sha512-PpqTVT3yCA/bIgJ12czBuE3iBlM3g4inRSC5J0QOdQFAn07TYrYEQBBKgXH1lQpglup+Zy6c1fxuwTk4MTNKIw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz", + "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -599,13 +599,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.1.tgz", - "integrity": "sha512-8V9hriRvZQXPWU3bbiUV4Epo7EvgM6RTs+sUmxp5G//dBGy402S7Fx0W0QkB2fb4obCF8SInoUzvTYtc3bkb5w==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.1.0.tgz", + "integrity": "sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.0.1", - "@typescript-eslint/visitor-keys": "8.0.1", + "@typescript-eslint/types": "8.1.0", + "@typescript-eslint/visitor-keys": "8.1.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -627,12 +627,12 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.1.tgz", - "integrity": "sha512-W5E+o0UfUcK5EgchLZsyVWqARmsM7v54/qEq6PY3YI5arkgmCzHiuk0zKSJJbm71V0xdRna4BGomkCTXz2/LkQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.1.0.tgz", + "integrity": "sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.0.1", + "@typescript-eslint/types": "8.1.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { diff --git a/cli-tests/package.json b/cli-tests/package.json index 8fb66b60b4..7e86a6a310 100644 --- a/cli-tests/package.json +++ b/cli-tests/package.json @@ -24,7 +24,7 @@ "devDependencies": { "@types/promise-retry": "^1.1.3", "@types/shelljs": "^0.8.12", - "@typescript-eslint/eslint-plugin": "^8.0.1", + "@typescript-eslint/eslint-plugin": "^8.1.0", "@typescript-eslint/parser": "^7.18.0", "eslint": "8.57", "eslint-config-airbnb-base": "^15.0.0", From 7184dcc211e1d49c878edc0eeca2954c6322f81e Mon Sep 17 00:00:00 2001 From: Catalina A <94133018+catalinaadam@users.noreply.github.com> Date: Fri, 16 Aug 2024 14:19:45 +0300 Subject: [PATCH 05/17] RelNotes entry for New MongoDB collector: CurrentOp (#3155) * Desc for New MongoDB collector: CurrentOp * formatting * feedback from Nurlan --- docs/release-notes/2.43.0.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/release-notes/2.43.0.md b/docs/release-notes/2.43.0.md index a8cd62d187..f9ae4aca04 100644 --- a/docs/release-notes/2.43.0.md +++ b/docs/release-notes/2.43.0.md @@ -15,10 +15,23 @@ This release introduces this and that ## Release highlights +### New MongoDB collector: CurrentOp +The MongoDB exporter now includes the **CurrentOp** collector, offering visibility into active operations, including the new `mongodb_currentop_query_uptime` metric. +To start the MongoDB exporter with the CurrentOp collector enabled, use the `--enable-all-collectors` flag when adding MongoDB services to your PMM instance: + +```sh +pmm-admin add mongodb --enable-all-collectors ... +``` + +Specifying a limit with `--max-collections` for this collector is not necessary. + +!!! note "Operation collection limitation" + To minimize impact on disk usage, the CurrentOp collector is designed to collect only operations that have been running for longer than 1 minute. This limitation helps focus on potentially problematic long-running operations while keeping data volume manageable. + +For more information on MongoDB collectors and metrics, see the [pmm-admin commands documentation](../use/commamds/pmm-admin.md). -![!image](../_images/.png) ## Improvements From 49a0e81b0c8c99268e5b912752f67af1fa4b1d12 Mon Sep 17 00:00:00 2001 From: Nurlan Moldomurov Date: Mon, 19 Aug 2024 15:39:47 +0600 Subject: [PATCH 06/17] PMM-12848 Enable currentopmetrics collector in mongodb_exporter. (#3118) * PMM-12848 Enable currentopmetrics collector in mongodb_exporter. * PMM-7 fix golint. * PMM-12848 Add currentopmetrics to scrape config. * PMM-12848 collect currentopmetrics in low resolution. * PMM-12848 Fix tests. --- managed/services/agents/mongodb.go | 216 +++++------------- managed/services/agents/mongodb_test.go | 29 +++ .../victoriametrics/scrape_configs.go | 3 + .../victoriametrics/scrape_configs_test.go | 4 +- managed/utils/collectors/collectors.go | 17 ++ 5 files changed, 102 insertions(+), 167 deletions(-) diff --git a/managed/services/agents/mongodb.go b/managed/services/agents/mongodb.go index 0e043e3904..3b1fa5f68d 100644 --- a/managed/services/agents/mongodb.go +++ b/managed/services/agents/mongodb.go @@ -30,17 +30,13 @@ import ( "github.com/percona/pmm/version" ) -type collectorArgs struct { - enabled bool - enableParam string -} - var ( // New MongoDB Exporter will be released with PMM agent v2.10.0. newMongoExporterPMMVersion = version.MustParse("2.9.99") v2_25_0 = version.MustParse("2.25.0-0") v2_26_0 = version.MustParse("2.26.0-0") v2_41_1 = version.MustParse("2.41.1-0") + v2_42_0 = version.MustParse("2.42.0-0") ) // mongodbExporterConfig returns desired configuration of mongodb_exporter process. @@ -50,23 +46,10 @@ func mongodbExporterConfig(node *models.Node, service *models.Service, exporter listenAddress := getExporterListenAddress(node, exporter) tdp := exporter.TemplateDelimiters(service) - var args []string - // Starting with PMM 2.10.0, we are shipping the new mongodb_exporter - // Starting with PMM 2.25.0, we change the discovering-mode making it to discover all databases. - // Until now, discovering mode was not working properly and was enabled only if mongodb.collstats-colls= - // was specified in the command line. - // Starting with PMM 2.26.0, we disabled all collectors by default and added flags to enable them. - // Starting with PMM 2.41.1 we added shards collector. - if pmmAgentVersion.Less(v2_26_0) { - args = oldPMMAgentArgs(exporter, tdp, listenAddress, pmmAgentVersion) - } else { - args = v226Args(exporter, tdp, listenAddress, pmmAgentVersion) - } - - args = collectors.FilterOutCollectors("--collect.", args, exporter.DisabledCollectors) + args := getArgs(exporter, tdp, listenAddress, pmmAgentVersion) if pointer.GetString(exporter.MetricsPath) != "" { - args = append(args, "--web.telemetry-path="+*exporter.MetricsPath) + args = append(args, "--web.telemetry-path="+*exporter.MetricsPath) //nolint:goconst } args = withLogLevel(args, exporter.LogLevel, pmmAgentVersion, true) @@ -101,171 +84,74 @@ func mongodbExporterConfig(node *models.Node, service *models.Service, exporter return res, nil } -func oldPMMAgentArgs(exporter *models.Agent, tdp *models.DelimiterPair, listenAddress string, pmmAgentVersion *version.Parsed) []string { +// getArgs returns the appropriate arguments based on the PMM agent version. +func getArgs(exporter *models.Agent, tdp *models.DelimiterPair, listenAddress string, pmmAgentVersion *version.Parsed) []string { var args []string + switch { - case !pmmAgentVersion.Less(v2_25_0): // >= 2.25 - args = v225Args(exporter, tdp, listenAddress) - case !pmmAgentVersion.Less(newMongoExporterPMMVersion): // >= 2.10 - args = []string{ - "--mongodb.global-conn-pool", - "--compatible-mode", - "--web.listen-address=" + listenAddress + ":" + tdp.Left + " .listen_port " + tdp.Right, //nolint:goconst + case !pmmAgentVersion.Less(v2_25_0): // >= 2.26.0 + args = buildBaseArgs(listenAddress, tdp) + args = append(args, "--discovering-mode") + + defaultEnabledCollectors := []string{"diagnosticdata", "replicasetstatus"} + collectAll := exporter.MongoDBOptions != nil && exporter.MongoDBOptions.EnableAllCollectors + + if !pmmAgentVersion.Less(v2_26_0) { + defaultEnabledCollectors = []string{} + args = append(args, "--collector.diagnosticdata", "--collector.replicasetstatus") + if collectAll { + args = append(args, "--collector.collstats", "--collector.dbstats", "--collector.indexstats", "--collector.topmetrics") + } } - default: - args = []string{ - "--collect.collection", - "--collect.database", - "--collect.topmetrics", - "--no-collect.connpoolstats", - "--no-collect.indexusage", - "--web.listen-address=" + listenAddress + ":" + tdp.Left + " .listen_port " + tdp.Right, + if !pmmAgentVersion.Less(v2_41_1) && collectAll { // >= 2.41.1 + args = append(args, "--collector.shards") + } + if !pmmAgentVersion.Less(v2_42_0) && collectAll { // >= 2.42.0 + args = append(args, "--collector.currentopmetrics") } - } - return args -} - -func v226Args(exporter *models.Agent, tdp *models.DelimiterPair, listenAddress string, pmmAgentVersion *version.Parsed) []string { - collectAll := false - if exporter.MongoDBOptions != nil { - collectAll = exporter.MongoDBOptions.EnableAllCollectors - } - - collstatsLimit := int32(200) - if exporter.MongoDBOptions != nil && exporter.MongoDBOptions.CollectionsLimit != -1 { - collstatsLimit = exporter.MongoDBOptions.CollectionsLimit - } - collectors := defaultCollectors(collectAll) + args = collectors.FilterOutCollectors("--collector.", args, exporter.DisabledCollectors) + args = append(args, collectors.DisableDefaultEnabledCollectors("--no-collector.", defaultEnabledCollectors, exporter.DisabledCollectors)...) - if !pmmAgentVersion.Less(v2_41_1) { // >= 2.41.1 - collectors["shards"] = collectorArgs{ - enabled: collectAll, - enableParam: "--collector.shards", + if exporter.MongoDBOptions != nil && len(exporter.MongoDBOptions.StatsCollections) != 0 { + args = append(args, "--mongodb.collstats-colls="+strings.Join(exporter.MongoDBOptions.StatsCollections, ",")) + if !pmmAgentVersion.Less(v2_26_0) { + args = append(args, "--mongodb.indexstats-colls="+strings.Join(exporter.MongoDBOptions.StatsCollections, ",")) + } } - } - for _, collector := range exporter.DisabledCollectors { - col, ok := collectors[strings.ToLower(collector)] - if !ok { - continue + if exporter.MongoDBOptions != nil { + collstatsLimit := int32(200) + if exporter.MongoDBOptions.CollectionsLimit != -1 { + collstatsLimit = exporter.MongoDBOptions.CollectionsLimit + } + args = append(args, fmt.Sprintf("--collector.collstats-limit=%d", collstatsLimit)) } - col.enabled = false - collectors[strings.ToLower(collector)] = col - } - - args := []string{ - "--mongodb.global-conn-pool", - "--compatible-mode", - "--web.listen-address=" + listenAddress + ":" + tdp.Left + " .listen_port " + tdp.Right, - "--discovering-mode", - } - if exporter.MongoDBOptions != nil && len(exporter.MongoDBOptions.StatsCollections) != 0 { - args = append(args, "--mongodb.collstats-colls="+strings.Join(exporter.MongoDBOptions.StatsCollections, ",")) - args = append(args, "--mongodb.indexstats-colls="+strings.Join(exporter.MongoDBOptions.StatsCollections, ",")) - } + case !pmmAgentVersion.Less(newMongoExporterPMMVersion): // >= 2.10.0 + args = buildBaseArgs(listenAddress, tdp) - if exporter.MongoDBOptions != nil { - args = append(args, fmt.Sprintf("--collector.collstats-limit=%d", collstatsLimit)) - } - - for _, collector := range collectors { - if collector.enabled && collector.enableParam != "" { - args = append(args, collector.enableParam) + default: // < 2.10.0 + args = []string{ + "--collect.collection", + "--collect.database", + "--collect.topmetrics", + "--no-collect.connpoolstats", + "--no-collect.indexusage", + "--web.listen-address=" + listenAddress + ":" + tdp.Left + " .listen_port " + tdp.Right, //nolint:goconst } + + args = collectors.FilterOutCollectors("--collect.", args, exporter.DisabledCollectors) } return args } -func v225Args(exporter *models.Agent, tdp *models.DelimiterPair, listenAddress string) []string { - type collectorArgs struct { - enabled bool - enableParam string - disableParam string - } - - collectors := map[string]collectorArgs{ - "diagnosticdata": { - enabled: true, - disableParam: "--no-collector.diagnosticdata", - }, - "replicasetstatus": { - enabled: true, - disableParam: "--no-collector.replicasetstatus", - }, - // disabled until we have better information on the resources usage impact - "dbstats": { - enabled: false, - enableParam: "--collector.dbstats", - }, - // disabled until we have better information on the resources usage impact - "topmetrics": { - enabled: false, - enableParam: "--collector.topmetrics", - }, - } - - for _, collector := range exporter.DisabledCollectors { - col := collectors[strings.ToLower(collector)] - col.enabled = false - collectors[strings.ToLower(collector)] = col - } - - args := []string{ +func buildBaseArgs(listenAddress string, tdp *models.DelimiterPair) []string { + return []string{ "--mongodb.global-conn-pool", "--compatible-mode", "--web.listen-address=" + listenAddress + ":" + tdp.Left + " .listen_port " + tdp.Right, - "--discovering-mode", - } - - if exporter.MongoDBOptions != nil && len(exporter.MongoDBOptions.StatsCollections) != 0 { - args = append(args, "--mongodb.collstats-colls="+strings.Join(exporter.MongoDBOptions.StatsCollections, ",")) - } - - if exporter.MongoDBOptions != nil && exporter.MongoDBOptions.CollectionsLimit != 0 { - args = append(args, fmt.Sprintf("--collector.collstats-limit=%d", exporter.MongoDBOptions.CollectionsLimit)) - } - - for _, collector := range collectors { - if collector.enabled && collector.enableParam != "" { - args = append(args, collector.enableParam) - } - if !collector.enabled && collector.disableParam != "" { - args = append(args, collector.disableParam) - } - } - - return args -} - -func defaultCollectors(collectAll bool) map[string]collectorArgs { - return map[string]collectorArgs{ - "diagnosticdata": { - enabled: true, - enableParam: "--collector.diagnosticdata", - }, - "replicasetstatus": { - enabled: true, - enableParam: "--collector.replicasetstatus", - }, - "collstats": { - enabled: collectAll, - enableParam: "--collector.collstats", - }, - "dbstats": { - enabled: collectAll, - enableParam: "--collector.dbstats", - }, - "indexstats": { - enabled: collectAll, - enableParam: "--collector.indexstats", - }, - "topmetrics": { - enabled: collectAll, - enableParam: "--collector.topmetrics", - }, } } diff --git a/managed/services/agents/mongodb_test.go b/managed/services/agents/mongodb_test.go index 8accc04e9e..0864effc51 100644 --- a/managed/services/agents/mongodb_test.go +++ b/managed/services/agents/mongodb_test.go @@ -384,6 +384,35 @@ func TestMongodbExporterConfig2411(t *testing.T) { require.NoError(t, err) require.Equal(t, expected.Args, actual.Args) }) + + t.Run("Enable all collectors and disable some", func(t *testing.T) { + exporter.MongoDBOptions = &models.MongoDBOptions{ + EnableAllCollectors: true, + StatsCollections: []string{"db1.col1.one", "db2.col2", "db3"}, + } + exporter.DisabledCollectors = []string{"dbstats", "topmetrics"} + + expected.Args = []string{ + "--collector.collstats", + "--collector.collstats-limit=0", + "--collector.diagnosticdata", + "--collector.indexstats", + "--collector.replicasetstatus", + "--collector.shards", + "--compatible-mode", + "--discovering-mode", + // this should be here even if limit=0 because it could be used to filter dbstats + // since dbstats is not depending the number of collections present in the db. + "--mongodb.collstats-colls=db1.col1.one,db2.col2,db3", + "--mongodb.global-conn-pool", + "--mongodb.indexstats-colls=db1.col1.one,db2.col2,db3", + "--web.listen-address=0.0.0.0:{{ .listen_port }}", + "--web.config={{ .TextFiles.webConfigPlaceholder }}", + } + actual, err := mongodbExporterConfig(node, mongodb, exporter, exposeSecrets, pmmAgentVersion) + require.NoError(t, err) + require.Equal(t, expected.Args, actual.Args) + }) } func TestMongodbExporterConfig(t *testing.T) { diff --git a/managed/services/victoriametrics/scrape_configs.go b/managed/services/victoriametrics/scrape_configs.go index 9dc595a871..d2a3104fcd 100644 --- a/managed/services/victoriametrics/scrape_configs.go +++ b/managed/services/victoriametrics/scrape_configs.go @@ -422,6 +422,9 @@ func scrapeConfigsForMongoDBExporter(params *scrapeConfigParams) ([]*config.Scra if !params.pmmAgentVersion.Less(version.MustParse("2.41.1-0")) { defaultCollectors = append(defaultCollectors, "shards") } + if !params.pmmAgentVersion.Less(version.MustParse("2.42.0-0")) { + defaultCollectors = append(defaultCollectors, "currentopmetrics") + } lr, err := scrapeConfigForStandardExporter("lr", params.metricsResolution.LR, params, defaultCollectors) if err != nil { diff --git a/managed/services/victoriametrics/scrape_configs_test.go b/managed/services/victoriametrics/scrape_configs_test.go index d09afa1988..c327bbac9d 100644 --- a/managed/services/victoriametrics/scrape_configs_test.go +++ b/managed/services/victoriametrics/scrape_configs_test.go @@ -758,7 +758,7 @@ func TestScrapeConfig(t *testing.T) { ScrapeTimeout: scrapeTimeout(s.LR), MetricsPath: "/metrics", Params: map[string][]string{ - "collect[]": {"collstats", "dbstats", "indexstats", "shards"}, + "collect[]": {"collstats", "currentopmetrics", "dbstats", "indexstats", "shards"}, }, HTTPClientConfig: config.HTTPClientConfig{ BasicAuth: &config.BasicAuth{ @@ -790,7 +790,7 @@ func TestScrapeConfig(t *testing.T) { node: node, service: service, agent: agent, - pmmAgentVersion: version.MustParse("2.41.1"), + pmmAgentVersion: version.MustParse("2.42.0"), metricsResolution: s, }) require.NoError(t, err) diff --git a/managed/utils/collectors/collectors.go b/managed/utils/collectors/collectors.go index 66e464ff40..5286e61518 100644 --- a/managed/utils/collectors/collectors.go +++ b/managed/utils/collectors/collectors.go @@ -42,3 +42,20 @@ func FilterOutCollectors(prefix string, args, disabledCollectors []string) []str } return enabledArgs } + +// DisableDefaultEnabledCollectors returns CLI arguments to disable default enabled collectors based on input. +// DefaultCollectors and disabledCollectors should be collector names without prefix. +// Result will be returned with prefix. +func DisableDefaultEnabledCollectors(prefix string, defaultCollectors []string, disabledCollectors []string) []string { + defaultCollectorsMap := make(map[string]struct{}) + for _, defaultCollector := range defaultCollectors { + defaultCollectorsMap[defaultCollector] = struct{}{} + } + args := []string{} + for _, collector := range disabledCollectors { + if _, ok := defaultCollectorsMap[collector]; ok { + args = append(args, fmt.Sprintf("%s%s", prefix, collector)) + } + } + return args +} From 9f6011705dd261d1dc05d5e73596a5871e20581a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 12:20:59 +0000 Subject: [PATCH 07/17] Bump github.com/bufbuild/buf from 1.36.0 to 1.37.0 in /tools (#3156) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [github.com/bufbuild/buf](https://github.com/bufbuild/buf) from 1.36.0 to 1.37.0. - [Release notes](https://github.com/bufbuild/buf/releases) - [Changelog](https://github.com/bufbuild/buf/blob/main/CHANGELOG.md) - [Commits](https://github.com/bufbuild/buf/compare/v1.36.0...v1.37.0) --- updated-dependencies: - dependency-name: github.com/bufbuild/buf dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jiří Čtvrtka <62988319+JiriCtvrtka@users.noreply.github.com> --- tools/go.mod | 66 ++++++++++++++-------- tools/go.sum | 154 ++++++++++++++++++++++++++++++++------------------- 2 files changed, 140 insertions(+), 80 deletions(-) diff --git a/tools/go.mod b/tools/go.mod index 9129c3d9dc..66750c56db 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -10,7 +10,7 @@ require ( github.com/BurntSushi/go-sumtype v0.0.0-20190304192233-fcb4a6205bdc github.com/Percona-Lab/swagger-order v0.0.0-20191002141859-166b3973d026 github.com/apache/skywalking-eyes v0.6.0 - github.com/bufbuild/buf v1.36.0 + github.com/bufbuild/buf v1.37.0 github.com/daixiang0/gci v0.13.0 github.com/envoyproxy/protoc-gen-validate v1.1.0 github.com/go-delve/delve v1.23.0 @@ -32,18 +32,19 @@ require ( ) require ( - buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240508200655-46a4cf4ba109.2 // indirect - buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240610164129-660609bc46d3.1 // indirect - buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240610164129-660609bc46d3.2 // indirect + buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240717164558-a6c49f84cc0f.2 // indirect + buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240801134127-09fbc17f7c9e.1 // indirect + buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240801134127-09fbc17f7c9e.2 // indirect code.gitea.io/sdk/gitea v0.18.0 // indirect connectrpc.com/connect v1.16.2 // indirect - connectrpc.com/otelconnect v0.7.0 // indirect + connectrpc.com/otelconnect v0.7.1 // indirect dario.cat/mergo v1.0.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver/v3 v3.2.0 // indirect github.com/Masterminds/sprig/v3 v3.2.3 // indirect - github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/Microsoft/hcsshim v0.12.5 // indirect github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect github.com/aclements/go-moremath v0.0.0-20210112150236-f10218a38794 // indirect github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect @@ -53,12 +54,20 @@ require ( github.com/bmatcuk/doublestar/v2 v2.0.4 // indirect github.com/bufbuild/protocompile v0.14.0 // indirect github.com/bufbuild/protoplugin v0.0.0-20240323223605-e2735f6c31ee // indirect - github.com/bufbuild/protovalidate-go v0.6.2 // indirect - github.com/bufbuild/protoyaml-go v0.1.9 // indirect + github.com/bufbuild/protovalidate-go v0.6.3 // indirect + github.com/bufbuild/protoyaml-go v0.1.10 // indirect github.com/chigopher/pathlib v0.19.1 // indirect github.com/cilium/ebpf v0.11.0 // indirect github.com/cloudflare/circl v1.3.7 // indirect + github.com/containerd/cgroups/v3 v3.0.3 // indirect + github.com/containerd/containerd v1.7.20 // indirect + github.com/containerd/continuity v0.4.3 // indirect + github.com/containerd/errdefs v0.1.0 // indirect + github.com/containerd/log v0.1.0 // indirect + github.com/containerd/platforms v0.2.1 // indirect github.com/containerd/stargz-snapshotter/estargz v0.15.1 // indirect + github.com/containerd/ttrpc v1.2.5 // indirect + github.com/containerd/typeurl/v2 v2.2.0 // indirect github.com/cosiner/argv v0.1.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect github.com/cyphar/filepath-securejoin v0.2.4 // indirect @@ -66,9 +75,9 @@ require ( github.com/denisenkom/go-mssqldb v0.9.0 // indirect github.com/derekparker/trie v0.0.0-20230829180723-39f4de51ef7d // indirect github.com/distribution/reference v0.6.0 // indirect - github.com/docker/cli v26.1.4+incompatible // indirect + github.com/docker/cli v27.1.2+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker v27.1.1+incompatible // indirect + github.com/docker/docker v27.1.2+incompatible // indirect github.com/docker/docker-credential-helpers v0.8.2 // indirect github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-units v0.5.0 // indirect @@ -76,7 +85,7 @@ require ( github.com/felixge/fgprof v0.9.4 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/go-chi/chi/v5 v5.0.14 // indirect + github.com/go-chi/chi/v5 v5.1.0 // indirect github.com/go-delve/liner v1.2.3-0.20231231155935-4726ab1d7f62 // indirect github.com/go-fed/httpsig v1.1.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect @@ -101,19 +110,19 @@ require ( github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5 // indirect github.com/go-toolsmith/typep v1.0.2 // indirect github.com/gofrs/uuid v4.4.0+incompatible // indirect - github.com/gofrs/uuid/v5 v5.2.0 // indirect + github.com/gofrs/uuid/v5 v5.3.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/google/cel-go v0.20.1 // indirect + github.com/google/cel-go v0.21.0 // indirect github.com/google/go-cmp v0.6.0 // indirect - github.com/google/go-containerregistry v0.19.2 // indirect + github.com/google/go-containerregistry v0.20.2 // indirect github.com/google/go-dap v0.12.0 // indirect github.com/google/go-github/v33 v33.0.0 // indirect github.com/google/go-github/v62 v62.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/licensecheck v0.3.1 // indirect - github.com/google/pprof v0.0.0-20240622144329-c177fd99eaa9 // indirect + github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect @@ -155,11 +164,19 @@ require ( github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect + github.com/moby/locker v1.0.1 // indirect + github.com/moby/patternmatcher v0.6.0 // indirect + github.com/moby/sys/mount v0.3.4 // indirect + github.com/moby/sys/mountinfo v0.7.2 // indirect + github.com/moby/sys/sequential v0.6.0 // indirect + github.com/moby/sys/user v0.3.0 // indirect + github.com/moby/sys/userns v0.1.0 // indirect github.com/moby/term v0.5.0 // indirect github.com/morikuni/aec v1.0.0 // indirect github.com/oklog/ulid v1.3.1 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0 // indirect + github.com/opencontainers/runtime-spec v1.2.0 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pelletier/go-toml/v2 v2.0.6 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect @@ -191,12 +208,13 @@ require ( github.com/xanzy/go-gitlab v0.106.0 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect go.mongodb.org/mongo-driver v1.9.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect - go.opentelemetry.io/otel v1.24.0 // indirect + go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect + go.opentelemetry.io/otel v1.28.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0 // indirect - go.opentelemetry.io/otel/metric v1.24.0 // indirect - go.opentelemetry.io/otel/sdk v1.24.0 // indirect - go.opentelemetry.io/otel/trace v1.24.0 // indirect + go.opentelemetry.io/otel/metric v1.28.0 // indirect + go.opentelemetry.io/otel/sdk v1.28.0 // indirect + go.opentelemetry.io/otel/trace v1.28.0 // indirect go.starlark.net v0.0.0-20231101134539-556fd59b42f6 // indirect go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect @@ -204,17 +222,17 @@ require ( golang.org/x/arch v0.6.0 // indirect golang.org/x/build v0.0.0-20240712162709-0b82a206aadf // indirect golang.org/x/crypto v0.26.0 // indirect - golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 // indirect + golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa // indirect golang.org/x/mod v0.20.0 // indirect golang.org/x/net v0.28.0 // indirect golang.org/x/oauth2 v0.21.0 // indirect golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.23.0 // indirect + golang.org/x/sys v0.24.0 // indirect golang.org/x/term v0.23.0 // indirect golang.org/x/text v0.17.0 // indirect golang.org/x/time v0.5.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240723171418-e6d459c13d2a // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240723171418-e6d459c13d2a // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240812133136-8ffd90a71988 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240812133136-8ffd90a71988 // indirect google.golang.org/grpc v1.65.0 // indirect gopkg.in/alecthomas/kingpin.v2 v2.2.6 // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/tools/go.sum b/tools/go.sum index 152c2cc8ce..9105b9c532 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -1,9 +1,9 @@ -buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240508200655-46a4cf4ba109.2 h1:cFrEG/pJch6t62+jqndcPXeTNkYcztS4tBRgNkR+drw= -buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240508200655-46a4cf4ba109.2/go.mod h1:ylS4c28ACSI59oJrOdW4pHS4n0Hw4TgSPHn8rpHl4Yw= -buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240610164129-660609bc46d3.1 h1:PmSlGbLLyhKIAm46ROmzdGVaaYgDdFsQNA+VftjuCLs= -buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240610164129-660609bc46d3.1/go.mod h1:4ptL49VoWyYwajT6j4zu5vmQ/k/om4tGMB9atY2FhEo= -buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240610164129-660609bc46d3.2 h1:y1+UxFIWzj/eF2RCPqt9egR7Rt9vgQkXNUzSdmR6iEU= -buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240610164129-660609bc46d3.2/go.mod h1:psseUmlKRo9v5LZJtR/aTpdTLuyp9o3X7rnLT87SZEo= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240717164558-a6c49f84cc0f.2 h1:SZRVx928rbYZ6hEKUIN+vtGDkl7uotABRWGY4OAg5gM= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240717164558-a6c49f84cc0f.2/go.mod h1:ylS4c28ACSI59oJrOdW4pHS4n0Hw4TgSPHn8rpHl4Yw= +buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240801134127-09fbc17f7c9e.1 h1:IV4si5SvDJSGQ/kpcnmOFKDKh8erG6zPy+NhmxlYdxM= +buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240801134127-09fbc17f7c9e.1/go.mod h1:4isTSbIhQ6wERY99Kvds0UuOcFMUoPDBPZfaAKrUnSE= +buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240801134127-09fbc17f7c9e.2 h1:7fUEOBrfNd50BMAls2tLn9RhttbDIfxRXML99YaLqKY= +buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240801134127-09fbc17f7c9e.2/go.mod h1:psseUmlKRo9v5LZJtR/aTpdTLuyp9o3X7rnLT87SZEo= cloud.google.com/go v0.0.0-20170206221025-ce650573d812/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= @@ -46,12 +46,14 @@ code.gitea.io/sdk/gitea v0.18.0 h1:+zZrwVmujIrgobt6wVBWCqITz6bn1aBjnCUHmpZrerI= code.gitea.io/sdk/gitea v0.18.0/go.mod h1:IG9xZJoltDNeDSW0qiF2Vqx5orMWa7OhVWrjvrd5NpI= connectrpc.com/connect v1.16.2 h1:ybd6y+ls7GOlb7Bh5C8+ghA6SvCBajHwxssO2CGFjqE= connectrpc.com/connect v1.16.2/go.mod h1:n2kgwskMHXC+lVqb18wngEpF95ldBHXjZYJussz5FRc= -connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY= -connectrpc.com/otelconnect v0.7.0/go.mod h1:Bt2ivBymHZHqxvo4HkJ0EwHuUzQN6k2l0oH+mp/8nwc= +connectrpc.com/otelconnect v0.7.1 h1:scO5pOb0i4yUE66CnNrHeK1x51yq0bE0ehPg6WvzXJY= +connectrpc.com/otelconnect v0.7.1/go.mod h1:dh3bFgHBTb2bkqGCeVVOtHJreSns7uu9wwL2Tbz17ms= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= github.com/AlekSi/pointer v1.1.0 h1:SSDMPcXD9jSl8FPy9cRzoRaMJtm9g9ggGTxecRUbQoI= github.com/AlekSi/pointer v1.1.0/go.mod h1:y7BvfRI3wXPWKXEBhU71nbnIEEZX0QTSB2Bj48UJIZE= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= @@ -68,8 +70,10 @@ github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYr github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA= github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/Microsoft/hcsshim v0.12.5 h1:bpTInLlDy/nDRWFVcefDZZ1+U8tS+rz3MxjKgu9boo0= +github.com/Microsoft/hcsshim v0.12.5/go.mod h1:tIUGego4G1EN5Hb6KC90aDYiUI2dqLSTTOCjVNpOgZ8= github.com/Percona-Lab/spec v0.20.5-percona h1:ViCJVq52QIZxpP8/Nv4/nIed+WnqUirNjPtXvHhset4= github.com/Percona-Lab/spec v0.20.5-percona/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= github.com/Percona-Lab/swagger-order v0.0.0-20191002141859-166b3973d026 h1:jvuxsQEuFpoSVw9HCP4kSF52BXYzTvB7CA3eryQXaRc= @@ -104,19 +108,19 @@ github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/brianvoe/gofakeit v3.18.0+incompatible h1:wDOmHc9DLG4nRjUVVaxA+CEglKOW72Y5+4WNxUIkjM8= github.com/brianvoe/gofakeit v3.18.0+incompatible/go.mod h1:kfwdRA90vvNhPutZWfH7WPaDzUjz+CZFqG+rPkOjGOc= -github.com/bufbuild/buf v1.36.0 h1:sC/MRgAhwvcbLbUXlTY+zgLUT4PzHm19BnnEsgu/rgU= -github.com/bufbuild/buf v1.36.0/go.mod h1:SM7b5QW3FkQPNkkqIa/9UWzLOoe51la+GGZpEgH9b68= +github.com/bufbuild/buf v1.37.0 h1:lKQ2LahOOMzLFFAg1IMQj12gPhAfLWGr6z6jfP6p7Bw= +github.com/bufbuild/buf v1.37.0/go.mod h1:uFHazPjAiKVpyK9Td/4FeMzQb8v5X7M4fo255kw/W6U= github.com/bufbuild/protocompile v0.14.0 h1:z3DW4IvXE5G/uTOnSQn+qwQQxvhckkTWLS/0No/o7KU= github.com/bufbuild/protocompile v0.14.0/go.mod h1:N6J1NYzkspJo3ZwyL4Xjvli86XOj1xq4qAasUFxGups= github.com/bufbuild/protoplugin v0.0.0-20240323223605-e2735f6c31ee h1:E6ET8YUcYJ1lAe6ctR3as7yqzW2BNItDFnaB5zQq/8M= github.com/bufbuild/protoplugin v0.0.0-20240323223605-e2735f6c31ee/go.mod h1:HjGFxsck9RObrTJp2hXQZfWhPgZqnR6sR1U5fCA/Kus= -github.com/bufbuild/protovalidate-go v0.6.2 h1:U/V3CGF0kPlR12v41rjO4DrYZtLcS4ZONLmWN+rJVCQ= -github.com/bufbuild/protovalidate-go v0.6.2/go.mod h1:4BR3rKEJiUiTy+sqsusFn2ladOf0kYmA2Reo6BHSBgQ= -github.com/bufbuild/protoyaml-go v0.1.9 h1:anV5UtF1Mlvkkgp4NWA6U/zOnJFng8Orq4Vf3ZUQHBU= -github.com/bufbuild/protoyaml-go v0.1.9/go.mod h1:KCBItkvZOK/zwGueLdH1Wx1RLyFn5rCH7YjQrdty2Wc= +github.com/bufbuild/protovalidate-go v0.6.3 h1:wxQyzW035zM16Binbaz/nWAzS12dRIXhZdSUWRY7Fv0= +github.com/bufbuild/protovalidate-go v0.6.3/go.mod h1:J4PtwP9Z2YAGgB0+o+tTWEDtLtXvz/gfhFZD8pbzM/U= +github.com/bufbuild/protoyaml-go v0.1.10 h1:gMwDSHNoInt0D6vvTUxAJSWvp87MJraTN7dxsR7C2z4= +github.com/bufbuild/protoyaml-go v0.1.10/go.mod h1:KCBItkvZOK/zwGueLdH1Wx1RLyFn5rCH7YjQrdty2Wc= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= -github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= +github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/chigopher/pathlib v0.19.1 h1:RoLlUJc0CqBGwq239cilyhxPNLXTK+HXoASGyGznx5A= github.com/chigopher/pathlib v0.19.1/go.mod h1:tzC1dZLW8o33UQpWkNkhvPwL5n4yyFRFm/jL1YGWFvY= @@ -140,10 +144,24 @@ github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnht github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= +github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0= +github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0= +github.com/containerd/containerd v1.7.20 h1:Sl6jQYk3TRavaU83h66QMbI2Nqg9Jm6qzwX57Vsn1SQ= +github.com/containerd/containerd v1.7.20/go.mod h1:52GsS5CwquuqPuLncsXwG0t2CiUce+KsNHJZQJvAgR0= +github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8= +github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= +github.com/containerd/errdefs v0.1.0 h1:m0wCRBiu1WJT/Fr+iOoQHMQS/eP5myQ8lCv4Dz5ZURM= +github.com/containerd/errdefs v0.1.0/go.mod h1:YgWiiHtLmSeBrvpw+UfPijzbLaB77mEG1WwJTDETIV0= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= +github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= github.com/containerd/stargz-snapshotter/estargz v0.15.1 h1:eXJjw9RbkLFgioVaTG+G/ZW/0kEe2oEKCdS/ZxIyoCU= github.com/containerd/stargz-snapshotter/estargz v0.15.1/go.mod h1:gr2RNwukQ/S9Nv33Lt6UC7xEx58C+LHRdoqbEKjz1Kk= +github.com/containerd/ttrpc v1.2.5 h1:IFckT1EFQoFBMG4c3sMdT8EP3/aKfumK1msY+Ze4oLU= +github.com/containerd/ttrpc v1.2.5/go.mod h1:YCXHsb32f+Sq5/72xHubdiJRQY9inL4a4ZQrAbN1q9o= +github.com/containerd/typeurl/v2 v2.2.0 h1:6NBDbQzr7I5LHgp34xAXYF5DOTQDn05X58lsPEmzLso= +github.com/containerd/typeurl/v2 v2.2.0/go.mod h1:8XOOxnyatxSWuG8OfsZXVnAF4iZfedjS/8UHSPJnX4g= github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cosiner/argv v0.1.0 h1:BVDiEL32lwHukgJKP87btEPenzrrHUjajs/8yzaqcXg= github.com/cosiner/argv v0.1.0/go.mod h1:EusR6TucWKX+zFgtdUsKT2Cvg45K5rtpCcWz4hK06d8= @@ -167,12 +185,12 @@ github.com/derekparker/trie v0.0.0-20230829180723-39f4de51ef7d h1:hUWoLdw5kvo2xC github.com/derekparker/trie v0.0.0-20230829180723-39f4de51ef7d/go.mod h1:C7Es+DLenIpPc9J6IYw4jrK0h7S9bKj4DNl8+KxGEXU= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/cli v26.1.4+incompatible h1:I8PHdc0MtxEADqYJZvhBrW9bo8gawKwwenxRM7/rLu8= -github.com/docker/cli v26.1.4+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v27.1.2+incompatible h1:nYviRv5Y+YAKx3dFrTvS1ErkyVVunKOhoweCTE1BsnI= +github.com/docker/cli v27.1.2+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v27.1.1+incompatible h1:hO/M4MtV36kzKldqnA37IWhebRA+LnqqcqDja6kVaKY= -github.com/docker/docker v27.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v27.1.2+incompatible h1:AhGzR1xaQIy53qCkxARaFluI00WPGtXn0AJuoQsVYTY= +github.com/docker/docker v27.1.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= @@ -207,8 +225,8 @@ github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4 github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= -github.com/go-chi/chi/v5 v5.0.14 h1:PyEwo2Vudraa0x/Wl6eDRRW2NXBvekgfxyydcM0WGE0= -github.com/go-chi/chi/v5 v5.0.14/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw= +github.com/go-chi/chi/v5 v5.1.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-delve/delve v1.23.0 h1:jYgZISZ14KAO3ys8kD07kjrowrygE9F9SIwnpz9xXys= github.com/go-delve/delve v1.23.0/go.mod h1:S3SLuEE2mn7wipKilTvk1p9HdTMnXXElcEpiZ+VcuqU= github.com/go-delve/liner v1.2.3-0.20231231155935-4726ab1d7f62 h1:IGtvsNyIuRjl04XAOFGACozgUD7A82UffYxZt4DWbvA= @@ -318,13 +336,13 @@ github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u1 github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= -github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E= +github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0= github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid/v5 v5.2.0 h1:qw1GMx6/y8vhVsx626ImfKMuS5CvJmhIKKtuyvfajMM= -github.com/gofrs/uuid/v5 v5.2.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= +github.com/gofrs/uuid/v5 v5.3.0 h1:m0mUMr+oVYUdxpMLgSYCZiXe7PuVPnI94+OMeVBNedk= +github.com/gofrs/uuid/v5 v5.3.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= @@ -367,8 +385,8 @@ github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2 github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/cel-go v0.20.1 h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84= -github.com/google/cel-go v0.20.1/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg= +github.com/google/cel-go v0.21.0 h1:cl6uW/gxN+Hy50tNYvI691+sXxioCnstFzLp2WO4GCI= +github.com/google/cel-go v0.21.0/go.mod h1:rHUlWCcBKgyEk+eV03RPdZUekPp6YcJwV0FxuUksYxc= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -377,11 +395,12 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.19.2 h1:TannFKE1QSajsP6hPWb5oJNgKe1IKjHukIKDUmvsV6w= -github.com/google/go-containerregistry v0.19.2/go.mod h1:YCMFNQeeXeLF+dnhhWkqDItx/JSkH01j1Kis4PsjzFI= +github.com/google/go-containerregistry v0.20.2 h1:B1wPJ1SN/S7pB+ZAimcciVD+r+yV/l/DSArMxlbwseo= +github.com/google/go-containerregistry v0.20.2/go.mod h1:z38EKdKh4h7IP2gSfUUqEvalZBqs6AoLeWfUy34nQC8= github.com/google/go-dap v0.12.0 h1:rVcjv3SyMIrpaOoTAdFDyHs99CwVOItIJGKLQFQhNeM= github.com/google/go-dap v0.12.0/go.mod h1:tNjCASCm5cqePi/RVXXWEVqtnNLV1KTWtYOqu6rZNzc= github.com/google/go-github/v33 v33.0.0 h1:qAf9yP0qc54ufQxzwv+u9H0tiVOnPJxo0lI/JXqw3ZM= @@ -408,8 +427,8 @@ github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= -github.com/google/pprof v0.0.0-20240622144329-c177fd99eaa9 h1:ouFdLLCOyCfnxGpQTMZKHLyHr/D1GFbQzEsJxumO16E= -github.com/google/pprof v0.0.0-20240622144329-c177fd99eaa9/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= +github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k= +github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/safehtml v0.0.2/go.mod h1:L4KWwDsUJdECRAEpZoBn3O64bQaywRscowZjJAzjHnU= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= @@ -556,6 +575,20 @@ github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zx github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= +github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= +github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= +github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= +github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= +github.com/moby/sys/mount v0.3.4 h1:yn5jq4STPztkkzSKpZkLcmjue+bZJ0u2AuQY1iNI1Ww= +github.com/moby/sys/mount v0.3.4/go.mod h1:KcQJMbQdJHPlq5lcYT+/CjatWM4PuxKe+XLSVS4J6Os= +github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= +github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= +github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= +github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= +github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo= +github.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= +github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= +github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= @@ -570,6 +603,10 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= +github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk= +github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v1.11.0 h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaLpt7tQ7oU= +github.com/opencontainers/selinux v1.11.0/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/orisano/pixelmatch v0.0.0-20220722002657-fb0b55479cde/go.mod h1:nZgzbfBr3hhjoZnS66nKrHmduYNpc34ny7RK4z5/HM0= @@ -594,6 +631,8 @@ github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qR 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/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/quasilyte/go-consistent v0.6.0 h1:tY8DYfgM+7ADpOyr5X47i8hV/XbMNoucqnqZWVjI+rU= github.com/quasilyte/go-consistent v0.6.0/go.mod h1:dKYK1JZl3150J1+Jh4cDYPCIu2MqybUBi0YVW2b2E6c= github.com/reva2/bitbucket-insights-api v1.0.0 h1:lpQ/Q7OmnG04w/EM77piOwZBxP41PeTlbytXxVrnplA= @@ -703,24 +742,26 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= -go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= -go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= +go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= +go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0 h1:9M3+rhx7kZCIQQhQRYaZCdNu1V73tm4TvXs2ntl98C4= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0/go.mod h1:noq80iT8rrHP1SfybmPiRGc9dc5M8RPmGvtwo7Oo7tc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0 h1:Xw8U6u2f8DK2XAkGRFV7BBLENgnTGX9i4rQRxJf+/vs= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0/go.mod h1:6KW1Fm6R/s6Z3PGXwSJN2K4eT6wQB3vXX6CVnYX9NmM= -go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= -go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= -go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw= -go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 h1:IeMeyr1aBvBiPVYihXIaeIZba6b8E1bYp7lbdxK8CQg= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU= +go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= +go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= +go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= +go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= go.opentelemetry.io/otel/sdk/metric v1.19.0 h1:EJoTO5qysMsYCa+w4UghwFV/ptQgqSL/8Ni+hx+8i1k= go.opentelemetry.io/otel/sdk/metric v1.19.0/go.mod h1:XjG0jQyFJrv2PbMvwND7LwCEhsJzCzV5210euduKcKY= -go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= -go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= -go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= -go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= +go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= +go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= +go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= +go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= go.starlark.net v0.0.0-20231101134539-556fd59b42f6 h1:+eC0F/k4aBLC4szgOcjd7bDTEnpxADJyWJE0yowgM3E= go.starlark.net v0.0.0-20231101134539-556fd59b42f6/go.mod h1:LcLNIzVOMp4oV+uusnpk+VU+SzXaJakUuBjoCSWH5dM= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= @@ -769,8 +810,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY= -golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= +golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa h1:ELnwvuAXPNtPk1TJRuGkI9fDTwym6AYBu0qzT8AcHdI= +golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -836,6 +877,7 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= @@ -935,8 +977,8 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= -golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= +golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1099,10 +1141,10 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto/googleapis/api v0.0.0-20240723171418-e6d459c13d2a h1:YIa/rzVqMEokBkPtydCkx1VLmv3An1Uw7w1P1m6EhOY= -google.golang.org/genproto/googleapis/api v0.0.0-20240723171418-e6d459c13d2a/go.mod h1:AHT0dDg3SoMOgZGnZk29b5xTbPHMoEC8qthmBLJCpys= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240723171418-e6d459c13d2a h1:hqK4+jJZXCU4pW7jsAdGOVFIfLHQeV7LaizZKnZ84HI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240723171418-e6d459c13d2a/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= +google.golang.org/genproto/googleapis/api v0.0.0-20240812133136-8ffd90a71988 h1:+/tmTy5zAieooKIXfzDm9KiA3Bv6JBwriRN9LY+yayk= +google.golang.org/genproto/googleapis/api v0.0.0-20240812133136-8ffd90a71988/go.mod h1:4+X6GvPs+25wZKbQq9qyAXrwIRExv7w0Ea6MgZLZiDM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240812133136-8ffd90a71988 h1:V71AcdLZr2p8dC9dbOIMCpqi4EmRl8wUwnJzXXLmbmc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240812133136-8ffd90a71988/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/grpc v0.0.0-20170208002647-2a6bf6142e96/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= From b20fe783537ee3b1740d1facb714c00934a26563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Ctvrtka?= <62988319+JiriCtvrtka@users.noreply.github.com> Date: Wed, 21 Aug 2024 13:52:00 +0200 Subject: [PATCH 08/17] PMM-12451 MongoDB explain. (#3152) * PMM-12451 Todo. * PMM-12451 Changes. * PMM-12451 Version check, refactor. * PMM-12451 Remove Mongo < 4.0.0 compatibility and logic. * PMM-12451 Remove unused annotations. * PMM-12451 Make format. * PMM-12451 Lint. * PMM-12451 Lint. * PMM-12451 Downgrade driver. * PMM-12451 Changes. * PMM-12451 Old tests. * PMM-12451 Test. * Revert "PMM-12451 Old tests." This reverts commit feb3721bbac056d0f0775db9cedacc46a2279a94. * Revert "PMM-12451 Test." This reverts commit acf12a7e18d24f7ac01ec53d74013ea6ef619976. * PMM-12451 Changes. * PMM-12451 Lint. * PMM-12451 Fix wrong version number in comment. * PMM-12451 Remove lsid. * PMM-12451 Test with 1.16.1 driver. * PMM-12451 Unmarshal canonical to false. * Reapply "PMM-12451 Old tests." This reverts commit a5754c877f618dd97f4e8621c1c15914e3079ca1. * Revert "PMM-12451 Test." This reverts commit acf12a7e18d24f7ac01ec53d74013ea6ef619976. * PMM-12451 Return back removeDBField after canonical false. * PMM-12451 Remove rest of lsids in tests. * PMM-12451 Fix comment. * PMM-12451 Handle not supported commands. * PMM-12451 Refactor. * PMM-12451 Fix logic for OriginatingCommand. * PMM-12451 Small test refactor. * Update agent/runner/actions/mongodb_explain_action.go Co-authored-by: Nurlan Moldomurov * PMM-12451 Required changes. * PMM-12451 Adds release notes. * PMM-12451 Add comments to unclear places. * PMM-12451 Changes in comments. * PMM-12451 Add PMM-13017 and PMM-13071 to RN. * Update docs/release-notes/2.43.0.md Co-authored-by: Catalina A <94133018+catalinaadam@users.noreply.github.com> * Update docs/release-notes/2.43.0.md Co-authored-by: Catalina A <94133018+catalinaadam@users.noreply.github.com> * Update agent/runner/actions/mongodb_explain_action.go Co-authored-by: Alex Demidoff * PMM-12451 Improvement to handle dbstats command. * PMM-12451 Fix RN after applied suggestion. --------- Co-authored-by: Nurlan Moldomurov Co-authored-by: Catalina A <94133018+catalinaadam@users.noreply.github.com> Co-authored-by: Alex Demidoff --- .../runner/actions/mongodb_explain_action.go | 170 +++++++++++++- .../actions/mongodb_explain_action_test.go | 218 ++++++++++++++++++ docs/release-notes/2.43.0.md | 3 + go.mod | 2 +- go.sum | 4 +- 5 files changed, 382 insertions(+), 15 deletions(-) diff --git a/agent/runner/actions/mongodb_explain_action.go b/agent/runner/actions/mongodb_explain_action.go index 373b04df9f..6f22345392 100644 --- a/agent/runner/actions/mongodb_explain_action.go +++ b/agent/runner/actions/mongodb_explain_action.go @@ -18,9 +18,9 @@ import ( "context" "fmt" "path/filepath" + "strings" "time" - "github.com/percona/percona-toolkit/src/go/mongolib/proto" "github.com/pkg/errors" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" @@ -39,6 +39,15 @@ type mongodbExplainAction struct { dsn string } +type explain struct { + Ns string `json:"ns"` + Op string `json:"op"` + Query bson.D `json:"query,omitempty"` + Command bson.D `json:"command,omitempty"` + OriginatingCommand bson.D `json:"originatingCommand,omitempty"` + UpdateObj bson.D `json:"updateobj,omitempty"` +} + var errCannotExplain = fmt.Errorf("cannot explain this type of query") // NewMongoDBExplainAction creates a MongoDB EXPLAIN query Action. @@ -89,28 +98,165 @@ func (a *mongodbExplainAction) Run(ctx context.Context) ([]byte, error) { } defer client.Disconnect(ctx) //nolint:errcheck - var eq proto.ExampleQuery + return explainForQuery(ctx, client, a.params.Query) +} + +func (a *mongodbExplainAction) sealed() {} + +func (e explain) prepareCommand() (bson.D, error) { + command := e.Command + + switch e.Op { + case "query": + if len(command) == 0 { + command = e.Query + } + + if len(command) == 0 || command[0].Key != "find" { + return bson.D{ + {Key: "find", Value: e.getCollection()}, + {Key: "filter", Value: command}, + }, nil + } + + if len(command) != 0 && command[0].Key == "query" { + return bson.D{ + {Key: "find", Value: e.getCollection()}, + {Key: "filter", Value: command[0].Value}, + }, nil + } + + return dropDBField(command), nil + case "update": + if len(command) == 0 { + command = bson.D{ + {Key: "q", Value: e.Query}, + {Key: "u", Value: e.UpdateObj}, + } + } + + return bson.D{ + {Key: "update", Value: e.getCollection()}, + {Key: "updates", Value: []any{command}}, + }, nil + case "remove": + if len(command) == 0 { + command = bson.D{{Key: "q", Value: e.Query}} + } + + return bson.D{ + {Key: "delete", Value: e.getCollection()}, + {Key: "deletes", Value: []any{command}}, + }, nil + case "getmore": + if len(e.OriginatingCommand) == 0 { + return bson.D{{Key: "getmore", Value: ""}}, nil + } + + command = e.OriginatingCommand + + return dropDBField(command), nil + case "command": + command = dropDBField(command) + + if len(command) == 0 { + return command, nil + } + + switch command[0].Key { + // Not supported commands. + case "dbStats": + return nil, errors.Errorf("command %s is not supported for explain", command[0].Key) + case "group": + default: + return command, nil + } + + return fixReduceField(command), nil + // Not supported operations. + case "insert", "drop": + return nil, errors.Errorf("operation %s is not supported for explain", e.Op) + } + + return command, nil +} + +func (e explain) getDB() string { + s := strings.SplitN(e.Ns, ".", 2) + if len(s) == 2 { + return s[0] + } + + return "" +} + +func (e explain) getCollection() string { + s := strings.SplitN(e.Ns, ".", 2) + if len(s) == 2 { + return s[1] + } + + return "" +} + +// dropDBField remove DB field to be able run explain on all supported types. +// Otherwise it could end up with BSON field 'xxx.$db' is a duplicate field. +func dropDBField(command bson.D) bson.D { + for i := range command { + if command[i].Key != "$db" { + continue + } + + if len(command)-1 == i { + return command[:i] + } + + return append(command[:i], command[i+1:]...) + } + + return command +} + +// fixReduceField fixing nil/empty values after unmarshalling funcs. +func fixReduceField(command bson.D) bson.D { + var group bson.D + var ok bool + if group, ok = command[0].Value.(bson.D); !ok { + return command + } - err = bson.UnmarshalExtJSON([]byte(a.params.Query), true, &eq) + for i := range group { + if group[i].Key == "$reduce" { + group[i].Value = "{}" + command[0].Value = group + break + } + } + + return command +} + +func explainForQuery(ctx context.Context, client *mongo.Client, query string) ([]byte, error) { + var e explain + err := bson.UnmarshalExtJSON([]byte(query), false, &e) if err != nil { - return nil, errors.Wrapf(err, "Query: %s", a.params.Query) + return nil, errors.Wrapf(err, "Query: %s", query) } - database := "admin" - if eq.Db() != "" { - database = eq.Db() + preparedCommand, err := e.prepareCommand() + if err != nil { + return nil, errors.Wrap(errCannotExplain, err.Error()) } - res := client.Database(database).RunCommand(ctx, eq.ExplainCmd()) + command := bson.D{{Key: "explain", Value: preparedCommand}} + res := client.Database(e.getDB()).RunCommand(ctx, command) if res.Err() != nil { return nil, errors.Wrap(errCannotExplain, res.Err().Error()) } - result, err := res.DecodeBytes() + result, err := res.Raw() if err != nil { return nil, err } - // We need it because result + return []byte(result.String()), nil } - -func (a *mongodbExplainAction) sealed() {} diff --git a/agent/runner/actions/mongodb_explain_action_test.go b/agent/runner/actions/mongodb_explain_action_test.go index 8e927b71ec..41299a5857 100644 --- a/agent/runner/actions/mongodb_explain_action_test.go +++ b/agent/runner/actions/mongodb_explain_action_test.go @@ -16,10 +16,13 @@ package actions import ( "context" + "crypto/rand" "encoding/json" "fmt" + "math/big" "os" "path/filepath" + "strconv" "testing" "github.com/stretchr/testify/assert" @@ -33,6 +36,221 @@ import ( "github.com/percona/pmm/version" ) +func TestQueryExplain(t *testing.T) { + database := "testdb" + ctx := context.TODO() + + dsn := tests.GetTestMongoDBDSN(t) + client := tests.OpenTestMongoDB(t, dsn) + t.Cleanup(func() { + defer client.Disconnect(ctx) //nolint:errcheck + defer client.Database(database).Drop(ctx) //nolint:errcheck + }) + + t.Run("Find", func(t *testing.T) { + query := `{ + "ns": "config.collections", + "op": "query", + "command": { + "find": "collections", + "filter": { + "_id": { + "$regex": "^admin.", + "$options": "i" + } + }, + "$db": "config" + } + }` + runExplain(ctx, t, prepareParams(t, query)) + }) + + t.Run("Count", func(t *testing.T) { + query := `{ + "ns": "testdb.collection", + "op": "command", + "command": { + "count": "collection", + "query": { + "a": { + "$numberDouble": "5.0" + }, + "b": { + "$numberDouble": "5.0" + } + }, + "$db": "testdb" + } + }` + runExplain(ctx, t, prepareParams(t, query)) + }) + + t.Run("Count with aggregate", func(t *testing.T) { + query := `{ + "ns": "testdb.collection", + "op": "command", + "command": { + "aggregate": "collection", + "pipeline": [ + { + "$group": { + "_id": null, + "count": { + "$sum": { + "$numberDouble": "1.0" + } + } + } + }, + { + "$project": { + "_id": { + "$numberDouble": "0.0" + } + } + } + ], + "cursor": {}, + "$db": "testdb" + } + }` + runExplain(ctx, t, prepareParams(t, query)) + }) + + t.Run("Update", func(t *testing.T) { + query := `{ + "ns": "testdb.inventory", + "op": "update", + "command": { + "q": { + "item": "paper" + }, + "u": { + "$set": { + "size.uom": "cm", + "status": "P" + }, + "$currentDate": { + "lastModified": true + } + }, + "multi": false, + "upsert": false + } + }` + runExplain(ctx, t, prepareParams(t, query)) + }) + + t.Run("Remove", func(t *testing.T) { + query := `{ + "ns": "testdb.inventory", + "op": "remove", + "command": { + "q": { + "_id": { + "id": { + "$binary": { + "base64": "vN9ImShsRBaCIFJ23YkysA==", + "subType": "04" + } + }, + "uid": { + "$binary": { + "base64": "Y5mrDaxi8gv8RmdTsQ+1j7fmkr7JUsabhNmXAheU0fg=", + "subType": "00" + } + } + } + }, + "limit": { + "$numberInt": "0" + } + } + }` + runExplain(ctx, t, prepareParams(t, query)) + }) + + t.Run("Distinct", func(t *testing.T) { + query := `{ + "ns": "testdb.inventory", + "op": "command", + "command": { + "distinct": "inventory", + "key": "dept", + "query": {} + }, + "$db": "testdb" + } + }` + runExplain(ctx, t, prepareParams(t, query)) + }) + + t.Run("Insert - not supported", func(t *testing.T) { + query := `{ + "ns": "testdb.listingsAndReviews", + "op": "insert", + "command": { + "insert": "listingsAndReviews", + "ordered": true, + "$db": "testdb" + } + }` + runExplainExpectError(ctx, t, prepareParams(t, query)) + }) + + t.Run("Drop - not supported", func(t *testing.T) { + query := `{ + "ns": "testdb.listingsAndReviews", + "op": "command", + "command": { + "drop": "listingsAndReviews", + "$db": "testdb" + } + }` + runExplainExpectError(ctx, t, prepareParams(t, query)) + }) + + t.Run("PMM-12451", func(t *testing.T) { + // Query from customer to prevent wrong date/time, timestamp parsing in future and prevent regression. + query := `{"ns":"testdb.testDoc","op":"query","command":{"find":"testDoc","filter":{"$and":[{"c23":{"$ne":""}},{"c23":{"$ne":null},"delete":{"$ne":true}},{"$and":[{"c23":"985662747"},{"c15":{"$gte":{"$date":"2023-09-19T22:00:00.000Z"}}},{"c15":{"$lte":{"$date":"2023-10-20T21:59:59.000Z"}}},{"c8":{"$in":["X1118630710X","X1118630720X","X1118630730X","X1118630740X","X1118630750X","X1118630760X"]},"c22":{"$in":["X1118630710X","X1118630710XA","X1118630710XB","X1118630710XC","X1118630710XD","X1118630710XE"]},"c34":{"$in":["X1118630710X","X1118630710Y","X1118630710Z","X1118630710U","X1118630710V","X1118630710W"]}},{"c2":"xxxxxxx"},{"c29":{"$in":["X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X","X1118630710X"]}}]}]},"lsid":{"id":{"$binary":{"base64":"n/f5RI2jTTCoyt0y+8D9Cw==","subType":"04"}}},"$db":"testdb"}}` + runExplain(ctx, t, prepareParams(t, query)) + }) +} + +func prepareParams(t *testing.T, query string) *agentpb.StartActionRequest_MongoDBExplainParams { + t.Helper() + + return &agentpb.StartActionRequest_MongoDBExplainParams{ + Dsn: tests.GetTestMongoDBDSN(t), + Query: query, + } +} + +func runExplain(ctx context.Context, t *testing.T, params *agentpb.StartActionRequest_MongoDBExplainParams) { + t.Helper() + + big, err := rand.Int(rand.Reader, big.NewInt(27)) + require.NoError(t, err) + id := strconv.FormatUint(big.Uint64(), 10) + ex, err := NewMongoDBExplainAction(id, 0, params, os.TempDir()) + require.NoError(t, err) + res, err := ex.Run(ctx) + require.NoError(t, err) + require.NotEmpty(t, string(res)) +} + +func runExplainExpectError(ctx context.Context, t *testing.T, params *agentpb.StartActionRequest_MongoDBExplainParams) { + t.Helper() + + big, err := rand.Int(rand.Reader, big.NewInt(27)) + require.NoError(t, err) + id := strconv.FormatUint(big.Uint64(), 10) + ex, err := NewMongoDBExplainAction(id, 0, params, os.TempDir()) + require.NoError(t, err) + _, err = ex.Run(ctx) + require.Error(t, err) +} + func TestMongoDBExplain(t *testing.T) { database := "test" collection := "test_col" diff --git a/docs/release-notes/2.43.0.md b/docs/release-notes/2.43.0.md index f9ae4aca04..a931587a5a 100644 --- a/docs/release-notes/2.43.0.md +++ b/docs/release-notes/2.43.0.md @@ -67,3 +67,6 @@ If you're looking to upgrade, you can easily [install the latest version of Perc While these vulnerabilities did not directly impact PMM's core functionality, fixing them enhanced the overall security of the PMM Server environment. +- [PMM-12451](https://perconadev.atlassian.net/browse/PMM-12451) and [PMM-13017](https://perconadev.atlassian.net/browse/PMM-13017) - Resolved an issue with parsing JSON objects into the correct data types and aligned the explain functionality with the official MongoDB client. These updates enhance consistency with MongoDB's native tools and provide improved performance insights. + +- [PMM-13071](https://perconadev.atlassian.net/browse/PMM-13071) - The **Explain** tab on the Query Analytics (QAN) page now properly handles unsupported MongoDB query types. For operations like `INSERT`, which don’t support explain functionality, you will now see a clear message saying that the operation is not explainable. This replaces the previous, confusing error message about duplicate BSON fields, offering more accurate feedback in QAN. diff --git a/go.mod b/go.mod index fcf00c0948..241b5545fd 100644 --- a/go.mod +++ b/go.mod @@ -75,7 +75,7 @@ require ( github.com/sirupsen/logrus v1.9.3 github.com/stretchr/objx v0.5.2 github.com/stretchr/testify v1.9.0 - go.mongodb.org/mongo-driver v1.16.0 + go.mongodb.org/mongo-driver v1.16.1 go.starlark.net v0.0.0-20230717150657-8a3343210976 golang.org/x/crypto v0.26.0 golang.org/x/sync v0.8.0 diff --git a/go.sum b/go.sum index a10a28b660..046e96af53 100644 --- a/go.sum +++ b/go.sum @@ -804,8 +804,8 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t go.mongodb.org/mongo-driver v1.6.0/go.mod h1:Q4oFMbo1+MSNqICAdYMlC/zSTrwCogR4R8NzkI+yfU8= go.mongodb.org/mongo-driver v1.7.0/go.mod h1:Q4oFMbo1+MSNqICAdYMlC/zSTrwCogR4R8NzkI+yfU8= go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= -go.mongodb.org/mongo-driver v1.16.0 h1:tpRsfBJMROVHKpdGyc1BBEzzjDUWjItxbVSZ8Ls4BQ4= -go.mongodb.org/mongo-driver v1.16.0/go.mod h1:oB6AhJQvFQL4LEHyXi6aJzQJtBiTQHiAd83l0GdFaiw= +go.mongodb.org/mongo-driver v1.16.1 h1:rIVLL3q0IHM39dvE+z2ulZLp9ENZKThVfuvN/IiN4l8= +go.mongodb.org/mongo-driver v1.16.1/go.mod h1:oB6AhJQvFQL4LEHyXi6aJzQJtBiTQHiAd83l0GdFaiw= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= From 7eeffc0a6d36c6fd2cabe12bcae48bb927740298 Mon Sep 17 00:00:00 2001 From: Catalina A <94133018+catalinaadam@users.noreply.github.com> Date: Wed, 21 Aug 2024 16:14:57 +0300 Subject: [PATCH 09/17] API doc changes for 2.43 (#3056) * PMM-13054 * formatting * Update logs.md --- .../pmm-server-config/troubleshooting/logs.md | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/docs/api/pmm-server-config/troubleshooting/logs.md b/docs/api/pmm-server-config/troubleshooting/logs.md index 23ad6c2b9d..d1bc6186f0 100644 --- a/docs/api/pmm-server-config/troubleshooting/logs.md +++ b/docs/api/pmm-server-config/troubleshooting/logs.md @@ -3,12 +3,26 @@ title: Logs slug: "logs" category: 626badcabbc59c02acc1a540 --- +Download the logs and components configuration to troubleshoot any issues with the PMM Server. -Sometimes users need to troubleshoot an issue. PMM Server offers an ability to download the logs as well as configuration of its components. +## Accessing logs -You can download the logs either by calling this endpoint or by visiting a dedicated URL (ex: https://pmmdemo.percona.com/logs.zip) or via the **Settings UI** as explained in the [Troubleshooting](https://docs.percona.com/percona-monitoring-and-management/how-to/troubleshoot.html#client-server-connections) section of our docs. +PMM Server offers three ways to access and download logs: + +1. Through direct URL, by visiting `https:///logs.zip`. +2. By calling the Logs endpoint. This method enables you to customize the log content using the `line-count` parameter: For example: + + - Default 50,000 lines: `https:///logs.zip` + - Custom number of lines: `https:///logs.zip?line-count=10000` + - Unlimited, full log: `https:///logs.zip?line-count=-1` +3. Through the UI, by selecting the **Help > PMM Logs** option from the main menu. + If you need to share logs with Percona Support via an SFTP server, you can also use the **PMM Dump** option from the Help menu to generate a compressed tarball file with an export of your PMM metrics and QAN data. + For more information, see [Export PMM data with PMM Dump](https://docs.percona.com/percona-monitoring-and-management/how-to/PMM_dump.html) topic in the product documentation. + +## Log structure + +The downloaded logs package contains the following structure: -The structure of the logs is as follows: [block:code] { "codes": [ From 80f3c7e5348c660abc6d69f97135f9759b68f7b8 Mon Sep 17 00:00:00 2001 From: Catalina A <94133018+catalinaadam@users.noreply.github.com> Date: Wed, 21 Aug 2024 16:26:55 +0300 Subject: [PATCH 10/17] PMM-12574 (#3067) * Update 2.43.0.md * formatting * Update 2.43.0.md --- docs/release-notes/2.43.0.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/release-notes/2.43.0.md b/docs/release-notes/2.43.0.md index a931587a5a..8ff631abdd 100644 --- a/docs/release-notes/2.43.0.md +++ b/docs/release-notes/2.43.0.md @@ -14,6 +14,13 @@ This release introduces this and that ## Release highlights +### Official ARM support for PMM Client +With the growing adoption of ARM in data centers and cloud environments, we are excited to announce official support for ARM architecture in PMM Clients. This enables you to seamlessly monitor ARM-based infrastructure, including popular cloud instances and emerging ARM-powered servers. + +Starting with version 2.43, PMM now includes pre-built binaries for ARM architecture. With this update, PMM Client features, such as `node_exporter` and `mysqld_exporter`, are fully supported and optimized for ARM platforms. Additionally, ARM-based PMM Clients seamlessly integrate with existing PMM Server installations, enabling unified monitoring across both x86 and ARM architectures. + +#### Upgrading and getting started +If you have been compiling PMM on ARM manually, you can now upgrade to the 2.43 release for official support. The [Set up PMM Client topic](../setting-up/client/index.md) now also includes ARM-specific instructions for new installations. ### New MongoDB collector: CurrentOp @@ -33,6 +40,7 @@ Specifying a limit with `--max-collections` for this collector is not necessary. For more information on MongoDB collectors and metrics, see the [pmm-admin commands documentation](../use/commamds/pmm-admin.md). + ## Improvements - [PMM-13133](https://perconadev.atlassian.net/browse/PMM-13133) - From a3c584a1962f5ea3f5f131c9f5ee8696192c35f3 Mon Sep 17 00:00:00 2001 From: Catalina A <94133018+catalinaadam@users.noreply.github.com> Date: Wed, 21 Aug 2024 16:41:00 +0300 Subject: [PATCH 11/17] RepoDiscontinuation_AddRelNotes (#3085) * RepoDiscontinuation_AddRelNotes * Update docs/release-notes/2.43.0.md Co-authored-by: Michael Okoko <10512379+idoqo@users.noreply.github.com> --------- Co-authored-by: Michael Okoko <10512379+idoqo@users.noreply.github.com> --- docs/release-notes/2.43.0.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/release-notes/2.43.0.md b/docs/release-notes/2.43.0.md index 8ff631abdd..1386c934c6 100644 --- a/docs/release-notes/2.43.0.md +++ b/docs/release-notes/2.43.0.md @@ -14,6 +14,21 @@ This release introduces this and that ## Release highlights +### Repository changes for PMM: Transition to dedicated `pmm2-client` repository + + +Effective July 1, 2024, Percona has discontinued updates for the original Percona (https://repo.percona.com/percona/) and tools (https://repo.percona.com/tools/) repositories in favor of dedicated product repositories. This change streamlines our repository management and improves efficiency across our product ecosystem. + +For PMM users, this means you can now access the most up-to-date and secure versions of PMM exclusively from the dedicated [repo.percona.com/pmm2-client](`pmm2-client`) repository. To facilitate a smooth transition to this repo, we have developed an automated script that: + +1. Checks installed packages and their repositories +2. Identifies PMM-related packages that should be installed from the `pmm2-client` repository +3. Provides instructions for enabling the correct repository + +To ensure your PMM installation remains secure and up-to-date, [download this script from GitHub](https://raw.githubusercontent.com/Percona-Lab/release-aux/main/scripts/check_percona_packages.py) and run it on your system. + +For detailed instructions and more information about this change, check out [our recent blog post](https://www.percona.com/blog/ensure-the-correct-repositories-are-enabled-for-percona-packages/) and [updated documentation](). + ### Official ARM support for PMM Client With the growing adoption of ARM in data centers and cloud environments, we are excited to announce official support for ARM architecture in PMM Clients. This enables you to seamlessly monitor ARM-based infrastructure, including popular cloud instances and emerging ARM-powered servers. From 373bd8ba11ed512d481e0c94d0edf25388611a6a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Aug 2024 10:09:13 +0000 Subject: [PATCH 12/17] Bump github.com/vektra/mockery/v2 from 2.44.1 to 2.45.0 in /tools (#3165) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [github.com/vektra/mockery/v2](https://github.com/vektra/mockery) from 2.44.1 to 2.45.0. - [Release notes](https://github.com/vektra/mockery/releases) - [Changelog](https://github.com/vektra/mockery/blob/master/docs/changelog.md) - [Commits](https://github.com/vektra/mockery/compare/v2.44.1...v2.45.0) --- updated-dependencies: - dependency-name: github.com/vektra/mockery/v2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jiří Čtvrtka <62988319+JiriCtvrtka@users.noreply.github.com> --- tools/go.mod | 2 +- tools/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/go.mod b/tools/go.mod index 66750c56db..0ebbb5c5aa 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -22,7 +22,7 @@ require ( github.com/quasilyte/go-consistent v0.6.0 github.com/reviewdog/reviewdog v0.20.1 github.com/vburenin/ifacemaker v1.2.1 - github.com/vektra/mockery/v2 v2.44.1 + github.com/vektra/mockery/v2 v2.45.0 golang.org/x/perf v0.0.0-20230717203022-1ba3a21238c9 golang.org/x/tools v0.24.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 diff --git a/tools/go.sum b/tools/go.sum index 9105b9c532..5295a51024 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -717,8 +717,8 @@ github.com/vbatts/tar-split v0.11.5 h1:3bHCTIheBm1qFTcgh9oPu+nNBtX+XJIupG/vacinC github.com/vbatts/tar-split v0.11.5/go.mod h1:yZbwRsSeGjusneWgA781EKej9HF8vme8okylkAeNKLk= github.com/vburenin/ifacemaker v1.2.1 h1:3Vq8B/bfBgjWTkv+jDg4dVL1KHt3k1K4lO7XRxYA2sk= github.com/vburenin/ifacemaker v1.2.1/go.mod h1:5WqrzX2aD7/hi+okBjcaEQJMg4lDGrpuEX3B8L4Wgrs= -github.com/vektra/mockery/v2 v2.44.1 h1:lfvocO3HklLp68gezPBVaHl+5rKXloGCO7eTEXh71dA= -github.com/vektra/mockery/v2 v2.44.1/go.mod h1:XNTE9RIu3deGAGQRVjP1VZxGpQNm0YedZx4oDs3prr8= +github.com/vektra/mockery/v2 v2.45.0 h1:TDKO9y0CPv+/gm7KVBOJfzMcBeK7Y044jvaNdgBBVik= +github.com/vektra/mockery/v2 v2.45.0/go.mod h1:XNTE9RIu3deGAGQRVjP1VZxGpQNm0YedZx4oDs3prr8= github.com/xanzy/go-gitlab v0.106.0 h1:EDfD03K74cIlQo2EducfiupVrip+Oj02bq9ofw5F8sA= github.com/xanzy/go-gitlab v0.106.0/go.mod h1:ETg8tcj4OhrB84UEgeE8dSuV/0h4BBL1uOV/qK0vlyI= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= From baa1b1148a18fffa177776cae8cfde368a023467 Mon Sep 17 00:00:00 2001 From: Santo <31849787+sleto-it@users.noreply.github.com> Date: Thu, 22 Aug 2024 10:46:08 +0000 Subject: [PATCH 13/17] Add PMM-12965 in the 2.43.0 release notes (#3160) * Add PMM-12965 in the 2.43.0 release notes * add a note on how to get the updated template * catalina's feedback Co-authored-by: Catalina A <94133018+catalinaadam@users.noreply.github.com> --------- Co-authored-by: Catalina A <94133018+catalinaadam@users.noreply.github.com> --- docs/release-notes/2.43.0.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/release-notes/2.43.0.md b/docs/release-notes/2.43.0.md index 1386c934c6..15d9e06103 100644 --- a/docs/release-notes/2.43.0.md +++ b/docs/release-notes/2.43.0.md @@ -90,6 +90,17 @@ If you're looking to upgrade, you can easily [install the latest version of Perc While these vulnerabilities did not directly impact PMM's core functionality, fixing them enhanced the overall security of the PMM Server environment. + + +- [PMM-12965](https://perconadev.atlassian.net/browse/PMM-12965) - We've improved the +**MongoDB replication lag is high** alert template to make sure it: + +- now triggers only for `SECONDARY` nodes that are up and exceed the lag threshold, eliminating false alarms during maintenance. +- excludes `PRIMARY` nodes from alerts, as they cannot lag behind themselves. + +To ensure you're using the updated alert logic, make sure to recreate any alerts based on this alert rule template. + - [PMM-12451](https://perconadev.atlassian.net/browse/PMM-12451) and [PMM-13017](https://perconadev.atlassian.net/browse/PMM-13017) - Resolved an issue with parsing JSON objects into the correct data types and aligned the explain functionality with the official MongoDB client. These updates enhance consistency with MongoDB's native tools and provide improved performance insights. - [PMM-13071](https://perconadev.atlassian.net/browse/PMM-13071) - The **Explain** tab on the Query Analytics (QAN) page now properly handles unsupported MongoDB query types. For operations like `INSERT`, which don’t support explain functionality, you will now see a clear message saying that the operation is not explainable. This replaces the previous, confusing error message about duplicate BSON fields, offering more accurate feedback in QAN. + From d3d5430cc9b4119bf82ffb398491bc9ec881f550 Mon Sep 17 00:00:00 2001 From: Santo <31849787+sleto-it@users.noreply.github.com> Date: Thu, 22 Aug 2024 11:02:52 +0000 Subject: [PATCH 14/17] Adds PMM-13255 in the 2.43.0 release notes (#3149) * Adds PMM-13255 in the release notes * Update docs/release-notes/2.43.0.md Co-authored-by: Catalina A <94133018+catalinaadam@users.noreply.github.com> --------- Co-authored-by: Nurlan Moldomurov Co-authored-by: Catalina A <94133018+catalinaadam@users.noreply.github.com> --- docs/release-notes/2.43.0.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/docs/release-notes/2.43.0.md b/docs/release-notes/2.43.0.md index 15d9e06103..0d525633ae 100644 --- a/docs/release-notes/2.43.0.md +++ b/docs/release-notes/2.43.0.md @@ -58,13 +58,13 @@ For more information on MongoDB collectors and metrics, see the [pmm-admin comma ## Improvements -- [PMM-13133](https://perconadev.atlassian.net/browse/PMM-13133) - +- [PMM-13133](https://perconadev.atlassian.net/browse/PMM-13133) - -- [PMM-13054](https://perconadev.atlassian.net/browse/PMM-13054) - The default number of log lines for each log file returned by `httsp:///logs.zip` endpoint has been increased from 1,000 to 50,000. +- [PMM-13054](https://perconadev.atlassian.net/browse/PMM-13054) - The default number of log lines for each log file returned by `httsp:///logs.zip` endpoint has been increased from 1,000 to 50,000. Additionally, the endpoint now includes a customizable line-count parameter in the download URL, allowing you to specify a custom number of log lines or opt for unlimited log size. For more information, see the [API documentation](https://percona-pmm.readme.io/reference/logs). -- [PMM-13159](https://perconadev.atlassian.net/browse/PMM-13159) - We have removed the experimental MongoDB **Collection Details** dashboard from PMM. You can now find up-to-date collection information on the new Mongo **Cluster Summary** dashboard, which provides a more comprehensive and accurate view of MongoDB collection metrics. +- [PMM-13159](https://perconadev.atlassian.net/browse/PMM-13159) - We have removed the experimental MongoDB **Collection Details** dashboard from PMM. You can now find up-to-date collection information on the new Mongo **Cluster Summary** dashboard, which provides a more comprehensive and accurate view of MongoDB collection metrics. If you have been using the **Collection Details** dashboard, make sure to now check the new **MongoDB Cluster Summary** dashboard for similar information. @@ -77,7 +77,7 @@ As part of our ongoing maintenance efforts, we have upgraded the `pg_query_go` p However, with this change, QAN will no longer be able to list PostgreSQL database tables for versions 9.4, 9.5, and 9.6. Since all PostgreSQL 9.x versions have already reached their end-of-life status, we recommend upgrading to a supported version of PostgreSQL. -If you're looking to upgrade, you can easily [install the latest version of Percona Distribution for PostgreSQL](https://docs.percona.com/postgresql/16/installing.html). +If you're looking to upgrade, you can easily [install the latest version of Percona Distribution for PostgreSQL](https://docs.percona.com/postgresql/16/installing.html). ### Fixed issues @@ -86,9 +86,12 @@ If you're looking to upgrade, you can easily [install the latest version of Perc - [CVE-2024-33599](https://nvd.nist.gov/vuln/detail/CVE-2024-33599) - [CVE-2024-33600](https://nvd.nist.gov/vuln/detail/CVE-2024-33600) - [CVE-2024-33601](https://nvd.nist.gov/vuln/detail/CVE-2024-33601) - - [CVE-2024-33602](https://nvd.nist.gov/vuln/detail/CVE-2024-33602) - - While these vulnerabilities did not directly impact PMM's core functionality, fixing them enhanced the overall security of the PMM Server environment. + - [CVE-2024-33602](https://nvd.nist.gov/vuln/detail/CVE-2024-33602) + + + While these vulnerabilities did not directly impact PMM's core functionality, fixing them enhanced the overall security of the PMM Server environment. + +- [PMM-13255](https://perconadev.atlassian.net/browse/PMM-13255) - Resolved two issues with the MongoDB Replication Lag Alert: one where an error occurred during the import of the alert rule template, and another where the alert description displayed an incorrect current value for the replication lag. From 770a465100ee4d860a76ba71cd1713a83230912d Mon Sep 17 00:00:00 2001 From: Catalina A <94133018+catalinaadam@users.noreply.github.com> Date: Thu, 22 Aug 2024 17:23:18 +0300 Subject: [PATCH 15/17] PMM-12869 - Rel-Notes-for-improved-troubleshooting (#3171) * Improved troubleshooting section * Update docs/release-notes/2.43.0.md Co-authored-by: Nurlan Moldomurov --------- Co-authored-by: Nurlan Moldomurov --- docs/release-notes/2.43.0.md | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/docs/release-notes/2.43.0.md b/docs/release-notes/2.43.0.md index 0d525633ae..1b35d027ec 100644 --- a/docs/release-notes/2.43.0.md +++ b/docs/release-notes/2.43.0.md @@ -29,6 +29,23 @@ To ensure your PMM installation remains secure and up-to-date, [download this sc For detailed instructions and more information about this change, check out [our recent blog post](https://www.percona.com/blog/ensure-the-correct-repositories-are-enabled-for-percona-packages/) and [updated documentation](). +### Improved troubleshooting + +We've enhanced our troubleshooting capabilities to provide you with better insights and more efficient problem-solving tools: + +#### Enhanced PMM Server logs + +The default number of log lines for each log file returned by `httsp:///logs.zip` endpoint has been increased from 1,000 to 50,000. + +Additionally, the endpoint now includes a customizable line-count parameter in the download URL, allowing you to specify a custom number of log lines or opt for unlimited log size. For more information, see the [API documentation](https://percona-pmm.readme.io/reference/logs). + +#### Streamlined Kubernetes diagnostics + +New PMM client docker images now include essential troubleshooting tools: + +- `tar` enables easier file transfer in and out of containers using the `kubectl cp` command. +- `curl` allows direct checking of exporters to verify their proper functioning. + ### Official ARM support for PMM Client With the growing adoption of ARM in data centers and cloud environments, we are excited to announce official support for ARM architecture in PMM Clients. This enables you to seamlessly monitor ARM-based infrastructure, including popular cloud instances and emerging ARM-powered servers. @@ -60,10 +77,8 @@ For more information on MongoDB collectors and metrics, see the [pmm-admin comma - [PMM-13133](https://perconadev.atlassian.net/browse/PMM-13133) - -- [PMM-13054](https://perconadev.atlassian.net/browse/PMM-13054) - The default number of log lines for each log file returned by `httsp:///logs.zip` endpoint has been increased from 1,000 to 50,000. - -Additionally, the endpoint now includes a customizable line-count parameter in the download URL, allowing you to specify a custom number of log lines or opt for unlimited log size. For more information, see the [API documentation](https://percona-pmm.readme.io/reference/logs). - +- [PMM-13054](https://perconadev.atlassian.net/browse/PMM-13054) - The default number of log lines returned by the `/logs.zip` endpoint has been increased from 1,000 to 50,000, with an added option to customize the line count or allow unlimited log size via a parameter in the download URL. + - [PMM-13159](https://perconadev.atlassian.net/browse/PMM-13159) - We have removed the experimental MongoDB **Collection Details** dashboard from PMM. You can now find up-to-date collection information on the new Mongo **Cluster Summary** dashboard, which provides a more comprehensive and accurate view of MongoDB collection metrics. If you have been using the **Collection Details** dashboard, make sure to now check the new **MongoDB Cluster Summary** dashboard for similar information. From 221c484e94760d4cb24ba9575062e3a7908c7a6c Mon Sep 17 00:00:00 2001 From: Catalina A <94133018+catalinaadam@users.noreply.github.com> Date: Thu, 22 Aug 2024 18:57:52 +0300 Subject: [PATCH 16/17] Pmm 12766 - Adds Rel notes for newMongoDb dashboards (#3163) * draft * draft * draft * draft * formatting * formatting * changed structure * oplog and collection details dashboards GA * added SS * fixed SS * feedback from Roma * formatting * added link * Added Rel Summary * replaced jpg * deleted jpg --- docs/release-notes/2.43.0.md | 46 +++++++++++++++++++++++--- docs/release-notes/new_Mongo_menu.png | Bin 0 -> 52132 bytes 2 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 docs/release-notes/new_Mongo_menu.png diff --git a/docs/release-notes/2.43.0.md b/docs/release-notes/2.43.0.md index 1b35d027ec..55a84d4f11 100644 --- a/docs/release-notes/2.43.0.md +++ b/docs/release-notes/2.43.0.md @@ -10,9 +10,49 @@ It enables you to observe the health of your database systems, explore new patte ## What's new in this release -This release introduces this and that +PMM 2.43 brings a host of updates, including redesigned dashboards, new collectors and metrics, enhanced troubleshooting capabilities, strengthened security, and expanded platform support with official ARM compatibility for PMM Client. -## Release highlights +Additionally, it features many bug fixes and performance enhancements to improve your user experience. + +### MongoDB dashboard improvements and GA of recent experimental dashboard + +This update introduces significant enhancements to MongoDB monitoring, focusing on redesigned dashboards, streamlined navigation, and general availability of previously experimental dashboards. + +#### Redesigned dashboards + +We've overhauled two critical MongoDB dashboards to provide more value, especially for complex, multi-environment setups: + +- **Replica Set Summary** +- **Sharded Cluster Summary** (formerly Cluster Summary) + +These dashboards now offer enhanced usability, improved insights, and optimized visualizations for complex environments. They focus on highlighting potential database issues for faster resolution and provide centralized, actionable insights without clutter. + +#### General availability of Experimental dashboards + +The redesigned dashboards, along with the following previously experimental dashboards, are now generally available: + +- **MongoDB Oplog Details** +- **MongoDB Collection Overview** +- **Replica Set Summary** +- **Sharded Cluster Summary** (formerly Cluster Summary) + +#### Accessing the new dashboards + +The updated dashboards are in the **MongoDB** and **Dashboards** sections of the main menu. They replace the previous versions as the default dashboards for MongoDB monitoring. + +The old dashboards have been moved to the **Experimental** folder and renamed with **(Old)** appended to their names. Future releases will remove these older versions. + +#### Updated MongoDB menu structure + +To complement the dashboard improvements, we've also restructured the MongoDB section on the main menu for better navigation and accessibility: + +- Reorganized menu for a more intuitive navigation, prioritizing the three updated GA dashboards above. +- Decluttered view by moving older dashboards to the **Experimental** folder or removing them from the menu. +- Added **MongoDB Oplog Details**, **MongoDB Collection Overview**, and **MongoDB Instance Summary** to the main menu + +![New MongoDB menu structure](../images/new_Mongo_menu.png) + +We encourage you to start using the new dashboards to benefit from their enhanced monitoring capabilities. We also invite you to share your feedback in the [PMM forum](https://forums.percona.com/c/percona-monitoring-and-management-pmm/percona-monitoring-and-management-pmm-v2/31). ### Repository changes for PMM: Transition to dedicated `pmm2-client` repository @@ -71,8 +111,6 @@ Specifying a limit with `--max-collections` for this collector is not necessary. For more information on MongoDB collectors and metrics, see the [pmm-admin commands documentation](../use/commamds/pmm-admin.md). - - ## Improvements - [PMM-13133](https://perconadev.atlassian.net/browse/PMM-13133) - diff --git a/docs/release-notes/new_Mongo_menu.png b/docs/release-notes/new_Mongo_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..17b190ef51203d92990c79ed17fcde3620f42200 GIT binary patch literal 52132 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 Y%Y-;{&O5334)~K0krgf%)bss+00B|Cpa1{> literal 0 HcmV?d00001 From 3410da478622da5ccb4b9e455f217eb711db58d9 Mon Sep 17 00:00:00 2001 From: Catalina A <94133018+catalinaadam@users.noreply.github.com> Date: Fri, 23 Aug 2024 13:02:54 +0300 Subject: [PATCH 17/17] Adds missing bug descriptions to RelNotes (#3174) * added missing bug descriptions * removed duplicate --- docs/release-notes/2.43.0.md | 53 ++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 14 deletions(-) diff --git a/docs/release-notes/2.43.0.md b/docs/release-notes/2.43.0.md index 55a84d4f11..a140854d62 100644 --- a/docs/release-notes/2.43.0.md +++ b/docs/release-notes/2.43.0.md @@ -111,29 +111,54 @@ Specifying a limit with `--max-collections` for this collector is not necessary. For more information on MongoDB collectors and metrics, see the [pmm-admin commands documentation](../use/commamds/pmm-admin.md). + +## Maintenance + +### QAN update: Upgrade to `pg_query_go` v5 and impact on PostgreSQL 9.x + +As part of our ongoing maintenance efforts, we have upgraded the `pg_query_go` package to version 5. This latest version helps parse PostgreSQL queries in QAN, provides improved functionality, and enables subsequent upgrades of important dependencies. + +However, with this change, QAN will no longer be able to list PostgreSQL database tables for versions 9.4, 9.5, and 9.6. Since all PostgreSQL 9.x versions have already reached their end-of-life status, we recommend upgrading to a supported version of PostgreSQL. + +If you're looking to upgrade, you can easily [install the latest version of Percona Distribution for PostgreSQL](https://docs.percona.com/postgresql/16/installing.html). + ## Improvements -- [PMM-13133](https://perconadev.atlassian.net/browse/PMM-13133) - +- [PMM-13257](https://perconadev.atlassian.net/browse/PMM-13257): [Dashboards] - PMM 2.43 delivers refined MongoDB dashboards with standardized layouts, improved visual consistency, and enhanced usability across Replica Set, Cluster, Collections, and Oplog views, ensuring a more intuitive and efficient monitoring experience. -- [PMM-13054](https://perconadev.atlassian.net/browse/PMM-13054) - The default number of log lines returned by the `/logs.zip` endpoint has been increased from 1,000 to 50,000, with an added option to customize the line count or allow unlimited log size via a parameter in the download URL. +- [PMM-13003](https://perconadev.atlassian.net/browse/PMM-13003): [Dashboards] - The **MongoDB ReplSet Summary** dashboard now features a clearer, more organized layout with separate rows for CPU usage, CPU saturation, disk I/O, and network traffic for each node in replica sets with more than three nodes, improving visibility and analysis of multi-node deployments. -- [PMM-13159](https://perconadev.atlassian.net/browse/PMM-13159) - We have removed the experimental MongoDB **Collection Details** dashboard from PMM. You can now find up-to-date collection information on the new Mongo **Cluster Summary** dashboard, which provides a more comprehensive and accurate view of MongoDB collection metrics. +- [PMM-12982](https://perconadev.atlassian.net/browse/PMM-12982): [Dashboards] - The **MongoDB ReplSet Summary** dashboard now displays replica set roles (Primary, Secondary, Arbiter) for each node, enhancing visibility and simplifying identification of node functions within the replica set topology. -If you have been using the **Collection Details** dashboard, make sure to now check the new **MongoDB Cluster Summary** dashboard for similar information. +- [PMM-13258](https://perconadev.atlassian.net/browse/PMM-13258): [Dashboards] - Revamped **MongoDB** dashboard structure, featuring new and updated dashboards for improved monitoring of various MongoDB aspects including replicas, sharded clusters, collections, and oplogs, while moving older dashboards to the **Experimental** folder. +- [PMM-13227](https://perconadev.atlassian.net/browse/PMM-13227): [Dashboards] - Renamed the **MongoDB Cluster Summary** dashboard to **MongoDB Sharded Cluster Summary** to more accurately reflect its focus on sharded cluster environments, reducing potential confusion for users monitoring different MongoDB topologies. -## Maintenance +- [PMM-13217](https://perconadev.atlassian.net/browse/PMM-13217): [Dashboards] - The **MongoDB Sharded Cluster Summary** dashboard now displays the versions of mongoS routers alongside shard and config server versions, providing a more comprehensive view of the entire sharded cluster infrastructure. -### QAN update: Upgrade to `pg_query_go` v5 and impact on PostgreSQL 9.x +- [PMM-13183](https://perconadev.atlassian.net/browse/PMM-13183): [Dashboards] - The **Node States** chart in the **MongoDB ReplSet Summary** dashboard now auto-adjusts its size to display all nodes without scrolling, enhancing visibility and ease of monitoring for larger replica sets. -As part of our ongoing maintenance efforts, we have upgraded the `pg_query_go` package to version 5. This latest version helps parse PostgreSQL queries in QAN, provides improved functionality, and enables subsequent upgrades of important dependencies. +- [PMM-13029](https://perconadev.atlassian.net/browse/PMM-13029): [Dashboards] - Improved filtering consistency across all charts on the **MongoDB Oplog Details** dashboard, including the **Oplog GB/Hour** view, ensuring accurate data representation for selected MongoDB nodes. + +- [PMM-13159](https://perconadev.atlassian.net/browse/PMM-13159) [Dashboards] - We have removed the experimental MongoDB **Collection Details** dashboard from PMM. You can now find up-to-date collection information on the new Mongo **Cluster Summary** dashboard, which provides a more comprehensive and accurate view of MongoDB collection metrics. If you have been using the **Collection Details** dashboard, make sure to now check the new **MongoDB Cluster Summary** dashboard for similar information. -However, with this change, QAN will no longer be able to list PostgreSQL database tables for versions 9.4, 9.5, and 9.6. Since all PostgreSQL 9.x versions have already reached their end-of-life status, we recommend upgrading to a supported version of PostgreSQL. +- [PMM-13030](https://perconadev.atlassian.net/browse/PMM-13030): [Dashboards] - The **MongoDB Collections Overview** dashboard has been refined to ensure consistent data filtering across all charts, including **Top 5 Hottest Collections** views, aligning with user-selected database contexts for improved clarity and more accurate per-database analysis. + +- [PMM-13243](https://perconadev.atlassian.net/browse/PMM-13258) - Improved identification and monitoring of MongoDB cluster member roles, particularly for mongos instances, enabling clearer topology visualization and laying the groundwork for more precise alerting in sharded cluster environments. + +- [PMM-12333](https://perconadev.atlassian.net/browse/PMM-12333): [Installation] - The PMM client tarball installation process has been improved with more user-friendly features, including clearer error messages for permission issues, a helpful usage guide, and better overall guidance, making the setup process more intuitive and less error-prone for users. + +- [PMM-12957](https://perconadev.atlassian.net/browse/PMM-12957) - Introduced alerting capabilities for Percona Backup for MongoDB (PBM), leveraging newly added PBM-specific metrics to enable proactive monitoring of backup statuses, configurations, and performance across MongoDB deployments. + +- [PMM-13054](https://perconadev.atlassian.net/browse/PMM-13054) - The default number of log lines returned by the `/logs.zip` endpoint has been increased from 1,000 to 50,000, with an added option to customize the line count or allow unlimited log size via a parameter in the download URL. + +- [PMM-13292](https://perconadev.atlassian.net/browse/PMM-13292) - Introduced an improved mechanism to resolve port conflicts when starting multiple PMM agents on the same machine, enhancing reliability and reducing manual intervention in complex monitoring setups. -If you're looking to upgrade, you can easily [install the latest version of Percona Distribution for PostgreSQL](https://docs.percona.com/postgresql/16/installing.html). ### Fixed issues +- [PMM-13277](https://perconadev.atlassian.net/browse/PMM-13277) - PMM 2.43 is now available on the AWS Marketplace, resolving the previous temporary unavailability issue of PMM 2.42.0. Users can directly install or upgrade to PMM 2.43.0 through AWS Marketplace or the PMM UI for access to the latest features and improvements. + - [PMM-13246](https://perconadev.atlassian.net/browse/PMM-13246) - Addressed four security vulnerabilities (CVEs) related to the GNU C Library (Glibc), specifically affecting the Name Service Cache Daemon (nscd): - [CVE-2024-33599](https://nvd.nist.gov/vuln/detail/CVE-2024-33599) @@ -144,12 +169,13 @@ If you're looking to upgrade, you can easily [install the latest version of Perc While these vulnerabilities did not directly impact PMM's core functionality, fixing them enhanced the overall security of the PMM Server environment. -- [PMM-13255](https://perconadev.atlassian.net/browse/PMM-13255) - Resolved two issues with the MongoDB Replication Lag Alert: one where an error occurred during the import of the alert rule template, and another where the alert description displayed an incorrect current value for the replication lag. +- [PMM-13002](https://perconadev.atlassian.net/browse/PMM-13246): [Dashboards] - Fixed a bug in the **MongoDB ReplSet Summary** dashboard where the **Node Summary** section only displayed information for one node. It now correctly shows data for all nodes in a replica set when **All** is selected, providing a comprehensive view of multi-node deployments. +- [PMM-13255](https://perconadev.atlassian.net/browse/PMM-13255) - Resolved two issues with the MongoDB Replication Lag Alert: one where an error occurred during the import of the alert rule template, and another where the alert description displayed an incorrect current value for the replication lag. +- [PMM-13288](https://perconadev.atlassian.net/browse/PMM-13288) - Fixed an issue where queries longer than 2048 characters in PostgreSQL were not properly parsed for table extraction, now allowing accurate monitoring and analysis of long queries without generating error messages in logs. -- [PMM-12965](https://perconadev.atlassian.net/browse/PMM-12965) - We've improved the -**MongoDB replication lag is high** alert template to make sure it: +- [PMM-12965](https://perconadev.atlassian.net/browse/PMM-12965) - We've improved the **MongoDB replication lag is high** alert template to make sure it: - now triggers only for `SECONDARY` nodes that are up and exceed the lag threshold, eliminating false alarms during maintenance. - excludes `PRIMARY` nodes from alerts, as they cannot lag behind themselves. @@ -158,5 +184,4 @@ To ensure you're using the updated alert logic, make sure to recreate any alerts - [PMM-12451](https://perconadev.atlassian.net/browse/PMM-12451) and [PMM-13017](https://perconadev.atlassian.net/browse/PMM-13017) - Resolved an issue with parsing JSON objects into the correct data types and aligned the explain functionality with the official MongoDB client. These updates enhance consistency with MongoDB's native tools and provide improved performance insights. -- [PMM-13071](https://perconadev.atlassian.net/browse/PMM-13071) - The **Explain** tab on the Query Analytics (QAN) page now properly handles unsupported MongoDB query types. For operations like `INSERT`, which don’t support explain functionality, you will now see a clear message saying that the operation is not explainable. This replaces the previous, confusing error message about duplicate BSON fields, offering more accurate feedback in QAN. - +- [PMM-13071](https://perconadev.atlassian.net/browse/PMM-13071) - The **Explain** tab on the Query Analytics (QAN) page now properly handles unsupported MongoDB query types. For operations like `INSERT`, which don’t support explain functionality, you will now see a clear message saying that the operation is not explainable. This replaces the previous, confusing error message about duplicate BSON fields, offering more accurate feedback in QAN. \ No newline at end of file