mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-21 10:51:29 +00:00
Updating dependency github.com/prometheus/procfs to version v0.0.5
This commit is contained in:
parent
a1ef1e80be
commit
af1833daf2
2
go.mod
2
go.mod
@ -432,7 +432,7 @@ replace (
|
|||||||
github.com/prometheus/client_golang => github.com/prometheus/client_golang v1.0.0
|
github.com/prometheus/client_golang => github.com/prometheus/client_golang v1.0.0
|
||||||
github.com/prometheus/client_model => github.com/prometheus/client_model v0.2.0
|
github.com/prometheus/client_model => github.com/prometheus/client_model v0.2.0
|
||||||
github.com/prometheus/common => github.com/prometheus/common v0.4.1
|
github.com/prometheus/common => github.com/prometheus/common v0.4.1
|
||||||
github.com/prometheus/procfs => github.com/prometheus/procfs v0.0.2
|
github.com/prometheus/procfs => github.com/prometheus/procfs v0.0.5
|
||||||
github.com/quasilyte/go-consistent => github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c
|
github.com/quasilyte/go-consistent => github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c
|
||||||
github.com/quobyte/api => github.com/quobyte/api v0.1.2
|
github.com/quobyte/api => github.com/quobyte/api v0.1.2
|
||||||
github.com/rcrowley/go-metrics => github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563
|
github.com/rcrowley/go-metrics => github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563
|
||||||
|
4
go.sum
4
go.sum
@ -424,8 +424,8 @@ github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2
|
|||||||
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
|
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
|
||||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
|
github.com/prometheus/procfs v0.0.5 h1:3+auTFlqw+ZaQYJARz6ArODtkaIwtvBTx3N2NehQlL8=
|
||||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||||
github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI=
|
github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI=
|
||||||
github.com/quobyte/api v0.1.2 h1:lPHLsuvtjFyk8WhC4uHoHRkScijIHcffTWBBP+YpzYo=
|
github.com/quobyte/api v0.1.2 h1:lPHLsuvtjFyk8WhC4uHoHRkScijIHcffTWBBP+YpzYo=
|
||||||
github.com/quobyte/api v0.1.2/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI=
|
github.com/quobyte/api v0.1.2/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI=
|
||||||
|
@ -34,7 +34,6 @@ require (
|
|||||||
)
|
)
|
||||||
|
|
||||||
replace (
|
replace (
|
||||||
github.com/prometheus/procfs => github.com/prometheus/procfs v0.0.2
|
|
||||||
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
||||||
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
||||||
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
||||||
|
@ -279,8 +279,11 @@ github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2
|
|||||||
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
|
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
|
||||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
|
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
|
||||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
|
github.com/prometheus/procfs v0.0.5 h1:3+auTFlqw+ZaQYJARz6ArODtkaIwtvBTx3N2NehQlL8=
|
||||||
|
github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||||
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
||||||
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
|
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
|
||||||
|
@ -54,7 +54,6 @@ require (
|
|||||||
)
|
)
|
||||||
|
|
||||||
replace (
|
replace (
|
||||||
github.com/prometheus/procfs => github.com/prometheus/procfs v0.0.2
|
|
||||||
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
||||||
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
||||||
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
||||||
|
3
staging/src/k8s.io/apiserver/go.sum
generated
3
staging/src/k8s.io/apiserver/go.sum
generated
@ -219,8 +219,11 @@ github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2
|
|||||||
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
|
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
|
||||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
|
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
|
||||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
|
github.com/prometheus/procfs v0.0.5 h1:3+auTFlqw+ZaQYJARz6ArODtkaIwtvBTx3N2NehQlL8=
|
||||||
|
github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
|
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
|
||||||
|
@ -23,7 +23,6 @@ require (
|
|||||||
)
|
)
|
||||||
|
|
||||||
replace (
|
replace (
|
||||||
github.com/prometheus/procfs => github.com/prometheus/procfs v0.0.2
|
|
||||||
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
||||||
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
||||||
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
||||||
|
3
staging/src/k8s.io/component-base/go.sum
generated
3
staging/src/k8s.io/component-base/go.sum
generated
@ -140,8 +140,11 @@ github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2
|
|||||||
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
|
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
|
||||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
|
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
|
||||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
|
github.com/prometheus/procfs v0.0.5 h1:3+auTFlqw+ZaQYJARz6ArODtkaIwtvBTx3N2NehQlL8=
|
||||||
|
github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
|
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
|
||||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||||
|
@ -26,7 +26,6 @@ require (
|
|||||||
)
|
)
|
||||||
|
|
||||||
replace (
|
replace (
|
||||||
github.com/prometheus/procfs => github.com/prometheus/procfs v0.0.2
|
|
||||||
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
||||||
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
||||||
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
||||||
|
3
staging/src/k8s.io/kube-aggregator/go.sum
generated
3
staging/src/k8s.io/kube-aggregator/go.sum
generated
@ -229,8 +229,11 @@ github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2
|
|||||||
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
|
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
|
||||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
|
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
|
||||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
|
github.com/prometheus/procfs v0.0.5 h1:3+auTFlqw+ZaQYJARz6ArODtkaIwtvBTx3N2NehQlL8=
|
||||||
|
github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||||
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
|
@ -10,7 +10,6 @@ require (
|
|||||||
)
|
)
|
||||||
|
|
||||||
replace (
|
replace (
|
||||||
github.com/prometheus/procfs => github.com/prometheus/procfs v0.0.2
|
|
||||||
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
||||||
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
||||||
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
||||||
|
@ -119,7 +119,9 @@ github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:
|
|||||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
|
github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||||
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
|
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
|
||||||
|
@ -10,7 +10,6 @@ require (
|
|||||||
)
|
)
|
||||||
|
|
||||||
replace (
|
replace (
|
||||||
github.com/prometheus/procfs => github.com/prometheus/procfs v0.0.2
|
|
||||||
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
||||||
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
||||||
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
||||||
|
2
staging/src/k8s.io/kube-proxy/go.sum
generated
2
staging/src/k8s.io/kube-proxy/go.sum
generated
@ -119,7 +119,9 @@ github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:
|
|||||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
|
github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||||
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
|
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
|
||||||
|
@ -12,7 +12,6 @@ require (
|
|||||||
)
|
)
|
||||||
|
|
||||||
replace (
|
replace (
|
||||||
github.com/prometheus/procfs => github.com/prometheus/procfs v0.0.2
|
|
||||||
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
||||||
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
||||||
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
||||||
|
2
staging/src/k8s.io/kube-scheduler/go.sum
generated
2
staging/src/k8s.io/kube-scheduler/go.sum
generated
@ -119,7 +119,9 @@ github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:
|
|||||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
|
github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||||
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
|
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
|
||||||
|
@ -49,7 +49,6 @@ require (
|
|||||||
)
|
)
|
||||||
|
|
||||||
replace (
|
replace (
|
||||||
github.com/prometheus/procfs => github.com/prometheus/procfs v0.0.2
|
|
||||||
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
||||||
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
||||||
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
||||||
|
2
staging/src/k8s.io/kubectl/go.sum
generated
2
staging/src/k8s.io/kubectl/go.sum
generated
@ -212,7 +212,9 @@ github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:
|
|||||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
|
github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||||
github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
|
github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
|
||||||
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
|
@ -40,7 +40,6 @@ require (
|
|||||||
)
|
)
|
||||||
|
|
||||||
replace (
|
replace (
|
||||||
github.com/prometheus/procfs => github.com/prometheus/procfs v0.0.2
|
|
||||||
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
||||||
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
||||||
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
||||||
|
3
staging/src/k8s.io/legacy-cloud-providers/go.sum
generated
3
staging/src/k8s.io/legacy-cloud-providers/go.sum
generated
@ -220,8 +220,11 @@ github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2
|
|||||||
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
|
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
|
||||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
|
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
|
||||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
|
github.com/prometheus/procfs v0.0.5 h1:3+auTFlqw+ZaQYJARz6ArODtkaIwtvBTx3N2NehQlL8=
|
||||||
|
github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||||
github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c h1:ht7N4d/B7Ezf58nvMNVF3OlvDlz9pp+WHVcRNS0nink=
|
github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c h1:ht7N4d/B7Ezf58nvMNVF3OlvDlz9pp+WHVcRNS0nink=
|
||||||
github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto=
|
github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto=
|
||||||
|
@ -18,7 +18,6 @@ require (
|
|||||||
)
|
)
|
||||||
|
|
||||||
replace (
|
replace (
|
||||||
github.com/prometheus/procfs => github.com/prometheus/procfs v0.0.2
|
|
||||||
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
|
||||||
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13
|
||||||
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
||||||
|
3
staging/src/k8s.io/sample-apiserver/go.sum
generated
3
staging/src/k8s.io/sample-apiserver/go.sum
generated
@ -226,8 +226,11 @@ github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2
|
|||||||
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
|
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
|
||||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
|
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
|
||||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
|
github.com/prometheus/procfs v0.0.5 h1:3+auTFlqw+ZaQYJARz6ArODtkaIwtvBTx3N2NehQlL8=
|
||||||
|
github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||||
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
|
16
vendor/github.com/prometheus/procfs/BUILD
generated
vendored
16
vendor/github.com/prometheus/procfs/BUILD
generated
vendored
@ -3,28 +3,41 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
|
|||||||
go_library(
|
go_library(
|
||||||
name = "go_default_library",
|
name = "go_default_library",
|
||||||
srcs = [
|
srcs = [
|
||||||
|
"arp.go",
|
||||||
"buddyinfo.go",
|
"buddyinfo.go",
|
||||||
|
"cpuinfo.go",
|
||||||
|
"crypto.go",
|
||||||
"doc.go",
|
"doc.go",
|
||||||
"fs.go",
|
"fs.go",
|
||||||
"ipvs.go",
|
"ipvs.go",
|
||||||
"mdstat.go",
|
"mdstat.go",
|
||||||
|
"mountinfo.go",
|
||||||
"mountstats.go",
|
"mountstats.go",
|
||||||
"net_dev.go",
|
"net_dev.go",
|
||||||
|
"net_softnet.go",
|
||||||
"net_unix.go",
|
"net_unix.go",
|
||||||
"proc.go",
|
"proc.go",
|
||||||
|
"proc_environ.go",
|
||||||
|
"proc_fdinfo.go",
|
||||||
"proc_io.go",
|
"proc_io.go",
|
||||||
"proc_limits.go",
|
"proc_limits.go",
|
||||||
"proc_ns.go",
|
"proc_ns.go",
|
||||||
"proc_psi.go",
|
"proc_psi.go",
|
||||||
"proc_stat.go",
|
"proc_stat.go",
|
||||||
"proc_status.go",
|
"proc_status.go",
|
||||||
|
"schedstat.go",
|
||||||
"stat.go",
|
"stat.go",
|
||||||
|
"vm.go",
|
||||||
"xfrm.go",
|
"xfrm.go",
|
||||||
|
"zoneinfo.go",
|
||||||
],
|
],
|
||||||
importmap = "k8s.io/kubernetes/vendor/github.com/prometheus/procfs",
|
importmap = "k8s.io/kubernetes/vendor/github.com/prometheus/procfs",
|
||||||
importpath = "github.com/prometheus/procfs",
|
importpath = "github.com/prometheus/procfs",
|
||||||
visibility = ["//staging/src/k8s.io/component-base/metrics:prometheus_import_allow_list"],
|
visibility = ["//staging/src/k8s.io/component-base/metrics:prometheus_import_allow_list"],
|
||||||
deps = ["//vendor/github.com/prometheus/procfs/internal/fs:go_default_library"],
|
deps = [
|
||||||
|
"//vendor/github.com/prometheus/procfs/internal/fs:go_default_library",
|
||||||
|
"//vendor/github.com/prometheus/procfs/internal/util:go_default_library",
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
filegroup(
|
filegroup(
|
||||||
@ -39,6 +52,7 @@ filegroup(
|
|||||||
srcs = [
|
srcs = [
|
||||||
":package-srcs",
|
":package-srcs",
|
||||||
"//vendor/github.com/prometheus/procfs/internal/fs:all-srcs",
|
"//vendor/github.com/prometheus/procfs/internal/fs:all-srcs",
|
||||||
|
"//vendor/github.com/prometheus/procfs/internal/util:all-srcs",
|
||||||
],
|
],
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
|
7
vendor/github.com/prometheus/procfs/Makefile.common
generated
vendored
7
vendor/github.com/prometheus/procfs/Makefile.common
generated
vendored
@ -86,6 +86,7 @@ endif
|
|||||||
PREFIX ?= $(shell pwd)
|
PREFIX ?= $(shell pwd)
|
||||||
BIN_DIR ?= $(shell pwd)
|
BIN_DIR ?= $(shell pwd)
|
||||||
DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD))
|
DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD))
|
||||||
|
DOCKERFILE_PATH ?= ./
|
||||||
DOCKER_REPO ?= prom
|
DOCKER_REPO ?= prom
|
||||||
|
|
||||||
DOCKER_ARCHS ?= amd64
|
DOCKER_ARCHS ?= amd64
|
||||||
@ -212,7 +213,7 @@ $(BUILD_DOCKER_ARCHS): common-docker-%:
|
|||||||
docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" \
|
docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG)" \
|
||||||
--build-arg ARCH="$*" \
|
--build-arg ARCH="$*" \
|
||||||
--build-arg OS="linux" \
|
--build-arg OS="linux" \
|
||||||
.
|
$(DOCKERFILE_PATH)
|
||||||
|
|
||||||
.PHONY: common-docker-publish $(PUBLISH_DOCKER_ARCHS)
|
.PHONY: common-docker-publish $(PUBLISH_DOCKER_ARCHS)
|
||||||
common-docker-publish: $(PUBLISH_DOCKER_ARCHS)
|
common-docker-publish: $(PUBLISH_DOCKER_ARCHS)
|
||||||
@ -247,7 +248,9 @@ proto:
|
|||||||
ifdef GOLANGCI_LINT
|
ifdef GOLANGCI_LINT
|
||||||
$(GOLANGCI_LINT):
|
$(GOLANGCI_LINT):
|
||||||
mkdir -p $(FIRST_GOPATH)/bin
|
mkdir -p $(FIRST_GOPATH)/bin
|
||||||
curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(FIRST_GOPATH)/bin $(GOLANGCI_LINT_VERSION)
|
curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/$(GOLANGCI_LINT_VERSION)/install.sh \
|
||||||
|
| sed -e '/install -d/d' \
|
||||||
|
| sh -s -- -b $(FIRST_GOPATH)/bin $(GOLANGCI_LINT_VERSION)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef GOVENDOR
|
ifdef GOVENDOR
|
||||||
|
85
vendor/github.com/prometheus/procfs/arp.go
generated
vendored
Normal file
85
vendor/github.com/prometheus/procfs/arp.go
generated
vendored
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
// Copyright 2019 The Prometheus Authors
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package procfs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"net"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ARPEntry contains a single row of the columnar data represented in
|
||||||
|
// /proc/net/arp.
|
||||||
|
type ARPEntry struct {
|
||||||
|
// IP address
|
||||||
|
IPAddr net.IP
|
||||||
|
// MAC address
|
||||||
|
HWAddr net.HardwareAddr
|
||||||
|
// Name of the device
|
||||||
|
Device string
|
||||||
|
}
|
||||||
|
|
||||||
|
// GatherARPEntries retrieves all the ARP entries, parse the relevant columns,
|
||||||
|
// and then return a slice of ARPEntry's.
|
||||||
|
func (fs FS) GatherARPEntries() ([]ARPEntry, error) {
|
||||||
|
data, err := ioutil.ReadFile(fs.proc.Path("net/arp"))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error reading arp %s: %s", fs.proc.Path("net/arp"), err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return parseARPEntries(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseARPEntries(data []byte) ([]ARPEntry, error) {
|
||||||
|
lines := strings.Split(string(data), "\n")
|
||||||
|
entries := make([]ARPEntry, 0)
|
||||||
|
var err error
|
||||||
|
const (
|
||||||
|
expectedDataWidth = 6
|
||||||
|
expectedHeaderWidth = 9
|
||||||
|
)
|
||||||
|
for _, line := range lines {
|
||||||
|
columns := strings.Fields(line)
|
||||||
|
width := len(columns)
|
||||||
|
|
||||||
|
if width == expectedHeaderWidth || width == 0 {
|
||||||
|
continue
|
||||||
|
} else if width == expectedDataWidth {
|
||||||
|
entry, err := parseARPEntry(columns)
|
||||||
|
if err != nil {
|
||||||
|
return []ARPEntry{}, fmt.Errorf("failed to parse ARP entry: %s", err)
|
||||||
|
}
|
||||||
|
entries = append(entries, entry)
|
||||||
|
} else {
|
||||||
|
return []ARPEntry{}, fmt.Errorf("%d columns were detected, but %d were expected", width, expectedDataWidth)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return entries, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseARPEntry(columns []string) (ARPEntry, error) {
|
||||||
|
ip := net.ParseIP(columns[0])
|
||||||
|
mac := net.HardwareAddr(columns[3])
|
||||||
|
|
||||||
|
entry := ARPEntry{
|
||||||
|
IPAddr: ip,
|
||||||
|
HWAddr: mac,
|
||||||
|
Device: columns[5],
|
||||||
|
}
|
||||||
|
|
||||||
|
return entry, nil
|
||||||
|
}
|
2
vendor/github.com/prometheus/procfs/buddyinfo.go
generated
vendored
2
vendor/github.com/prometheus/procfs/buddyinfo.go
generated
vendored
@ -31,7 +31,7 @@ type BuddyInfo struct {
|
|||||||
Sizes []float64
|
Sizes []float64
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewBuddyInfo reads the buddyinfo statistics from the specified `proc` filesystem.
|
// BuddyInfo reads the buddyinfo statistics from the specified `proc` filesystem.
|
||||||
func (fs FS) BuddyInfo() ([]BuddyInfo, error) {
|
func (fs FS) BuddyInfo() ([]BuddyInfo, error) {
|
||||||
file, err := os.Open(fs.proc.Path("buddyinfo"))
|
file, err := os.Open(fs.proc.Path("buddyinfo"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
166
vendor/github.com/prometheus/procfs/cpuinfo.go
generated
vendored
Normal file
166
vendor/github.com/prometheus/procfs/cpuinfo.go
generated
vendored
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
// Copyright 2019 The Prometheus Authors
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package procfs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"bytes"
|
||||||
|
"io/ioutil"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CPUInfo contains general information about a system CPU found in /proc/cpuinfo
|
||||||
|
type CPUInfo struct {
|
||||||
|
Processor uint
|
||||||
|
VendorID string
|
||||||
|
CPUFamily string
|
||||||
|
Model string
|
||||||
|
ModelName string
|
||||||
|
Stepping string
|
||||||
|
Microcode string
|
||||||
|
CPUMHz float64
|
||||||
|
CacheSize string
|
||||||
|
PhysicalID string
|
||||||
|
Siblings uint
|
||||||
|
CoreID string
|
||||||
|
CPUCores uint
|
||||||
|
APICID string
|
||||||
|
InitialAPICID string
|
||||||
|
FPU string
|
||||||
|
FPUException string
|
||||||
|
CPUIDLevel uint
|
||||||
|
WP string
|
||||||
|
Flags []string
|
||||||
|
Bugs []string
|
||||||
|
BogoMips float64
|
||||||
|
CLFlushSize uint
|
||||||
|
CacheAlignment uint
|
||||||
|
AddressSizes string
|
||||||
|
PowerManagement string
|
||||||
|
}
|
||||||
|
|
||||||
|
// CPUInfo returns information about current system CPUs.
|
||||||
|
// See https://www.kernel.org/doc/Documentation/filesystems/proc.txt
|
||||||
|
func (fs FS) CPUInfo() ([]CPUInfo, error) {
|
||||||
|
data, err := ioutil.ReadFile(fs.proc.Path("cpuinfo"))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return parseCPUInfo(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// parseCPUInfo parses data from /proc/cpuinfo
|
||||||
|
func parseCPUInfo(info []byte) ([]CPUInfo, error) {
|
||||||
|
cpuinfo := []CPUInfo{}
|
||||||
|
i := -1
|
||||||
|
scanner := bufio.NewScanner(bytes.NewReader(info))
|
||||||
|
for scanner.Scan() {
|
||||||
|
line := scanner.Text()
|
||||||
|
if strings.TrimSpace(line) == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
field := strings.SplitN(line, ": ", 2)
|
||||||
|
switch strings.TrimSpace(field[0]) {
|
||||||
|
case "processor":
|
||||||
|
cpuinfo = append(cpuinfo, CPUInfo{}) // start of the next processor
|
||||||
|
i++
|
||||||
|
v, err := strconv.ParseUint(field[1], 0, 32)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
cpuinfo[i].Processor = uint(v)
|
||||||
|
case "vendor_id":
|
||||||
|
cpuinfo[i].VendorID = field[1]
|
||||||
|
case "cpu family":
|
||||||
|
cpuinfo[i].CPUFamily = field[1]
|
||||||
|
case "model":
|
||||||
|
cpuinfo[i].Model = field[1]
|
||||||
|
case "model name":
|
||||||
|
cpuinfo[i].ModelName = field[1]
|
||||||
|
case "stepping":
|
||||||
|
cpuinfo[i].Stepping = field[1]
|
||||||
|
case "microcode":
|
||||||
|
cpuinfo[i].Microcode = field[1]
|
||||||
|
case "cpu MHz":
|
||||||
|
v, err := strconv.ParseFloat(field[1], 64)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
cpuinfo[i].CPUMHz = v
|
||||||
|
case "cache size":
|
||||||
|
cpuinfo[i].CacheSize = field[1]
|
||||||
|
case "physical id":
|
||||||
|
cpuinfo[i].PhysicalID = field[1]
|
||||||
|
case "siblings":
|
||||||
|
v, err := strconv.ParseUint(field[1], 0, 32)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
cpuinfo[i].Siblings = uint(v)
|
||||||
|
case "core id":
|
||||||
|
cpuinfo[i].CoreID = field[1]
|
||||||
|
case "cpu cores":
|
||||||
|
v, err := strconv.ParseUint(field[1], 0, 32)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
cpuinfo[i].CPUCores = uint(v)
|
||||||
|
case "apicid":
|
||||||
|
cpuinfo[i].APICID = field[1]
|
||||||
|
case "initial apicid":
|
||||||
|
cpuinfo[i].InitialAPICID = field[1]
|
||||||
|
case "fpu":
|
||||||
|
cpuinfo[i].FPU = field[1]
|
||||||
|
case "fpu_exception":
|
||||||
|
cpuinfo[i].FPUException = field[1]
|
||||||
|
case "cpuid level":
|
||||||
|
v, err := strconv.ParseUint(field[1], 0, 32)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
cpuinfo[i].CPUIDLevel = uint(v)
|
||||||
|
case "wp":
|
||||||
|
cpuinfo[i].WP = field[1]
|
||||||
|
case "flags":
|
||||||
|
cpuinfo[i].Flags = strings.Fields(field[1])
|
||||||
|
case "bugs":
|
||||||
|
cpuinfo[i].Bugs = strings.Fields(field[1])
|
||||||
|
case "bogomips":
|
||||||
|
v, err := strconv.ParseFloat(field[1], 64)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
cpuinfo[i].BogoMips = v
|
||||||
|
case "clflush size":
|
||||||
|
v, err := strconv.ParseUint(field[1], 0, 32)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
cpuinfo[i].CLFlushSize = uint(v)
|
||||||
|
case "cache_alignment":
|
||||||
|
v, err := strconv.ParseUint(field[1], 0, 32)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
cpuinfo[i].CacheAlignment = uint(v)
|
||||||
|
case "address sizes":
|
||||||
|
cpuinfo[i].AddressSizes = field[1]
|
||||||
|
case "power management":
|
||||||
|
cpuinfo[i].PowerManagement = field[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cpuinfo, nil
|
||||||
|
|
||||||
|
}
|
131
vendor/github.com/prometheus/procfs/crypto.go
generated
vendored
Normal file
131
vendor/github.com/prometheus/procfs/crypto.go
generated
vendored
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
// Copyright 2019 The Prometheus Authors
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package procfs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/prometheus/procfs/internal/util"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Crypto holds info parsed from /proc/crypto.
|
||||||
|
type Crypto struct {
|
||||||
|
Alignmask *uint64
|
||||||
|
Async bool
|
||||||
|
Blocksize *uint64
|
||||||
|
Chunksize *uint64
|
||||||
|
Ctxsize *uint64
|
||||||
|
Digestsize *uint64
|
||||||
|
Driver string
|
||||||
|
Geniv string
|
||||||
|
Internal string
|
||||||
|
Ivsize *uint64
|
||||||
|
Maxauthsize *uint64
|
||||||
|
MaxKeysize *uint64
|
||||||
|
MinKeysize *uint64
|
||||||
|
Module string
|
||||||
|
Name string
|
||||||
|
Priority *int64
|
||||||
|
Refcnt *int64
|
||||||
|
Seedsize *uint64
|
||||||
|
Selftest string
|
||||||
|
Type string
|
||||||
|
Walksize *uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
// Crypto parses an crypto-file (/proc/crypto) and returns a slice of
|
||||||
|
// structs containing the relevant info. More information available here:
|
||||||
|
// https://kernel.readthedocs.io/en/sphinx-samples/crypto-API.html
|
||||||
|
func (fs FS) Crypto() ([]Crypto, error) {
|
||||||
|
data, err := ioutil.ReadFile(fs.proc.Path("crypto"))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error parsing crypto %s: %s", fs.proc.Path("crypto"), err)
|
||||||
|
}
|
||||||
|
crypto, err := parseCrypto(data)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error parsing crypto %s: %s", fs.proc.Path("crypto"), err)
|
||||||
|
}
|
||||||
|
return crypto, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseCrypto(cryptoData []byte) ([]Crypto, error) {
|
||||||
|
crypto := []Crypto{}
|
||||||
|
|
||||||
|
cryptoBlocks := bytes.Split(cryptoData, []byte("\n\n"))
|
||||||
|
|
||||||
|
for _, block := range cryptoBlocks {
|
||||||
|
var newCryptoElem Crypto
|
||||||
|
|
||||||
|
lines := strings.Split(string(block), "\n")
|
||||||
|
for _, line := range lines {
|
||||||
|
if strings.TrimSpace(line) == "" || line[0] == ' ' {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
fields := strings.Split(line, ":")
|
||||||
|
key := strings.TrimSpace(fields[0])
|
||||||
|
value := strings.TrimSpace(fields[1])
|
||||||
|
vp := util.NewValueParser(value)
|
||||||
|
|
||||||
|
switch strings.TrimSpace(key) {
|
||||||
|
case "async":
|
||||||
|
b, err := strconv.ParseBool(value)
|
||||||
|
if err == nil {
|
||||||
|
newCryptoElem.Async = b
|
||||||
|
}
|
||||||
|
case "blocksize":
|
||||||
|
newCryptoElem.Blocksize = vp.PUInt64()
|
||||||
|
case "chunksize":
|
||||||
|
newCryptoElem.Chunksize = vp.PUInt64()
|
||||||
|
case "digestsize":
|
||||||
|
newCryptoElem.Digestsize = vp.PUInt64()
|
||||||
|
case "driver":
|
||||||
|
newCryptoElem.Driver = value
|
||||||
|
case "geniv":
|
||||||
|
newCryptoElem.Geniv = value
|
||||||
|
case "internal":
|
||||||
|
newCryptoElem.Internal = value
|
||||||
|
case "ivsize":
|
||||||
|
newCryptoElem.Ivsize = vp.PUInt64()
|
||||||
|
case "maxauthsize":
|
||||||
|
newCryptoElem.Maxauthsize = vp.PUInt64()
|
||||||
|
case "max keysize":
|
||||||
|
newCryptoElem.MaxKeysize = vp.PUInt64()
|
||||||
|
case "min keysize":
|
||||||
|
newCryptoElem.MinKeysize = vp.PUInt64()
|
||||||
|
case "module":
|
||||||
|
newCryptoElem.Module = value
|
||||||
|
case "name":
|
||||||
|
newCryptoElem.Name = value
|
||||||
|
case "priority":
|
||||||
|
newCryptoElem.Priority = vp.PInt64()
|
||||||
|
case "refcnt":
|
||||||
|
newCryptoElem.Refcnt = vp.PInt64()
|
||||||
|
case "seedsize":
|
||||||
|
newCryptoElem.Seedsize = vp.PUInt64()
|
||||||
|
case "selftest":
|
||||||
|
newCryptoElem.Selftest = value
|
||||||
|
case "type":
|
||||||
|
newCryptoElem.Type = value
|
||||||
|
case "walksize":
|
||||||
|
newCryptoElem.Walksize = vp.PUInt64()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
crypto = append(crypto, newCryptoElem)
|
||||||
|
}
|
||||||
|
return crypto, nil
|
||||||
|
}
|
3034
vendor/github.com/prometheus/procfs/fixtures.ttar
generated
vendored
3034
vendor/github.com/prometheus/procfs/fixtures.ttar
generated
vendored
File diff suppressed because it is too large
Load Diff
5
vendor/github.com/prometheus/procfs/go.mod
generated
vendored
5
vendor/github.com/prometheus/procfs/go.mod
generated
vendored
@ -1,3 +1,6 @@
|
|||||||
module github.com/prometheus/procfs
|
module github.com/prometheus/procfs
|
||||||
|
|
||||||
require golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4
|
require (
|
||||||
|
github.com/google/go-cmp v0.3.0
|
||||||
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4
|
||||||
|
)
|
||||||
|
2
vendor/github.com/prometheus/procfs/go.sum
generated
vendored
2
vendor/github.com/prometheus/procfs/go.sum
generated
vendored
@ -1,2 +1,4 @@
|
|||||||
|
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
|
||||||
|
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
3
vendor/github.com/prometheus/procfs/internal/fs/fs.go
generated
vendored
3
vendor/github.com/prometheus/procfs/internal/fs/fs.go
generated
vendored
@ -25,6 +25,9 @@ const (
|
|||||||
|
|
||||||
// DefaultSysMountPoint is the common mount point of the sys filesystem.
|
// DefaultSysMountPoint is the common mount point of the sys filesystem.
|
||||||
DefaultSysMountPoint = "/sys"
|
DefaultSysMountPoint = "/sys"
|
||||||
|
|
||||||
|
// DefaultConfigfsMountPoint is the commont mount point of the configfs
|
||||||
|
DefaultConfigfsMountPoint = "/sys/kernel/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
// FS represents a pseudo-filesystem, normally /proc or /sys, which provides an
|
// FS represents a pseudo-filesystem, normally /proc or /sys, which provides an
|
||||||
|
28
vendor/github.com/prometheus/procfs/internal/util/BUILD
generated
vendored
Normal file
28
vendor/github.com/prometheus/procfs/internal/util/BUILD
generated
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
load("@io_bazel_rules_go//go:def.bzl", "go_library")
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"parse.go",
|
||||||
|
"sysreadfile.go",
|
||||||
|
"sysreadfile_compat.go",
|
||||||
|
"valueparser.go",
|
||||||
|
],
|
||||||
|
importmap = "k8s.io/kubernetes/vendor/github.com/prometheus/procfs/internal/util",
|
||||||
|
importpath = "github.com/prometheus/procfs/internal/util",
|
||||||
|
visibility = ["//staging/src/k8s.io/component-base/metrics:prometheus_import_allow_list"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
)
|
88
vendor/github.com/prometheus/procfs/internal/util/parse.go
generated
vendored
Normal file
88
vendor/github.com/prometheus/procfs/internal/util/parse.go
generated
vendored
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
// Copyright 2018 The Prometheus Authors
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ParseUint32s parses a slice of strings into a slice of uint32s.
|
||||||
|
func ParseUint32s(ss []string) ([]uint32, error) {
|
||||||
|
us := make([]uint32, 0, len(ss))
|
||||||
|
for _, s := range ss {
|
||||||
|
u, err := strconv.ParseUint(s, 10, 32)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
us = append(us, uint32(u))
|
||||||
|
}
|
||||||
|
|
||||||
|
return us, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParseUint64s parses a slice of strings into a slice of uint64s.
|
||||||
|
func ParseUint64s(ss []string) ([]uint64, error) {
|
||||||
|
us := make([]uint64, 0, len(ss))
|
||||||
|
for _, s := range ss {
|
||||||
|
u, err := strconv.ParseUint(s, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
us = append(us, u)
|
||||||
|
}
|
||||||
|
|
||||||
|
return us, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParsePInt64s parses a slice of strings into a slice of int64 pointers.
|
||||||
|
func ParsePInt64s(ss []string) ([]*int64, error) {
|
||||||
|
us := make([]*int64, 0, len(ss))
|
||||||
|
for _, s := range ss {
|
||||||
|
u, err := strconv.ParseInt(s, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
us = append(us, &u)
|
||||||
|
}
|
||||||
|
|
||||||
|
return us, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReadUintFromFile reads a file and attempts to parse a uint64 from it.
|
||||||
|
func ReadUintFromFile(path string) (uint64, error) {
|
||||||
|
data, err := ioutil.ReadFile(path)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return strconv.ParseUint(strings.TrimSpace(string(data)), 10, 64)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParseBool parses a string into a boolean pointer.
|
||||||
|
func ParseBool(b string) *bool {
|
||||||
|
var truth bool
|
||||||
|
switch b {
|
||||||
|
case "enabled":
|
||||||
|
truth = true
|
||||||
|
case "disabled":
|
||||||
|
truth = false
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &truth
|
||||||
|
}
|
45
vendor/github.com/prometheus/procfs/internal/util/sysreadfile.go
generated
vendored
Normal file
45
vendor/github.com/prometheus/procfs/internal/util/sysreadfile.go
generated
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
// Copyright 2018 The Prometheus Authors
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// +build linux,!appengine
|
||||||
|
|
||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"os"
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SysReadFile is a simplified ioutil.ReadFile that invokes syscall.Read directly.
|
||||||
|
// https://github.com/prometheus/node_exporter/pull/728/files
|
||||||
|
func SysReadFile(file string) (string, error) {
|
||||||
|
f, err := os.Open(file)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
// On some machines, hwmon drivers are broken and return EAGAIN. This causes
|
||||||
|
// Go's ioutil.ReadFile implementation to poll forever.
|
||||||
|
//
|
||||||
|
// Since we either want to read data or bail immediately, do the simplest
|
||||||
|
// possible read using syscall directly.
|
||||||
|
b := make([]byte, 128)
|
||||||
|
n, err := syscall.Read(int(f.Fd()), b)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(bytes.TrimSpace(b[:n])), nil
|
||||||
|
}
|
26
vendor/github.com/prometheus/procfs/internal/util/sysreadfile_compat.go
generated
vendored
Normal file
26
vendor/github.com/prometheus/procfs/internal/util/sysreadfile_compat.go
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// Copyright 2019 The Prometheus Authors
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// +build linux,appengine !linux
|
||||||
|
|
||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SysReadFile is here implemented as a noop for builds that do not support
|
||||||
|
// the read syscall. For example Windows, or Linux on Google App Engine.
|
||||||
|
func SysReadFile(file string) (string, error) {
|
||||||
|
return "", fmt.Errorf("not supported on this platform")
|
||||||
|
}
|
77
vendor/github.com/prometheus/procfs/internal/util/valueparser.go
generated
vendored
Normal file
77
vendor/github.com/prometheus/procfs/internal/util/valueparser.go
generated
vendored
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
// Copyright 2019 The Prometheus Authors
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TODO(mdlayher): util packages are an anti-pattern and this should be moved
|
||||||
|
// somewhere else that is more focused in the future.
|
||||||
|
|
||||||
|
// A ValueParser enables parsing a single string into a variety of data types
|
||||||
|
// in a concise and safe way. The Err method must be invoked after invoking
|
||||||
|
// any other methods to ensure a value was successfully parsed.
|
||||||
|
type ValueParser struct {
|
||||||
|
v string
|
||||||
|
err error
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewValueParser creates a ValueParser using the input string.
|
||||||
|
func NewValueParser(v string) *ValueParser {
|
||||||
|
return &ValueParser{v: v}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PInt64 interprets the underlying value as an int64 and returns a pointer to
|
||||||
|
// that value.
|
||||||
|
func (vp *ValueParser) PInt64() *int64 {
|
||||||
|
if vp.err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// A base value of zero makes ParseInt infer the correct base using the
|
||||||
|
// string's prefix, if any.
|
||||||
|
const base = 0
|
||||||
|
v, err := strconv.ParseInt(vp.v, base, 64)
|
||||||
|
if err != nil {
|
||||||
|
vp.err = err
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return &v
|
||||||
|
}
|
||||||
|
|
||||||
|
// PUInt64 interprets the underlying value as an uint64 and returns a pointer to
|
||||||
|
// that value.
|
||||||
|
func (vp *ValueParser) PUInt64() *uint64 {
|
||||||
|
if vp.err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// A base value of zero makes ParseInt infer the correct base using the
|
||||||
|
// string's prefix, if any.
|
||||||
|
const base = 0
|
||||||
|
v, err := strconv.ParseUint(vp.v, base, 64)
|
||||||
|
if err != nil {
|
||||||
|
vp.err = err
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return &v
|
||||||
|
}
|
||||||
|
|
||||||
|
// Err returns the last error, if any, encountered by the ValueParser.
|
||||||
|
func (vp *ValueParser) Err() error {
|
||||||
|
return vp.err
|
||||||
|
}
|
107
vendor/github.com/prometheus/procfs/mdstat.go
generated
vendored
107
vendor/github.com/prometheus/procfs/mdstat.go
generated
vendored
@ -22,8 +22,8 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
statuslineRE = regexp.MustCompile(`(\d+) blocks .*\[(\d+)/(\d+)\] \[[U_]+\]`)
|
statusLineRE = regexp.MustCompile(`(\d+) blocks .*\[(\d+)/(\d+)\] \[[U_]+\]`)
|
||||||
buildlineRE = regexp.MustCompile(`\((\d+)/\d+\)`)
|
recoveryLineRE = regexp.MustCompile(`\((\d+)/\d+\)`)
|
||||||
)
|
)
|
||||||
|
|
||||||
// MDStat holds info parsed from /proc/mdstat.
|
// MDStat holds info parsed from /proc/mdstat.
|
||||||
@ -34,8 +34,12 @@ type MDStat struct {
|
|||||||
ActivityState string
|
ActivityState string
|
||||||
// Number of active disks.
|
// Number of active disks.
|
||||||
DisksActive int64
|
DisksActive int64
|
||||||
// Total number of disks the device consists of.
|
// Total number of disks the device requires.
|
||||||
DisksTotal int64
|
DisksTotal int64
|
||||||
|
// Number of failed disks.
|
||||||
|
DisksFailed int64
|
||||||
|
// Spare disks in the device.
|
||||||
|
DisksSpare int64
|
||||||
// Number of blocks the device holds.
|
// Number of blocks the device holds.
|
||||||
BlocksTotal int64
|
BlocksTotal int64
|
||||||
// Number of blocks on the device that are in sync.
|
// Number of blocks on the device that are in sync.
|
||||||
@ -59,29 +63,38 @@ func (fs FS) MDStat() ([]MDStat, error) {
|
|||||||
|
|
||||||
// parseMDStat parses data from mdstat file (/proc/mdstat) and returns a slice of
|
// parseMDStat parses data from mdstat file (/proc/mdstat) and returns a slice of
|
||||||
// structs containing the relevant info.
|
// structs containing the relevant info.
|
||||||
func parseMDStat(mdstatData []byte) ([]MDStat, error) {
|
func parseMDStat(mdStatData []byte) ([]MDStat, error) {
|
||||||
mdStats := []MDStat{}
|
mdStats := []MDStat{}
|
||||||
lines := strings.Split(string(mdstatData), "\n")
|
lines := strings.Split(string(mdStatData), "\n")
|
||||||
for i, l := range lines {
|
|
||||||
if strings.TrimSpace(l) == "" || l[0] == ' ' ||
|
for i, line := range lines {
|
||||||
strings.HasPrefix(l, "Personalities") || strings.HasPrefix(l, "unused") {
|
if strings.TrimSpace(line) == "" || line[0] == ' ' ||
|
||||||
|
strings.HasPrefix(line, "Personalities") ||
|
||||||
|
strings.HasPrefix(line, "unused") {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
deviceFields := strings.Fields(l)
|
deviceFields := strings.Fields(line)
|
||||||
if len(deviceFields) < 3 {
|
if len(deviceFields) < 3 {
|
||||||
return nil, fmt.Errorf("not enough fields in mdline (expected at least 3): %s", l)
|
return nil, fmt.Errorf("not enough fields in mdline (expected at least 3): %s", line)
|
||||||
}
|
}
|
||||||
mdName := deviceFields[0]
|
mdName := deviceFields[0] // mdx
|
||||||
activityState := deviceFields[2]
|
state := deviceFields[2] // active or inactive
|
||||||
|
|
||||||
if len(lines) <= i+3 {
|
if len(lines) <= i+3 {
|
||||||
return mdStats, fmt.Errorf("missing lines for md device %s", mdName)
|
return nil, fmt.Errorf(
|
||||||
|
"error parsing %s: too few lines for md device",
|
||||||
|
mdName,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
active, total, size, err := evalStatusLine(lines[i+1])
|
// Failed disks have the suffix (F) & Spare disks have the suffix (S).
|
||||||
|
fail := int64(strings.Count(line, "(F)"))
|
||||||
|
spare := int64(strings.Count(line, "(S)"))
|
||||||
|
active, total, size, err := evalStatusLine(lines[i], lines[i+1])
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, fmt.Errorf("error parsing md device lines: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
syncLineIdx := i + 2
|
syncLineIdx := i + 2
|
||||||
@ -89,20 +102,38 @@ func parseMDStat(mdstatData []byte) ([]MDStat, error) {
|
|||||||
syncLineIdx++
|
syncLineIdx++
|
||||||
}
|
}
|
||||||
|
|
||||||
// If device is recovering/syncing at the moment, get the number of currently
|
// If device is syncing at the moment, get the number of currently
|
||||||
// synced bytes, otherwise that number equals the size of the device.
|
// synced bytes, otherwise that number equals the size of the device.
|
||||||
syncedBlocks := size
|
syncedBlocks := size
|
||||||
if strings.Contains(lines[syncLineIdx], "recovery") || strings.Contains(lines[syncLineIdx], "resync") {
|
recovering := strings.Contains(lines[syncLineIdx], "recovery")
|
||||||
|
resyncing := strings.Contains(lines[syncLineIdx], "resync")
|
||||||
|
|
||||||
|
// Append recovery and resyncing state info.
|
||||||
|
if recovering || resyncing {
|
||||||
|
if recovering {
|
||||||
|
state = "recovering"
|
||||||
|
} else {
|
||||||
|
state = "resyncing"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle case when resync=PENDING or resync=DELAYED.
|
||||||
|
if strings.Contains(lines[syncLineIdx], "PENDING") ||
|
||||||
|
strings.Contains(lines[syncLineIdx], "DELAYED") {
|
||||||
|
syncedBlocks = 0
|
||||||
|
} else {
|
||||||
syncedBlocks, err = evalRecoveryLine(lines[syncLineIdx])
|
syncedBlocks, err = evalRecoveryLine(lines[syncLineIdx])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, fmt.Errorf("error parsing sync line in md device %s: %s", mdName, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mdStats = append(mdStats, MDStat{
|
mdStats = append(mdStats, MDStat{
|
||||||
Name: mdName,
|
Name: mdName,
|
||||||
ActivityState: activityState,
|
ActivityState: state,
|
||||||
DisksActive: active,
|
DisksActive: active,
|
||||||
|
DisksFailed: fail,
|
||||||
|
DisksSpare: spare,
|
||||||
DisksTotal: total,
|
DisksTotal: total,
|
||||||
BlocksTotal: size,
|
BlocksTotal: size,
|
||||||
BlocksSynced: syncedBlocks,
|
BlocksSynced: syncedBlocks,
|
||||||
@ -112,39 +143,51 @@ func parseMDStat(mdstatData []byte) ([]MDStat, error) {
|
|||||||
return mdStats, nil
|
return mdStats, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func evalStatusLine(statusline string) (active, total, size int64, err error) {
|
func evalStatusLine(deviceLine, statusLine string) (active, total, size int64, err error) {
|
||||||
matches := statuslineRE.FindStringSubmatch(statusline)
|
|
||||||
if len(matches) != 4 {
|
sizeStr := strings.Fields(statusLine)[0]
|
||||||
return 0, 0, 0, fmt.Errorf("unexpected statusline: %s", statusline)
|
size, err = strconv.ParseInt(sizeStr, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return 0, 0, 0, fmt.Errorf("unexpected statusLine %s: %s", statusLine, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
size, err = strconv.ParseInt(matches[1], 10, 64)
|
if strings.Contains(deviceLine, "raid0") || strings.Contains(deviceLine, "linear") {
|
||||||
if err != nil {
|
// In the device deviceLine, only disks have a number associated with them in [].
|
||||||
return 0, 0, 0, fmt.Errorf("unexpected statusline %s: %s", statusline, err)
|
total = int64(strings.Count(deviceLine, "["))
|
||||||
|
return total, total, size, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.Contains(deviceLine, "inactive") {
|
||||||
|
return 0, 0, size, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
matches := statusLineRE.FindStringSubmatch(statusLine)
|
||||||
|
if len(matches) != 4 {
|
||||||
|
return 0, 0, 0, fmt.Errorf("couldn't find all the substring matches: %s", statusLine)
|
||||||
}
|
}
|
||||||
|
|
||||||
total, err = strconv.ParseInt(matches[2], 10, 64)
|
total, err = strconv.ParseInt(matches[2], 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, 0, 0, fmt.Errorf("unexpected statusline %s: %s", statusline, err)
|
return 0, 0, 0, fmt.Errorf("unexpected statusLine %s: %s", statusLine, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
active, err = strconv.ParseInt(matches[3], 10, 64)
|
active, err = strconv.ParseInt(matches[3], 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, 0, 0, fmt.Errorf("unexpected statusline %s: %s", statusline, err)
|
return 0, 0, 0, fmt.Errorf("unexpected statusLine %s: %s", statusLine, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return active, total, size, nil
|
return active, total, size, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func evalRecoveryLine(buildline string) (syncedBlocks int64, err error) {
|
func evalRecoveryLine(recoveryLine string) (syncedBlocks int64, err error) {
|
||||||
matches := buildlineRE.FindStringSubmatch(buildline)
|
matches := recoveryLineRE.FindStringSubmatch(recoveryLine)
|
||||||
if len(matches) != 2 {
|
if len(matches) != 2 {
|
||||||
return 0, fmt.Errorf("unexpected buildline: %s", buildline)
|
return 0, fmt.Errorf("unexpected recoveryLine: %s", recoveryLine)
|
||||||
}
|
}
|
||||||
|
|
||||||
syncedBlocks, err = strconv.ParseInt(matches[1], 10, 64)
|
syncedBlocks, err = strconv.ParseInt(matches[1], 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, fmt.Errorf("%s in buildline: %s", err, buildline)
|
return 0, fmt.Errorf("%s in recoveryLine: %s", err, recoveryLine)
|
||||||
}
|
}
|
||||||
|
|
||||||
return syncedBlocks, nil
|
return syncedBlocks, nil
|
||||||
|
178
vendor/github.com/prometheus/procfs/mountinfo.go
generated
vendored
Normal file
178
vendor/github.com/prometheus/procfs/mountinfo.go
generated
vendored
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
// Copyright 2019 The Prometheus Authors
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package procfs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
var validOptionalFields = map[string]bool{
|
||||||
|
"shared": true,
|
||||||
|
"master": true,
|
||||||
|
"propagate_from": true,
|
||||||
|
"unbindable": true,
|
||||||
|
}
|
||||||
|
|
||||||
|
// A MountInfo is a type that describes the details, options
|
||||||
|
// for each mount, parsed from /proc/self/mountinfo.
|
||||||
|
// The fields described in each entry of /proc/self/mountinfo
|
||||||
|
// is described in the following man page.
|
||||||
|
// http://man7.org/linux/man-pages/man5/proc.5.html
|
||||||
|
type MountInfo struct {
|
||||||
|
// Unique Id for the mount
|
||||||
|
MountId int
|
||||||
|
// The Id of the parent mount
|
||||||
|
ParentId int
|
||||||
|
// The value of `st_dev` for the files on this FS
|
||||||
|
MajorMinorVer string
|
||||||
|
// The pathname of the directory in the FS that forms
|
||||||
|
// the root for this mount
|
||||||
|
Root string
|
||||||
|
// The pathname of the mount point relative to the root
|
||||||
|
MountPoint string
|
||||||
|
// Mount options
|
||||||
|
Options map[string]string
|
||||||
|
// Zero or more optional fields
|
||||||
|
OptionalFields map[string]string
|
||||||
|
// The Filesystem type
|
||||||
|
FSType string
|
||||||
|
// FS specific information or "none"
|
||||||
|
Source string
|
||||||
|
// Superblock options
|
||||||
|
SuperOptions map[string]string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns part of the mountinfo line, if it exists, else an empty string.
|
||||||
|
func getStringSliceElement(parts []string, idx int, defaultValue string) string {
|
||||||
|
if idx >= len(parts) {
|
||||||
|
return defaultValue
|
||||||
|
}
|
||||||
|
return parts[idx]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reads each line of the mountinfo file, and returns a list of formatted MountInfo structs.
|
||||||
|
func parseMountInfo(r io.Reader) ([]*MountInfo, error) {
|
||||||
|
mounts := []*MountInfo{}
|
||||||
|
scanner := bufio.NewScanner(r)
|
||||||
|
for scanner.Scan() {
|
||||||
|
mountString := scanner.Text()
|
||||||
|
parsedMounts, err := parseMountInfoString(mountString)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
mounts = append(mounts, parsedMounts)
|
||||||
|
}
|
||||||
|
|
||||||
|
err := scanner.Err()
|
||||||
|
return mounts, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parses a mountinfo file line, and converts it to a MountInfo struct.
|
||||||
|
// An important check here is to see if the hyphen separator, as if it does not exist,
|
||||||
|
// it means that the line is malformed.
|
||||||
|
func parseMountInfoString(mountString string) (*MountInfo, error) {
|
||||||
|
var err error
|
||||||
|
|
||||||
|
// OptionalFields can be zero, hence these checks to ensure we do not populate the wrong values in the wrong spots
|
||||||
|
separatorIndex := strings.Index(mountString, "-")
|
||||||
|
if separatorIndex == -1 {
|
||||||
|
return nil, fmt.Errorf("no separator found in mountinfo string: %s", mountString)
|
||||||
|
}
|
||||||
|
beforeFields := strings.Fields(mountString[:separatorIndex])
|
||||||
|
afterFields := strings.Fields(mountString[separatorIndex+1:])
|
||||||
|
if (len(beforeFields) + len(afterFields)) < 7 {
|
||||||
|
return nil, fmt.Errorf("too few fields")
|
||||||
|
}
|
||||||
|
|
||||||
|
mount := &MountInfo{
|
||||||
|
MajorMinorVer: getStringSliceElement(beforeFields, 2, ""),
|
||||||
|
Root: getStringSliceElement(beforeFields, 3, ""),
|
||||||
|
MountPoint: getStringSliceElement(beforeFields, 4, ""),
|
||||||
|
Options: mountOptionsParser(getStringSliceElement(beforeFields, 5, "")),
|
||||||
|
OptionalFields: nil,
|
||||||
|
FSType: getStringSliceElement(afterFields, 0, ""),
|
||||||
|
Source: getStringSliceElement(afterFields, 1, ""),
|
||||||
|
SuperOptions: mountOptionsParser(getStringSliceElement(afterFields, 2, "")),
|
||||||
|
}
|
||||||
|
|
||||||
|
mount.MountId, err = strconv.Atoi(getStringSliceElement(beforeFields, 0, ""))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to parse mount ID")
|
||||||
|
}
|
||||||
|
mount.ParentId, err = strconv.Atoi(getStringSliceElement(beforeFields, 1, ""))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to parse parent ID")
|
||||||
|
}
|
||||||
|
// Has optional fields, which is a space separated list of values.
|
||||||
|
// Example: shared:2 master:7
|
||||||
|
if len(beforeFields) > 6 {
|
||||||
|
mount.OptionalFields = make(map[string]string)
|
||||||
|
optionalFields := beforeFields[6:]
|
||||||
|
for _, field := range optionalFields {
|
||||||
|
optionSplit := strings.Split(field, ":")
|
||||||
|
target, value := optionSplit[0], ""
|
||||||
|
if len(optionSplit) == 2 {
|
||||||
|
value = optionSplit[1]
|
||||||
|
}
|
||||||
|
// Checks if the 'keys' in the optional fields in the mountinfo line are acceptable.
|
||||||
|
// Allowed 'keys' are shared, master, propagate_from, unbindable.
|
||||||
|
if _, ok := validOptionalFields[target]; ok {
|
||||||
|
mount.OptionalFields[target] = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mount, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parses the mount options, superblock options.
|
||||||
|
func mountOptionsParser(mountOptions string) map[string]string {
|
||||||
|
opts := make(map[string]string)
|
||||||
|
options := strings.Split(mountOptions, ",")
|
||||||
|
for _, opt := range options {
|
||||||
|
splitOption := strings.Split(opt, "=")
|
||||||
|
if len(splitOption) < 2 {
|
||||||
|
key := splitOption[0]
|
||||||
|
opts[key] = ""
|
||||||
|
} else {
|
||||||
|
key, value := splitOption[0], splitOption[1]
|
||||||
|
opts[key] = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return opts
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retrieves mountinfo information from `/proc/self/mountinfo`.
|
||||||
|
func GetMounts() ([]*MountInfo, error) {
|
||||||
|
f, err := os.Open("/proc/self/mountinfo")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
return parseMountInfo(f)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retrieves mountinfo information from a processes' `/proc/<pid>/mountinfo`.
|
||||||
|
func GetProcMounts(pid int) ([]*MountInfo, error) {
|
||||||
|
f, err := os.Open(fmt.Sprintf("/proc/%d/mountinfo", pid))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
return parseMountInfo(f)
|
||||||
|
}
|
91
vendor/github.com/prometheus/procfs/net_softnet.go
generated
vendored
Normal file
91
vendor/github.com/prometheus/procfs/net_softnet.go
generated
vendored
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
// Copyright 2019 The Prometheus Authors
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package procfs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// For the proc file format details,
|
||||||
|
// see https://elixir.bootlin.com/linux/v4.17/source/net/core/net-procfs.c#L162
|
||||||
|
// and https://elixir.bootlin.com/linux/v4.17/source/include/linux/netdevice.h#L2810.
|
||||||
|
|
||||||
|
// SoftnetEntry contains a single row of data from /proc/net/softnet_stat
|
||||||
|
type SoftnetEntry struct {
|
||||||
|
// Number of processed packets
|
||||||
|
Processed uint
|
||||||
|
// Number of dropped packets
|
||||||
|
Dropped uint
|
||||||
|
// Number of times processing packets ran out of quota
|
||||||
|
TimeSqueezed uint
|
||||||
|
}
|
||||||
|
|
||||||
|
// GatherSoftnetStats reads /proc/net/softnet_stat, parse the relevant columns,
|
||||||
|
// and then return a slice of SoftnetEntry's.
|
||||||
|
func (fs FS) GatherSoftnetStats() ([]SoftnetEntry, error) {
|
||||||
|
data, err := ioutil.ReadFile(fs.proc.Path("net/softnet_stat"))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error reading softnet %s: %s", fs.proc.Path("net/softnet_stat"), err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return parseSoftnetEntries(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseSoftnetEntries(data []byte) ([]SoftnetEntry, error) {
|
||||||
|
lines := strings.Split(string(data), "\n")
|
||||||
|
entries := make([]SoftnetEntry, 0)
|
||||||
|
var err error
|
||||||
|
const (
|
||||||
|
expectedColumns = 11
|
||||||
|
)
|
||||||
|
for _, line := range lines {
|
||||||
|
columns := strings.Fields(line)
|
||||||
|
width := len(columns)
|
||||||
|
if width == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if width != expectedColumns {
|
||||||
|
return []SoftnetEntry{}, fmt.Errorf("%d columns were detected, but %d were expected", width, expectedColumns)
|
||||||
|
}
|
||||||
|
var entry SoftnetEntry
|
||||||
|
if entry, err = parseSoftnetEntry(columns); err != nil {
|
||||||
|
return []SoftnetEntry{}, err
|
||||||
|
}
|
||||||
|
entries = append(entries, entry)
|
||||||
|
}
|
||||||
|
|
||||||
|
return entries, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseSoftnetEntry(columns []string) (SoftnetEntry, error) {
|
||||||
|
var err error
|
||||||
|
var processed, dropped, timeSqueezed uint64
|
||||||
|
if processed, err = strconv.ParseUint(columns[0], 16, 32); err != nil {
|
||||||
|
return SoftnetEntry{}, fmt.Errorf("Unable to parse column 0: %s", err)
|
||||||
|
}
|
||||||
|
if dropped, err = strconv.ParseUint(columns[1], 16, 32); err != nil {
|
||||||
|
return SoftnetEntry{}, fmt.Errorf("Unable to parse column 1: %s", err)
|
||||||
|
}
|
||||||
|
if timeSqueezed, err = strconv.ParseUint(columns[2], 16, 32); err != nil {
|
||||||
|
return SoftnetEntry{}, fmt.Errorf("Unable to parse column 2: %s", err)
|
||||||
|
}
|
||||||
|
return SoftnetEntry{
|
||||||
|
Processed: uint(processed),
|
||||||
|
Dropped: uint(dropped),
|
||||||
|
TimeSqueezed: uint(timeSqueezed),
|
||||||
|
}, nil
|
||||||
|
}
|
44
vendor/github.com/prometheus/procfs/proc.go
generated
vendored
44
vendor/github.com/prometheus/procfs/proc.go
generated
vendored
@ -247,6 +247,20 @@ func (p Proc) MountStats() ([]*Mount, error) {
|
|||||||
return parseMountStats(f)
|
return parseMountStats(f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MountInfo retrieves mount information for mount points in a
|
||||||
|
// process's namespace.
|
||||||
|
// It supplies information missing in `/proc/self/mounts` and
|
||||||
|
// fixes various other problems with that file too.
|
||||||
|
func (p Proc) MountInfo() ([]*MountInfo, error) {
|
||||||
|
f, err := os.Open(p.path("mountinfo"))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
return parseMountInfo(f)
|
||||||
|
}
|
||||||
|
|
||||||
func (p Proc) fileDescriptors() ([]string, error) {
|
func (p Proc) fileDescriptors() ([]string, error) {
|
||||||
d, err := os.Open(p.path("fd"))
|
d, err := os.Open(p.path("fd"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -265,3 +279,33 @@ func (p Proc) fileDescriptors() ([]string, error) {
|
|||||||
func (p Proc) path(pa ...string) string {
|
func (p Proc) path(pa ...string) string {
|
||||||
return p.fs.Path(append([]string{strconv.Itoa(p.PID)}, pa...)...)
|
return p.fs.Path(append([]string{strconv.Itoa(p.PID)}, pa...)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FileDescriptorsInfo retrieves information about all file descriptors of
|
||||||
|
// the process.
|
||||||
|
func (p Proc) FileDescriptorsInfo() (ProcFDInfos, error) {
|
||||||
|
names, err := p.fileDescriptors()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var fdinfos ProcFDInfos
|
||||||
|
|
||||||
|
for _, n := range names {
|
||||||
|
fdinfo, err := p.FDInfo(n)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
fdinfos = append(fdinfos, *fdinfo)
|
||||||
|
}
|
||||||
|
|
||||||
|
return fdinfos, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Schedstat returns task scheduling information for the process.
|
||||||
|
func (p Proc) Schedstat() (ProcSchedstat, error) {
|
||||||
|
contents, err := ioutil.ReadFile(p.path("schedstat"))
|
||||||
|
if err != nil {
|
||||||
|
return ProcSchedstat{}, err
|
||||||
|
}
|
||||||
|
return parseProcSchedstat(string(contents))
|
||||||
|
}
|
||||||
|
43
vendor/github.com/prometheus/procfs/proc_environ.go
generated
vendored
Normal file
43
vendor/github.com/prometheus/procfs/proc_environ.go
generated
vendored
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
// Copyright 2019 The Prometheus Authors
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package procfs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Environ reads process environments from /proc/<pid>/environ
|
||||||
|
func (p Proc) Environ() ([]string, error) {
|
||||||
|
environments := make([]string, 0)
|
||||||
|
|
||||||
|
f, err := os.Open(p.path("environ"))
|
||||||
|
if err != nil {
|
||||||
|
return environments, err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
data, err := ioutil.ReadAll(f)
|
||||||
|
if err != nil {
|
||||||
|
return environments, err
|
||||||
|
}
|
||||||
|
|
||||||
|
environments = strings.Split(string(data), "\000")
|
||||||
|
if len(environments) > 0 {
|
||||||
|
environments = environments[:len(environments)-1]
|
||||||
|
}
|
||||||
|
|
||||||
|
return environments, nil
|
||||||
|
}
|
132
vendor/github.com/prometheus/procfs/proc_fdinfo.go
generated
vendored
Normal file
132
vendor/github.com/prometheus/procfs/proc_fdinfo.go
generated
vendored
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
// Copyright 2019 The Prometheus Authors
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package procfs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Regexp variables
|
||||||
|
var (
|
||||||
|
rPos = regexp.MustCompile(`^pos:\s+(\d+)$`)
|
||||||
|
rFlags = regexp.MustCompile(`^flags:\s+(\d+)$`)
|
||||||
|
rMntID = regexp.MustCompile(`^mnt_id:\s+(\d+)$`)
|
||||||
|
rInotify = regexp.MustCompile(`^inotify`)
|
||||||
|
)
|
||||||
|
|
||||||
|
// ProcFDInfo contains represents file descriptor information.
|
||||||
|
type ProcFDInfo struct {
|
||||||
|
// File descriptor
|
||||||
|
FD string
|
||||||
|
// File offset
|
||||||
|
Pos string
|
||||||
|
// File access mode and status flags
|
||||||
|
Flags string
|
||||||
|
// Mount point ID
|
||||||
|
MntID string
|
||||||
|
// List of inotify lines (structed) in the fdinfo file (kernel 3.8+ only)
|
||||||
|
InotifyInfos []InotifyInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
// FDInfo constructor. On kernels older than 3.8, InotifyInfos will always be empty.
|
||||||
|
func (p Proc) FDInfo(fd string) (*ProcFDInfo, error) {
|
||||||
|
f, err := os.Open(p.path("fdinfo", fd))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
fdinfo, err := ioutil.ReadAll(f)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not read %s: %s", f.Name(), err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var text, pos, flags, mntid string
|
||||||
|
var inotify []InotifyInfo
|
||||||
|
|
||||||
|
scanner := bufio.NewScanner(strings.NewReader(string(fdinfo)))
|
||||||
|
for scanner.Scan() {
|
||||||
|
text = scanner.Text()
|
||||||
|
if rPos.MatchString(text) {
|
||||||
|
pos = rPos.FindStringSubmatch(text)[1]
|
||||||
|
} else if rFlags.MatchString(text) {
|
||||||
|
flags = rFlags.FindStringSubmatch(text)[1]
|
||||||
|
} else if rMntID.MatchString(text) {
|
||||||
|
mntid = rMntID.FindStringSubmatch(text)[1]
|
||||||
|
} else if rInotify.MatchString(text) {
|
||||||
|
newInotify, err := parseInotifyInfo(text)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
inotify = append(inotify, *newInotify)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
i := &ProcFDInfo{
|
||||||
|
FD: fd,
|
||||||
|
Pos: pos,
|
||||||
|
Flags: flags,
|
||||||
|
MntID: mntid,
|
||||||
|
InotifyInfos: inotify,
|
||||||
|
}
|
||||||
|
|
||||||
|
return i, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// InotifyInfo represents a single inotify line in the fdinfo file.
|
||||||
|
type InotifyInfo struct {
|
||||||
|
// Watch descriptor number
|
||||||
|
WD string
|
||||||
|
// Inode number
|
||||||
|
Ino string
|
||||||
|
// Device ID
|
||||||
|
Sdev string
|
||||||
|
// Mask of events being monitored
|
||||||
|
Mask string
|
||||||
|
}
|
||||||
|
|
||||||
|
// InotifyInfo constructor. Only available on kernel 3.8+.
|
||||||
|
func parseInotifyInfo(line string) (*InotifyInfo, error) {
|
||||||
|
r := regexp.MustCompile(`^inotify\s+wd:([0-9a-f]+)\s+ino:([0-9a-f]+)\s+sdev:([0-9a-f]+)\s+mask:([0-9a-f]+)`)
|
||||||
|
m := r.FindStringSubmatch(line)
|
||||||
|
i := &InotifyInfo{
|
||||||
|
WD: m[1],
|
||||||
|
Ino: m[2],
|
||||||
|
Sdev: m[3],
|
||||||
|
Mask: m[4],
|
||||||
|
}
|
||||||
|
return i, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProcFDInfos represents a list of ProcFDInfo structs.
|
||||||
|
type ProcFDInfos []ProcFDInfo
|
||||||
|
|
||||||
|
func (p ProcFDInfos) Len() int { return len(p) }
|
||||||
|
func (p ProcFDInfos) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
|
||||||
|
func (p ProcFDInfos) Less(i, j int) bool { return p[i].FD < p[j].FD }
|
||||||
|
|
||||||
|
// InotifyWatchLen returns the total number of inotify watches
|
||||||
|
func (p ProcFDInfos) InotifyWatchLen() (int, error) {
|
||||||
|
length := 0
|
||||||
|
for _, f := range p {
|
||||||
|
length += len(f.InotifyInfos)
|
||||||
|
}
|
||||||
|
|
||||||
|
return length, nil
|
||||||
|
}
|
2
vendor/github.com/prometheus/procfs/proc_stat.go
generated
vendored
2
vendor/github.com/prometheus/procfs/proc_stat.go
generated
vendored
@ -106,7 +106,7 @@ type ProcStat struct {
|
|||||||
|
|
||||||
// NewStat returns the current status information of the process.
|
// NewStat returns the current status information of the process.
|
||||||
//
|
//
|
||||||
// Deprecated: use NewStat() instead
|
// Deprecated: use p.Stat() instead
|
||||||
func (p Proc) NewStat() (ProcStat, error) {
|
func (p Proc) NewStat() (ProcStat, error) {
|
||||||
return p.Stat()
|
return p.Stat()
|
||||||
}
|
}
|
||||||
|
7
vendor/github.com/prometheus/procfs/proc_status.go
generated
vendored
7
vendor/github.com/prometheus/procfs/proc_status.go
generated
vendored
@ -21,7 +21,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ProcStat provides status information about the process,
|
// ProcStatus provides status information about the process,
|
||||||
// read from /proc/[pid]/stat.
|
// read from /proc/[pid]/stat.
|
||||||
type ProcStatus struct {
|
type ProcStatus struct {
|
||||||
// The process ID.
|
// The process ID.
|
||||||
@ -29,6 +29,9 @@ type ProcStatus struct {
|
|||||||
// The process name.
|
// The process name.
|
||||||
Name string
|
Name string
|
||||||
|
|
||||||
|
// Thread group ID.
|
||||||
|
TGID int
|
||||||
|
|
||||||
// Peak virtual memory size.
|
// Peak virtual memory size.
|
||||||
VmPeak uint64
|
VmPeak uint64
|
||||||
// Virtual memory size.
|
// Virtual memory size.
|
||||||
@ -113,6 +116,8 @@ func (p Proc) NewStatus() (ProcStatus, error) {
|
|||||||
|
|
||||||
func (s *ProcStatus) fillStatus(k string, vString string, vUint uint64, vUintBytes uint64) {
|
func (s *ProcStatus) fillStatus(k string, vString string, vUint uint64, vUintBytes uint64) {
|
||||||
switch k {
|
switch k {
|
||||||
|
case "Tgid":
|
||||||
|
s.TGID = int(vUint)
|
||||||
case "Name":
|
case "Name":
|
||||||
s.Name = vString
|
s.Name = vString
|
||||||
case "VmPeak":
|
case "VmPeak":
|
||||||
|
118
vendor/github.com/prometheus/procfs/schedstat.go
generated
vendored
Normal file
118
vendor/github.com/prometheus/procfs/schedstat.go
generated
vendored
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
// Copyright 2019 The Prometheus Authors
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package procfs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"errors"
|
||||||
|
"os"
|
||||||
|
"regexp"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
cpuLineRE = regexp.MustCompile(`cpu(\d+) (\d+) (\d+) (\d+) (\d+) (\d+) (\d+) (\d+) (\d+) (\d+)`)
|
||||||
|
procLineRE = regexp.MustCompile(`(\d+) (\d+) (\d+)`)
|
||||||
|
)
|
||||||
|
|
||||||
|
// Schedstat contains scheduler statistics from /proc/schedstat
|
||||||
|
//
|
||||||
|
// See
|
||||||
|
// https://www.kernel.org/doc/Documentation/scheduler/sched-stats.txt
|
||||||
|
// for a detailed description of what these numbers mean.
|
||||||
|
//
|
||||||
|
// Note the current kernel documentation claims some of the time units are in
|
||||||
|
// jiffies when they are actually in nanoseconds since 2.6.23 with the
|
||||||
|
// introduction of CFS. A fix to the documentation is pending. See
|
||||||
|
// https://lore.kernel.org/patchwork/project/lkml/list/?series=403473
|
||||||
|
type Schedstat struct {
|
||||||
|
CPUs []*SchedstatCPU
|
||||||
|
}
|
||||||
|
|
||||||
|
// SchedstatCPU contains the values from one "cpu<N>" line
|
||||||
|
type SchedstatCPU struct {
|
||||||
|
CPUNum string
|
||||||
|
|
||||||
|
RunningNanoseconds uint64
|
||||||
|
WaitingNanoseconds uint64
|
||||||
|
RunTimeslices uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProcSchedstat contains the values from /proc/<pid>/schedstat
|
||||||
|
type ProcSchedstat struct {
|
||||||
|
RunningNanoseconds uint64
|
||||||
|
WaitingNanoseconds uint64
|
||||||
|
RunTimeslices uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
// Schedstat reads data from /proc/schedstat
|
||||||
|
func (fs FS) Schedstat() (*Schedstat, error) {
|
||||||
|
file, err := os.Open(fs.proc.Path("schedstat"))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
stats := &Schedstat{}
|
||||||
|
scanner := bufio.NewScanner(file)
|
||||||
|
|
||||||
|
for scanner.Scan() {
|
||||||
|
match := cpuLineRE.FindStringSubmatch(scanner.Text())
|
||||||
|
if match != nil {
|
||||||
|
cpu := &SchedstatCPU{}
|
||||||
|
cpu.CPUNum = match[1]
|
||||||
|
|
||||||
|
cpu.RunningNanoseconds, err = strconv.ParseUint(match[8], 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
cpu.WaitingNanoseconds, err = strconv.ParseUint(match[9], 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
cpu.RunTimeslices, err = strconv.ParseUint(match[10], 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
stats.CPUs = append(stats.CPUs, cpu)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return stats, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseProcSchedstat(contents string) (stats ProcSchedstat, err error) {
|
||||||
|
match := procLineRE.FindStringSubmatch(contents)
|
||||||
|
|
||||||
|
if match != nil {
|
||||||
|
stats.RunningNanoseconds, err = strconv.ParseUint(match[1], 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
stats.WaitingNanoseconds, err = strconv.ParseUint(match[2], 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
stats.RunTimeslices, err = strconv.ParseUint(match[3], 10, 64)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = errors.New("could not parse schedstat")
|
||||||
|
return
|
||||||
|
}
|
210
vendor/github.com/prometheus/procfs/vm.go
generated
vendored
Normal file
210
vendor/github.com/prometheus/procfs/vm.go
generated
vendored
Normal file
@ -0,0 +1,210 @@
|
|||||||
|
// Copyright 2019 The Prometheus Authors
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// +build !windows
|
||||||
|
|
||||||
|
package procfs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/prometheus/procfs/internal/util"
|
||||||
|
)
|
||||||
|
|
||||||
|
// The VM interface is described at
|
||||||
|
// https://www.kernel.org/doc/Documentation/sysctl/vm.txt
|
||||||
|
// Each setting is exposed as a single file.
|
||||||
|
// Each file contains one line with a single numerical value, except lowmem_reserve_ratio which holds an array
|
||||||
|
// and numa_zonelist_order (deprecated) which is a string
|
||||||
|
type VM struct {
|
||||||
|
AdminReserveKbytes *int64 // /proc/sys/vm/admin_reserve_kbytes
|
||||||
|
BlockDump *int64 // /proc/sys/vm/block_dump
|
||||||
|
CompactUnevictableAllowed *int64 // /proc/sys/vm/compact_unevictable_allowed
|
||||||
|
DirtyBackgroundBytes *int64 // /proc/sys/vm/dirty_background_bytes
|
||||||
|
DirtyBackgroundRatio *int64 // /proc/sys/vm/dirty_background_ratio
|
||||||
|
DirtyBytes *int64 // /proc/sys/vm/dirty_bytes
|
||||||
|
DirtyExpireCentisecs *int64 // /proc/sys/vm/dirty_expire_centisecs
|
||||||
|
DirtyRatio *int64 // /proc/sys/vm/dirty_ratio
|
||||||
|
DirtytimeExpireSeconds *int64 // /proc/sys/vm/dirtytime_expire_seconds
|
||||||
|
DirtyWritebackCentisecs *int64 // /proc/sys/vm/dirty_writeback_centisecs
|
||||||
|
DropCaches *int64 // /proc/sys/vm/drop_caches
|
||||||
|
ExtfragThreshold *int64 // /proc/sys/vm/extfrag_threshold
|
||||||
|
HugetlbShmGroup *int64 // /proc/sys/vm/hugetlb_shm_group
|
||||||
|
LaptopMode *int64 // /proc/sys/vm/laptop_mode
|
||||||
|
LegacyVaLayout *int64 // /proc/sys/vm/legacy_va_layout
|
||||||
|
LowmemReserveRatio []*int64 // /proc/sys/vm/lowmem_reserve_ratio
|
||||||
|
MaxMapCount *int64 // /proc/sys/vm/max_map_count
|
||||||
|
MemoryFailureEarlyKill *int64 // /proc/sys/vm/memory_failure_early_kill
|
||||||
|
MemoryFailureRecovery *int64 // /proc/sys/vm/memory_failure_recovery
|
||||||
|
MinFreeKbytes *int64 // /proc/sys/vm/min_free_kbytes
|
||||||
|
MinSlabRatio *int64 // /proc/sys/vm/min_slab_ratio
|
||||||
|
MinUnmappedRatio *int64 // /proc/sys/vm/min_unmapped_ratio
|
||||||
|
MmapMinAddr *int64 // /proc/sys/vm/mmap_min_addr
|
||||||
|
NrHugepages *int64 // /proc/sys/vm/nr_hugepages
|
||||||
|
NrHugepagesMempolicy *int64 // /proc/sys/vm/nr_hugepages_mempolicy
|
||||||
|
NrOvercommitHugepages *int64 // /proc/sys/vm/nr_overcommit_hugepages
|
||||||
|
NumaStat *int64 // /proc/sys/vm/numa_stat
|
||||||
|
NumaZonelistOrder string // /proc/sys/vm/numa_zonelist_order
|
||||||
|
OomDumpTasks *int64 // /proc/sys/vm/oom_dump_tasks
|
||||||
|
OomKillAllocatingTask *int64 // /proc/sys/vm/oom_kill_allocating_task
|
||||||
|
OvercommitKbytes *int64 // /proc/sys/vm/overcommit_kbytes
|
||||||
|
OvercommitMemory *int64 // /proc/sys/vm/overcommit_memory
|
||||||
|
OvercommitRatio *int64 // /proc/sys/vm/overcommit_ratio
|
||||||
|
PageCluster *int64 // /proc/sys/vm/page-cluster
|
||||||
|
PanicOnOom *int64 // /proc/sys/vm/panic_on_oom
|
||||||
|
PercpuPagelistFraction *int64 // /proc/sys/vm/percpu_pagelist_fraction
|
||||||
|
StatInterval *int64 // /proc/sys/vm/stat_interval
|
||||||
|
Swappiness *int64 // /proc/sys/vm/swappiness
|
||||||
|
UserReserveKbytes *int64 // /proc/sys/vm/user_reserve_kbytes
|
||||||
|
VfsCachePressure *int64 // /proc/sys/vm/vfs_cache_pressure
|
||||||
|
WatermarkBoostFactor *int64 // /proc/sys/vm/watermark_boost_factor
|
||||||
|
WatermarkScaleFactor *int64 // /proc/sys/vm/watermark_scale_factor
|
||||||
|
ZoneReclaimMode *int64 // /proc/sys/vm/zone_reclaim_mode
|
||||||
|
}
|
||||||
|
|
||||||
|
// VM reads the VM statistics from the specified `proc` filesystem.
|
||||||
|
func (fs FS) VM() (*VM, error) {
|
||||||
|
path := fs.proc.Path("sys/vm")
|
||||||
|
file, err := os.Stat(path)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if !file.Mode().IsDir() {
|
||||||
|
return nil, fmt.Errorf("%s is not a directory", path)
|
||||||
|
}
|
||||||
|
|
||||||
|
files, err := ioutil.ReadDir(path)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var vm VM
|
||||||
|
for _, f := range files {
|
||||||
|
if f.IsDir() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
name := filepath.Join(path, f.Name())
|
||||||
|
// ignore errors on read, as there are some write only
|
||||||
|
// in /proc/sys/vm
|
||||||
|
value, err := util.SysReadFile(name)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
vp := util.NewValueParser(value)
|
||||||
|
|
||||||
|
switch f.Name() {
|
||||||
|
case "admin_reserve_kbytes":
|
||||||
|
vm.AdminReserveKbytes = vp.PInt64()
|
||||||
|
case "block_dump":
|
||||||
|
vm.BlockDump = vp.PInt64()
|
||||||
|
case "compact_unevictable_allowed":
|
||||||
|
vm.CompactUnevictableAllowed = vp.PInt64()
|
||||||
|
case "dirty_background_bytes":
|
||||||
|
vm.DirtyBackgroundBytes = vp.PInt64()
|
||||||
|
case "dirty_background_ratio":
|
||||||
|
vm.DirtyBackgroundRatio = vp.PInt64()
|
||||||
|
case "dirty_bytes":
|
||||||
|
vm.DirtyBytes = vp.PInt64()
|
||||||
|
case "dirty_expire_centisecs":
|
||||||
|
vm.DirtyExpireCentisecs = vp.PInt64()
|
||||||
|
case "dirty_ratio":
|
||||||
|
vm.DirtyRatio = vp.PInt64()
|
||||||
|
case "dirtytime_expire_seconds":
|
||||||
|
vm.DirtytimeExpireSeconds = vp.PInt64()
|
||||||
|
case "dirty_writeback_centisecs":
|
||||||
|
vm.DirtyWritebackCentisecs = vp.PInt64()
|
||||||
|
case "drop_caches":
|
||||||
|
vm.DropCaches = vp.PInt64()
|
||||||
|
case "extfrag_threshold":
|
||||||
|
vm.ExtfragThreshold = vp.PInt64()
|
||||||
|
case "hugetlb_shm_group":
|
||||||
|
vm.HugetlbShmGroup = vp.PInt64()
|
||||||
|
case "laptop_mode":
|
||||||
|
vm.LaptopMode = vp.PInt64()
|
||||||
|
case "legacy_va_layout":
|
||||||
|
vm.LegacyVaLayout = vp.PInt64()
|
||||||
|
case "lowmem_reserve_ratio":
|
||||||
|
stringSlice := strings.Fields(value)
|
||||||
|
pint64Slice := make([]*int64, 0, len(stringSlice))
|
||||||
|
for _, value := range stringSlice {
|
||||||
|
vp := util.NewValueParser(value)
|
||||||
|
pint64Slice = append(pint64Slice, vp.PInt64())
|
||||||
|
}
|
||||||
|
vm.LowmemReserveRatio = pint64Slice
|
||||||
|
case "max_map_count":
|
||||||
|
vm.MaxMapCount = vp.PInt64()
|
||||||
|
case "memory_failure_early_kill":
|
||||||
|
vm.MemoryFailureEarlyKill = vp.PInt64()
|
||||||
|
case "memory_failure_recovery":
|
||||||
|
vm.MemoryFailureRecovery = vp.PInt64()
|
||||||
|
case "min_free_kbytes":
|
||||||
|
vm.MinFreeKbytes = vp.PInt64()
|
||||||
|
case "min_slab_ratio":
|
||||||
|
vm.MinSlabRatio = vp.PInt64()
|
||||||
|
case "min_unmapped_ratio":
|
||||||
|
vm.MinUnmappedRatio = vp.PInt64()
|
||||||
|
case "mmap_min_addr":
|
||||||
|
vm.MmapMinAddr = vp.PInt64()
|
||||||
|
case "nr_hugepages":
|
||||||
|
vm.NrHugepages = vp.PInt64()
|
||||||
|
case "nr_hugepages_mempolicy":
|
||||||
|
vm.NrHugepagesMempolicy = vp.PInt64()
|
||||||
|
case "nr_overcommit_hugepages":
|
||||||
|
vm.NrOvercommitHugepages = vp.PInt64()
|
||||||
|
case "numa_stat":
|
||||||
|
vm.NumaStat = vp.PInt64()
|
||||||
|
case "numa_zonelist_order":
|
||||||
|
vm.NumaZonelistOrder = value
|
||||||
|
case "oom_dump_tasks":
|
||||||
|
vm.OomDumpTasks = vp.PInt64()
|
||||||
|
case "oom_kill_allocating_task":
|
||||||
|
vm.OomKillAllocatingTask = vp.PInt64()
|
||||||
|
case "overcommit_kbytes":
|
||||||
|
vm.OvercommitKbytes = vp.PInt64()
|
||||||
|
case "overcommit_memory":
|
||||||
|
vm.OvercommitMemory = vp.PInt64()
|
||||||
|
case "overcommit_ratio":
|
||||||
|
vm.OvercommitRatio = vp.PInt64()
|
||||||
|
case "page-cluster":
|
||||||
|
vm.PageCluster = vp.PInt64()
|
||||||
|
case "panic_on_oom":
|
||||||
|
vm.PanicOnOom = vp.PInt64()
|
||||||
|
case "percpu_pagelist_fraction":
|
||||||
|
vm.PercpuPagelistFraction = vp.PInt64()
|
||||||
|
case "stat_interval":
|
||||||
|
vm.StatInterval = vp.PInt64()
|
||||||
|
case "swappiness":
|
||||||
|
vm.Swappiness = vp.PInt64()
|
||||||
|
case "user_reserve_kbytes":
|
||||||
|
vm.UserReserveKbytes = vp.PInt64()
|
||||||
|
case "vfs_cache_pressure":
|
||||||
|
vm.VfsCachePressure = vp.PInt64()
|
||||||
|
case "watermark_boost_factor":
|
||||||
|
vm.WatermarkBoostFactor = vp.PInt64()
|
||||||
|
case "watermark_scale_factor":
|
||||||
|
vm.WatermarkScaleFactor = vp.PInt64()
|
||||||
|
case "zone_reclaim_mode":
|
||||||
|
vm.ZoneReclaimMode = vp.PInt64()
|
||||||
|
}
|
||||||
|
if err := vp.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return &vm, nil
|
||||||
|
}
|
196
vendor/github.com/prometheus/procfs/zoneinfo.go
generated
vendored
Normal file
196
vendor/github.com/prometheus/procfs/zoneinfo.go
generated
vendored
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
// Copyright 2019 The Prometheus Authors
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// +build !windows
|
||||||
|
|
||||||
|
package procfs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/prometheus/procfs/internal/util"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Zoneinfo holds info parsed from /proc/zoneinfo.
|
||||||
|
type Zoneinfo struct {
|
||||||
|
Node string
|
||||||
|
Zone string
|
||||||
|
NrFreePages *int64
|
||||||
|
Min *int64
|
||||||
|
Low *int64
|
||||||
|
High *int64
|
||||||
|
Scanned *int64
|
||||||
|
Spanned *int64
|
||||||
|
Present *int64
|
||||||
|
Managed *int64
|
||||||
|
NrActiveAnon *int64
|
||||||
|
NrInactiveAnon *int64
|
||||||
|
NrIsolatedAnon *int64
|
||||||
|
NrAnonPages *int64
|
||||||
|
NrAnonTransparentHugepages *int64
|
||||||
|
NrActiveFile *int64
|
||||||
|
NrInactiveFile *int64
|
||||||
|
NrIsolatedFile *int64
|
||||||
|
NrFilePages *int64
|
||||||
|
NrSlabReclaimable *int64
|
||||||
|
NrSlabUnreclaimable *int64
|
||||||
|
NrMlockStack *int64
|
||||||
|
NrKernelStack *int64
|
||||||
|
NrMapped *int64
|
||||||
|
NrDirty *int64
|
||||||
|
NrWriteback *int64
|
||||||
|
NrUnevictable *int64
|
||||||
|
NrShmem *int64
|
||||||
|
NrDirtied *int64
|
||||||
|
NrWritten *int64
|
||||||
|
NumaHit *int64
|
||||||
|
NumaMiss *int64
|
||||||
|
NumaForeign *int64
|
||||||
|
NumaInterleave *int64
|
||||||
|
NumaLocal *int64
|
||||||
|
NumaOther *int64
|
||||||
|
Protection []*int64
|
||||||
|
}
|
||||||
|
|
||||||
|
var nodeZoneRE = regexp.MustCompile(`(\d+), zone\s+(\w+)`)
|
||||||
|
|
||||||
|
// Zoneinfo parses an zoneinfo-file (/proc/zoneinfo) and returns a slice of
|
||||||
|
// structs containing the relevant info. More information available here:
|
||||||
|
// https://www.kernel.org/doc/Documentation/sysctl/vm.txt
|
||||||
|
func (fs FS) Zoneinfo() ([]Zoneinfo, error) {
|
||||||
|
data, err := ioutil.ReadFile(fs.proc.Path("zoneinfo"))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error reading zoneinfo %s: %s", fs.proc.Path("zoneinfo"), err)
|
||||||
|
}
|
||||||
|
zoneinfo, err := parseZoneinfo(data)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error parsing zoneinfo %s: %s", fs.proc.Path("zoneinfo"), err)
|
||||||
|
}
|
||||||
|
return zoneinfo, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseZoneinfo(zoneinfoData []byte) ([]Zoneinfo, error) {
|
||||||
|
|
||||||
|
zoneinfo := []Zoneinfo{}
|
||||||
|
|
||||||
|
zoneinfoBlocks := bytes.Split(zoneinfoData, []byte("\nNode"))
|
||||||
|
for _, block := range zoneinfoBlocks {
|
||||||
|
var zoneinfoElement Zoneinfo
|
||||||
|
lines := strings.Split(string(block), "\n")
|
||||||
|
for _, line := range lines {
|
||||||
|
|
||||||
|
if nodeZone := nodeZoneRE.FindStringSubmatch(line); nodeZone != nil {
|
||||||
|
zoneinfoElement.Node = nodeZone[1]
|
||||||
|
zoneinfoElement.Zone = nodeZone[2]
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if strings.HasPrefix(strings.TrimSpace(line), "per-node stats") {
|
||||||
|
zoneinfoElement.Zone = ""
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
parts := strings.Fields(strings.TrimSpace(line))
|
||||||
|
if len(parts) < 2 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
vp := util.NewValueParser(parts[1])
|
||||||
|
switch parts[0] {
|
||||||
|
case "nr_free_pages":
|
||||||
|
zoneinfoElement.NrFreePages = vp.PInt64()
|
||||||
|
case "min":
|
||||||
|
zoneinfoElement.Min = vp.PInt64()
|
||||||
|
case "low":
|
||||||
|
zoneinfoElement.Low = vp.PInt64()
|
||||||
|
case "high":
|
||||||
|
zoneinfoElement.High = vp.PInt64()
|
||||||
|
case "scanned":
|
||||||
|
zoneinfoElement.Scanned = vp.PInt64()
|
||||||
|
case "spanned":
|
||||||
|
zoneinfoElement.Spanned = vp.PInt64()
|
||||||
|
case "present":
|
||||||
|
zoneinfoElement.Present = vp.PInt64()
|
||||||
|
case "managed":
|
||||||
|
zoneinfoElement.Managed = vp.PInt64()
|
||||||
|
case "nr_active_anon":
|
||||||
|
zoneinfoElement.NrActiveAnon = vp.PInt64()
|
||||||
|
case "nr_inactive_anon":
|
||||||
|
zoneinfoElement.NrInactiveAnon = vp.PInt64()
|
||||||
|
case "nr_isolated_anon":
|
||||||
|
zoneinfoElement.NrIsolatedAnon = vp.PInt64()
|
||||||
|
case "nr_anon_pages":
|
||||||
|
zoneinfoElement.NrAnonPages = vp.PInt64()
|
||||||
|
case "nr_anon_transparent_hugepages":
|
||||||
|
zoneinfoElement.NrAnonTransparentHugepages = vp.PInt64()
|
||||||
|
case "nr_active_file":
|
||||||
|
zoneinfoElement.NrActiveFile = vp.PInt64()
|
||||||
|
case "nr_inactive_file":
|
||||||
|
zoneinfoElement.NrInactiveFile = vp.PInt64()
|
||||||
|
case "nr_isolated_file":
|
||||||
|
zoneinfoElement.NrIsolatedFile = vp.PInt64()
|
||||||
|
case "nr_file_pages":
|
||||||
|
zoneinfoElement.NrFilePages = vp.PInt64()
|
||||||
|
case "nr_slab_reclaimable":
|
||||||
|
zoneinfoElement.NrSlabReclaimable = vp.PInt64()
|
||||||
|
case "nr_slab_unreclaimable":
|
||||||
|
zoneinfoElement.NrSlabUnreclaimable = vp.PInt64()
|
||||||
|
case "nr_mlock_stack":
|
||||||
|
zoneinfoElement.NrMlockStack = vp.PInt64()
|
||||||
|
case "nr_kernel_stack":
|
||||||
|
zoneinfoElement.NrKernelStack = vp.PInt64()
|
||||||
|
case "nr_mapped":
|
||||||
|
zoneinfoElement.NrMapped = vp.PInt64()
|
||||||
|
case "nr_dirty":
|
||||||
|
zoneinfoElement.NrDirty = vp.PInt64()
|
||||||
|
case "nr_writeback":
|
||||||
|
zoneinfoElement.NrWriteback = vp.PInt64()
|
||||||
|
case "nr_unevictable":
|
||||||
|
zoneinfoElement.NrUnevictable = vp.PInt64()
|
||||||
|
case "nr_shmem":
|
||||||
|
zoneinfoElement.NrShmem = vp.PInt64()
|
||||||
|
case "nr_dirtied":
|
||||||
|
zoneinfoElement.NrDirtied = vp.PInt64()
|
||||||
|
case "nr_written":
|
||||||
|
zoneinfoElement.NrWritten = vp.PInt64()
|
||||||
|
case "numa_hit":
|
||||||
|
zoneinfoElement.NumaHit = vp.PInt64()
|
||||||
|
case "numa_miss":
|
||||||
|
zoneinfoElement.NumaMiss = vp.PInt64()
|
||||||
|
case "numa_foreign":
|
||||||
|
zoneinfoElement.NumaForeign = vp.PInt64()
|
||||||
|
case "numa_interleave":
|
||||||
|
zoneinfoElement.NumaInterleave = vp.PInt64()
|
||||||
|
case "numa_local":
|
||||||
|
zoneinfoElement.NumaLocal = vp.PInt64()
|
||||||
|
case "numa_other":
|
||||||
|
zoneinfoElement.NumaOther = vp.PInt64()
|
||||||
|
case "protection:":
|
||||||
|
protectionParts := strings.Split(line, ":")
|
||||||
|
protectionValues := strings.Replace(protectionParts[1], "(", "", 1)
|
||||||
|
protectionValues = strings.Replace(protectionValues, ")", "", 1)
|
||||||
|
protectionValues = strings.TrimSpace(protectionValues)
|
||||||
|
protectionStringMap := strings.Split(protectionValues, ", ")
|
||||||
|
val, err := util.ParsePInt64s(protectionStringMap)
|
||||||
|
if err == nil {
|
||||||
|
zoneinfoElement.Protection = val
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
zoneinfo = append(zoneinfo, zoneinfoElement)
|
||||||
|
}
|
||||||
|
return zoneinfo, nil
|
||||||
|
}
|
3
vendor/modules.txt
vendored
3
vendor/modules.txt
vendored
@ -638,9 +638,10 @@ github.com/prometheus/client_model/go
|
|||||||
github.com/prometheus/common/expfmt
|
github.com/prometheus/common/expfmt
|
||||||
github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg
|
github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg
|
||||||
github.com/prometheus/common/model
|
github.com/prometheus/common/model
|
||||||
# github.com/prometheus/procfs v0.0.5 => github.com/prometheus/procfs v0.0.2
|
# github.com/prometheus/procfs v0.0.5 => github.com/prometheus/procfs v0.0.5
|
||||||
github.com/prometheus/procfs
|
github.com/prometheus/procfs
|
||||||
github.com/prometheus/procfs/internal/fs
|
github.com/prometheus/procfs/internal/fs
|
||||||
|
github.com/prometheus/procfs/internal/util
|
||||||
# github.com/quobyte/api v0.1.2 => github.com/quobyte/api v0.1.2
|
# github.com/quobyte/api v0.1.2 => github.com/quobyte/api v0.1.2
|
||||||
github.com/quobyte/api
|
github.com/quobyte/api
|
||||||
# github.com/robfig/cron v1.1.0 => github.com/robfig/cron v1.1.0
|
# github.com/robfig/cron v1.1.0 => github.com/robfig/cron v1.1.0
|
||||||
|
Loading…
Reference in New Issue
Block a user