mirror of
https://github.com/skooner-k8s/skooner.git
synced 2026-08-24 04:16:18 +00:00
Prometheus: fall back to pie chart if prometheus is not available
Signed-off-by: Yuqiu Wang <yuqiuw@indeed.com>
This commit is contained in:
Generated
+49
-49
@@ -1577,27 +1577,27 @@
|
||||
},
|
||||
"@protobufjs/aspromise": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
|
||||
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
|
||||
"integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78="
|
||||
},
|
||||
"@protobufjs/base64": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/@protobufjs/base64/-/base64-1.1.2.tgz",
|
||||
"resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
|
||||
"integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
|
||||
},
|
||||
"@protobufjs/codegen": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/@protobufjs/codegen/-/codegen-2.0.4.tgz",
|
||||
"resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
|
||||
"integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
|
||||
},
|
||||
"@protobufjs/eventemitter": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
|
||||
"integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A="
|
||||
},
|
||||
"@protobufjs/fetch": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/@protobufjs/fetch/-/fetch-1.1.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
|
||||
"integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
|
||||
"requires": {
|
||||
"@protobufjs/aspromise": "^1.1.1",
|
||||
@@ -1606,27 +1606,27 @@
|
||||
},
|
||||
"@protobufjs/float": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/@protobufjs/float/-/float-1.0.2.tgz",
|
||||
"resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
|
||||
"integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E="
|
||||
},
|
||||
"@protobufjs/inquire": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/@protobufjs/inquire/-/inquire-1.1.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
|
||||
"integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik="
|
||||
},
|
||||
"@protobufjs/path": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/@protobufjs/path/-/path-1.1.2.tgz",
|
||||
"resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
|
||||
"integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0="
|
||||
},
|
||||
"@protobufjs/pool": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/@protobufjs/pool/-/pool-1.1.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
|
||||
"integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q="
|
||||
},
|
||||
"@protobufjs/utf8": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/@protobufjs/utf8/-/utf8-1.1.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
|
||||
"integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
|
||||
},
|
||||
"@svgr/babel-plugin-add-jsx-attribute": {
|
||||
@@ -1975,7 +1975,7 @@
|
||||
},
|
||||
"@types/long": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/@types/long/-/long-4.0.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
|
||||
"integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
|
||||
},
|
||||
"@types/minimatch": {
|
||||
@@ -2030,7 +2030,7 @@
|
||||
},
|
||||
"@types/react-select": {
|
||||
"version": "3.0.22",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/@types/react-select/-/react-select-3.0.22.tgz",
|
||||
"resolved": "https://registry.npmjs.org/@types/react-select/-/react-select-3.0.22.tgz",
|
||||
"integrity": "sha512-fqgmC979JPr/6476Pau6QnmI9zVV664R7Q92Ld1rgTn+umtUXT5X3+PO/x6O4imCZnh7XCqZcouabWAlAQJNpQ==",
|
||||
"requires": {
|
||||
"@types/react": "*",
|
||||
@@ -4012,7 +4012,7 @@
|
||||
},
|
||||
"cli-width": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/cli-width/-/cli-width-3.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
|
||||
"integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw=="
|
||||
},
|
||||
"cliui": {
|
||||
@@ -5210,7 +5210,7 @@
|
||||
},
|
||||
"doctrine": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/doctrine/-/doctrine-3.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
|
||||
"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
|
||||
"requires": {
|
||||
"esutils": "^2.0.2"
|
||||
@@ -5546,7 +5546,7 @@
|
||||
},
|
||||
"eslint": {
|
||||
"version": "6.8.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/eslint/-/eslint-6.8.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
|
||||
"integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.0.0",
|
||||
@@ -5590,7 +5590,7 @@
|
||||
"dependencies": {
|
||||
"ansi-regex": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/ansi-regex/-/ansi-regex-4.1.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
|
||||
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
|
||||
},
|
||||
"ansi-styles": {
|
||||
@@ -5613,7 +5613,7 @@
|
||||
},
|
||||
"cross-spawn": {
|
||||
"version": "6.0.5",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/cross-spawn/-/cross-spawn-6.0.5.tgz",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
|
||||
"integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
|
||||
"requires": {
|
||||
"nice-try": "^1.0.4",
|
||||
@@ -5625,14 +5625,14 @@
|
||||
"dependencies": {
|
||||
"semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/semver/-/semver-5.7.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"eslint-utils": {
|
||||
"version": "1.4.3",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/eslint-utils/-/eslint-utils-1.4.3.tgz",
|
||||
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
|
||||
"integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
|
||||
"requires": {
|
||||
"eslint-visitor-keys": "^1.1.0"
|
||||
@@ -5640,7 +5640,7 @@
|
||||
},
|
||||
"globals": {
|
||||
"version": "12.4.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/globals/-/globals-12.4.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
|
||||
"integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
|
||||
"requires": {
|
||||
"type-fest": "^0.8.1"
|
||||
@@ -5657,22 +5657,22 @@
|
||||
},
|
||||
"regexpp": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/regexpp/-/regexpp-2.0.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
|
||||
"integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw=="
|
||||
},
|
||||
"resolve-from": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/resolve-from/-/resolve-from-4.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
|
||||
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
|
||||
},
|
||||
"semver": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/semver/-/semver-6.3.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/strip-ansi/-/strip-ansi-5.2.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
|
||||
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
|
||||
"requires": {
|
||||
"ansi-regex": "^4.1.0"
|
||||
@@ -6088,7 +6088,7 @@
|
||||
},
|
||||
"espree": {
|
||||
"version": "6.2.1",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/espree/-/espree-6.2.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
|
||||
"integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
|
||||
"requires": {
|
||||
"acorn": "^7.1.1",
|
||||
@@ -6544,7 +6544,7 @@
|
||||
},
|
||||
"file-entry-cache": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
|
||||
"integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
|
||||
"requires": {
|
||||
"flat-cache": "^2.0.1"
|
||||
@@ -6646,7 +6646,7 @@
|
||||
},
|
||||
"flat-cache": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/flat-cache/-/flat-cache-2.0.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
|
||||
"integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
|
||||
"requires": {
|
||||
"flatted": "^2.0.0",
|
||||
@@ -7423,7 +7423,7 @@
|
||||
},
|
||||
"ignore": {
|
||||
"version": "4.0.6",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/ignore/-/ignore-4.0.6.tgz",
|
||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
|
||||
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
|
||||
},
|
||||
"immer": {
|
||||
@@ -7514,7 +7514,7 @@
|
||||
},
|
||||
"inquirer": {
|
||||
"version": "7.3.3",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/inquirer/-/inquirer-7.3.3.tgz",
|
||||
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
|
||||
"integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
|
||||
"requires": {
|
||||
"ansi-escapes": "^4.2.1",
|
||||
@@ -7534,7 +7534,7 @@
|
||||
"dependencies": {
|
||||
"ansi-regex": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
|
||||
},
|
||||
"ansi-styles": {
|
||||
@@ -7547,7 +7547,7 @@
|
||||
},
|
||||
"chalk": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/chalk/-/chalk-4.1.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
|
||||
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
|
||||
"requires": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
@@ -7556,7 +7556,7 @@
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"requires": {
|
||||
"color-name": "~1.1.4"
|
||||
@@ -7564,27 +7564,27 @@
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/color-name/-/color-name-1.1.4.tgz",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||
},
|
||||
"emoji-regex": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
|
||||
},
|
||||
"has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
|
||||
},
|
||||
"is-fullwidth-code-point": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
||||
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
|
||||
},
|
||||
"string-width": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/string-width/-/string-width-4.2.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
|
||||
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
|
||||
"requires": {
|
||||
"emoji-regex": "^8.0.0",
|
||||
@@ -7594,7 +7594,7 @@
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/strip-ansi/-/strip-ansi-6.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
|
||||
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
|
||||
"requires": {
|
||||
"ansi-regex": "^5.0.0"
|
||||
@@ -9386,7 +9386,7 @@
|
||||
},
|
||||
"long": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/long/-/long-4.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
|
||||
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
|
||||
},
|
||||
"loose-envify": {
|
||||
@@ -11733,7 +11733,7 @@
|
||||
},
|
||||
"protobufjs": {
|
||||
"version": "6.10.2",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/protobufjs/-/protobufjs-6.10.2.tgz",
|
||||
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.2.tgz",
|
||||
"integrity": "sha512-27yj+04uF6ya9l+qfpH187aqEzfCF4+Uit0I9ZBQVqK09hk/SQzKa2MUqUpXaVa7LOFRg1TSSr3lVxGOk6c0SQ==",
|
||||
"requires": {
|
||||
"@protobufjs/aspromise": "^1.1.2",
|
||||
@@ -13473,7 +13473,7 @@
|
||||
},
|
||||
"slice-ansi": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/slice-ansi/-/slice-ansi-2.1.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
|
||||
"integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
|
||||
"requires": {
|
||||
"ansi-styles": "^3.2.0",
|
||||
@@ -13483,7 +13483,7 @@
|
||||
"dependencies": {
|
||||
"ansi-styles": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
||||
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
||||
"requires": {
|
||||
"color-convert": "^1.9.0"
|
||||
@@ -14032,7 +14032,7 @@
|
||||
},
|
||||
"strip-json-comments": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
|
||||
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
|
||||
},
|
||||
"style-loader": {
|
||||
@@ -14168,7 +14168,7 @@
|
||||
},
|
||||
"table": {
|
||||
"version": "5.4.6",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/table/-/table-5.4.6.tgz",
|
||||
"resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
|
||||
"integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
|
||||
"requires": {
|
||||
"ajv": "^6.10.2",
|
||||
@@ -14179,7 +14179,7 @@
|
||||
"dependencies": {
|
||||
"ansi-regex": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/ansi-regex/-/ansi-regex-4.1.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
|
||||
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
|
||||
},
|
||||
"is-fullwidth-code-point": {
|
||||
@@ -14189,7 +14189,7 @@
|
||||
},
|
||||
"string-width": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/string-width/-/string-width-3.1.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
|
||||
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
|
||||
"requires": {
|
||||
"emoji-regex": "^7.0.1",
|
||||
@@ -14199,7 +14199,7 @@
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/strip-ansi/-/strip-ansi-5.2.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
|
||||
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
|
||||
"requires": {
|
||||
"ansi-regex": "^4.1.0"
|
||||
@@ -14650,7 +14650,7 @@
|
||||
},
|
||||
"typescript": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/typescript/-/typescript-4.0.3.tgz",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz",
|
||||
"integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg=="
|
||||
},
|
||||
"unicode-canonical-property-names-ecmascript": {
|
||||
@@ -15718,7 +15718,7 @@
|
||||
},
|
||||
"write": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://nexus.corp.indeed.com/repository/npm/write/-/write-1.0.3.tgz",
|
||||
"resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
|
||||
"integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
|
||||
"requires": {
|
||||
"mkdirp": "^0.5.1"
|
||||
|
||||
@@ -62,10 +62,6 @@ export default class Menu extends Base<MenuProps, MenuStates> {
|
||||
{canView(rules, api.namespace) && (
|
||||
<MenuItem title='Namespaces' path='namespace' resource='Namespace' onClick={onClick} />
|
||||
)}
|
||||
|
||||
{canView(rules, api.namespace) && (
|
||||
<MenuItem title='PrometheusGraphs' path='prometheusgraphs' resource='Node' onClick={onClick} />
|
||||
)}
|
||||
</Group>
|
||||
|
||||
{/* Workloads */}
|
||||
|
||||
@@ -1,24 +1,43 @@
|
||||
import React from 'react';
|
||||
import _ from 'lodash';
|
||||
import React, {useEffect, useState} from 'react';
|
||||
import Chart from './chart';
|
||||
import LoadingChart from './loadingChart';
|
||||
import {Node} from '../utils/types';
|
||||
import PrometheusGraph from '../views/prometheusgraph';
|
||||
import PrometheusGraph, {BASE_HTTP_URL} from '../views/prometheusgraph';
|
||||
import api from '../services/api';
|
||||
|
||||
export default function NodeStatusChart({items}: {items?: Node[]}) {
|
||||
const readyCount = _.sumBy(items, x => getReadyStatus(x) === 'True' ? 1 : 0); // eslint-disable-line no-confusing-arrow
|
||||
|
||||
const query = {
|
||||
queryString: 'sum(kube_node_info)',
|
||||
title: 'Node Count',
|
||||
yAxisMin: 0,
|
||||
yAxisUnit: 'Nodes',
|
||||
};
|
||||
const [prometheusData, setPrometheusData] = useState([] as any);
|
||||
|
||||
useEffect(() => {
|
||||
const refreshPMData = async function () {
|
||||
const data = await api.getPrometheusData(BASE_HTTP_URL, query.queryString);
|
||||
setPrometheusData(data);
|
||||
};
|
||||
refreshPMData();
|
||||
}, []);
|
||||
|
||||
|
||||
return (
|
||||
<div className='charts_item'>
|
||||
{items ? (
|
||||
{prometheusData.length ? (
|
||||
<PrometheusGraph
|
||||
queryString={query.queryString}
|
||||
title={query.title}
|
||||
yAxisMin={query.yAxisMin}
|
||||
yAxisUnit={query.yAxisUnit}
|
||||
prometheusData={prometheusData}
|
||||
/>
|
||||
) : items ? (
|
||||
<Chart used={readyCount} available={items.length} />
|
||||
) : (
|
||||
<LoadingChart />
|
||||
)}
|
||||
@@ -27,3 +46,10 @@ export default function NodeStatusChart({items}: {items?: Node[]}) {
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function getReadyStatus({status}: Node) {
|
||||
if (!status.conditions) return null;
|
||||
|
||||
const ready = status.conditions.find(y => y.type === 'Ready');
|
||||
return ready && ready.status;
|
||||
}
|
||||
|
||||
@@ -1,34 +1,47 @@
|
||||
import _ from 'lodash';
|
||||
import React from 'react';
|
||||
// import Chart from './chart';
|
||||
import React, {useEffect, useState} from 'react';
|
||||
import Chart from './chart';
|
||||
import LoadingChart from './loadingChart';
|
||||
import {parseCpu, TO_ONE_CPU} from '../utils/unitHelpers';
|
||||
import {Pod, Metrics} from '../utils/types';
|
||||
import PrometheusGraph from '../views/prometheusgraph';
|
||||
import PrometheusGraph, {BASE_HTTP_URL} from '../views/prometheusgraph';
|
||||
import api from '../services/api';
|
||||
|
||||
export default function PodCpuChart({items, metrics}: {items?: Pod[], metrics?: _.Dictionary<Metrics>}) {
|
||||
const totals = getPodCpuTotals(items, metrics);
|
||||
// const decimals = totals && totals.used > 10 ? 1 : 2;
|
||||
const decimals = totals && totals.used > 10 ? 1 : 2;
|
||||
|
||||
const query = {
|
||||
queryString: 'sum(kube_pod_container_resource_requests{unit="core", resource="cpu"})',
|
||||
title: 'Pod CPU Usage',
|
||||
yAxisMin: 0,
|
||||
yAxisUnit: 'CPU',
|
||||
};
|
||||
const [prometheusData, setPrometheusData] = useState([] as any);
|
||||
|
||||
useEffect(() => {
|
||||
const refreshPMData = async function () {
|
||||
const data = await api.getPrometheusData(BASE_HTTP_URL, query.queryString);
|
||||
setPrometheusData(data);
|
||||
};
|
||||
refreshPMData();
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div className='charts_item'>
|
||||
{totals ? (
|
||||
// <Chart
|
||||
// decimals={decimals}
|
||||
// used={totals.used}
|
||||
// available={totals.available}
|
||||
// />
|
||||
{prometheusData ? (
|
||||
<PrometheusGraph
|
||||
queryString={query.queryString}
|
||||
title={query.title}
|
||||
yAxisMin={query.yAxisMin}
|
||||
yAxisUnit={query.yAxisUnit}
|
||||
prometheusData={prometheusData}
|
||||
/>
|
||||
) : totals ? (
|
||||
<Chart
|
||||
decimals={decimals}
|
||||
used={totals.used}
|
||||
available={totals.available}
|
||||
/>
|
||||
) : (
|
||||
<LoadingChart />
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
import _ from 'lodash';
|
||||
import React from 'react';
|
||||
import React, {useEffect, useState} from 'react';
|
||||
import Chart from './chart';
|
||||
import LoadingChart from './loadingChart';
|
||||
import {parseRam, TO_GB} from '../utils/unitHelpers';
|
||||
import {Pod, Metrics} from '../utils/types';
|
||||
import PrometheusGraph from '../views/prometheusgraph';
|
||||
import PrometheusGraph, {BASE_HTTP_URL} from '../views/prometheusgraph';
|
||||
import api from '../services/api';
|
||||
|
||||
export default function RamChart({items, metrics}: {items?: Pod[], metrics?: _.Dictionary<Metrics>}) {
|
||||
const totals = getPodRamTotals(items, metrics);
|
||||
const decimals = totals && totals.used > 10 ? 1 : 2;
|
||||
|
||||
const query = {
|
||||
queryString: `sum(kube_pod_container_resource_requests{unit="byte"}/${TO_GB})`,
|
||||
@@ -14,16 +17,33 @@ export default function RamChart({items, metrics}: {items?: Pod[], metrics?: _.D
|
||||
yAxisMin: 0,
|
||||
yAxisUnit: 'GiB',
|
||||
};
|
||||
const [prometheusData, setPrometheusData] = useState([] as any);
|
||||
|
||||
useEffect(() => {
|
||||
const refreshPMData = async function () {
|
||||
const data = await api.getPrometheusData(BASE_HTTP_URL, query.queryString);
|
||||
setPrometheusData(data);
|
||||
};
|
||||
refreshPMData();
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div className='charts_item'>
|
||||
{totals ? (
|
||||
{prometheusData ? (
|
||||
<PrometheusGraph
|
||||
queryString={query.queryString}
|
||||
title={query.title}
|
||||
yAxisMin={query.yAxisMin}
|
||||
yAxisUnit={query.yAxisUnit}
|
||||
prometheusData={prometheusData}
|
||||
/>
|
||||
) : totals ? (
|
||||
<Chart
|
||||
decimals={decimals}
|
||||
used={totals && totals.used}
|
||||
usedSuffix='Gb'
|
||||
available={totals && totals.available}
|
||||
availableSuffix='Gb'
|
||||
/>
|
||||
) : (
|
||||
<LoadingChart />
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import _ from 'lodash';
|
||||
import React from 'react';
|
||||
import React, {useEffect, useState} from 'react';
|
||||
import Chart from './chart';
|
||||
import LoadingChart from './loadingChart';
|
||||
import {Pod} from '../utils/types';
|
||||
@@ -16,16 +16,25 @@ export default function PodStatusChart({items}: {items?: Pod[]}) {
|
||||
yAxisMin: 0,
|
||||
yAxisUnit: 'Pods',
|
||||
};
|
||||
const prometheusConnected = api.isPrometheusConnected(BASE_HTTP_URL);
|
||||
const [prometheusData, setPrometheusData] = useState([] as any);
|
||||
|
||||
useEffect(() => {
|
||||
const refreshPMData = async function () {
|
||||
const data = await api.getPrometheusData(BASE_HTTP_URL, query.queryString);
|
||||
setPrometheusData(data);
|
||||
};
|
||||
refreshPMData();
|
||||
}, []);
|
||||
return (
|
||||
<div className='charts_item'>
|
||||
{
|
||||
prometheusConnected ? (
|
||||
prometheusData ? (
|
||||
<PrometheusGraph
|
||||
queryString={query.queryString}
|
||||
title={query.title}
|
||||
yAxisMin={query.yAxisMin}
|
||||
yAxisUnit={query.yAxisUnit}
|
||||
prometheusData={prometheusData}
|
||||
/>
|
||||
) : items && available ? (
|
||||
<Chart used={count} pending={available - count} available={available} />
|
||||
|
||||
@@ -26,7 +26,6 @@ import PersistentVolumeClaims from './views/persistentVolumeClaims';
|
||||
import PersistentVolumes from './views/persistentVolumes';
|
||||
import Pod from './views/pod';
|
||||
import Pods from './views/pods';
|
||||
import PrometheusGraphs from './views/prometheusgraphs';
|
||||
import ReplicaSet from './views/replicaSet';
|
||||
import ReplicaSets from './views/replicaSets';
|
||||
import Role from './views/role';
|
||||
@@ -109,8 +108,6 @@ registerRoute('storageclass', () => <StorageClasses />);
|
||||
// @ts-ignore
|
||||
registerRoute('storageclass/:name', params => <StorageClass {...params} />);
|
||||
registerRoute('workload', () => <Workloads />);
|
||||
|
||||
registerRoute('prometheusgraphs', () => <PrometheusGraphs />);
|
||||
// @ts-ignore
|
||||
registerRoute('workload/cronjob/:namespace/:name', params => <CronJob {...params} />);
|
||||
// @ts-ignore
|
||||
|
||||
@@ -3,6 +3,7 @@ import {Base64} from 'js-base64';
|
||||
import {request, post, stream, apiFactory, apiFactoryWithNamespace, requestText} from './apiProxy';
|
||||
import log from '../utils/log';
|
||||
import {K8sEvent, Namespace, TODO, Metrics, PersistentVolume, Node, Pod, ClusterRole, ClusterRoleBinding, ConfigMap, RoleBinding, Secret, ServiceAccount, StorageClass} from '../utils/types';
|
||||
import {BASE_HTTP_URL} from "../views/prometheusgraph";
|
||||
|
||||
type DataCallback<T> = (data: T) => void;
|
||||
type MetricsCallback = DataCallback<Metrics[]>;
|
||||
@@ -44,7 +45,7 @@ const apis = {
|
||||
logsAll,
|
||||
swagger,
|
||||
exec,
|
||||
isPrometheusConnected,
|
||||
getPrometheusData,
|
||||
metrics: metricsFactory(),
|
||||
oidc: oidcFactory(),
|
||||
|
||||
@@ -188,14 +189,26 @@ function logs(namespace: string, name: string, container: string, tailLines: num
|
||||
}
|
||||
}
|
||||
|
||||
async function isPrometheusConnected(baseUrl: string) {
|
||||
async function getPrometheusData(baseUrl: string, queryString: string) {
|
||||
const url = `${baseUrl}/api/v1/query_range`;
|
||||
try {
|
||||
const response = await request(baseUrl);
|
||||
return response.status === 302;
|
||||
const params = {
|
||||
query: queryString,
|
||||
start: (Date.now() / 1000 - 60 * 60).toString(),
|
||||
end: (Date.now() / 1000).toString(), // One hour range
|
||||
step: '1',
|
||||
};
|
||||
return fetch(`${url}?${new URLSearchParams(params).toString()}`)
|
||||
.then(result => result.json())
|
||||
.then((json) => {
|
||||
const jsonData = json.data;
|
||||
const graphData : Array<any> = jsonData.result[0]?.values.map((value: any) => ({x: value[0], y: +value[1]}));
|
||||
return graphData;
|
||||
});
|
||||
} catch (err) {
|
||||
log.error('Unable to send request', {err});
|
||||
}
|
||||
return null;
|
||||
return [];
|
||||
}
|
||||
|
||||
export default apis;
|
||||
|
||||
@@ -3,7 +3,7 @@ import {XYPlot, XAxis, YAxis, LineSeries, Crosshair, AreaSeries} from 'react-vis
|
||||
import Base from '../components/base';
|
||||
|
||||
|
||||
export const BASE_HTTP_URL = 'http://localhost:58984';
|
||||
export const BASE_HTTP_URL = 'http://localhost:4654/prom';
|
||||
|
||||
|
||||
type Props = {
|
||||
@@ -11,11 +11,10 @@ type Props = {
|
||||
title: string;
|
||||
yAxisMin?: number;
|
||||
yAxisUnit?: string;
|
||||
prometheusData: Array<any>;
|
||||
}
|
||||
|
||||
type State = {
|
||||
metric: string;
|
||||
data: Array<any>;
|
||||
crosshairValues: any[];
|
||||
}
|
||||
|
||||
@@ -42,34 +41,17 @@ export default class PrometheusGraph extends Base<Props, State> {
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
const url = `${BASE_HTTP_URL}/api/v1/query_range`;
|
||||
this.setState((prevState => ({
|
||||
...prevState,
|
||||
data: new Array<any>(),
|
||||
data: this.props.prometheusData,
|
||||
crosshairValues: [],
|
||||
})));
|
||||
const params = {
|
||||
query: this.props.queryString,
|
||||
start: (Date.now() / 1000 - 60 * 60).toString(),
|
||||
end: (Date.now() / 1000).toString(), // One hour range
|
||||
step: '1',
|
||||
};
|
||||
fetch(`${url}?${new URLSearchParams(params).toString()}`)
|
||||
.then(result => result.json())
|
||||
.then((json) => {
|
||||
const jsonData = json.data;
|
||||
const graphData : Array<any> = jsonData.result[0]?.values.map((value: any) => ({x: value[0], y: +value[1]}));
|
||||
this.setState(prevState => ({
|
||||
...prevState,
|
||||
data: graphData,
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
getYDomain = () => {
|
||||
if (this.props.yAxisUnit) {
|
||||
// Taken from https://github.com/uber/react-vis/issues/609#issuecomment-330066354
|
||||
const {yMin, yMax} = this.state.data.reduce((acc, row) => ({
|
||||
const {yMin, yMax} = this.props.prometheusData.reduce((acc, row) => ({
|
||||
yMax: Math.max(acc.yMax, row.y),
|
||||
yMin: Math.min(acc.yMin, row.y),
|
||||
}), {yMin: Infinity, yMax: -Infinity});
|
||||
@@ -93,13 +75,13 @@ export default class PrometheusGraph extends Base<Props, State> {
|
||||
};
|
||||
|
||||
render() {
|
||||
if (!this.state || !this.state.data) {
|
||||
if (!this.state || !this.props.prometheusData) {
|
||||
return <div>
|
||||
{/* <span style={{fontWeight: 'bold'}}>{this.props.title}</span> */}
|
||||
<div>Pending...</div>
|
||||
</div>;
|
||||
}
|
||||
return this.state.data
|
||||
return this.state && this.props.prometheusData
|
||||
&& <div>
|
||||
{/* <div style={{fontWeight: 'bold'}}>{this.props.title}</div> */}
|
||||
<XYPlot
|
||||
@@ -113,10 +95,10 @@ export default class PrometheusGraph extends Base<Props, State> {
|
||||
<AreaSeries
|
||||
color={'#6822aa'}
|
||||
opacity={0.6}
|
||||
data={this.state.data}
|
||||
data={this.props.prometheusData}
|
||||
/>
|
||||
<LineSeries
|
||||
data={this.state.data}
|
||||
data={this.props.prometheusData}
|
||||
color={'#6822aa'}
|
||||
onNearestX={this.onNearestX}
|
||||
/>
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
import React from 'react';
|
||||
import PrometheusGraph from './prometheusgraph';
|
||||
import Base from '../components/base';
|
||||
|
||||
|
||||
type Props = {
|
||||
|
||||
}
|
||||
|
||||
type State = {
|
||||
metric: string;
|
||||
data: Map<string, Array<Array<any>>>;
|
||||
crosshairValues: [];
|
||||
}
|
||||
|
||||
export default class PrometheusGraphs extends Base<Props, State> {
|
||||
// GRAPH_QUERIES = [
|
||||
// ['instance:node_cpu:ratio', 'Node CPU Usage'],
|
||||
// ['instance:node_memory_utilisation:ratio', 'Node Memory Usage'],
|
||||
// ];
|
||||
GRAPH_QUERIES = [
|
||||
{
|
||||
queryString: 'instance:node_cpu:ratio',
|
||||
title: 'Node CPU Usage',
|
||||
},
|
||||
{
|
||||
queryString: 'instance:node_memory_utilisation:ratio',
|
||||
title: 'Node Memory Usage',
|
||||
},
|
||||
]
|
||||
|
||||
render() {
|
||||
return <div>
|
||||
{/* eslint-disable-next-line react/jsx-key */}
|
||||
{this.GRAPH_QUERIES.map(query => <PrometheusGraph
|
||||
queryString={query.queryString}
|
||||
title={query.title}
|
||||
/>)}
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user