diff --git a/go.mod b/go.mod index 13bd710b6a6..82f24782a86 100644 --- a/go.mod +++ b/go.mod @@ -38,7 +38,7 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da github.com/golang/mock v1.6.0 github.com/golang/protobuf v1.5.3 - github.com/google/cadvisor v0.47.3 + github.com/google/cadvisor v0.48.1 github.com/google/cel-go v0.17.7 github.com/google/gnostic-models v0.6.8 github.com/google/go-cmp v0.6.0 diff --git a/go.sum b/go.sum index 67e91bb428a..4cdad00164f 100644 --- a/go.sum +++ b/go.sum @@ -198,7 +198,6 @@ github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab h1:UKkYhof1njT1 github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= -github.com/Microsoft/go-winio v0.4.15/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= @@ -210,10 +209,7 @@ github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAE github.com/a8m/tree v0.0.0-20210115125333-10a5fd5b637d/go.mod h1:FSdwKX97koS5efgm8WevNf7XS3PqtyFkKDDXrz778cg= github.com/alecthomas/kingpin/v2 v2.3.2/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df h1:7RFfzj4SSt6nnvCPbCqijJi1nWCd+TqAT3bYCStRC18= @@ -236,8 +232,6 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= -github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= @@ -246,8 +240,6 @@ github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyY github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= @@ -258,19 +250,14 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= -github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= github.com/cilium/ebpf v0.9.1 h1:64sn2K3UKw8NbP/blsixRpF3nXuyhz/VjRlRzvlBRu4= github.com/cilium/ebpf v0.9.1/go.mod h1:+OhNOIXx/Fnu1IE8bJz2dzOA+VSfyTfdNUVdlQnxUFY= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k= github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA= @@ -309,7 +296,6 @@ github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= @@ -320,7 +306,6 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= -github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -334,10 +319,10 @@ github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= -github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v20.10.21+incompatible h1:UTLdBmHk3bEY+w8qeO5KttOhy6OmXWsl/FEet9Uswog= -github.com/docker/docker v20.10.21+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= +github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v20.10.24+incompatible h1:Ugvxm7a8+Gz6vqQYQQ2W7GYq5EUPaAiuPgIfVyI3dYE= +github.com/docker/docker v20.10.24+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= @@ -356,7 +341,6 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/go-control-plane v0.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA= @@ -389,12 +373,9 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= @@ -417,7 +398,6 @@ github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEe github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= @@ -478,8 +458,8 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= -github.com/google/cadvisor v0.47.3 h1:5XKTHBduWlBjmgw07uwEiC+Xa/FRd0MZI37oqlTagO0= -github.com/google/cadvisor v0.47.3/go.mod h1:iJdTjcjyKHjLCf7OSTzwP5GxdfrkPusw2x5bwGvuLUw= +github.com/google/cadvisor v0.48.1 h1:eyYTxKBd+KxI1kh6rst4JSTLUhfHQM34qGpp+0AMlSg= +github.com/google/cadvisor v0.48.1/go.mod h1:ZkYbiiVdyoqBmI2ahZI8GlmirT78OAOER0z4EQugkxQ= github.com/google/cel-go v0.17.7 h1:6ebJFzu1xO2n7TLtN+UBqShGBhlD85bhvglh5DpcfqQ= github.com/google/cel-go v0.17.7/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= @@ -496,7 +476,6 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -587,7 +566,6 @@ github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLf github.com/ishidawataru/sctp v0.0.0-20230406120618-7ff4192f6ff2 h1:i2fYnDurfLlJH8AyyMOnkLHnHeP8Ff/DDpuZA/D3bPo= github.com/ishidawataru/sctp v0.0.0-20230406120618-7ff4192f6ff2/go.mod h1:co9pwDoBCm1kGxawmb4sPq0cSIOOWNPT4KnHotMP1Zg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ= github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= @@ -595,8 +573,6 @@ github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8Hm github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= @@ -610,7 +586,6 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -634,7 +609,6 @@ github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= @@ -654,7 +628,6 @@ github.com/moby/ipvs v1.1.0 h1:ONN4pGaZQgAx+1Scz5RvWV4Q7Gb+mvfRh3NsPS+1XQQ= github.com/moby/ipvs v1.1.0/go.mod h1:4VJMWuf098bsUMmZEiD4Tjk/O7mOn3l1PTD3s4OoYAs= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78= github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI= github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= @@ -662,7 +635,6 @@ github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbD github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= @@ -688,15 +660,12 @@ 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.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v1.1.4/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opencontainers/runc v1.1.9 h1:XR0VIHTGce5eWPkaPesqTBrhW2yAcaraWfsEalNwQLM= github.com/opencontainers/runc v1.1.9/go.mod h1:CbUumNnWCuTGFukNXahoo/RFBZvDAgRh/smNYNOhA50= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20220909204839-494a5a6aca78 h1:R5M2qXZiK/mWPMT4VldCOiSL9HIAMuxQZWdG0CSM5+4= github.com/opencontainers/runtime-spec v1.0.3-0.20220909204839-494a5a6aca78/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= 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.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -715,36 +684,20 @@ github.com/pquerna/cachecontrol v0.1.0 h1:yJMy84ti9h/+OEWa752kBTKv4XC30OtVVHYv/8 github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= @@ -763,16 +716,13 @@ github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= github.com/seccomp/libseccomp-golang v0.10.0 h1:aA4bp+/Zzi0BnWZ2F1wgNBs5gTpm+na2rWM6M9YjLpY= github.com/seccomp/libseccomp-golang v0.10.0/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= @@ -784,7 +734,6 @@ github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= @@ -822,7 +771,6 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1 github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 h1:6fotK7otjonDflCTK0BCfls4SPy3NcCVb5dqqmbRknE= github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod h1:KO6IkyS8Y3j8OdNO85qEYBsRPuteD+YciPomcXdrMnk= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJH8j0= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= @@ -976,7 +924,6 @@ golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -999,19 +946,14 @@ golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/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-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= @@ -1031,7 +973,6 @@ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8= golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1045,7 +986,6 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/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.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= @@ -1065,14 +1005,11 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1085,8 +1022,6 @@ golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1105,31 +1040,24 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.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.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= @@ -1142,8 +1070,6 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= @@ -1317,7 +1243,6 @@ google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211021150943-2b146023228c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 h1:L6iMMGrtzgHsWofoFcihmDEMYeDR9KN/ThbPWGrh++g= google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e h1:z3vDksarJxsAKM5dmEGv0GHwE2hKJ096wZra71Vs4sw= @@ -1351,8 +1276,6 @@ google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I= google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= @@ -1369,8 +1292,6 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= @@ -1397,16 +1318,13 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1419,14 +1337,12 @@ k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 h1:pWEwq4Asjm4vjW7vcsmijwBhOr1/s k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= k8s.io/system-validators v1.8.0 h1:tq05tdO9zdJZnNF3SXrq6LE7Knc/KfJm5wk68467JDg= k8s.io/system-validators v1.8.0/go.mod h1:gP1Ky+R9wtrSiFbrpEPwWMeYz9yqyy1S/KOh0Vci7WI= -k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/hack/unwanted-dependencies.json b/hack/unwanted-dependencies.json index 62635aae420..4ca51c7e78f 100644 --- a/hack/unwanted-dependencies.json +++ b/hack/unwanted-dependencies.json @@ -76,15 +76,14 @@ "unwantedReferences": { "cloud.google.com/go": [ "cloud.google.com/go/compute", - "github.com/google/cadvisor", "google.golang.org/genproto" ], "cloud.google.com/go/bigquery": [ - "cloud.google.com/go/storage", "google.golang.org/genproto" ], "cloud.google.com/go/compute": [ "cloud.google.com/go/compute/metadata", + "github.com/google/cadvisor", "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc", "golang.org/x/oauth2", "google.golang.org/genproto", @@ -93,9 +92,6 @@ "cloud.google.com/go/firestore": [ "google.golang.org/genproto" ], - "cloud.google.com/go/storage": [ - "cloud.google.com/go" - ], "github.com/GoogleCloudPlatform/k8s-cloud-provider": [ "k8s.io/kubernetes", "k8s.io/legacy-cloud-providers" @@ -111,7 +107,6 @@ "github.com/containerd/cgroups", "github.com/containerd/ttrpc", "github.com/containerd/typeurl", - "github.com/gogo/googleapis", "github.com/google/cadvisor", "github.com/grpc-ecosystem/go-grpc-middleware", "go.etcd.io/etcd/api/v3", @@ -148,10 +143,7 @@ "google.golang.org/api" ], "github.com/googleapis/gax-go/v2": [ - "cloud.google.com/go", - "cloud.google.com/go/bigquery", - "cloud.google.com/go/compute", - "cloud.google.com/go/storage" + "cloud.google.com/go/compute" ], "github.com/gregjones/httpcache": [ "k8s.io/client-go" @@ -182,7 +174,6 @@ ], "github.com/pkg/errors": [ "github.com/Microsoft/hcsshim", - "github.com/aws/aws-sdk-go", "github.com/containerd/continuity", "github.com/containerd/fifo", "github.com/containerd/go-runc", @@ -202,7 +193,6 @@ "k8s.io/legacy-cloud-providers" ], "go.opencensus.io": [ - "cloud.google.com/go", "cloud.google.com/go/compute", "github.com/Microsoft/hcsshim", "google.golang.org/api" @@ -212,10 +202,7 @@ "github.com/google/cel-go" ], "google.golang.org/api": [ - "cloud.google.com/go", - "cloud.google.com/go/bigquery", "cloud.google.com/go/compute", - "cloud.google.com/go/storage", "github.com/GoogleCloudPlatform/k8s-cloud-provider", "github.com/googleapis/gax-go/v2", "k8s.io/kubernetes", @@ -232,13 +219,9 @@ "google.golang.org/grpc" ], "google.golang.org/genproto": [ - "cloud.google.com/go", - "cloud.google.com/go/bigquery", "cloud.google.com/go/compute", - "cloud.google.com/go/storage", "github.com/container-storage-interface/spec", "github.com/containerd/ttrpc", - "github.com/google/cadvisor", "github.com/googleapis/gax-go/v2", "github.com/grpc-ecosystem/go-grpc-middleware", "github.com/grpc-ecosystem/grpc-gateway", diff --git a/pkg/kubelet/cadvisor/cadvisor_linux.go b/pkg/kubelet/cadvisor/cadvisor_linux.go index 2c93cfa936f..4c9dc55cee4 100644 --- a/pkg/kubelet/cadvisor/cadvisor_linux.go +++ b/pkg/kubelet/cadvisor/cadvisor_linux.go @@ -97,7 +97,7 @@ func New(imageFsInfoProvider ImageFsInfoProvider, rootPath string, cgroupRoots [ } duration := maxHousekeepingInterval - housekeepingConfig := manager.HouskeepingConfig{ + housekeepingConfig := manager.HousekeepingConfig{ Interval: &duration, AllowDynamic: pointer.Bool(allowDynamicHousekeeping), } diff --git a/vendor/github.com/google/cadvisor/client/v2/client.go b/vendor/github.com/google/cadvisor/client/v2/client.go index 3714cf7dd9e..56f6fc99cad 100644 --- a/vendor/github.com/google/cadvisor/client/v2/client.go +++ b/vendor/github.com/google/cadvisor/client/v2/client.go @@ -19,7 +19,7 @@ import ( "bytes" "encoding/json" "fmt" - "io/ioutil" + "io" "net/http" "net/url" "path" @@ -147,7 +147,7 @@ func (c *Client) httpGetResponse(postData interface{}, urlPath, infoName string) return nil, fmt.Errorf("received empty response for %q from %q", infoName, urlPath) } defer resp.Body.Close() - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) if err != nil { err = fmt.Errorf("unable to read all %q from %q: %v", infoName, urlPath, err) return nil, err diff --git a/vendor/github.com/google/cadvisor/collector/generic_collector.go b/vendor/github.com/google/cadvisor/collector/generic_collector.go index 07e26a2dab0..490f63e48bf 100644 --- a/vendor/github.com/google/cadvisor/collector/generic_collector.go +++ b/vendor/github.com/google/cadvisor/collector/generic_collector.go @@ -17,7 +17,7 @@ package collector import ( "encoding/json" "fmt" - "io/ioutil" + "io" "net/http" "regexp" "strconv" @@ -145,7 +145,7 @@ func (collector *GenericCollector) Collect(metrics map[string][]v1.MetricVal) (t defer response.Body.Close() - pageContent, err := ioutil.ReadAll(response.Body) + pageContent, err := io.ReadAll(response.Body) if err != nil { return nextCollectionTime, nil, err } diff --git a/vendor/github.com/google/cadvisor/container/common/container_hints.go b/vendor/github.com/google/cadvisor/container/common/container_hints.go index b9dec4e1b5b..505f8c243db 100644 --- a/vendor/github.com/google/cadvisor/container/common/container_hints.go +++ b/vendor/github.com/google/cadvisor/container/common/container_hints.go @@ -21,7 +21,6 @@ package common import ( "encoding/json" "flag" - "io/ioutil" "os" ) @@ -48,7 +47,7 @@ type networkInterface struct { } func GetContainerHintsFromFile(containerHintsFile string) (ContainerHints, error) { - dat, err := ioutil.ReadFile(containerHintsFile) + dat, err := os.ReadFile(containerHintsFile) if os.IsNotExist(err) { return ContainerHints{}, nil } diff --git a/vendor/github.com/google/cadvisor/container/common/helpers.go b/vendor/github.com/google/cadvisor/container/common/helpers.go index 7248f3b0b84..dbffc922e90 100644 --- a/vendor/github.com/google/cadvisor/container/common/helpers.go +++ b/vendor/github.com/google/cadvisor/container/common/helpers.go @@ -16,7 +16,6 @@ package common import ( "fmt" - "io/ioutil" "math" "os" "path" @@ -76,7 +75,11 @@ func getSpecInternal(cgroupPaths map[string]string, machineInfoFactory info.Mach dir, err := os.Stat(cgroupPathDir) if err == nil && dir.ModTime().Before(lowestTime) { lowestTime = dir.ModTime() + } else if os.IsNotExist(err) { + // Directory does not exist, skip checking for files within. + continue } + // The modified time of the cgroup directory sometimes changes whenever a subcontainer is created. // eg. /docker will have creation time matching the creation of latest docker container. // Use clone_children/events as a workaround as it isn't usually modified. It is only likely changed @@ -235,7 +238,7 @@ func readString(dirpath string, file string) string { cgroupFile := path.Join(dirpath, file) // Read - out, err := ioutil.ReadFile(cgroupFile) + out, err := os.ReadFile(cgroupFile) if err != nil { // Ignore non-existent files if !os.IsNotExist(err) { @@ -437,3 +440,20 @@ func (m deviceIdentifierMap) Find(major, minor uint64, namer DeviceNamer) string m[d] = s return s } + +// RemoveNetMetrics is used to remove any network metrics from the given MetricSet. +// It returns the original set as is if remove is false, or if there are no metrics +// to remove. +func RemoveNetMetrics(metrics container.MetricSet, remove bool) container.MetricSet { + if !remove { + return metrics + } + + // Check if there is anything we can remove, to avoid useless copying. + if !metrics.HasAny(container.AllNetworkMetrics) { + return metrics + } + + // A copy of all metrics except for network ones. + return metrics.Difference(container.AllNetworkMetrics) +} diff --git a/vendor/github.com/google/cadvisor/container/container.go b/vendor/github.com/google/cadvisor/container/container.go index 8414efc6a02..4c435a0e81f 100644 --- a/vendor/github.com/google/cadvisor/container/container.go +++ b/vendor/github.com/google/cadvisor/container/container.go @@ -35,6 +35,7 @@ const ( ContainerTypeCrio ContainerTypeContainerd ContainerTypeMesos + ContainerTypePodman ) // Interface for container operation handlers. diff --git a/vendor/github.com/google/cadvisor/container/containerd/client.go b/vendor/github.com/google/cadvisor/container/containerd/client.go index ab7ed0ef4d2..ec503fcbfa3 100644 --- a/vendor/github.com/google/cadvisor/container/containerd/client.go +++ b/vendor/github.com/google/cadvisor/container/containerd/client.go @@ -59,6 +59,7 @@ const ( maxBackoffDelay = 3 * time.Second baseBackoffDelay = 100 * time.Millisecond connectionTimeout = 2 * time.Second + maxMsgSize = 16 * 1024 * 1024 // 16MB ) // Client creates a containerd client @@ -82,6 +83,7 @@ func Client(address, namespace string) (ContainerdClient, error) { grpc.WithContextDialer(dialer.ContextDialer), grpc.WithBlock(), grpc.WithConnectParams(connParams), + grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(maxMsgSize)), } unary, stream := newNSInterceptors(namespace) gopts = append(gopts, diff --git a/vendor/github.com/google/cadvisor/container/containerd/handler.go b/vendor/github.com/google/cadvisor/container/containerd/handler.go index 848550ec6eb..57a2d82c677 100644 --- a/vendor/github.com/google/cadvisor/container/containerd/handler.go +++ b/vendor/github.com/google/cadvisor/container/containerd/handler.go @@ -126,7 +126,14 @@ func newContainerdContainerHandler( Aliases: []string{id, name}, } - libcontainerHandler := containerlibcontainer.NewHandler(cgroupManager, rootfs, int(taskPid), includedMetrics) + // Containers that don't have their own network -- this includes + // containers running in Kubernetes pods that use the network of the + // infrastructure container -- does not need their stats to be + // reported. This stops metrics being reported multiple times for each + // container in a pod. + metrics := common.RemoveNetMetrics(includedMetrics, cntr.Labels["io.cri-containerd.kind"] != "sandbox") + + libcontainerHandler := containerlibcontainer.NewHandler(cgroupManager, rootfs, int(taskPid), metrics) handler := &containerdContainerHandler{ machineInfoFactory: machineInfoFactory, @@ -134,7 +141,7 @@ func newContainerdContainerHandler( fsInfo: fsInfo, envs: make(map[string]string), labels: cntr.Labels, - includedMetrics: includedMetrics, + includedMetrics: metrics, reference: containerReference, libcontainerHandler: libcontainerHandler, } @@ -164,22 +171,12 @@ func (h *containerdContainerHandler) ContainerReference() (info.ContainerReferen return h.reference, nil } -func (h *containerdContainerHandler) needNet() bool { - // Since containerd does not handle networking ideally we need to return based - // on includedMetrics list. Here the assumption is the presence of cri-containerd - // label - if h.includedMetrics.Has(container.NetworkUsageMetrics) { - //TODO change it to exported cri-containerd constants - return h.labels["io.cri-containerd.kind"] == "sandbox" - } - return false -} - func (h *containerdContainerHandler) GetSpec() (info.ContainerSpec, error) { // TODO: Since we dont collect disk usage stats for containerd, we set hasFilesystem // to false. Revisit when we support disk usage stats for containerd hasFilesystem := false - spec, err := common.GetSpec(h.cgroupPaths, h.machineInfoFactory, h.needNet(), hasFilesystem) + hasNet := h.includedMetrics.Has(container.NetworkUsageMetrics) + spec, err := common.GetSpec(h.cgroupPaths, h.machineInfoFactory, hasNet, hasFilesystem) spec.Labels = h.labels spec.Envs = h.envs spec.Image = h.image @@ -204,13 +201,6 @@ func (h *containerdContainerHandler) GetStats() (*info.ContainerStats, error) { if err != nil { return stats, err } - // Clean up stats for containers that don't have their own network - this - // includes containers running in Kubernetes pods that use the network of the - // infrastructure container. This stops metrics being reported multiple times - // for each container in a pod. - if !h.needNet() { - stats.Network = info.NetworkStats{} - } // Get filesystem stats. err = h.getFsStats(stats) diff --git a/vendor/github.com/google/cadvisor/container/crio/client.go b/vendor/github.com/google/cadvisor/container/crio/client.go index ca65ba1ad48..0f51b3d1ced 100644 --- a/vendor/github.com/google/cadvisor/container/crio/client.go +++ b/vendor/github.com/google/cadvisor/container/crio/client.go @@ -17,8 +17,9 @@ package crio import ( "context" "encoding/json" + "flag" "fmt" - "io/ioutil" + "io" "net" "net/http" "sync" @@ -26,6 +27,8 @@ import ( "time" ) +var crioClientTimeout = flag.Duration("crio_client_timeout", time.Duration(0), "CRI-O client timeout. Default is no timeout.") + const ( CrioSocket = "/var/run/crio/crio.sock" maxUnixSocketPathSize = len(syscall.RawSockaddrUnix{}.Path) @@ -89,6 +92,7 @@ func Client() (CrioClient, error) { theClient = &crioClientImpl{ client: &http.Client{ Transport: tr, + Timeout: *crioClientTimeout, }, } }) @@ -142,7 +146,7 @@ func (c *crioClientImpl) ContainerInfo(id string) (*ContainerInfo, error) { // golang's http.Do doesn't return an error if non 200 response code is returned // handle this case here, rather than failing to decode the body if resp.StatusCode != http.StatusOK { - respBody, err := ioutil.ReadAll(resp.Body) + respBody, err := io.ReadAll(resp.Body) if err != nil { return nil, fmt.Errorf("Error finding container %s: Status %d", id, resp.StatusCode) } diff --git a/vendor/github.com/google/cadvisor/container/crio/handler.go b/vendor/github.com/google/cadvisor/container/crio/handler.go index 08857785653..a68325187e4 100644 --- a/vendor/github.com/google/cadvisor/container/crio/handler.go +++ b/vendor/github.com/google/cadvisor/container/crio/handler.go @@ -148,7 +148,15 @@ func newCrioContainerHandler( Namespace: CrioNamespace, } - libcontainerHandler := containerlibcontainer.NewHandler(cgroupManager, rootFs, cInfo.Pid, includedMetrics) + // Find out if we need network metrics reported for this container. + // Containers that don't have their own network -- this includes + // containers running in Kubernetes pods that use the network of the + // infrastructure container -- does not need their stats to be + // reported. This stops metrics being reported multiple times for each + // container in a pod. + metrics := common.RemoveNetMetrics(includedMetrics, cInfo.Labels["io.kubernetes.container.name"] != "POD") + + libcontainerHandler := containerlibcontainer.NewHandler(cgroupManager, rootFs, cInfo.Pid, metrics) // TODO: extract object mother method handler := &crioContainerHandler{ @@ -161,7 +169,7 @@ func newCrioContainerHandler( rootfsStorageDir: rootfsStorageDir, envs: make(map[string]string), labels: cInfo.Labels, - includedMetrics: includedMetrics, + includedMetrics: metrics, reference: containerReference, libcontainerHandler: libcontainerHandler, cgroupManager: cgroupManager, @@ -210,16 +218,10 @@ func (h *crioContainerHandler) ContainerReference() (info.ContainerReference, er return h.reference, nil } -func (h *crioContainerHandler) needNet() bool { - if h.includedMetrics.Has(container.NetworkUsageMetrics) { - return h.labels["io.kubernetes.container.name"] == "POD" - } - return false -} - func (h *crioContainerHandler) GetSpec() (info.ContainerSpec, error) { hasFilesystem := h.includedMetrics.Has(container.DiskUsageMetrics) - spec, err := common.GetSpec(h.cgroupPaths, h.machineInfoFactory, h.needNet(), hasFilesystem) + hasNet := h.includedMetrics.Has(container.NetworkUsageMetrics) + spec, err := common.GetSpec(h.cgroupPaths, h.machineInfoFactory, hasNet, hasFilesystem) spec.Labels = h.labels spec.Envs = h.envs @@ -306,13 +308,7 @@ func (h *crioContainerHandler) GetStats() (*info.ContainerStats, error) { return stats, err } - if !h.needNet() { - // Clean up stats for containers that don't have their own network - this - // includes containers running in Kubernetes pods that use the network of the - // infrastructure container. This stops metrics being reported multiple times - // for each container in a pod. - stats.Network = info.NetworkStats{} - } else if len(stats.Network.Interfaces) == 0 { + if h.includedMetrics.Has(container.NetworkUsageMetrics) && len(stats.Network.Interfaces) == 0 { // No network related information indicates that the pid of the // container is not longer valid and we need to ask crio to // provide the pid of another container from that pod diff --git a/vendor/github.com/google/cadvisor/container/factory.go b/vendor/github.com/google/cadvisor/container/factory.go index 226a6fa6e5d..c48a64e163c 100644 --- a/vendor/github.com/google/cadvisor/container/factory.go +++ b/vendor/github.com/google/cadvisor/container/factory.go @@ -93,6 +93,14 @@ var AllMetrics = MetricSet{ OOMMetrics: struct{}{}, } +// AllNetworkMetrics represents all network metrics that cAdvisor supports. +var AllNetworkMetrics = MetricSet{ + NetworkUsageMetrics: struct{}{}, + NetworkTcpUsageMetrics: struct{}{}, + NetworkAdvancedTcpUsageMetrics: struct{}{}, + NetworkUdpUsageMetrics: struct{}{}, +} + func (mk MetricKind) String() string { return string(mk) } @@ -104,6 +112,15 @@ func (ms MetricSet) Has(mk MetricKind) bool { return exists } +func (ms MetricSet) HasAny(ms1 MetricSet) bool { + for m := range ms1 { + if _, ok := ms[m]; ok { + return true + } + } + return false +} + func (ms MetricSet) add(mk MetricKind) { ms[mk] = struct{}{} } @@ -199,7 +216,9 @@ func InitializePlugins(factory info.MachineInfoFactory, fsInfo fs.FsInfo, includ for name, plugin := range plugins { watcher, err := plugin.Register(factory, fsInfo, includedMetrics) if err != nil { - klog.V(5).Infof("Registration of the %s container factory failed: %v", name, err) + klog.Infof("Registration of the %s container factory failed: %v", name, err) + } else { + klog.Infof("Registration of the %s container factory successfully", name) } if watcher != nil { containerWatchers = append(containerWatchers, watcher) diff --git a/vendor/github.com/google/cadvisor/container/libcontainer/handler.go b/vendor/github.com/google/cadvisor/container/libcontainer/handler.go index ed4c1ae8535..5b1f84f57fe 100644 --- a/vendor/github.com/google/cadvisor/container/libcontainer/handler.go +++ b/vendor/github.com/google/cadvisor/container/libcontainer/handler.go @@ -21,7 +21,6 @@ import ( "flag" "fmt" "io" - "io/ioutil" "os" "path" "regexp" @@ -40,7 +39,6 @@ import ( ) var ( - whitelistedUlimits = [...]string{"max_open_files"} referencedResetInterval = flag.Uint64("referenced_reset_interval", 0, "Reset interval for referenced bytes (container_referenced_bytes metric), number of measurement cycles after which referenced bytes are cleared, if set to 0 referenced bytes are never cleared (default: 0)") @@ -206,54 +204,56 @@ func parseUlimit(value string) (int64, error) { return num, nil } -func isUlimitWhitelisted(name string) bool { - for _, whitelist := range whitelistedUlimits { - if name == whitelist { - return true - } - } - return false -} - func processLimitsFile(fileData string) []info.UlimitSpec { + const maxOpenFilesLinePrefix = "Max open files" + limits := strings.Split(fileData, "\n") ulimits := make([]info.UlimitSpec, 0, len(limits)) for _, lim := range limits { // Skip any headers/footers - if strings.HasPrefix(lim, "Max") { - - // Line format: Max open files 16384 16384 files - fields := regexp.MustCompile(`[\s]{2,}`).Split(lim, -1) - name := strings.Replace(strings.ToLower(strings.TrimSpace(fields[0])), " ", "_", -1) - - found := isUlimitWhitelisted(name) - if !found { - continue - } - - soft := strings.TrimSpace(fields[1]) - softNum, softErr := parseUlimit(soft) - - hard := strings.TrimSpace(fields[2]) - hardNum, hardErr := parseUlimit(hard) - - // Omit metric if there were any parsing errors - if softErr == nil && hardErr == nil { - ulimitSpec := info.UlimitSpec{ - Name: name, - SoftLimit: int64(softNum), - HardLimit: int64(hardNum), - } - ulimits = append(ulimits, ulimitSpec) + if strings.HasPrefix(lim, "Max open files") { + // Remove line prefix + ulimit, err := processMaxOpenFileLimitLine( + "max_open_files", + lim[len(maxOpenFilesLinePrefix):], + ) + if err == nil { + ulimits = append(ulimits, ulimit) } } } return ulimits } +// Any caller of processMaxOpenFileLimitLine must ensure that the name prefix is already removed from the limit line. +// with the "Max open files" prefix. +func processMaxOpenFileLimitLine(name, line string) (info.UlimitSpec, error) { + // Remove any leading whitespace + line = strings.TrimSpace(line) + // Split on whitespace + fields := strings.Fields(line) + if len(fields) != 3 { + return info.UlimitSpec{}, fmt.Errorf("unable to parse max open files line: %s", line) + } + // The first field is the soft limit, the second is the hard limit + soft, err := parseUlimit(fields[0]) + if err != nil { + return info.UlimitSpec{}, err + } + hard, err := parseUlimit(fields[1]) + if err != nil { + return info.UlimitSpec{}, err + } + return info.UlimitSpec{ + Name: name, + SoftLimit: soft, + HardLimit: hard, + }, nil +} + func processRootProcUlimits(rootFs string, rootPid int) []info.UlimitSpec { filePath := path.Join(rootFs, "/proc", strconv.Itoa(rootPid), "limits") - out, err := ioutil.ReadFile(filePath) + out, err := os.ReadFile(filePath) if err != nil { klog.V(4).Infof("error while listing directory %q to read ulimits: %v", filePath, err) return []info.UlimitSpec{} @@ -264,14 +264,14 @@ func processRootProcUlimits(rootFs string, rootPid int) []info.UlimitSpec { func processStatsFromProcs(rootFs string, cgroupPath string, rootPid int) (info.ProcessStats, error) { var fdCount, socketCount uint64 filePath := path.Join(cgroupPath, "cgroup.procs") - out, err := ioutil.ReadFile(filePath) + out, err := os.ReadFile(filePath) if err != nil { return info.ProcessStats{}, fmt.Errorf("couldn't open cpu cgroup procs file %v : %v", filePath, err) } pids := strings.Split(string(out), "\n") - // EOL is also treated as a new line while reading "cgroup.procs" file with ioutil.ReadFile. + // EOL is also treated as a new line while reading "cgroup.procs" file with os.ReadFile. // The last value is an empty string "". Ex: pids = ["22", "1223", ""] // Trim the last value if len(pids) != 0 && pids[len(pids)-1] == "" { @@ -280,7 +280,7 @@ func processStatsFromProcs(rootFs string, cgroupPath string, rootPid int) (info. for _, pid := range pids { dirPath := path.Join(rootFs, "/proc", pid, "fd") - fds, err := ioutil.ReadDir(dirPath) + fds, err := os.ReadDir(dirPath) if err != nil { klog.V(4).Infof("error while listing directory %q to measure fd count: %v", dirPath, err) continue @@ -324,7 +324,7 @@ func (h *Handler) schedulerStatsFromProcs() (info.CpuSchedstat, error) { return info.CpuSchedstat{}, fmt.Errorf("couldn't open scheduler statistics for process %d: %v", pid, err) } defer f.Close() - contents, err := ioutil.ReadAll(f) + contents, err := io.ReadAll(f) if err != nil { return info.CpuSchedstat{}, fmt.Errorf("couldn't read scheduler statistics for process %d: %v", pid, err) } @@ -392,7 +392,7 @@ func getReferencedKBytes(pids []int) (uint64, error) { foundMatch := false for _, pid := range pids { smapsFilePath := fmt.Sprintf(smapsFilePathPattern, pid) - smapsContent, err := ioutil.ReadFile(smapsFilePath) + smapsContent, err := os.ReadFile(smapsFilePath) if err != nil { klog.V(5).Infof("Cannot read %s file, err: %s", smapsFilePath, err) if os.IsNotExist(err) { @@ -468,7 +468,7 @@ func networkStatsFromProc(rootFs string, pid int) ([]info.InterfaceStats, error) return ifaceStats, nil } -var ignoredDevicePrefixes = []string{"lo", "veth", "docker"} +var ignoredDevicePrefixes = []string{"lo", "veth", "docker", "nerdctl"} func isIgnoredDevice(ifName string) bool { for _, prefix := range ignoredDevicePrefixes { @@ -575,7 +575,7 @@ func advancedTCPStatsFromProc(rootFs string, pid int, file1, file2 string) (info } func scanAdvancedTCPStats(advancedStats *info.TcpAdvancedStat, advancedTCPStatsFile string) error { - data, err := ioutil.ReadFile(advancedTCPStatsFile) + data, err := os.ReadFile(advancedTCPStatsFile) if err != nil { return fmt.Errorf("failure opening %s: %v", advancedTCPStatsFile, err) } @@ -631,7 +631,7 @@ func scanAdvancedTCPStats(advancedStats *info.TcpAdvancedStat, advancedTCPStatsF func scanTCPStats(tcpStatsFile string) (info.TcpStat, error) { var stats info.TcpStat - data, err := ioutil.ReadFile(tcpStatsFile) + data, err := os.ReadFile(tcpStatsFile) if err != nil { return stats, fmt.Errorf("failure opening %s: %v", tcpStatsFile, err) } @@ -802,6 +802,7 @@ func setMemoryStats(s *cgroups.Stats, ret *info.ContainerStats) { ret.Memory.Usage = s.MemoryStats.Usage.Usage ret.Memory.MaxUsage = s.MemoryStats.Usage.MaxUsage ret.Memory.Failcnt = s.MemoryStats.Usage.Failcnt + ret.Memory.KernelUsage = s.MemoryStats.KernelUsage.Usage if cgroups.IsCgroup2UnifiedMode() { ret.Memory.Cache = s.MemoryStats.Stats["file"] diff --git a/vendor/github.com/google/cadvisor/container/raw/watcher.go b/vendor/github.com/google/cadvisor/container/raw/watcher.go index 6b2a250d78e..d71cc12065d 100644 --- a/vendor/github.com/google/cadvisor/container/raw/watcher.go +++ b/vendor/github.com/google/cadvisor/container/raw/watcher.go @@ -18,13 +18,13 @@ package raw import ( "fmt" - "io/ioutil" "os" "path" "strings" inotify "k8s.io/utils/inotify" + "github.com/google/cadvisor/container" "github.com/google/cadvisor/container/common" "github.com/google/cadvisor/container/libcontainer" "github.com/google/cadvisor/watcher" @@ -43,8 +43,8 @@ type rawContainerWatcher struct { stopWatcher chan error } -func NewRawContainerWatcher() (watcher.ContainerWatcher, error) { - cgroupSubsystems, err := libcontainer.GetCgroupSubsystems(nil) +func NewRawContainerWatcher(includedMetrics container.MetricSet) (watcher.ContainerWatcher, error) { + cgroupSubsystems, err := libcontainer.GetCgroupSubsystems(includedMetrics) if err != nil { return nil, fmt.Errorf("failed to get cgroup subsystems: %v", err) } @@ -139,7 +139,7 @@ func (w *rawContainerWatcher) watchDirectory(events chan watcher.ContainerEvent, // TODO(vmarmol): We should re-do this once we're done to ensure directories were not added in the meantime. // Watch subdirectories as well. - entries, err := ioutil.ReadDir(dir) + entries, err := os.ReadDir(dir) if err != nil { return alreadyWatching, err } diff --git a/vendor/github.com/google/cadvisor/fs/fs.go b/vendor/github.com/google/cadvisor/fs/fs.go index e1a1bc41e27..b8eb676f775 100644 --- a/vendor/github.com/google/cadvisor/fs/fs.go +++ b/vendor/github.com/google/cadvisor/fs/fs.go @@ -21,7 +21,6 @@ package fs import ( "bufio" "fmt" - "io/ioutil" "os" "os/exec" "path" @@ -146,7 +145,7 @@ func getFsUUIDToDeviceNameMap() (map[string]string, error) { return make(map[string]string), nil } - files, err := ioutil.ReadDir(dir) + files, err := os.ReadDir(dir) if err != nil { return nil, err } @@ -387,6 +386,7 @@ func (i *RealFsInfo) GetFsInfoForPath(mountSet map[string]struct{}) ([]Fs, error if err != nil { return nil, err } + nfsInfo := make(map[string]Fs, 0) for device, partition := range i.partitions { _, hasMount := mountSet[partition.mountpoint] _, hasDevice := deviceSet[device] @@ -395,7 +395,11 @@ func (i *RealFsInfo) GetFsInfoForPath(mountSet map[string]struct{}) ([]Fs, error err error fs Fs ) - switch partition.fsType { + fsType := partition.fsType + if strings.HasPrefix(partition.fsType, "nfs") { + fsType = "nfs" + } + switch fsType { case DeviceMapper.String(): fs.Capacity, fs.Free, fs.Available, err = getDMStats(device, partition.blockSize) klog.V(5).Infof("got devicemapper fs capacity stats: capacity: %v free: %v available: %v:", fs.Capacity, fs.Free, fs.Available) @@ -408,6 +412,22 @@ func (i *RealFsInfo) GetFsInfoForPath(mountSet map[string]struct{}) ([]Fs, error } // if /dev/zfs is not present default to VFS fallthrough + case NFS.String(): + devId := fmt.Sprintf("%d:%d", partition.major, partition.minor) + if v, ok := nfsInfo[devId]; ok { + fs = v + break + } + var inodes, inodesFree uint64 + fs.Capacity, fs.Free, fs.Available, inodes, inodesFree, err = getVfsStats(partition.mountpoint) + if err != nil { + klog.V(4).Infof("the file system type is %s, partition mountpoint does not exist: %v, error: %v", partition.fsType, partition.mountpoint, err) + break + } + fs.Inodes = &inodes + fs.InodesFree = &inodesFree + fs.Type = VFS + nfsInfo[devId] = fs default: var inodes, inodesFree uint64 if utils.FileExists(partition.mountpoint) { @@ -616,7 +636,7 @@ func GetDirUsage(dir string) (UsageInfo, error) { rootStat, ok := rootInfo.Sys().(*syscall.Stat_t) if !ok { - return usage, fmt.Errorf("unsuported fileinfo for getting inode usage of %q", dir) + return usage, fmt.Errorf("unsupported fileinfo for getting inode usage of %q", dir) } rootDevID := rootStat.Dev diff --git a/vendor/github.com/google/cadvisor/fs/types.go b/vendor/github.com/google/cadvisor/fs/types.go index 35268ace984..2fed3265179 100644 --- a/vendor/github.com/google/cadvisor/fs/types.go +++ b/vendor/github.com/google/cadvisor/fs/types.go @@ -22,6 +22,7 @@ type Context struct { // docker root directory. Docker DockerContext Crio CrioContext + Podman PodmanContext } type DockerContext struct { @@ -30,6 +31,12 @@ type DockerContext struct { DriverStatus map[string]string } +type PodmanContext struct { + Root string + Driver string + DriverStatus map[string]string +} + type CrioContext struct { Root string } @@ -50,6 +57,7 @@ const ( ZFS FsType = "zfs" DeviceMapper FsType = "devicemapper" VFS FsType = "vfs" + NFS FsType = "nfs" ) type Fs struct { diff --git a/vendor/github.com/google/cadvisor/info/v1/container.go b/vendor/github.com/google/cadvisor/info/v1/container.go index e44f50edfb1..efcfd5628e3 100644 --- a/vendor/github.com/google/cadvisor/info/v1/container.go +++ b/vendor/github.com/google/cadvisor/info/v1/container.go @@ -395,6 +395,10 @@ type MemoryStats struct { Failcnt uint64 `json:"failcnt"` + // Size of kernel memory allocated in bytes. + // Units: Bytes. + KernelUsage uint64 `json:"kernel"` + ContainerData MemoryStatsMemoryData `json:"container_data,omitempty"` HierarchicalData MemoryStatsMemoryData `json:"hierarchical_data,omitempty"` } diff --git a/vendor/github.com/google/cadvisor/info/v2/container.go b/vendor/github.com/google/cadvisor/info/v2/container.go index 15fb79b9ea4..f0824027a38 100644 --- a/vendor/github.com/google/cadvisor/info/v2/container.go +++ b/vendor/github.com/google/cadvisor/info/v2/container.go @@ -25,6 +25,7 @@ import ( const ( TypeName = "name" TypeDocker = "docker" + TypePodman = "podman" ) type CpuSpec struct { diff --git a/vendor/github.com/google/cadvisor/machine/info.go b/vendor/github.com/google/cadvisor/machine/info.go index a7a3d3e0cdb..76d2272f6a5 100644 --- a/vendor/github.com/google/cadvisor/machine/info.go +++ b/vendor/github.com/google/cadvisor/machine/info.go @@ -17,7 +17,7 @@ package machine import ( "bytes" "flag" - "io/ioutil" + "os" "path/filepath" "strings" "time" @@ -45,7 +45,7 @@ func getInfoFromFiles(filePaths string) string { return "" } for _, file := range strings.Split(filePaths, ",") { - id, err := ioutil.ReadFile(file) + id, err := os.ReadFile(file) if err == nil { return strings.TrimSpace(string(id)) } @@ -60,7 +60,7 @@ func Info(sysFs sysfs.SysFs, fsInfo fs.FsInfo, inHostNamespace bool) (*info.Mach rootFs = "/rootfs" } - cpuinfo, err := ioutil.ReadFile(filepath.Join(rootFs, "/proc/cpuinfo")) + cpuinfo, err := os.ReadFile(filepath.Join(rootFs, "/proc/cpuinfo")) if err != nil { return nil, err } diff --git a/vendor/github.com/google/cadvisor/machine/machine.go b/vendor/github.com/google/cadvisor/machine/machine.go index 41bff7cdfe7..61b70cb317c 100644 --- a/vendor/github.com/google/cadvisor/machine/machine.go +++ b/vendor/github.com/google/cadvisor/machine/machine.go @@ -17,7 +17,6 @@ package machine import ( "fmt" - "io/ioutil" "os" "path" "regexp" @@ -46,7 +45,7 @@ var ( swapCapacityRegexp = regexp.MustCompile(`SwapTotal:\s*([0-9]+) kB`) vendorIDRegexp = regexp.MustCompile(`vendor_id\s*:\s*(\w+)`) - cpuBusPath = "/sys/bus/cpu/devices/" + cpuAttributesPath = "/sys/devices/system/cpu/" isMemoryController = regexp.MustCompile("mc[0-9]+") isDimm = regexp.MustCompile("dimm[0-9]+") machineArch = getMachineArch() @@ -62,7 +61,7 @@ func GetCPUVendorID(procInfo []byte) string { matches := vendorIDRegexp.FindSubmatch(procInfo) if len(matches) != 2 { - klog.Warning("Cannot read vendor id correctly, set empty.") + klog.V(4).Info("Cannot read vendor id correctly, set empty.") return vendorID } @@ -77,7 +76,7 @@ func GetPhysicalCores(procInfo []byte) int { if numCores == 0 { // read number of cores from /sys/bus/cpu/devices/cpu*/topology/core_id to deal with processors // for which 'core id' is not available in /proc/cpuinfo - numCores = sysfs.GetUniqueCPUPropertyCount(cpuBusPath, sysfs.CPUCoreID) + numCores = sysfs.GetUniqueCPUPropertyCount(cpuAttributesPath, sysfs.CPUCoreID) } if numCores == 0 { klog.Errorf("Cannot read number of physical cores correctly, number of cores set to %d", numCores) @@ -91,7 +90,7 @@ func GetSockets(procInfo []byte) int { if numSocket == 0 { // read number of sockets from /sys/bus/cpu/devices/cpu*/topology/physical_package_id to deal with processors // for which 'physical id' is not available in /proc/cpuinfo - numSocket = sysfs.GetUniqueCPUPropertyCount(cpuBusPath, sysfs.CPUPhysicalPackageID) + numSocket = sysfs.GetUniqueCPUPropertyCount(cpuAttributesPath, sysfs.CPUPhysicalPackageID) } if numSocket == 0 { klog.Errorf("Cannot read number of sockets correctly, number of sockets set to %d", numSocket) @@ -103,7 +102,7 @@ func GetSockets(procInfo []byte) int { func GetClockSpeed(procInfo []byte) (uint64, error) { // First look through sys to find a max supported cpu frequency. if utils.FileExists(maxFreqFile) { - val, err := ioutil.ReadFile(maxFreqFile) + val, err := os.ReadFile(maxFreqFile) if err != nil { return 0, err } @@ -136,7 +135,7 @@ func GetClockSpeed(procInfo []byte) (uint64, error) { // GetMachineMemoryCapacity returns the machine's total memory from /proc/meminfo. // Returns the total memory capacity as an uint64 (number of bytes). func GetMachineMemoryCapacity() (uint64, error) { - out, err := ioutil.ReadFile("/proc/meminfo") + out, err := os.ReadFile("/proc/meminfo") if err != nil { return 0, err } @@ -156,7 +155,7 @@ func GetMachineMemoryCapacity() (uint64, error) { // (https://github.com/torvalds/linux/blob/v5.5/drivers/edac/edac_mc.c#L198) func GetMachineMemoryByType(edacPath string) (map[string]*info.MemoryInfo, error) { memory := map[string]*info.MemoryInfo{} - names, err := ioutil.ReadDir(edacPath) + names, err := os.ReadDir(edacPath) // On some architectures (such as ARM) memory controller device may not exist. // If this is the case then we ignore error and return empty slice. _, ok := err.(*os.PathError) @@ -170,7 +169,7 @@ func GetMachineMemoryByType(edacPath string) (map[string]*info.MemoryInfo, error if !isMemoryController.MatchString(controller) { continue } - dimms, err := ioutil.ReadDir(path.Join(edacPath, controllerDir.Name())) + dimms, err := os.ReadDir(path.Join(edacPath, controllerDir.Name())) if err != nil { return map[string]*info.MemoryInfo{}, err } @@ -179,7 +178,7 @@ func GetMachineMemoryByType(edacPath string) (map[string]*info.MemoryInfo, error if !isDimm.MatchString(dimm) { continue } - memType, err := ioutil.ReadFile(path.Join(edacPath, controller, dimm, memTypeFileName)) + memType, err := os.ReadFile(path.Join(edacPath, controller, dimm, memTypeFileName)) if err != nil { return map[string]*info.MemoryInfo{}, err } @@ -187,7 +186,7 @@ func GetMachineMemoryByType(edacPath string) (map[string]*info.MemoryInfo, error if _, exists := memory[readableMemType]; !exists { memory[readableMemType] = &info.MemoryInfo{} } - size, err := ioutil.ReadFile(path.Join(edacPath, controller, dimm, sizeFileName)) + size, err := os.ReadFile(path.Join(edacPath, controller, dimm, sizeFileName)) if err != nil { return map[string]*info.MemoryInfo{}, err } @@ -210,7 +209,7 @@ func mbToBytes(megabytes int) int { // GetMachineSwapCapacity returns the machine's total swap from /proc/meminfo. // Returns the total swap capacity as an uint64 (number of bytes). func GetMachineSwapCapacity() (uint64, error) { - out, err := ioutil.ReadFile("/proc/meminfo") + out, err := os.ReadFile("/proc/meminfo") if err != nil { return 0, err } diff --git a/vendor/github.com/google/cadvisor/machine/operatingsystem_unix.go b/vendor/github.com/google/cadvisor/machine/operatingsystem_unix.go index 37a4cc53611..00db2d6b1a6 100644 --- a/vendor/github.com/google/cadvisor/machine/operatingsystem_unix.go +++ b/vendor/github.com/google/cadvisor/machine/operatingsystem_unix.go @@ -19,7 +19,6 @@ package machine import ( "fmt" - "io/ioutil" "os" "os/exec" "regexp" @@ -39,10 +38,10 @@ func getOperatingSystem() (string, error) { } return string(osName), nil } - bytes, err := ioutil.ReadFile("/etc/os-release") + bytes, err := os.ReadFile("/etc/os-release") if err != nil && os.IsNotExist(err) { // /usr/lib/os-release in stateless systems like Clear Linux - bytes, err = ioutil.ReadFile("/usr/lib/os-release") + bytes, err = os.ReadFile("/usr/lib/os-release") } if err != nil { return "", fmt.Errorf("error opening file : %v", err) diff --git a/vendor/github.com/google/cadvisor/manager/container.go b/vendor/github.com/google/cadvisor/manager/container.go index 861e230cfc4..cf868953c9a 100644 --- a/vendor/github.com/google/cadvisor/manager/container.go +++ b/vendor/github.com/google/cadvisor/manager/container.go @@ -17,9 +17,9 @@ package manager import ( "flag" "fmt" - "io/ioutil" "math" "math/rand" + "os" "os/exec" "path" "regexp" @@ -243,7 +243,7 @@ func (cd *containerData) ReadFile(filepath string, inHostNamespace bool) ([]byte for _, pid := range pids { filePath := path.Join(rootfs, "/proc", pid, "/root", filepath) klog.V(3).Infof("Trying path %q", filePath) - data, err := ioutil.ReadFile(filePath) + data, err := os.ReadFile(filePath) if err == nil { return data, err } @@ -323,7 +323,7 @@ func (cd *containerData) parseProcessList(cadvisorContainer string, inHostNamesp var fdCount int dirPath := path.Join(rootfs, "/proc", strconv.Itoa(processInfo.Pid), "fd") - fds, err := ioutil.ReadDir(dirPath) + fds, err := os.ReadDir(dirPath) if err != nil { klog.V(4).Infof("error while listing directory %q to measure fd count: %v", dirPath, err) continue @@ -482,7 +482,7 @@ func (cd *containerData) nextHousekeepingInterval() time.Duration { stats, err := cd.memoryCache.RecentStats(cd.info.Name, empty, empty, 2) if err != nil { if cd.allowErrorLogging() { - klog.Warningf("Failed to get RecentStats(%q) while determining the next housekeeping: %v", cd.info.Name, err) + klog.V(4).Infof("Failed to get RecentStats(%q) while determining the next housekeeping: %v", cd.info.Name, err) } } else if len(stats) == 2 { // TODO(vishnuk): Use no processes as a signal. diff --git a/vendor/github.com/google/cadvisor/manager/manager.go b/vendor/github.com/google/cadvisor/manager/manager.go index 8c4396d65dc..8043394d5d5 100644 --- a/vendor/github.com/google/cadvisor/manager/manager.go +++ b/vendor/github.com/google/cadvisor/manager/manager.go @@ -58,10 +58,13 @@ var eventStorageAgeLimit = flag.String("event_storage_age_limit", "default=24h", var eventStorageEventLimit = flag.String("event_storage_event_limit", "default=100000", "Max number of events to store (per type). Value is a comma separated list of key values, where the keys are event types (e.g.: creation, oom) or \"default\" and the value is an integer. Default is applied to all non-specified event types") var applicationMetricsCountLimit = flag.Int("application_metrics_count_limit", 100, "Max number of application metrics to store (per container)") -// The namespace under which Docker aliases are unique. -const DockerNamespace = "docker" +// The namespace under which aliases are unique. +const ( + DockerNamespace = "docker" + PodmanNamespace = "podman" +) -var HousekeepingConfigFlags = HouskeepingConfig{ +var HousekeepingConfigFlags = HousekeepingConfig{ flag.Duration("max_housekeeping_interval", 60*time.Second, "Largest interval to allow between container housekeepings"), flag.Bool("allow_dynamic_housekeeping", true, "Whether to allow the housekeeping interval to be dynamic"), } @@ -136,16 +139,20 @@ type Manager interface { // Returns debugging information. Map of lines per category. DebugInfo() map[string][]string + + AllPodmanContainers(c *info.ContainerInfoRequest) (map[string]info.ContainerInfo, error) + + PodmanContainer(containerName string, query *info.ContainerInfoRequest) (info.ContainerInfo, error) } // Housekeeping configuration for the manager -type HouskeepingConfig = struct { +type HousekeepingConfig = struct { Interval *time.Duration AllowDynamic *bool } // New takes a memory storage and returns a new manager. -func New(memoryCache *memory.InMemoryCache, sysfs sysfs.SysFs, houskeepingConfig HouskeepingConfig, includedMetricsSet container.MetricSet, collectorHTTPClient *http.Client, rawContainerCgroupPathPrefixWhiteList, containerEnvMetadataWhiteList []string, perfEventsFile string, resctrlInterval time.Duration) (Manager, error) { +func New(memoryCache *memory.InMemoryCache, sysfs sysfs.SysFs, HousekeepingConfig HousekeepingConfig, includedMetricsSet container.MetricSet, collectorHTTPClient *http.Client, rawContainerCgroupPathPrefixWhiteList, containerEnvMetadataWhiteList []string, perfEventsFile string, resctrlInterval time.Duration) (Manager, error) { if memoryCache == nil { return nil, fmt.Errorf("manager requires memory storage") } @@ -192,8 +199,8 @@ func New(memoryCache *memory.InMemoryCache, sysfs sysfs.SysFs, houskeepingConfig cadvisorContainer: selfContainer, inHostNamespace: inHostNamespace, startupTime: time.Now(), - maxHousekeepingInterval: *houskeepingConfig.Interval, - allowDynamicHousekeeping: *houskeepingConfig.AllowDynamic, + maxHousekeepingInterval: *HousekeepingConfig.Interval, + allowDynamicHousekeeping: *HousekeepingConfig.AllowDynamic, includedMetrics: includedMetricsSet, containerWatchers: []watcher.ContainerWatcher{}, eventsChannel: eventsChannel, @@ -265,6 +272,19 @@ type manager struct { containerEnvMetadataWhiteList []string } +func (m *manager) PodmanContainer(containerName string, query *info.ContainerInfoRequest) (info.ContainerInfo, error) { + container, err := m.namespacedContainer(containerName, PodmanNamespace) + if err != nil { + return info.ContainerInfo{}, err + } + + inf, err := m.containerDataToContainerInfo(container, query) + if err != nil { + return info.ContainerInfo{}, err + } + return *inf, nil +} + // Start the container manager. func (m *manager) Start() error { m.containerWatchers = container.InitializePlugins(m, m.fsInfo, m.includedMetrics) @@ -274,7 +294,7 @@ func (m *manager) Start() error { klog.Errorf("Registration of the raw container factory failed: %v", err) } - rawWatcher, err := raw.NewRawContainerWatcher() + rawWatcher, err := raw.NewRawContainerWatcher(m.includedMetrics) if err != nil { return err } @@ -581,14 +601,14 @@ func (m *manager) SubcontainersInfo(containerName string, query *info.ContainerI return m.containerDataSliceToContainerInfoSlice(containers, query) } -func (m *manager) getAllDockerContainers() map[string]*containerData { +func (m *manager) getAllNamespacedContainers(ns string) map[string]*containerData { m.containersLock.RLock() defer m.containersLock.RUnlock() containers := make(map[string]*containerData, len(m.containers)) - // Get containers in the Docker namespace. + // Get containers in a namespace. for name, cont := range m.containers { - if name.Namespace == DockerNamespace { + if name.Namespace == ns { containers[cont.info.Name] = cont } } @@ -596,48 +616,34 @@ func (m *manager) getAllDockerContainers() map[string]*containerData { } func (m *manager) AllDockerContainers(query *info.ContainerInfoRequest) (map[string]info.ContainerInfo, error) { - containers := m.getAllDockerContainers() - - output := make(map[string]info.ContainerInfo, len(containers)) - for name, cont := range containers { - inf, err := m.containerDataToContainerInfo(cont, query) - if err != nil { - // Ignore the error because of race condition and return best-effort result. - if err == memory.ErrDataNotFound { - klog.Warningf("Error getting data for container %s because of race condition", name) - continue - } - return nil, err - } - output[name] = *inf - } - return output, nil + containers := m.getAllNamespacedContainers(DockerNamespace) + return m.containersInfo(containers, query) } -func (m *manager) getDockerContainer(containerName string) (*containerData, error) { +func (m *manager) namespacedContainer(containerName string, ns string) (*containerData, error) { m.containersLock.RLock() defer m.containersLock.RUnlock() - // Check for the container in the Docker container namespace. + // Check for the container in the namespace. cont, ok := m.containers[namespacedContainerName{ - Namespace: DockerNamespace, + Namespace: ns, Name: containerName, }] // Look for container by short prefix name if no exact match found. if !ok { for contName, c := range m.containers { - if contName.Namespace == DockerNamespace && strings.HasPrefix(contName.Name, containerName) { + if contName.Namespace == ns && strings.HasPrefix(contName.Name, containerName) { if cont == nil { cont = c } else { - return nil, fmt.Errorf("unable to find container. Container %q is not unique", containerName) + return nil, fmt.Errorf("unable to find container in %q namespace. Container %q is not unique", ns, containerName) } } } if cont == nil { - return nil, fmt.Errorf("unable to find Docker container %q", containerName) + return nil, fmt.Errorf("unable to find container %q in %q namespace", containerName, ns) } } @@ -645,7 +651,7 @@ func (m *manager) getDockerContainer(containerName string) (*containerData, erro } func (m *manager) DockerContainer(containerName string, query *info.ContainerInfoRequest) (info.ContainerInfo, error) { - container, err := m.getDockerContainer(containerName) + container, err := m.namespacedContainer(containerName, DockerNamespace) if err != nil { return info.ContainerInfo{}, err } @@ -691,7 +697,7 @@ func (m *manager) GetRequestedContainersInfo(containerName string, options v2.Re info, err := m.containerDataToContainerInfo(data, &query) if err != nil { if err == memory.ErrDataNotFound { - klog.Warningf("Error getting data for container %s because of race condition", name) + klog.V(4).Infof("Error getting data for container %s because of race condition", name) continue } errs.append(name, "containerDataToContainerInfo", err) @@ -717,19 +723,23 @@ func (m *manager) getRequestedContainers(containerName string, options v2.Reques return containersMap, fmt.Errorf("unknown container: %q", containerName) } } - case v2.TypeDocker: + case v2.TypeDocker, v2.TypePodman: + namespace := map[string]string{ + v2.TypeDocker: DockerNamespace, + v2.TypePodman: PodmanNamespace, + }[options.IdType] if !options.Recursive { containerName = strings.TrimPrefix(containerName, "/") - cont, err := m.getDockerContainer(containerName) + cont, err := m.namespacedContainer(containerName, namespace) if err != nil { return containersMap, err } containersMap[cont.info.Name] = cont } else { if containerName != "/" { - return containersMap, fmt.Errorf("invalid request for docker container %q with subcontainers", containerName) + return containersMap, fmt.Errorf("invalid request for %s container %q with subcontainers", options.IdType, containerName) } - containersMap = m.getAllDockerContainers() + containersMap = m.getAllNamespacedContainers(namespace) } default: return containersMap, fmt.Errorf("invalid request type %q", options.IdType) @@ -1357,6 +1367,28 @@ func (m *manager) getFsInfoByDeviceName(deviceName string) (v2.FsInfo, error) { return v2.FsInfo{}, fmt.Errorf("cannot find filesystem info for device %q", deviceName) } +func (m *manager) containersInfo(containers map[string]*containerData, query *info.ContainerInfoRequest) (map[string]info.ContainerInfo, error) { + output := make(map[string]info.ContainerInfo, len(containers)) + for name, cont := range containers { + inf, err := m.containerDataToContainerInfo(cont, query) + if err != nil { + // Ignore the error because of race condition and return best-effort result. + if err == memory.ErrDataNotFound { + klog.V(4).Infof("Error getting data for container %s because of race condition", name) + continue + } + return nil, err + } + output[name] = *inf + } + return output, nil +} + +func (m *manager) AllPodmanContainers(query *info.ContainerInfoRequest) (map[string]info.ContainerInfo, error) { + containers := m.getAllNamespacedContainers(PodmanNamespace) + return m.containersInfo(containers, query) +} + func getVersionInfo() (*info.VersionInfo, error) { kernelVersion := machine.KernelVersion() diff --git a/vendor/github.com/google/cadvisor/metrics/prometheus.go b/vendor/github.com/google/cadvisor/metrics/prometheus.go index 75fc2905fde..a6fc3dff4c5 100644 --- a/vendor/github.com/google/cadvisor/metrics/prometheus.go +++ b/vendor/github.com/google/cadvisor/metrics/prometheus.go @@ -377,6 +377,13 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc, includedMetri getValues: func(s *info.ContainerStats) metricValues { return metricValues{{value: float64(s.Memory.RSS), timestamp: s.Timestamp}} }, + }, { + name: "container_memory_kernel_usage", + help: "Size of kernel memory allocated in bytes.", + valueType: prometheus.GaugeValue, + getValues: func(s *info.ContainerStats) metricValues { + return metricValues{{value: float64(s.Memory.KernelUsage), timestamp: s.Timestamp}} + }, }, { name: "container_memory_mapped_file", help: "Size of memory mapped files in bytes.", diff --git a/vendor/github.com/google/cadvisor/metrics/prometheus_fake.go b/vendor/github.com/google/cadvisor/metrics/prometheus_fake.go index df45e720766..7b7399778da 100644 --- a/vendor/github.com/google/cadvisor/metrics/prometheus_fake.go +++ b/vendor/github.com/google/cadvisor/metrics/prometheus_fake.go @@ -350,10 +350,11 @@ func (p testSubcontainersInfoProvider) GetRequestedContainersInfo(string, v2.Req Unevictable: map[uint8]uint64{0: 8900, 1: 20000}, }, }, - Cache: 14, - RSS: 15, - MappedFile: 16, - Swap: 8192, + Cache: 14, + RSS: 15, + MappedFile: 16, + KernelUsage: 17, + Swap: 8192, }, Hugetlb: map[string]info.HugetlbStats{ "2Mi": { diff --git a/vendor/github.com/google/cadvisor/metrics/prometheus_machine.go b/vendor/github.com/google/cadvisor/metrics/prometheus_machine.go index 181aaf81b3e..67e5c13d74c 100644 --- a/vendor/github.com/google/cadvisor/metrics/prometheus_machine.go +++ b/vendor/github.com/google/cadvisor/metrics/prometheus_machine.go @@ -111,6 +111,14 @@ func NewPrometheusMachineCollector(i infoProvider, includedMetrics container.Met return metricValues{{value: float64(machineInfo.MemoryCapacity), timestamp: machineInfo.Timestamp}} }, }, + { + name: "machine_swap_bytes", + help: "Amount of swap memory available on the machine.", + valueType: prometheus.GaugeValue, + getValues: func(machineInfo *info.MachineInfo) metricValues { + return metricValues{{value: float64(machineInfo.SwapCapacity), timestamp: machineInfo.Timestamp}} + }, + }, { name: "machine_dimm_count", help: "Number of RAM DIMM (all types memory modules) value labeled by dimm type.", diff --git a/vendor/github.com/google/cadvisor/nvm/machine_libipmctl.go b/vendor/github.com/google/cadvisor/nvm/machine_libipmctl.go index 0332a2c5994..949d417defb 100644 --- a/vendor/github.com/google/cadvisor/nvm/machine_libipmctl.go +++ b/vendor/github.com/google/cadvisor/nvm/machine_libipmctl.go @@ -48,7 +48,7 @@ func init() { } // getAvgPowerBudget retrieves configured power budget -// (in watts) for NVM devices. When libipmct is not available +// (in watts) for NVM devices. When libipmctl is not available // zero is returned. func getAvgPowerBudget() (uint, error) { // Get number of devices on the platform @@ -61,7 +61,7 @@ func getAvgPowerBudget() (uint, error) { } if count == 0 { - klog.Warningf("There are no NVM devices!") + klog.V(4).Infof("There are no NVM devices.") return uint(0), nil } diff --git a/vendor/github.com/google/cadvisor/perf/collector_libpfm.go b/vendor/github.com/google/cadvisor/perf/collector_libpfm.go index cd7bc632f2d..2b38d5d5be8 100644 --- a/vendor/github.com/google/cadvisor/perf/collector_libpfm.go +++ b/vendor/github.com/google/cadvisor/perf/collector_libpfm.go @@ -62,7 +62,7 @@ type group struct { var ( isLibpfmInitialized = false - libpmfMutex = sync.Mutex{} + libpfmMutex = sync.Mutex{} ) const ( @@ -70,8 +70,8 @@ const ( ) func init() { - libpmfMutex.Lock() - defer libpmfMutex.Unlock() + libpfmMutex.Lock() + defer libpfmMutex.Unlock() pErr := C.pfm_initialize() if pErr != C.PFM_SUCCESS { klog.Errorf("unable to initialize libpfm: %d", int(pErr)) @@ -266,10 +266,12 @@ func readPerfEventAttr(name string, pfmGetOsEventEncoding func(string, unsafe.Po func pfmGetOsEventEncoding(name string, perfEventAttrMemory unsafe.Pointer) error { event := pfmPerfEncodeArgT{} fstr := C.CString("") + defer C.free(unsafe.Pointer(fstr)) event.fstr = unsafe.Pointer(fstr) event.attr = perfEventAttrMemory event.size = C.ulong(unsafe.Sizeof(event)) cSafeName := C.CString(name) + defer C.free(unsafe.Pointer(cSafeName)) pErr := C.pfm_get_os_event_encoding(cSafeName, C.PFM_PLM0|C.PFM_PLM3, C.PFM_OS_PERF_EVENT, unsafe.Pointer(&event)) if pErr != C.PFM_SUCCESS { return fmt.Errorf("unable to transform event name %s to perf_event_attr: %d", name, int(pErr)) @@ -409,8 +411,8 @@ func (c *collector) Destroy() { // Finalize terminates libpfm4 to free resources. func Finalize() { - libpmfMutex.Lock() - defer libpmfMutex.Unlock() + libpfmMutex.Lock() + defer libpfmMutex.Unlock() klog.V(1).Info("Attempting to terminate libpfm4") if !isLibpfmInitialized { diff --git a/vendor/github.com/google/cadvisor/perf/uncore_libpfm.go b/vendor/github.com/google/cadvisor/perf/uncore_libpfm.go index 0ef6248c79f..431bd6839cd 100644 --- a/vendor/github.com/google/cadvisor/perf/uncore_libpfm.go +++ b/vendor/github.com/google/cadvisor/perf/uncore_libpfm.go @@ -25,7 +25,6 @@ package perf import "C" import ( "fmt" - "io/ioutil" "os" "path/filepath" "reflect" @@ -70,7 +69,7 @@ func getPMU(pmus uncorePMUs, gotType uint32) (*pmu, error) { type uncorePMUs map[string]pmu func readUncorePMU(path string, name string, cpumaskRegexp *regexp.Regexp) (*pmu, error) { - buf, err := ioutil.ReadFile(filepath.Join(path, pmuTypeFilename)) + buf, err := os.ReadFile(filepath.Join(path, pmuTypeFilename)) if err != nil { return nil, err } @@ -80,7 +79,7 @@ func readUncorePMU(path string, name string, cpumaskRegexp *regexp.Regexp) (*pmu return nil, err } - buf, err = ioutil.ReadFile(filepath.Join(path, pmuCpumaskFilename)) + buf, err = os.ReadFile(filepath.Join(path, pmuCpumaskFilename)) if err != nil { return nil, err } diff --git a/vendor/github.com/google/cadvisor/resctrl/utils.go b/vendor/github.com/google/cadvisor/resctrl/utils.go index e2821674075..78c6262fb6a 100644 --- a/vendor/github.com/google/cadvisor/resctrl/utils.go +++ b/vendor/github.com/google/cadvisor/resctrl/utils.go @@ -22,7 +22,6 @@ import ( "bufio" "bytes" "fmt" - "io/ioutil" "os" "path/filepath" "strconv" @@ -42,6 +41,8 @@ const ( cpusListFileName = "cpus_list" schemataFileName = "schemata" tasksFileName = "tasks" + modeFileName = "mode" + sizeFileName = "size" infoDirName = "info" monDataDirName = "mon_data" monGroupsDirName = "mon_groups" @@ -72,6 +73,8 @@ var ( monGroupsDirName: {}, schemataFileName: {}, tasksFileName: {}, + modeFileName: {}, + sizeFileName: {}, } ) @@ -189,7 +192,7 @@ func getPids(containerName string) ([]int, error) { func getAllProcessThreads(path string) ([]int, error) { processThreads := make([]int, 0) - threadDirs, err := ioutil.ReadDir(path) + threadDirs, err := os.ReadDir(path) if err != nil { return processThreads, err } @@ -216,7 +219,7 @@ func findGroup(group string, pids []string, includeGroup bool, exclusive bool) ( availablePaths = append(availablePaths, group) } - files, err := ioutil.ReadDir(group) + files, err := os.ReadDir(group) for _, file := range files { if _, ok := groupDirectories[file.Name()]; !ok { availablePaths = append(availablePaths, filepath.Join(group, file.Name())) @@ -296,7 +299,7 @@ func readTasksFile(tasksPath string) (map[string]struct{}, error) { } func readStatFrom(path string, vendorID string) (uint64, error) { - context, err := ioutil.ReadFile(path) + context, err := os.ReadFile(path) if err != nil { return 0, err } diff --git a/vendor/github.com/google/cadvisor/summary/summary.go b/vendor/github.com/google/cadvisor/summary/summary.go index de12f43b3d9..f89a7fceb2b 100644 --- a/vendor/github.com/google/cadvisor/summary/summary.go +++ b/vendor/github.com/google/cadvisor/summary/summary.go @@ -78,7 +78,7 @@ func (s *StatsSummary) AddSample(stat v1.ContainerStats) error { } if elapsed > 60*time.Second { // Make a minute sample. This works with dynamic housekeeping as long - // as we keep max dynamic houskeeping period close to a minute. + // as we keep max dynamic housekeeping period close to a minute. minuteSample := GetMinutePercentiles(s.secondSamples) // Clear seconds samples. Keep the latest sample for continuity. // Copying and resizing helps avoid slice re-allocation. diff --git a/vendor/github.com/google/cadvisor/utils/cloudinfo/azure/azure.go b/vendor/github.com/google/cadvisor/utils/cloudinfo/azure/azure.go index d04b0e2b404..65e28e340a0 100644 --- a/vendor/github.com/google/cadvisor/utils/cloudinfo/azure/azure.go +++ b/vendor/github.com/google/cadvisor/utils/cloudinfo/azure/azure.go @@ -15,7 +15,7 @@ package cloudinfo import ( - "io/ioutil" + "os" "strings" info "github.com/google/cadvisor/info/v1" @@ -37,7 +37,7 @@ type provider struct{} var _ cloudinfo.CloudProvider = provider{} func (provider) IsActiveProvider() bool { - data, err := ioutil.ReadFile(sysVendorFileName) + data, err := os.ReadFile(sysVendorFileName) if err != nil { return false } @@ -50,7 +50,7 @@ func (provider) GetInstanceType() info.InstanceType { } func (provider) GetInstanceID() info.InstanceID { - data, err := ioutil.ReadFile(biosUUIDFileName) + data, err := os.ReadFile(biosUUIDFileName) if err != nil { return info.UnNamedInstance } diff --git a/vendor/github.com/google/cadvisor/utils/cloudinfo/gce/gce.go b/vendor/github.com/google/cadvisor/utils/cloudinfo/gce/gce.go index 50dc7708698..ee0786194e9 100644 --- a/vendor/github.com/google/cadvisor/utils/cloudinfo/gce/gce.go +++ b/vendor/github.com/google/cadvisor/utils/cloudinfo/gce/gce.go @@ -15,7 +15,7 @@ package gce import ( - "io/ioutil" + "os" "strings" info "github.com/google/cadvisor/info/v1" @@ -39,7 +39,7 @@ type provider struct{} var _ cloudinfo.CloudProvider = provider{} func (provider) IsActiveProvider() bool { - data, err := ioutil.ReadFile(gceProductName) + data, err := os.ReadFile(gceProductName) if err != nil { klog.V(2).Infof("Error while reading product_name: %v", err) return false diff --git a/vendor/github.com/google/cadvisor/utils/sysfs/sysfs.go b/vendor/github.com/google/cadvisor/utils/sysfs/sysfs.go index 0b83dd75009..e3466c08e4b 100644 --- a/vendor/github.com/google/cadvisor/utils/sysfs/sysfs.go +++ b/vendor/github.com/google/cadvisor/utils/sysfs/sysfs.go @@ -17,7 +17,6 @@ package sysfs import ( "bytes" "fmt" - "io/ioutil" "os" "path" "path/filepath" @@ -102,6 +101,9 @@ type SysFs interface { GetBlockDeviceScheduler(string) (string, error) // Get device major:minor number string. GetBlockDeviceNumbers(string) (string, error) + // Is the device "hidden" (meaning will not have a device handle) + // This is the case with native nvme multipathing. + IsBlockDeviceHidden(string) (bool, error) GetNetworkDevices() ([]os.FileInfo, error) GetNetworkAddress(string) (string, error) @@ -124,10 +126,14 @@ type SysFs interface { IsCPUOnline(dir string) bool } -type realSysFs struct{} +type realSysFs struct { + cpuPath string +} func NewRealSysFs() SysFs { - return &realSysFs{} + return &realSysFs{ + cpuPath: "/sys/devices/system/cpu", + } } func (fs *realSysFs) GetNodesPaths() ([]string, error) { @@ -142,7 +148,7 @@ func (fs *realSysFs) GetCPUsPaths(cpusPath string) ([]string, error) { func (fs *realSysFs) GetCoreID(cpuPath string) (string, error) { coreIDFilePath := fmt.Sprintf("%s%s", cpuPath, coreIDFilePath) - coreID, err := ioutil.ReadFile(coreIDFilePath) + coreID, err := os.ReadFile(coreIDFilePath) if err != nil { return "", err } @@ -151,7 +157,7 @@ func (fs *realSysFs) GetCoreID(cpuPath string) (string, error) { func (fs *realSysFs) GetCPUPhysicalPackageID(cpuPath string) (string, error) { packageIDFilePath := fmt.Sprintf("%s%s", cpuPath, packageIDFilePath) - packageID, err := ioutil.ReadFile(packageIDFilePath) + packageID, err := os.ReadFile(packageIDFilePath) if err != nil { return "", err } @@ -160,7 +166,7 @@ func (fs *realSysFs) GetCPUPhysicalPackageID(cpuPath string) (string, error) { func (fs *realSysFs) GetMemInfo(nodePath string) (string, error) { meminfoPath := fmt.Sprintf("%s/%s", nodePath, meminfoFile) - meminfo, err := ioutil.ReadFile(meminfoPath) + meminfo, err := os.ReadFile(meminfoPath) if err != nil { return "", err } @@ -169,7 +175,7 @@ func (fs *realSysFs) GetMemInfo(nodePath string) (string, error) { func (fs *realSysFs) GetDistances(nodePath string) (string, error) { distancePath := fmt.Sprintf("%s/%s", nodePath, distanceFile) - distance, err := ioutil.ReadFile(distancePath) + distance, err := os.ReadFile(distancePath) if err != nil { return "", err } @@ -177,12 +183,16 @@ func (fs *realSysFs) GetDistances(nodePath string) (string, error) { } func (fs *realSysFs) GetHugePagesInfo(hugePagesDirectory string) ([]os.FileInfo, error) { - return ioutil.ReadDir(hugePagesDirectory) + dirs, err := os.ReadDir(hugePagesDirectory) + if err != nil { + return nil, err + } + return toFileInfo(dirs) } func (fs *realSysFs) GetHugePagesNr(hugepagesDirectory string, hugePageName string) (string, error) { hugePageFilePath := fmt.Sprintf("%s%s/%s", hugepagesDirectory, hugePageName, HugePagesNrFile) - hugePageFile, err := ioutil.ReadFile(hugePageFilePath) + hugePageFile, err := os.ReadFile(hugePageFilePath) if err != nil { return "", err } @@ -190,19 +200,43 @@ func (fs *realSysFs) GetHugePagesNr(hugepagesDirectory string, hugePageName stri } func (fs *realSysFs) GetBlockDevices() ([]os.FileInfo, error) { - return ioutil.ReadDir(blockDir) + dirs, err := os.ReadDir(blockDir) + if err != nil { + return nil, err + } + return toFileInfo(dirs) } func (fs *realSysFs) GetBlockDeviceNumbers(name string) (string, error) { - dev, err := ioutil.ReadFile(path.Join(blockDir, name, "/dev")) + dev, err := os.ReadFile(path.Join(blockDir, name, "/dev")) if err != nil { return "", err } return string(dev), nil } +func (fs *realSysFs) IsBlockDeviceHidden(name string) (bool, error) { + // See: https://www.kernel.org/doc/Documentation/ABI/stable/sysfs-block + // https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git + // - c8487d854ba5 ("lsblk: Ignore hidden devices") + devHiddenPath := path.Join(blockDir, name, "/hidden") + hidden, err := os.ReadFile(devHiddenPath) + if err != nil && os.IsNotExist(err) { + // older OS may not have /hidden sysfs entry, so for sure + // it is not a hidden device... + return false, nil + } + if err != nil { + return false, fmt.Errorf("failed to read %s: %w", devHiddenPath, err) + } + if string(hidden) == "1" { + return true, nil + } + return false, nil +} + func (fs *realSysFs) GetBlockDeviceScheduler(name string) (string, error) { - sched, err := ioutil.ReadFile(path.Join(blockDir, name, "/queue/scheduler")) + sched, err := os.ReadFile(path.Join(blockDir, name, "/queue/scheduler")) if err != nil { return "", err } @@ -210,7 +244,7 @@ func (fs *realSysFs) GetBlockDeviceScheduler(name string) (string, error) { } func (fs *realSysFs) GetBlockDeviceSize(name string) (string, error) { - size, err := ioutil.ReadFile(path.Join(blockDir, name, "/size")) + size, err := os.ReadFile(path.Join(blockDir, name, "/size")) if err != nil { return "", err } @@ -218,13 +252,17 @@ func (fs *realSysFs) GetBlockDeviceSize(name string) (string, error) { } func (fs *realSysFs) GetNetworkDevices() ([]os.FileInfo, error) { - files, err := ioutil.ReadDir(netDir) + dirs, err := os.ReadDir(netDir) + if err != nil { + return nil, err + } + files, err := toFileInfo(dirs) if err != nil { return nil, err } // Filter out non-directory & non-symlink files - var dirs []os.FileInfo + filtered := []os.FileInfo{} for _, f := range files { if f.Mode()|os.ModeSymlink != 0 { f, err = os.Stat(path.Join(netDir, f.Name())) @@ -233,14 +271,14 @@ func (fs *realSysFs) GetNetworkDevices() ([]os.FileInfo, error) { } } if f.IsDir() { - dirs = append(dirs, f) + filtered = append(filtered, f) } } - return dirs, nil + return filtered, nil } func (fs *realSysFs) GetNetworkAddress(name string) (string, error) { - address, err := ioutil.ReadFile(path.Join(netDir, name, "/address")) + address, err := os.ReadFile(path.Join(netDir, name, "/address")) if err != nil { return "", err } @@ -248,7 +286,7 @@ func (fs *realSysFs) GetNetworkAddress(name string) (string, error) { } func (fs *realSysFs) GetNetworkMtu(name string) (string, error) { - mtu, err := ioutil.ReadFile(path.Join(netDir, name, "/mtu")) + mtu, err := os.ReadFile(path.Join(netDir, name, "/mtu")) if err != nil { return "", err } @@ -256,7 +294,7 @@ func (fs *realSysFs) GetNetworkMtu(name string) (string, error) { } func (fs *realSysFs) GetNetworkSpeed(name string) (string, error) { - speed, err := ioutil.ReadFile(path.Join(netDir, name, "/speed")) + speed, err := os.ReadFile(path.Join(netDir, name, "/speed")) if err != nil { return "", err } @@ -265,7 +303,7 @@ func (fs *realSysFs) GetNetworkSpeed(name string) (string, error) { func (fs *realSysFs) GetNetworkStatValue(dev string, stat string) (uint64, error) { statPath := path.Join(netDir, dev, "/statistics", stat) - out, err := ioutil.ReadFile(statPath) + out, err := os.ReadFile(statPath) if err != nil { return 0, fmt.Errorf("failed to read stat from %q for device %q", statPath, dev) } @@ -279,7 +317,23 @@ func (fs *realSysFs) GetNetworkStatValue(dev string, stat string) (uint64, error func (fs *realSysFs) GetCaches(id int) ([]os.FileInfo, error) { cpuPath := fmt.Sprintf("%s%d/cache", cacheDir, id) - return ioutil.ReadDir(cpuPath) + dir, err := os.ReadDir(cpuPath) + if err != nil { + return nil, err + } + return toFileInfo(dir) +} + +func toFileInfo(dirs []os.DirEntry) ([]os.FileInfo, error) { + info := []os.FileInfo{} + for _, dir := range dirs { + fI, err := dir.Info() + if err != nil { + return nil, err + } + info = append(info, fI) + } + return info, nil } func bitCount(i uint64) (count int) { @@ -293,7 +347,7 @@ func bitCount(i uint64) (count int) { } func getCPUCount(cache string) (count int, err error) { - out, err := ioutil.ReadFile(path.Join(cache, "/shared_cpu_map")) + out, err := os.ReadFile(path.Join(cache, "/shared_cpu_map")) if err != nil { return 0, err } @@ -311,7 +365,7 @@ func getCPUCount(cache string) (count int, err error) { func (fs *realSysFs) GetCacheInfo(cpu int, name string) (CacheInfo, error) { cachePath := fmt.Sprintf("%s%d/cache/%s", cacheDir, cpu, name) - out, err := ioutil.ReadFile(path.Join(cachePath, "/id")) + out, err := os.ReadFile(path.Join(cachePath, "/id")) if err != nil { return CacheInfo{}, err } @@ -321,7 +375,7 @@ func (fs *realSysFs) GetCacheInfo(cpu int, name string) (CacheInfo, error) { return CacheInfo{}, err } - out, err = ioutil.ReadFile(path.Join(cachePath, "/size")) + out, err = os.ReadFile(path.Join(cachePath, "/size")) if err != nil { return CacheInfo{}, err } @@ -332,7 +386,7 @@ func (fs *realSysFs) GetCacheInfo(cpu int, name string) (CacheInfo, error) { } // convert to bytes size = size * 1024 - out, err = ioutil.ReadFile(path.Join(cachePath, "/level")) + out, err = os.ReadFile(path.Join(cachePath, "/level")) if err != nil { return CacheInfo{}, err } @@ -342,7 +396,7 @@ func (fs *realSysFs) GetCacheInfo(cpu int, name string) (CacheInfo, error) { return CacheInfo{}, err } - out, err = ioutil.ReadFile(path.Join(cachePath, "/type")) + out, err = os.ReadFile(path.Join(cachePath, "/type")) if err != nil { return CacheInfo{}, err } @@ -361,13 +415,13 @@ func (fs *realSysFs) GetCacheInfo(cpu int, name string) (CacheInfo, error) { } func (fs *realSysFs) GetSystemUUID() (string, error) { - if id, err := ioutil.ReadFile(path.Join(dmiDir, "id", "product_uuid")); err == nil { + if id, err := os.ReadFile(path.Join(dmiDir, "id", "product_uuid")); err == nil { return strings.TrimSpace(string(id)), nil - } else if id, err = ioutil.ReadFile(path.Join(ppcDevTree, "system-id")); err == nil { + } else if id, err = os.ReadFile(path.Join(ppcDevTree, "system-id")); err == nil { return strings.TrimSpace(strings.TrimRight(string(id), "\000")), nil - } else if id, err = ioutil.ReadFile(path.Join(ppcDevTree, "vm,uuid")); err == nil { + } else if id, err = os.ReadFile(path.Join(ppcDevTree, "vm,uuid")); err == nil { return strings.TrimSpace(strings.TrimRight(string(id), "\000")), nil - } else if id, err = ioutil.ReadFile(path.Join(s390xDevTree, "machine-id")); err == nil { + } else if id, err = os.ReadFile(path.Join(s390xDevTree, "machine-id")); err == nil { return strings.TrimSpace(string(id)), nil } else { return "", err @@ -375,19 +429,19 @@ func (fs *realSysFs) GetSystemUUID() (string, error) { } func (fs *realSysFs) IsCPUOnline(cpuPath string) bool { - onlinePath, err := filepath.Abs(cpuPath + "/../online") + cpuOnlinePath, err := filepath.Abs(fs.cpuPath + "/online") if err != nil { klog.V(1).Infof("Unable to get absolute path for %s", cpuPath) return false } // Quick check to determine if file exists: if it does not then kernel CPU hotplug is disabled and all CPUs are online. - _, err = os.Stat(onlinePath) + _, err = os.Stat(cpuOnlinePath) if err != nil && os.IsNotExist(err) { return true } if err != nil { - klog.V(1).Infof("Unable to stat %s: %s", onlinePath, err) + klog.V(1).Infof("Unable to stat %s: %s", cpuOnlinePath, err) } cpuID, err := getCPUID(cpuPath) @@ -396,7 +450,7 @@ func (fs *realSysFs) IsCPUOnline(cpuPath string) bool { return false } - isOnline, err := isCPUOnline(onlinePath, cpuID) + isOnline, err := isCPUOnline(cpuOnlinePath, cpuID) if err != nil { klog.V(1).Infof("Unable to get online CPUs list: %s", err) return false @@ -422,7 +476,7 @@ func getCPUID(dir string) (uint16, error) { // It parses CPU list (such as: 0,3-5,10) into a struct that allows to determine quickly if CPU or particular ID is online. // see: https://github.com/opencontainers/runc/blob/ab27e12cebf148aa5d1ee3ad13d9fc7ae12bf0b6/libcontainer/cgroups/fs/cpuset.go#L45 func isCPUOnline(path string, cpuID uint16) (bool, error) { - fileContent, err := ioutil.ReadFile(path) + fileContent, err := os.ReadFile(path) if err != nil { return false, err } @@ -448,10 +502,9 @@ func isCPUOnline(path string, cpuID uint16) (bool, error) { if min > max { return false, fmt.Errorf("invalid values in %s", path) } - for i := min; i <= max; i++ { - if uint16(i) == cpuID { - return true, nil - } + // Return true, if the CPU under consideration is in the range of online CPUs. + if cpuID >= uint16(min) && cpuID <= uint16(max) { + return true, nil } case 1: value, err := strconv.ParseUint(s, 10, 16) @@ -469,21 +522,21 @@ func isCPUOnline(path string, cpuID uint16) (bool, error) { // Looks for sysfs cpu path containing given CPU property, e.g. core_id or physical_package_id // and returns number of unique values of given property, exemplary usage: getting number of CPU physical cores -func GetUniqueCPUPropertyCount(cpuBusPath string, propertyName string) int { - absCPUBusPath, err := filepath.Abs(cpuBusPath) +func GetUniqueCPUPropertyCount(cpuAttributesPath string, propertyName string) int { + absCPUAttributesPath, err := filepath.Abs(cpuAttributesPath) if err != nil { - klog.Errorf("Cannot make %s absolute", cpuBusPath) + klog.Errorf("Cannot make %s absolute", cpuAttributesPath) return 0 } - pathPattern := absCPUBusPath + "/cpu*[0-9]" + pathPattern := absCPUAttributesPath + "/cpu*[0-9]" sysCPUPaths, err := filepath.Glob(pathPattern) if err != nil { klog.Errorf("Cannot find files matching pattern (pathPattern: %s), number of unique %s set to 0", pathPattern, propertyName) return 0 } - onlinePath, err := filepath.Abs(cpuBusPath + "/online") + cpuOnlinePath, err := filepath.Abs(cpuAttributesPath + "/online") if err != nil { - klog.V(1).Infof("Unable to get absolute path for %s", cpuBusPath+"/../online") + klog.V(1).Infof("Unable to get absolute path for %s", cpuAttributesPath+"/../online") return 0 } @@ -498,7 +551,7 @@ func GetUniqueCPUPropertyCount(cpuBusPath string, propertyName string) int { klog.V(1).Infof("Unable to get CPU ID from path %s: %s", sysCPUPath, err) return 0 } - isOnline, err := isCPUOnline(onlinePath, cpuID) + isOnline, err := isCPUOnline(cpuOnlinePath, cpuID) if err != nil && !os.IsNotExist(err) { klog.V(1).Infof("Unable to determine CPU online state: %s", err) continue @@ -507,13 +560,13 @@ func GetUniqueCPUPropertyCount(cpuBusPath string, propertyName string) int { continue } propertyPath := filepath.Join(sysCPUPath, sysFsCPUTopology, propertyName) - propertyVal, err := ioutil.ReadFile(propertyPath) + propertyVal, err := os.ReadFile(propertyPath) if err != nil { klog.Warningf("Cannot open %s, assuming 0 for %s of CPU %d", propertyPath, propertyName, cpuID) propertyVal = []byte("0") } packagePath := filepath.Join(sysCPUPath, sysFsCPUTopology, CPUPhysicalPackageID) - packageVal, err := ioutil.ReadFile(packagePath) + packageVal, err := os.ReadFile(packagePath) if err != nil { klog.Warningf("Cannot open %s, assuming 0 %s of CPU %d", packagePath, CPUPhysicalPackageID, cpuID) packageVal = []byte("0") diff --git a/vendor/github.com/google/cadvisor/utils/sysinfo/sysinfo.go b/vendor/github.com/google/cadvisor/utils/sysinfo/sysinfo.go index 57b3653c120..90336179654 100644 --- a/vendor/github.com/google/cadvisor/utils/sysinfo/sysinfo.go +++ b/vendor/github.com/google/cadvisor/utils/sysinfo/sysinfo.go @@ -57,6 +57,16 @@ func GetBlockDeviceInfo(sysfs sysfs.SysFs) (map[string]info.DiskInfo, error) { if strings.HasPrefix(name, "loop") || strings.HasPrefix(name, "ram") || strings.HasPrefix(name, "sr") { continue } + // Ignore "hidden" devices (i.e. nvme path device sysfs entries). + // These devices are in the form of /dev/nvme$Xc$Yn$Z and will + // not have a device handle (i.e. "hidden") + isHidden, err := sysfs.IsBlockDeviceHidden(name) + if err != nil { + return nil, err + } + if isHidden { + continue + } diskInfo := info.DiskInfo{ Name: name, } @@ -104,7 +114,7 @@ func GetNetworkDevices(sysfs sysfs.SysFs) ([]info.NetInfo, error) { for _, dev := range devs { name := dev.Name() // Ignore docker, loopback, and veth devices. - ignoredDevices := []string{"lo", "veth", "docker"} + ignoredDevices := []string{"lo", "veth", "docker", "nerdctl"} ignored := false for _, prefix := range ignoredDevices { if strings.HasPrefix(name, prefix) { @@ -200,7 +210,7 @@ func GetNodesInfo(sysFs sysfs.SysFs) ([]info.Node, int, error) { } if len(nodesDirs) == 0 { - klog.Warningf("Nodes topology is not available, providing CPU topology") + klog.V(4).Info("Nodes topology is not available, providing CPU topology") return getCPUTopology(sysFs) } diff --git a/vendor/modules.txt b/vendor/modules.txt index fbbc4fc638b..58b36562b77 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -303,8 +303,8 @@ github.com/golang/protobuf/ptypes/wrappers # github.com/google/btree v1.0.1 ## explicit; go 1.12 github.com/google/btree -# github.com/google/cadvisor v0.47.3 -## explicit; go 1.16 +# github.com/google/cadvisor v0.48.1 +## explicit; go 1.19 github.com/google/cadvisor/cache/memory github.com/google/cadvisor/client/v2 github.com/google/cadvisor/collector