From 54d6b7699520f2bf3223c079fcb9e6fce6fc4ac9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 19:34:05 +0300 Subject: [PATCH 01/26] Bump golang.org/x/text from 0.16.0 to 0.17.0 (#3141) Bumps [golang.org/x/text](https://github.com/golang/text) from 0.16.0 to 0.17.0. - [Release notes](https://github.com/golang/text/releases) - [Commits](https://github.com/golang/text/compare/v0.16.0...v0.17.0) --- updated-dependencies: - dependency-name: golang.org/x/text 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 | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 4c8957bb93..bf0f5abfd0 100644 --- a/go.mod +++ b/go.mod @@ -78,9 +78,9 @@ require ( go.mongodb.org/mongo-driver v1.16.0 go.starlark.net v0.0.0-20230717150657-8a3343210976 golang.org/x/crypto v0.24.0 - golang.org/x/sync v0.7.0 + golang.org/x/sync v0.8.0 golang.org/x/sys v0.23.0 - golang.org/x/text v0.16.0 + golang.org/x/text v0.17.0 golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d google.golang.org/genproto/googleapis/api v0.0.0-20240723171418-e6d459c13d2a google.golang.org/genproto/googleapis/rpc v0.0.0-20240723171418-e6d459c13d2a diff --git a/go.sum b/go.sum index 6f1f774e5c..cbc615c73d 100644 --- a/go.sum +++ b/go.sum @@ -945,8 +945,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1032,8 +1032,8 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= From 1782250319bca53e18eb1a863180466e7c724ae2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 16:42:47 +0000 Subject: [PATCH 02/26] Bump golang.org/x/tools (#3139) Bumps [golang.org/x/tools](https://github.com/golang/tools) from 0.21.1-0.20240508182429-e35e4ccd0d2d to 0.24.0. - [Release notes](https://github.com/golang/tools/releases) - [Commits](https://github.com/golang/tools/commits/v0.24.0) --- updated-dependencies: - dependency-name: golang.org/x/tools 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 | 10 +++++----- go.sum | 16 ++++++++-------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/go.mod b/go.mod index bf0f5abfd0..8859589f17 100644 --- a/go.mod +++ b/go.mod @@ -77,11 +77,11 @@ require ( github.com/stretchr/testify v1.9.0 go.mongodb.org/mongo-driver v1.16.0 go.starlark.net v0.0.0-20230717150657-8a3343210976 - golang.org/x/crypto v0.24.0 + golang.org/x/crypto v0.26.0 golang.org/x/sync v0.8.0 golang.org/x/sys v0.23.0 golang.org/x/text v0.17.0 - golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d + golang.org/x/tools v0.24.0 google.golang.org/genproto/googleapis/api v0.0.0-20240723171418-e6d459c13d2a google.golang.org/genproto/googleapis/rpc v0.0.0-20240723171418-e6d459c13d2a google.golang.org/grpc v1.65.0 @@ -257,10 +257,10 @@ require ( github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect go.opentelemetry.io/otel v1.24.0 // indirect go.opentelemetry.io/otel/trace v1.24.0 // indirect - golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.26.0 // 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/term v0.21.0 // indirect + golang.org/x/term v0.23.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gotest.tools/v3 v3.3.0 // indirect ) diff --git a/go.sum b/go.sum index cbc615c73d..9735fa6fe1 100644 --- a/go.sum +++ b/go.sum @@ -880,8 +880,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= +golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -921,8 +921,8 @@ golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= +golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1017,8 +1017,8 @@ golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU= +golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1096,8 +1096,8 @@ golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= +golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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 03/26] 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 04/26] 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 05/26] 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 06/26] 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 07/26] 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 08/26] 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 09/26] 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 10/26] 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 11/26] 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 12/26] 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 13/26] 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 14/26] 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 15/26] 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 16/26] 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 17/26] 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 18/26] 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 19/26] 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 From f906e28f261eb597bb5404c6f04a8ae9c6965b94 Mon Sep 17 00:00:00 2001 From: Catalina A <94133018+catalinaadam@users.noreply.github.com> Date: Fri, 23 Aug 2024 16:08:53 +0300 Subject: [PATCH 20/26] Improved security section (#3173) --- docs/release-notes/2.43.0.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/release-notes/2.43.0.md b/docs/release-notes/2.43.0.md index a140854d62..ae7f70d2ab 100644 --- a/docs/release-notes/2.43.0.md +++ b/docs/release-notes/2.43.0.md @@ -86,6 +86,12 @@ 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. +### Improved security + +This update addresses several security issues related to the GNU C Library (Glibc), specifically affecting the Name Service Cache Daemon (nscd). Additionally, it resolves multiple security vulnerabilities by upgrading various third-party packages. + +These enhancements strengthen the overall security of the PMM Server environment, although they do not directly impact PMM's core functionality. + ### 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. @@ -122,6 +128,7 @@ However, with this change, QAN will no longer be able to list PostgreSQL databas 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-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. @@ -157,6 +164,9 @@ If you're looking to upgrade, you can easily [install the latest version of Perc ### Fixed issues + +- [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), [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). + - [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): @@ -167,7 +177,7 @@ If you're looking to upgrade, you can easily [install the latest version of Perc - [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-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. From 1c36efe6f8f85d612ccfb5a73c1c913bd50a24d0 Mon Sep 17 00:00:00 2001 From: Talha Bin Rizwan Date: Mon, 26 Aug 2024 12:31:28 +0500 Subject: [PATCH 21/26] PMM-13244 Drop amazon linux 2. (#3169) * PMM-13244 Drop amazon linux 2. * PMM-13244 Drop amazon linux 2. * PMM-13244 Drop amazon linux 2. * PMM-13244 Drop amazon linux 2. * PMM-13244 Drop amazon linux 2. * PMM-13244 Drop amazon linux 2. * PMM-13244 Drop amazon linux 2. * Update .gitignore Co-authored-by: Alex Demidoff * Update build/ansible/pmm2/post-build-actions.yml Co-authored-by: Alex Demidoff * Update build/ansible/roles/pmm2-images/tasks/main.yml Co-authored-by: Alex Demidoff * Update build/docker/server/Dockerfile.el9 Co-authored-by: Alex Demidoff * PMM-13244 Update build/ansible/roles/supervisord-init/tasks/main.yml * PMM-13244 Use Ansible var instead of Docker env var. * Update build/packer/aws.pkr.hcl Co-authored-by: Alex Demidoff * Update build/packer/aws.pkr.hcl Co-authored-by: Alex Demidoff --------- Co-authored-by: Alex Demidoff --- .gitignore | 2 + build/ansible/pmm2/post-build-actions.yml | 24 ++++---- .../ansible/roles/pmm2-images/tasks/main.yml | 12 ++-- build/ansible/roles/pmm2-images/vars/main.yml | 2 + .../roles/supervisord-init/tasks/main.yml | 6 +- build/docker/server/Dockerfile.el9 | 6 +- build/packer/ansible/agent-aws.yml | 57 ++++++++++++------- build/packer/aws.pkr.hcl | 8 +-- 8 files changed, 69 insertions(+), 48 deletions(-) diff --git a/.gitignore b/.gitignore index 449b577734..f17fdd9d00 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,5 @@ cli-tests/playwright-report/ api-tests/pmm-api-tests-output.txt api-tests/pmm-api-tests-junit-report.xml + +packer.log diff --git a/build/ansible/pmm2/post-build-actions.yml b/build/ansible/pmm2/post-build-actions.yml index c9b61c24dc..18d160884a 100644 --- a/build/ansible/pmm2/post-build-actions.yml +++ b/build/ansible/pmm2/post-build-actions.yml @@ -7,11 +7,12 @@ vars: pmm_client_repos: "pmm2-client testing" pmm_client_repos_final: "pmm2-client release" + pmm_running_in_docker: false # Set a default value tasks: # pmm-managed checks that if /srv/pmm-distribution exist, it contains "docker", "ovf", or "ami" (all lowercase) - name: Detect distribution | Create '/srv/pmm-distribution' file for Docker - when: ansible_virtualization_type == "docker" + when: pmm_running_in_docker copy: content: "docker" dest: /srv/pmm-distribution @@ -28,6 +29,7 @@ ( ansible_virtualization_type == "xen" or ansible_virtualization_type == "kvm" ) and ansible_system_vendor != "DigitalOcean" + and not pmm_running_in_docker copy: content: "ami" dest: /srv/pmm-distribution @@ -50,14 +52,14 @@ state: present update_cache: yes when: - - ansible_virtualization_type != "docker" + - not pmm_running_in_docker - ansible_distribution == 'OracleLinux' or ansible_distribution == 'AlmaLinux' - ansible_distribution_major_version == '9' - name: Set locale to en_US.utf8 | EL9 command: localectl set-locale LANG=en_US.utf8 when: - - ansible_virtualization_type != "docker" + - not pmm_running_in_docker - ansible_distribution == 'OracleLinux' or ansible_distribution == 'AlmaLinux' - ansible_distribution_major_version == '9' @@ -102,11 +104,11 @@ # ignore_errors: True - name: Supervisord stop | Stop supervisord service for AMI/OVF - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker service: name=supervisord state=stopped enabled=yes - name: Supervisord stop | Stop supervisord service for docker - when: ansible_virtualization_type == "docker" + when: pmm_running_in_docker shell: supervisorctl shutdown # PMM-11336 - The previous steps failed to start PostgreSQL using supervisord, @@ -118,14 +120,14 @@ become: yes become_user: postgres ignore_errors: yes - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker - name: Start PostgreSQL database without supervisord command: /usr/pgsql-14/bin/pg_ctl start -D /srv/postgres14 become: yes become_user: postgres ignore_errors: yes - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker - name: Remove pmm-managed database EL7 when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == '7' @@ -160,18 +162,18 @@ become: yes become_user: postgres ignore_errors: yes - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker - name: Supervisord stop | Stop supervisord service for AMI/OVF - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker service: name=supervisord state=stopped enabled=yes - name: Supervisord stop EL7 | Stop supervisord service for docker - when: ansible_virtualization_type == "docker" and ansible_distribution == 'CentOS' and ansible_distribution_major_version == '7' + when: pmm_running_in_docker and ansible_distribution == 'CentOS' and ansible_distribution_major_version == '7' shell: supervisorctl shutdown - name: Supervisord stop EL9 | Stop supervisord service for docker - when: ansible_virtualization_type == "docker" and (ansible_distribution == 'OracleLinux' or ansible_distribution == 'AlmaLinux') and ansible_distribution_major_version == '9' + when: pmm_running_in_docker and (ansible_distribution == 'OracleLinux' or ansible_distribution == 'AlmaLinux') and ansible_distribution_major_version == '9' shell: /usr/local/bin/supervisorctl shutdown - name: Cleanup yum cache | Cleanup yum cache diff --git a/build/ansible/roles/pmm2-images/tasks/main.yml b/build/ansible/roles/pmm2-images/tasks/main.yml index 3ab716ba59..2a7c28ee66 100644 --- a/build/ansible/roles/pmm2-images/tasks/main.yml +++ b/build/ansible/roles/pmm2-images/tasks/main.yml @@ -29,7 +29,7 @@ # local yum repo for building of pmm server docker image in autobuild jobs - name: PMM | Add local YUM repository - when: ansible_virtualization_type == "docker" + when: pmm_running_in_docker yum_repository: name: local description: Local YUM repository - x86_64 @@ -89,7 +89,7 @@ - name: Create users for non-docker images | Create users user: name: "pmm" - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker - name: Create users and groups in docker container block: @@ -120,7 +120,7 @@ - { name: grafana, uid: 998, comment: "Grafana Dashboard", shell: "/sbin/nologin", home: "/etc/grafana", group: grafana, } - { name: clickhouse, uid: 997, comment: "Clickhouse server", shell: "/sbin/nologin", home: "/var/lib/clickhouse", group: clickhouse, } - { name: pmm-agent, uid: 996, comment: "pmm-agent", shell: "/bin/false", home: "/usr/local/percona/", group: pmm-agent, } - when: ansible_virtualization_type == "docker" + when: pmm_running_in_docker - name: Create directories | Create dirs file: path={{ item }} state=directory owner=pmm group=pmm @@ -138,7 +138,7 @@ mode: "0775" - name: Create dirs | Create dirs - when: ansible_virtualization_type == "docker" + when: pmm_running_in_docker file: path={{ item }} state=directory with_items: - /var/lib/cloud/scripts/per-once @@ -178,11 +178,11 @@ enablerepo: "{{ pmm_client_repo_name }}" - name: Disable pmm-agent service | Disable pmm-agent - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker service: name=pmm-agent state=stopped enabled=no - name: Create tmp dirs | Create tmp dirs - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker command: /usr/bin/systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev - name: Copy grafana.ini file for the first run diff --git a/build/ansible/roles/pmm2-images/vars/main.yml b/build/ansible/roles/pmm2-images/vars/main.yml index 7410e4a875..4469094387 100644 --- a/build/ansible/roles/pmm2-images/vars/main.yml +++ b/build/ansible/roles/pmm2-images/vars/main.yml @@ -4,3 +4,5 @@ pmm_client_repos: "pmm2-client testing" # line below is sed'ed by build-server-docker script pmm_client_repo_name: "pmm2-client-testing-x86_64" + +pmm_running_in_docker: false # Set a default value diff --git a/build/ansible/roles/supervisord-init/tasks/main.yml b/build/ansible/roles/supervisord-init/tasks/main.yml index 72d87df658..2001ddd5f4 100644 --- a/build/ansible/roles/supervisord-init/tasks/main.yml +++ b/build/ansible/roles/supervisord-init/tasks/main.yml @@ -69,7 +69,7 @@ state: directory - name: Configure supervisor | Add /etc/tmpfiles.d/supervisor.conf config - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker copy: content: | D /var/run/supervisor 0775 root root - @@ -91,7 +91,7 @@ value: dummy - name: Configure supervisor | Increase number of open files for jobs - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker ini_file: dest: /etc/supervisord.conf section: supervisord @@ -99,7 +99,7 @@ value: "800000" - name: Configure supervisor | Add supervisord.service - when: ansible_virtualization_type != "docker" + when: not pmm_running_in_docker copy: src: supervisord.service dest: /usr/lib/systemd/system/ diff --git a/build/docker/server/Dockerfile.el9 b/build/docker/server/Dockerfile.el9 index 4fb9001f98..b8b295b671 100644 --- a/build/docker/server/Dockerfile.el9 +++ b/build/docker/server/Dockerfile.el9 @@ -33,9 +33,9 @@ COPY gitCommit /tmp/gitCommit COPY ansible /opt/ansible # NOTE: this needs to be refactored, since some of the playbooks are duplicates RUN cp -r /opt/ansible/roles /opt/ansible/pmm2-docker/roles -RUN ansible-playbook -vvv -i 'localhost,' -c local /opt/ansible/pmm2-docker/main.yml \ - && ansible-playbook -vvv -i 'localhost,' -c local /usr/share/pmm-update/ansible/playbook/tasks/update.yml \ - && ansible-playbook -vvv -i 'localhost,' -c local /opt/ansible/pmm2/post-build-actions.yml +RUN ansible-playbook -vvv -i 'localhost,' -c local /opt/ansible/pmm2-docker/main.yml -e "pmm_running_in_docker=true" \ + && ansible-playbook -vvv -i 'localhost,' -c local /usr/share/pmm-update/ansible/playbook/tasks/update.yml -e "pmm_running_in_docker=true" \ + && ansible-playbook -vvv -i 'localhost,' -c local /opt/ansible/pmm2/post-build-actions.yml -e "pmm_running_in_docker=true" COPY entrypoint.sh /opt/entrypoint.sh HEALTHCHECK --interval=3s --timeout=2s --start-period=10s --retries=3 CMD curl -f http://127.0.0.1/v1/readyz || exit 1 diff --git a/build/packer/ansible/agent-aws.yml b/build/packer/ansible/agent-aws.yml index f5d8c84ef9..63075ed46e 100644 --- a/build/packer/ansible/agent-aws.yml +++ b/build/packer/ansible/agent-aws.yml @@ -22,10 +22,36 @@ - name: Add a repository for NodeJS shell: "curl -fsSL https://rpm.nodesource.com/setup_{{ node_version }} | bash -" + - name: Install Oracle EPEL Repo + yum: + name: oracle-epel-release-el9 + state: latest + + - name: Install yum-utils + yum: + name: yum-utils + state: latest + + - name: Add Docker repository + command: yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo + + - name: Install Docker packages + yum: + name: + - docker-ce + - docker-ce-cli + - containerd.io + state: latest + + - name: Enable Docker service + systemd: + name: docker + enabled: yes + state: started + - name: Install packages - package: + yum: name: - - docker - git - jq - gettext @@ -41,22 +67,22 @@ - gcc - make - perl - # - p7zip + #- p7zip - nodejs - state: present + state: latest - name: Install Java17 - package: - name: jdk-17-headless - state: present + yum: + name: java-17-openjdk-headless + state: latest - name: Install pip3 and ansible - package: + yum: name: - python3-pip - ansible-core - glibc-langpack-en - state: present + state: latest - name: Install ansible collections shell: "ansible-galaxy collection install {{ item }}" @@ -110,8 +136,7 @@ mode: "555" - name: Install Python's virtualenv - pip: - name: virtualenv + command: python3 -m venv /home/ec2-user/venv - name: Install Python modules pip: @@ -276,16 +301,6 @@ name: fs.inotify.max_user_watches value: 1048576 - - name: Get disk UUID - command: blkid -s UUID -o value /dev/nvme0n1p1 - register: disk_uuid - - - name: Replace fstab entities with new mount options - lineinfile: - path: /etc/fstab - regexp: "^UUID={{ disk_uuid.stdout }}" - line: "UUID={{ disk_uuid.stdout }} / xfs defaults,noatime,nobarrier,discard 1 1" - - name: Add repo.ci.percona.com to /etc/hosts lineinfile: dest: /etc/hosts diff --git a/build/packer/aws.pkr.hcl b/build/packer/aws.pkr.hcl index d3bd6cd7cf..67e713959c 100644 --- a/build/packer/aws.pkr.hcl +++ b/build/packer/aws.pkr.hcl @@ -39,9 +39,9 @@ source "amazon-ebs" "agent" { iit-billing-tag = "pmm-worker" } launch_block_device_mappings { - device_name = "/dev/xvda" - volume_size = 50 - volume_type = "gp3" + device_name = "/dev/sda1" + volume_size = 50 + volume_type = "gp3" delete_on_termination = true } vpc_filter { @@ -114,7 +114,7 @@ build { user = "ec2-user" ansible_env_vars = ["ANSIBLE_NOCOLOR=True"] extra_arguments = [ - "--ssh-extra-args", "-o HostKeyAlgorithms=+ssh-rsa -o StrictHostKeyChecking=no -o ForwardAgent=yes -o UserKnownHostsFile=/dev/null", "-v" + "--ssh-extra-args", "-o HostKeyAlgorithms=+ssh-rsa -o StrictHostKeyChecking=no -o ForwardAgent=yes -o UserKnownHostsFile=/dev/null", "-vvv" ] playbook_file = "./ansible/agent-aws.yml" } From 01b41dfff769d910d7c01506bc98b87023a6a5fc Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Mon, 26 Aug 2024 13:39:33 +0300 Subject: [PATCH 22/26] PMM-13317 Remove clickhouse exporter, update the guide (#3168) --- CONTRIBUTING.md | 79 ++++++++++++++++------------- build/scripts/build-client-binary | 1 - build/scripts/build-client-packages | 2 - build/scripts/build-client-source | 1 - managed/models/database.go | 9 ---- 5 files changed, 43 insertions(+), 49 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b629c4234c..5e7c7fa367 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -33,7 +33,7 @@ This project is built from several repositories: #### Frontends * [percona/grafana-dashboards](https://github.com/percona/grafana-dashboards) PMM dashboards for database monitoring -* [percona-platform/grafana](https://github.com/percona-platform/grafana) user interface for PMM +* [percona/grafana](https://github.com/percona/grafana) user interface for PMM ### PMM Client @@ -46,7 +46,6 @@ This project is built from several repositories: * [percona/proxysql_exporter](https://github.com/percona/proxysql_exporter) exports ProxySQL server's metrics * [percona/rds_exporter](https://github.com/percona/rds_exporter) exports metrics from RDS * [percona/azure_exporter](https://github.com/percona/azure_metrics_exporter) exports metrics from Azure -* [Percona-Lab/clickhouse_exporter](https://github.com/Percona-Lab/clickhouse_exporter) exports metrics from ClickHouse * [percona/percona-toolkit](https://github.com/percona/percona-toolkit) is a collection of advanced command-line tools to perform a variety of MySQL and system tasks that are too difficult or complex to perform manually @@ -119,8 +118,8 @@ Since PMM has a lot of components, we will mention only three big parts of it. ### PMM Server * Clone [pmm repository](https://github.com/percona/pmm) -* Run `make env-up` to start development container. This will be slow on first run, all consequent calls will be order of magnitude faster, because development container will be reused. From time to time it is recommended to perform container rebuild to pull the latest changes, for that run `make env-up-rebuild`. -* To run pmm-managed with a new changes just run `make env TARGET="run-managed"`, it updates `pmm-managed` running in container. +* Run `make env-up` to start development container. This will be slow on first run, all subsequent runs will be order of magnitude faster, because development container will be reused. From time to time it is recommended to rebuild the container to pull the latest changes by running `make env-up-rebuild`. +* To run pmm-managed with your code changes, just run `make run-managed`. It updates `pmm-managed` running in the container. ### PMM Client @@ -129,11 +128,11 @@ Since PMM has a lot of components, we will mention only three big parts of it. * Run `make setup-dev` to connect pmm-agent to PMM Server. * This command will register local pmm-agent to PMM Server and generate config file `pmm-agent-dev.yaml` * Once it's connected just use `make run` to run pmm-agent. -* To work correctly pmm-agent needs vmagent and exporters installed on the system. - * First option is just install pmm-client using this instrucion https://docs.percona.com/percona-monitoring-and-management/setting-up/client/index.html#install. It will install all exporters as well. +* To work correctly, pmm-agent needs vmagent and exporters installed on the system. + * The first option is to install pmm-client using this instrucion https://docs.percona.com/percona-monitoring-and-management/setting-up/client/index.html#install. It will install all exporters as well. * Another option is to do it manually - * vmagent and exporters can be installed by building each of them or by downloading the pmm-client tarball from [percona.com](https://www.percona.com/downloads/pmm2/) and copying binaries to the exporters_base directory configured in a `pmm-agent-dev.yaml` file. - * All paths to exporters binaries are configured in `pmm-agent-dev.yaml`, so they can be changed manually + * vmagent and exporters can be installed by building each of them or by downloading the pmm-client tarball from [percona.com](https://www.percona.com/downloads/pmm2/) and copying binaries to the exporters_base directory configured in `pmm-agent-dev.yaml` file. + * All paths to exporter binaries are configured in `pmm-agent-dev.yaml`, so they can be changed manually if necessary. ### Exporters @@ -145,20 +144,24 @@ See [Grafana Dashboards Contribution Guide](https://github.com/percona/grafana-d ## Tests -In a PMM we have 3 kind of tests. +In PMM we have 3 kinds of tests: + + - unit tests + - API tests + - end-to-end, or e2e, tests ### Unit tests -The first one is a Unit testing, so we have unit tests in each repository mentioned above. each of repositories has it's own instruction how to run unit tests. +Each repository mentioned above has its own set of unit tests, as well as its own instruction on how to run unit tests. ### API tests -API tests are included into pmm repository and located in [api-tests directory](https://github.com/percona/pmm/tree/main/api-tests). API tests runs against running PMM Server container. +API tests are part of the PMM repository and can be found in [api-tests directory](https://github.com/percona/pmm/tree/main/api-tests). API tests run inside of an active PMM Server container. -### End to End (E2E) tests +### End-to-end (E2E) tests -End to End tests are located in [pmm-qa repository](https://github.com/percona/pmm-qa). They includes UI tests and CLI tests. -Please see [readme](https://github.com/percona/pmm-qa#readme) for details on how to run these. +End-to-end tests are located in [pmm-qa repository](https://github.com/percona/pmm-qa). They include UI tests and CLI tests. +Please refer to [readme](https://github.com/percona/pmm-qa#readme) for details on how to run these. ## Submitting a Pull Request @@ -167,49 +170,53 @@ Before proceeding with your first pull request, we highly recommend you to read - [Tech stack](docs/process/tech_stack.md) - [Best practices](docs/process/best_practices.md) -As a PR created you are responsible to: -* make sure PR is ready (linted, tested and etc) -* make sure it is reviewed (ask for review, ping reviewers and etc) -* make sure it is merged - * merge when it is reviewed and tested - * ask code owners/admins to merge it if merging is blocked for some reason +Once your PR is created, please do the following: +* prepare your PR for review + * run code syntax checks, or linters + * run tests and make sure they all pass +* pass the review (ask for review, ping reviewers) +* then merge it + * ask code owners or admins to merge it if merging is blocked for some reason ## Feature Build -PMM is quite complex project, it consists from many different repos descibed above. Feature Build (FB) is a way to get changes all together, build them all together, run tests and get client and server containers. +PMM is quite a complex project, it consists of many different repos described above. A Feature Build (FB) is a way to put everything together, build all components, run tests and, finally, build client and server containers. Please see: [How to create a feature build](https://github.com/Percona-Lab/pmm-submodules/blob/PMM-2.0/README.md#how-to-create-a-feature-build) -### The Goals of the Feature Builds +### The Goals of Feature Builds -1. Provide an easy way to test/accept functionality for PO/PM and QA -2. Inform the Developer about Automation Tests results before the code is merged -3. (Future) Let the Developers add/modify e2e tests when they change functionality +1. Provide a way to have the functionality tested by the developer and QA (or other PMM team members) +2. Inform the Developer about Automation Test results before the code is merged +3. Let the Developers add or modify e2e tests whenever there are functional changes ### The Rules -1. Start Feature Build for every feature/improvement you are working on. -2. Start PullRequest to percona-lab/pmm-submodules as DRAFT. -3. Change the status of Pull Request from Draft to Open ONLY if your changes must be merged to pmm-submodules. -4. Include a short explanation in the Long Description field of the Feature in PR for feature build and checkboxes to all related Pull Requests. Check other [PRs](https://github.com/Percona-Lab/pmm-submodules/pulls) as examples. +1. Create a Feature Build for every feature/improvement/bugfix you are working on. +2. Create a draft Pull Request in https://percona-lab/pmm-submodules. +3. Change the status of the Pull Request from Draft to Open ONLY if you are contributing code changes to pmm-submodules (very rare). +4. Provide a short explanation in the Description field of you feature build PR and checkboxes to all related Pull Requests. If you need examples, check out [PRs](https://github.com/Percona-Lab/pmm-submodules/pulls) made by others. 5. After all related PRs in feature build are merged you should: a. either close the PR and delete the branch (this is the default option) or - b. merge the PR to pmm-submodules repository (please note, this rarely needs to be merged, for example infrastructure changes do) + b. merge the PR to pmm-submodules repository (please note, this rarely needs to be merged, for example infrastructure changes) ## Code Reviews -There are number of approaches for the code review and ownership: Code Ownership (CODEOWNERS), [github auto review](https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/managing-code-review-assignment-for-your-team), PR owner assign ppl that are better fit for the particular code/job. +There is a number of approaches we use for the code review and ownership: + +- code ownership, which is enforced via github's CODEOWNERS file +- github [code review assignment](https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/managing-code-review-assignment-for-your-team) +- finally, a PR owner can manually assign reviewers (usually one or more PMM team members). -For more efficient review process we use a mixed approach: -* repos that have CODEOWNERS +To make the review process effective, we use a mixed approach: +* for repos that have CODEOWNERS * github will assign reviewers automatically -* repos that don't have CODEOWNERS +* for repos that don't have CODEOWNERS * add reviewers as follows: * add `pmm-review-fe` for UI/UX reviews * add `pmm-review-exporters` for exporter reviews [see PMM Client](#PMM-Client) * add `pmm-review-be` for backend reviews -* if you know exactly who should review your code - * add them to the review +* if you know exactly who should review your code, add them to the review | Team | Description | Members | diff --git a/build/scripts/build-client-binary b/build/scripts/build-client-binary index 27e1c2ae86..6deb8390b4 100755 --- a/build/scripts/build-client-binary +++ b/build/scripts/build-client-binary @@ -103,7 +103,6 @@ main() { gobuild_component "proxysql_exporter" gobuild_component "rds_exporter" gobuild_component "azure_metrics_exporter" - gobuild_component "clickhouse_exporter" "" "github.com/Percona-Lab/clickhouse_exporter" gobuild_component "pmm-admin" "pmm" "" "admin" gobuild_component "pmm-agent" "pmm" "" "agent" diff --git a/build/scripts/build-client-packages b/build/scripts/build-client-packages index 68c2d03bda..1d6f89c704 100755 --- a/build/scripts/build-client-packages +++ b/build/scripts/build-client-packages @@ -475,8 +475,6 @@ if [ "$TARBALL" = '1' -o "$SOURCE" = '1' ]; then ProxysqlExp_REPO=$(get_repos "proxysql_exporter") NodeExp_BRANCH_NAME=$(get_branches "node_exporter") NodeExp_REPO=$(get_repos "node_exporter") - ClickhouseExp_BRANCH_NAME=$(get_branches "clickhouse_exporter") - ClickhouseExp_REPO=$(get_repos "clickhouse_exporter") AzureExp_BRANCH_NAME=$(get_branches "azure_metrics_exporter") AzureExp_REPO=$(get_repos "azure_metrics_exporter") fi diff --git a/build/scripts/build-client-source b/build/scripts/build-client-source index b9867f764b..df923cbee8 100755 --- a/build/scripts/build-client-source +++ b/build/scripts/build-client-source @@ -69,7 +69,6 @@ main() { prepare_tarball postgres_exporter prepare_tarball proxysql_exporter prepare_tarball node_exporter - prepare_tarball clickhouse_exporter prepare_tarball rds_exporter prepare_tarball azure_metrics_exporter diff --git a/managed/models/database.go b/managed/models/database.go index 01d3be9dd4..b6566a6776 100644 --- a/managed/models/database.go +++ b/managed/models/database.go @@ -1163,9 +1163,6 @@ func migrateDB(db *reform.DB, params SetupDBParams) error { if err = setupFixture1(tx.Querier, params); err != nil { return err } - if err = setupFixture2(tx.Querier, params.Username, params.Password); err != nil { - return err - } return nil }) } @@ -1253,12 +1250,6 @@ func setupFixture1(q *reform.Querier, params SetupDBParams) error { return nil } -func setupFixture2(q *reform.Querier, username, password string) error { //nolint:revive - // TODO add clickhouse_exporter - - return nil -} - // parsePGAddress parses PostgreSQL address into address:port; if no port specified returns default port number. func parsePGAddress(address string) (string, uint16, error) { if !strings.Contains(address, ":") { From def848fb4988960604c29ddd590749e6ab4cc037 Mon Sep 17 00:00:00 2001 From: Talha Bin Rizwan Date: Mon, 26 Aug 2024 20:08:36 +0500 Subject: [PATCH 23/26] PMM-13244 Drop centos-7 ovf agent (#3179) --- build/packer/ansible/agent-do.yml | 108 +++++++++++++++++++++++++----- build/packer/do.pkr.hcl | 6 +- 2 files changed, 96 insertions(+), 18 deletions(-) diff --git a/build/packer/ansible/agent-do.yml b/build/packer/ansible/agent-do.yml index 44ae5485fa..40a968c163 100644 --- a/build/packer/ansible/agent-do.yml +++ b/build/packer/ansible/agent-do.yml @@ -14,6 +14,11 @@ # Alternative architecture name just because we never can have only one name in computers ansible_architecture_alt: "{% if ansible_architecture == 'x86_64' %}amd64{% elif ansible_architecture == 'aarch64' %}arm64{% else %}none{% endif %}" + - name: Add hashicorp repository + get_url: + url: https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo + dest: /etc/yum.repos.d/hashicorp.repo + - name: Enable epel repo yum: name: epel-release @@ -27,10 +32,26 @@ - name: Add a repository for NodeJS shell: "curl -fsSL https://rpm.nodesource.com/setup_{{ node_version }} | bash -" + - name: Install docker + block: + - name: Add docker repository + get_url: + url: https://download.docker.com/linux/centos/docker-ce.repo + dest: /etc/yum.repos.d/docker-ce.repo + + - name: Install docker packages + package: + name: + - docker-ce + - docker-ce-cli + - containerd.io + - docker-buildx-plugin + - docker-compose-plugin + state: present + - name: Install packages package: name: - - docker - git - jq - gettext @@ -49,12 +70,14 @@ - perl - p7zip - nodejs + - packer # - xmlstarlet state: present + - name: Install Java17 package: - name: jdk-17-headless + name: java-17-openjdk-headless state: present - name: Install docker-compose @@ -105,6 +128,11 @@ group: "root" owner: "root" + - name: Install pip3 + package: + name: python3-pip + state: present + - name: Install Python modules pip: name: "{{ item }}" @@ -124,16 +152,26 @@ description: VirtualBox baseurl: "http://download.virtualbox.org/virtualbox/rpm/el/$releasever/$basearch" gpgcheck: true - gpgkey: https://www.virtualbox.org/download/oracle_vbox.asc + gpgkey: https://www.virtualbox.org/download/oracle_vbox_2016.asc enabled: true state: present + ##- name: Add base repository for Hashicorp + ## yum_repository: + ## name: hashicorp + ## description: HashiCorp Repository + ## baseurl: "https://rpm.releases.hashicorp.com/RHEL/$releasever/$basearch/stable" + ## gpgcheck: true + ## gpgkey: https://rpm.releases.hashicorp.com/gpg + ## enabled: true + ## state: present + - name: Install packages for virtualization yum: state: present name: "{{ item }}" loop: - - VirtualBox-6.1 + - VirtualBox-7.0 - vagrant - name: Reboot to the latest kernel @@ -142,6 +180,47 @@ - name: Recompile kernel command: /sbin/vboxconfig + - name: Install Packer Plugins + block: + - name: Create Packer plugins directory + file: + path: ~/.packer.d/plugins/github.com + state: directory + mode: '0755' + recurse: yes + + - name: Install packer virtualbox plugin + command: > + /usr/bin/packer plugins install github.com/hashicorp/virtualbox + register: packer_plugin_install + changed_when: "'Installed plugin successfully' in packer_plugin_install.stdout" + + - name: Install packer ansible plugin + command: > + /usr/bin/packer plugins install github.com/hashicorp/ansible + register: packer_ansible_plugin_install + changed_when: "'Installing' in packer_ansible_plugin_install.stdout" + + - name: Verify packer virtualbox plugin installation + stat: + path: ~/.packer.d/plugins/github.com/hashicorp/virtualbox + register: packer_virtualbox_plugin + + - name: Verify packer ansible plugin installation + stat: + path: ~/.packer.d/plugins/github.com/hashicorp/ansible + register: packer_ansible_plugin + + - name: Output virtualbox plugin installation status + debug: + msg: "Packer VirtualBox plugin is installed" + when: packer_virtualbox_plugin.stat.exists + + - name: Output ansible plugin installation status + debug: + msg: "Packer Ansible plugin is installed" + when: packer_ansible_plugin.stat.exists + - name: Copy docker daemon config copy: src: daemon.json @@ -153,19 +232,14 @@ state: started enabled: yes - - name: Pull and cache docker images - docker_image: - name: "{{ item }}" - source: pull - loop: - - debian:buster - - debian:stretch - - debian:bullseye - - ubuntu:jammy - - ubuntu:bionic - - ubuntu:focal - - rockylinux:8 - - oraclelinux:9 + - name: Download and unarchive AWS installer + unarchive: + src: https://awscli.amazonaws.com/awscli-exe-linux-{{ ansible_architecture }}.zip + dest: /tmp + remote_src: yes + + - name: Run awscli installer + shell: /tmp/aws/install - name: Turn off swap sysctl: diff --git a/build/packer/do.pkr.hcl b/build/packer/do.pkr.hcl index 3b1cba00a1..20733b2b2b 100644 --- a/build/packer/do.pkr.hcl +++ b/build/packer/do.pkr.hcl @@ -1,9 +1,13 @@ packer { required_plugins { digitalocean = { - version = "=1.0.4" + version = "=1.4.0" source = "github.com/digitalocean/digitalocean" } + ansible = { + version = "~> 1" + source = "github.com/hashicorp/ansible" + } } } From 3d20f7d54e1cc6a99d226452523571fe50329fb0 Mon Sep 17 00:00:00 2001 From: Nurlan Moldomurov Date: Mon, 26 Aug 2024 23:16:20 +0600 Subject: [PATCH 24/26] PMM-13111 disable new postgresql collectors. (#3111) * PMM-13111 disable new postgresql collectors. (cherry picked from commit f7326cd3106618547d13b035fde69d7f8753ce6a) * PMM-13111 Fix linters. * PMM-13111 Add license header. * PMM-13111 Add comments. * PMM-13111 Add comments. * PMM-13111 Fix comments. * PMM-13111 release notes. * Update docs/release-notes/2.43.0.md Co-authored-by: Catalina A <94133018+catalinaadam@users.noreply.github.com> * PMM-13111 fix a typo --------- Co-authored-by: Catalina A <94133018+catalinaadam@users.noreply.github.com> Co-authored-by: Alex Demidoff --- docs/release-notes/2.43.0.md | 8 +-- managed/services/agents/postgresql.go | 22 +++++- managed/services/agents/postgresql_test.go | 12 ++-- managed/utils/collectors/collectors_test.go | 78 +++++++++++++++++++++ 4 files changed, 109 insertions(+), 11 deletions(-) create mode 100644 managed/utils/collectors/collectors_test.go diff --git a/docs/release-notes/2.43.0.md b/docs/release-notes/2.43.0.md index ae7f70d2ab..7e92a19232 100644 --- a/docs/release-notes/2.43.0.md +++ b/docs/release-notes/2.43.0.md @@ -1,6 +1,6 @@ # Percona Monitoring and Management 2.43.0 -| **Release date** | July , 2024 | +| **Release date** | August , 2024 | | -----------------| ----------------------------------------------------------------------------------------------- | | **Installation** | [Installing Percona Monitoring and Management](../quickstart/index.md) | @@ -164,8 +164,7 @@ If you're looking to upgrade, you can easily [install the latest version of Perc ### Fixed issues - -- [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), [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). +- [PMM-13111](https://perconadev.atlassian.net/browse/PMM-13111) - Fixed an issue with `--disable-collectors` flag not supporting new collectors introduced in the recent `postgres_exporter` upgrade. - [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. @@ -176,9 +175,6 @@ If you're looking to upgrade, you can easily [install the latest version of Perc - [CVE-2024-33601](https://nvd.nist.gov/vuln/detail/CVE-2024-33601) - [CVE-2024-33602](https://nvd.nist.gov/vuln/detail/CVE-2024-33602) - - - - [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. diff --git a/managed/services/agents/postgresql.go b/managed/services/agents/postgresql.go index 73575eafed..69510b0016 100644 --- a/managed/services/agents/postgresql.go +++ b/managed/services/agents/postgresql.go @@ -34,10 +34,25 @@ import ( var ( postgresExporterAutodiscoveryVersion = version.MustParse("2.15.99") postgresExporterWebConfigVersion = version.MustParse("2.30.99") - postgresSSLSniVersion = version.MustParse("2.40.99") + postgresSSLSniVersion = version.MustParse("2.41.0-0") + postgresExporterCollectorsVersion = version.MustParse("2.41.0-0") postgresMaxExporterConnsVersion = version.MustParse("2.41.2-0") ) +var defaultPostgresExporterCollectors = []string{ + "database", + "database_wraparound", + "extensions", + "locks", + "replication", + "replication_slot", + "stat_bgwriter", + "stat_database", + "stat_user_tables", + "statio_user_tables", + "wal", +} + const defaultAutoDiscoveryDatabaseLimit = 50 func postgresExcludedDatabases() []string { @@ -101,6 +116,11 @@ func postgresExporterConfig(node *models.Node, service *models.Service, exporter args = collectors.FilterOutCollectors("--collect.", args, exporter.DisabledCollectors) + if !pmmAgentVersion.Less(postgresExporterCollectorsVersion) { + disableCollectorArgs := collectors.DisableDefaultEnabledCollectors("--no-collector.", defaultPostgresExporterCollectors, exporter.DisabledCollectors) + args = append(args, disableCollectorArgs...) + } + args = withLogLevel(args, exporter.LogLevel, pmmAgentVersion, false) sort.Strings(args) diff --git a/managed/services/agents/postgresql_test.go b/managed/services/agents/postgresql_test.go index 661d99974b..f69d5c6aa6 100644 --- a/managed/services/agents/postgresql_test.go +++ b/managed/services/agents/postgresql_test.go @@ -150,11 +150,11 @@ func (s *PostgresExporterConfigTestSuite) TestSocket() { } func (s *PostgresExporterConfigTestSuite) TestDisabledCollectors() { - s.pmmAgentVersion = &version.Parsed{} + s.pmmAgentVersion = version.MustParse("2.42.0") s.postgresql.Address = nil s.postgresql.Port = nil s.postgresql.Socket = pointer.ToString("/var/run/postgres") - s.exporter.DisabledCollectors = []string{"custom_query.hr", "custom_query.hr.directory"} + s.exporter.DisabledCollectors = []string{"custom_query.hr", "custom_query.hr.directory", "locks"} actual, err := postgresExporterConfig(s.node, s.postgresql, s.exporter, exposeSecrets, s.pmmAgentVersion) s.NoError(err, "Failed to create exporter config") @@ -164,11 +164,15 @@ func (s *PostgresExporterConfigTestSuite) TestDisabledCollectors() { TemplateLeftDelim: "{{", TemplateRightDelim: "}}", Args: []string{ + "--auto-discover-databases", "--collect.custom_query.lr", - "--collect.custom_query.lr.directory=" + pathsBase(s.pmmAgentVersion, "{{", "}}") + "/collectors/custom-queries/postgresql/low-resolution", + "--collect.custom_query.lr.directory={{ .paths_base }}/collectors/custom-queries/postgresql/low-resolution", "--collect.custom_query.mr", - "--collect.custom_query.mr.directory=" + pathsBase(s.pmmAgentVersion, "{{", "}}") + "/collectors/custom-queries/postgresql/medium-resolution", + "--collect.custom_query.mr.directory={{ .paths_base }}/collectors/custom-queries/postgresql/medium-resolution", + "--exclude-databases=template0,template1,postgres,cloudsqladmin,pmm-managed-dev,azure_maintenance,rdsadmin", + "--no-collector.locks", "--web.listen-address=0.0.0.0:{{ .listen_port }}", + "--web.config={{ .TextFiles.webConfigPlaceholder }}", }, } requireNoDuplicateFlags(s.T(), actual.Args) diff --git a/managed/utils/collectors/collectors_test.go b/managed/utils/collectors/collectors_test.go new file mode 100644 index 0000000000..1f5788b22f --- /dev/null +++ b/managed/utils/collectors/collectors_test.go @@ -0,0 +1,78 @@ +// Copyright (C) 2023 Percona LLC +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package collectors + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestDisableDefaultEnabledCollectors(t *testing.T) { + type args struct { + prefix string + defaultCollectors []string + disabledCollectors []string + } + tests := []struct { + name string + args args + want []string + }{ + { + name: "Disable single default enabled collectors", + args: args{ + prefix: "--no-collector.", + defaultCollectors: []string{"a", "b", "c", "d", "e"}, + disabledCollectors: []string{"b"}, + }, + want: []string{"--no-collector.b"}, + }, + { + name: "Disable multiple default enabled collectors", + args: args{ + prefix: "--no-collector.", + defaultCollectors: []string{"a", "b", "c", "d", "e", "f"}, + disabledCollectors: []string{"a", "c"}, + }, + want: []string{"--no-collector.a", "--no-collector.c"}, + }, + { + name: "Disable all default enabled collectors", + args: args{ + prefix: "--no-collector.", + defaultCollectors: []string{"a", "b", "c"}, + disabledCollectors: []string{"a", "b", "c"}, + }, + want: []string{"--no-collector.a", "--no-collector.b", "--no-collector.c"}, + }, + { + name: "Disable non-default enabled collectors", + args: args{ + prefix: "--no-collector.", + defaultCollectors: []string{"a", "b", "c"}, + disabledCollectors: []string{"d", "e", "f"}, + }, + want: []string{}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + actual := DisableDefaultEnabledCollectors(tt.args.prefix, tt.args.defaultCollectors, tt.args.disabledCollectors) + require.Equal(t, tt.want, actual, "DisableDefaultEnabledCollectors() = %v, want %v", actual, tt.want) + }) + } +} From d9d956c93abdfc46bdc6f9d559ae2b7aa0e013bb Mon Sep 17 00:00:00 2001 From: Michael Okoko <10512379+idoqo@users.noreply.github.com> Date: Mon, 26 Aug 2024 22:20:21 +0100 Subject: [PATCH 25/26] PMM-10680 enable pbm collector (#3162) * 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. * PMM-13141 Enable fcv collector. * enable pbm exporter by default * enable pbm collector in 2.42 * move pbm collector to 2.43 * update scrape configs * revert makefile changes * drop fcv collector until it is recognized by mongodb exporter * add release note highlight for PMM-10680 * merge both new mongodb exporter collectors * enable pbm collector by default * add new note for pbm collector * apply suggestion * fix tests * fix typo --------- Co-authored-by: Nurlan Moldomurov Co-authored-by: Nurlan Moldomurov --- docs/release-notes/2.43.0.md | 24 +++++- managed/services/agents/mongodb.go | 4 + managed/services/agents/mongodb_test.go | 78 +++++++++++++++++++ .../victoriametrics/scrape_configs.go | 3 + 4 files changed, 108 insertions(+), 1 deletion(-) diff --git a/docs/release-notes/2.43.0.md b/docs/release-notes/2.43.0.md index 7e92a19232..b57b98e1c8 100644 --- a/docs/release-notes/2.43.0.md +++ b/docs/release-notes/2.43.0.md @@ -113,10 +113,32 @@ 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. +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). +### Monitoring for Percona Backup for MongoDB +PMM now supports monitoring your Percona Backup for MongoDB (PBM) setup and provides PBM-related metrics such as `pbm-agent` statuses, PITR configuration, and backup statuses. +This is made possible via a new PBM collector in MongoDB exporter that gives you visibility to your PBM setup via these metrics: +- `mongodb_pbm_cluster_backup_configured` +- `mongodb_pbm_agent_status` +- `mongodb_pbm_cluster_pitr_backup_enabled` +- `mongodb_pbm_backup_size` +- `mongodb_pbm_backup_duration_seconds` + +These metrics are enabled by default. If you're already running Percona Backup for MongoDB, you'll automatically receive these metrics without any additional configuration. +## Improvements + +- [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-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. + ## Maintenance diff --git a/managed/services/agents/mongodb.go b/managed/services/agents/mongodb.go index 3b1fa5f68d..a9c39c14f3 100644 --- a/managed/services/agents/mongodb.go +++ b/managed/services/agents/mongodb.go @@ -37,6 +37,7 @@ var ( 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") + v2_43_0 = version.MustParse("2.43.0-0") ) // mongodbExporterConfig returns desired configuration of mongodb_exporter process. @@ -109,6 +110,9 @@ func getArgs(exporter *models.Agent, tdp *models.DelimiterPair, listenAddress st if !pmmAgentVersion.Less(v2_42_0) && collectAll { // >= 2.42.0 args = append(args, "--collector.currentopmetrics") } + if !pmmAgentVersion.Less(v2_43_0) { // >= 2.43.0, enable pbm collector by default + args = append(args, "--collector.pbm") + } args = collectors.FilterOutCollectors("--collector.", args, exporter.DisabledCollectors) args = append(args, collectors.DisableDefaultEnabledCollectors("--no-collector.", defaultEnabledCollectors, exporter.DisabledCollectors)...) diff --git a/managed/services/agents/mongodb_test.go b/managed/services/agents/mongodb_test.go index 0864effc51..74c9fc4a6e 100644 --- a/managed/services/agents/mongodb_test.go +++ b/managed/services/agents/mongodb_test.go @@ -415,6 +415,84 @@ func TestMongodbExporterConfig2411(t *testing.T) { }) } +func TestMongodbExporterConfig2430(t *testing.T) { + pmmAgentVersion := version.MustParse("2.43.0") + node := &models.Node{ + Address: "1.2.3.4", + } + mongodb := &models.Service{ + Address: pointer.ToString("1.2.3.4"), + Port: pointer.ToUint16(27017), + } + exporter := &models.Agent{ + AgentID: "agent-id", + AgentType: models.MongoDBExporterType, + Username: pointer.ToString("username"), + Password: pointer.ToString("s3cur3 p@$$w0r4."), + AgentPassword: pointer.ToString("agent-password"), + } + actual, err := mongodbExporterConfig(node, mongodb, exporter, redactSecrets, pmmAgentVersion) + expected := &agentpb.SetStateRequest_AgentProcess{ + Type: inventorypb.AgentType_MONGODB_EXPORTER, + TemplateLeftDelim: "{{", + TemplateRightDelim: "}}", + Args: []string{ + "--collector.diagnosticdata", + "--collector.pbm", + "--collector.replicasetstatus", + "--compatible-mode", + "--discovering-mode", + "--mongodb.global-conn-pool", + "--web.listen-address=0.0.0.0:{{ .listen_port }}", + "--web.config={{ .TextFiles.webConfigPlaceholder }}", + }, + Env: []string{ + "MONGODB_URI=mongodb://username:s3cur3%20p%40$$w0r4.@1.2.3.4:27017/?connectTimeoutMS=1000&directConnection=true&serverSelectionTimeoutMS=1000", + }, + RedactWords: []string{"s3cur3 p@$$w0r4.", "agent-password"}, + TextFiles: map[string]string{ + "webConfigPlaceholder": "basic_auth_users:\n pmm: agent-password\n", + }, + } + require.NoError(t, err) + requireNoDuplicateFlags(t, actual.Args) + require.Equal(t, expected.Args, actual.Args) + require.Equal(t, expected.Env, actual.Env) + require.Equal(t, expected, actual) + + t.Run("Enabling all collectors", func(t *testing.T) { + exporter.MongoDBOptions = &models.MongoDBOptions{ + EnableAllCollectors: true, + StatsCollections: []string{"db1.col1.one", "db2.col2", "db3"}, + } + + expected.Args = []string{ + "--collector.collstats", + "--collector.collstats-limit=0", + "--collector.currentopmetrics", + "--collector.dbstats", + "--collector.diagnosticdata", + "--collector.indexstats", + "--collector.pbm", + "--collector.replicasetstatus", + "--collector.shards", + "--collector.topmetrics", + "--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 on 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) { pmmAgentVersion := version.MustParse("2.0.0") node := &models.Node{ diff --git a/managed/services/victoriametrics/scrape_configs.go b/managed/services/victoriametrics/scrape_configs.go index d2a3104fcd..4106a1fd62 100644 --- a/managed/services/victoriametrics/scrape_configs.go +++ b/managed/services/victoriametrics/scrape_configs.go @@ -425,6 +425,9 @@ func scrapeConfigsForMongoDBExporter(params *scrapeConfigParams) ([]*config.Scra if !params.pmmAgentVersion.Less(version.MustParse("2.42.0-0")) { defaultCollectors = append(defaultCollectors, "currentopmetrics") } + if !params.pmmAgentVersion.Less(version.MustParse("2.43.0-0")) { + defaultCollectors = append(defaultCollectors, "pbm") + } lr, err := scrapeConfigForStandardExporter("lr", params.metricsResolution.LR, params, defaultCollectors) if err != nil { From 7c580b40518ddc4e9e9807cb35efcccb402680fe Mon Sep 17 00:00:00 2001 From: Nurlan Moldomurov Date: Tue, 27 Aug 2024 16:28:52 +0600 Subject: [PATCH 26/26] PMM-13288 Honour max-query-length parameter for pg_stat_statements. (#3119) Co-authored-by: Alex Demidoff --- .../agents/postgres/pgstatstatements/pgstatstatements.go | 9 +++++---- agent/agents/postgres/pgstatstatements/utils.go | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/agent/agents/postgres/pgstatstatements/pgstatstatements.go b/agent/agents/postgres/pgstatstatements/pgstatstatements.go index facecab62e..35b6df8845 100644 --- a/agent/agents/postgres/pgstatstatements/pgstatstatements.go +++ b/agent/agents/postgres/pgstatstatements/pgstatstatements.go @@ -287,7 +287,7 @@ func (m *PGStatStatementsQAN) getNewBuckets(ctx context.Context, periodStart tim return nil, err } - buckets := makeBuckets(current, prev, m.disableCommentsParsing, m.l) + buckets := m.makeBuckets(current, prev) startS := uint32(periodStart.Unix()) m.l.Debugf("Made %d buckets out of %d stat statements in %s+%d interval.", len(buckets), len(current), periodStart.Format("15:04:05"), periodLengthSecs) @@ -312,8 +312,9 @@ func (m *PGStatStatementsQAN) getNewBuckets(ctx context.Context, periodStart tim // makeBuckets uses current state of pg_stat_statements table and accumulated previous state // to make metrics buckets. It's a pure function for easier testing. -func makeBuckets(current, prev statementsMap, disableCommentsParsing bool, l *logrus.Entry) []*agentpb.MetricsBucket { +func (m *PGStatStatementsQAN) makeBuckets(current, prev statementsMap) []*agentpb.MetricsBucket { res := make([]*agentpb.MetricsBucket, 0, len(current)) + l := m.l for queryID, currentPSS := range current { prevPSS := prev[queryID] @@ -339,10 +340,10 @@ func makeBuckets(current, prev statementsMap, disableCommentsParsing bool, l *lo } if len(currentPSS.Tables) == 0 { - currentPSS.Tables = extractTables(currentPSS.Query, l) + currentPSS.Tables = extractTables(currentPSS.Query, m.maxQueryLength, l) } - if !disableCommentsParsing { + if !m.disableCommentsParsing { comments, err := queryparser.PostgreSQLComments(currentPSS.Query) if err != nil { l.Errorf("failed to parse comments for query: %s", currentPSS.Query) diff --git a/agent/agents/postgres/pgstatstatements/utils.go b/agent/agents/postgres/pgstatstatements/utils.go index 7c175d9547..0f739df4bf 100644 --- a/agent/agents/postgres/pgstatstatements/utils.go +++ b/agent/agents/postgres/pgstatstatements/utils.go @@ -72,9 +72,9 @@ func queryUsernames(q *reform.Querier) map[int64]string { return res } -func extractTables(query string, l *logrus.Entry) []string { +func extractTables(query string, maxQueryLength int32, l *logrus.Entry) []string { start := time.Now() - t, _ := truncate.Query(query, truncate.GetDefaultMaxQueryLength()) + t, _ := truncate.Query(query, maxQueryLength) tables, err := parser.ExtractTables(query) if err != nil { // log full query and error stack on debug level or more