diff --git a/client/package-lock.json b/client/package-lock.json index b985b37..0194f53 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -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" diff --git a/client/src/components/menu.tsx b/client/src/components/menu.tsx index 698e694..a065d16 100644 --- a/client/src/components/menu.tsx +++ b/client/src/components/menu.tsx @@ -62,10 +62,6 @@ export default class Menu extends Base { {canView(rules, api.namespace) && ( )} - - {canView(rules, api.namespace) && ( - - )} {/* Workloads */} diff --git a/client/src/components/nodeStatusChart.tsx b/client/src/components/nodeStatusChart.tsx index 93663f1..2293994 100644 --- a/client/src/components/nodeStatusChart.tsx +++ b/client/src/components/nodeStatusChart.tsx @@ -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 (
- {items ? ( + {prometheusData.length ? ( + ) : items ? ( + ) : ( )} @@ -27,3 +46,10 @@ export default function NodeStatusChart({items}: {items?: Node[]}) {
); } + +function getReadyStatus({status}: Node) { + if (!status.conditions) return null; + + const ready = status.conditions.find(y => y.type === 'Ready'); + return ready && ready.status; +} diff --git a/client/src/components/podCpuChart.tsx b/client/src/components/podCpuChart.tsx index 722b3fb..cefab79 100644 --- a/client/src/components/podCpuChart.tsx +++ b/client/src/components/podCpuChart.tsx @@ -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}) { 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 (
- {totals ? ( - // + {prometheusData ? ( + ) : totals ? ( + ) : ( diff --git a/client/src/components/podRamChart.tsx b/client/src/components/podRamChart.tsx index f9fe6f7..c9194cc 100644 --- a/client/src/components/podRamChart.tsx +++ b/client/src/components/podRamChart.tsx @@ -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}) { 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 (
- {totals ? ( + {prometheusData ? ( + ) : totals ? ( + ) : ( diff --git a/client/src/components/podStatusChart.tsx b/client/src/components/podStatusChart.tsx index fb667e4..0210637 100644 --- a/client/src/components/podStatusChart.tsx +++ b/client/src/components/podStatusChart.tsx @@ -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 (
{ - prometheusConnected ? ( + prometheusData ? ( ) : items && available ? ( diff --git a/client/src/router.tsx b/client/src/router.tsx index 6192ba2..0f79f10 100644 --- a/client/src/router.tsx +++ b/client/src/router.tsx @@ -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', () => ); // @ts-ignore registerRoute('storageclass/:name', params => ); registerRoute('workload', () => ); - -registerRoute('prometheusgraphs', () => ); // @ts-ignore registerRoute('workload/cronjob/:namespace/:name', params => ); // @ts-ignore diff --git a/client/src/services/api.ts b/client/src/services/api.ts index 64ab130..b354d5e 100644 --- a/client/src/services/api.ts +++ b/client/src/services/api.ts @@ -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 = (data: T) => void; type MetricsCallback = DataCallback; @@ -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 = 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; diff --git a/client/src/views/prometheusgraph.tsx b/client/src/views/prometheusgraph.tsx index 60c117a..63d73b2 100644 --- a/client/src/views/prometheusgraph.tsx +++ b/client/src/views/prometheusgraph.tsx @@ -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; } type State = { - metric: string; - data: Array; crosshairValues: any[]; } @@ -42,34 +41,17 @@ export default class PrometheusGraph extends Base { }; componentDidMount() { - const url = `${BASE_HTTP_URL}/api/v1/query_range`; this.setState((prevState => ({ ...prevState, - data: new Array(), + 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 = 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 { }; render() { - if (!this.state || !this.state.data) { + if (!this.state || !this.props.prometheusData) { return
{/* {this.props.title} */}
Pending...
; } - return this.state.data + return this.state && this.props.prometheusData &&
{/*
{this.props.title}
*/} { diff --git a/client/src/views/prometheusgraphs.tsx b/client/src/views/prometheusgraphs.tsx deleted file mode 100644 index 396d59e..0000000 --- a/client/src/views/prometheusgraphs.tsx +++ /dev/null @@ -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>>; - crosshairValues: []; -} - -export default class PrometheusGraphs extends Base { - // 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
- {/* eslint-disable-next-line react/jsx-key */} - {this.GRAPH_QUERIES.map(query => )} -
; - } -}