From 753e04aa62dd639ae477413764b973d8b6d9c591 Mon Sep 17 00:00:00 2001 From: Pierre Beitz Date: Mon, 31 Aug 2020 00:09:44 +0200 Subject: [PATCH] chore: add a mockserver there's been the idea of a mockserver for quite a while. there has also been an implementation once that has never been finished. this is a quite versatile and lightweight approach that makes use of service workers. during development (and only if CLUSTER_URL is not set) we'll load src/mocks/handlers.ts. that file contains only a couple routes for now that have been copied from cypress and sets a cookie as else we're redirected to the login-screen. generally we can get rid of the http-service mocking AND the cypress mocking with this approach. let's go there eventually. the first use case will be the implementation of "jobs with dependencies" related stuff as i don't have a metronome build around to test against. --- dist/mockServiceWorker.js | 228 +++++ package-lock.json | 258 +++++ package.json | 1 + scripts/ensureConfig.js | 10 - .../__snapshots__/tslint-test.ts.snap | 1 + .../__snapshots__/typecheck-test.ts.snap | 1 + src/js/index.tsx | 4 + src/mocks/handlers.ts | 26 + .../marathon-1-task/mesos-subscribe.json | 886 ++++++++++++++++++ webpack/proxy.dev.js | 9 - webpack/proxy.template.js | 29 - webpack/webpack.config.js | 4 +- 12 files changed, 1407 insertions(+), 50 deletions(-) create mode 100644 dist/mockServiceWorker.js create mode 100644 src/mocks/handlers.ts create mode 100644 tests/_fixtures/marathon-1-task/mesos-subscribe.json delete mode 100644 webpack/proxy.dev.js delete mode 100644 webpack/proxy.template.js diff --git a/dist/mockServiceWorker.js b/dist/mockServiceWorker.js new file mode 100644 index 0000000000..e99f059910 --- /dev/null +++ b/dist/mockServiceWorker.js @@ -0,0 +1,228 @@ +/** + * Mock Service Worker. + * @see https://github.com/mswjs/msw + * - Please do NOT modify this file. + * - Please do NOT serve this file on production. + */ +/* eslint-disable */ +/* tslint:disable */ + +const INTEGRITY_CHECKSUM = "ca2c3cd7453d8c614e2c19db63ede1a1"; +const bypassHeaderName = "x-msw-bypass"; + +let clients = {}; + +self.addEventListener("install", function () { + return self.skipWaiting(); +}); + +self.addEventListener("activate", async function (event) { + return self.clients.claim(); +}); + +self.addEventListener("message", async function (event) { + const clientId = event.source.id; + const client = await event.currentTarget.clients.get(clientId); + const allClients = await self.clients.matchAll(); + const allClientIds = allClients.map((client) => client.id); + + switch (event.data) { + case "INTEGRITY_CHECK_REQUEST": { + sendToClient(client, { + type: "INTEGRITY_CHECK_RESPONSE", + payload: INTEGRITY_CHECKSUM, + }); + break; + } + + case "MOCK_ACTIVATE": { + clients = ensureKeys(allClientIds, clients); + clients[clientId] = true; + + sendToClient(client, { + type: "MOCKING_ENABLED", + payload: true, + }); + break; + } + + case "MOCK_DEACTIVATE": { + clients = ensureKeys(allClientIds, clients); + clients[clientId] = false; + break; + } + + case "CLIENT_CLOSED": { + const remainingClients = allClients.filter((client) => { + return client.id !== clientId; + }); + + // Unregister itself when there are no more clients + if (remainingClients.length === 0) { + self.registration.unregister(); + } + + break; + } + } +}); + +self.addEventListener("fetch", async function (event) { + const { clientId, request } = event; + const requestClone = request.clone(); + const getOriginalResponse = () => fetch(requestClone); + + // Opening the DevTools triggers the "only-if-cached" request + // that cannot be handled by the worker. Bypass such requests. + if (request.cache === "only-if-cached" && request.mode !== "same-origin") { + return; + } + + event.respondWith( + new Promise(async (resolve, reject) => { + const client = await event.target.clients.get(clientId); + + if ( + // Bypass mocking when no clients active + !client || + // Bypass mocking if the current client has mocking disabled + !clients[clientId] || + // Bypass mocking for navigation requests + request.mode === "navigate" + ) { + return resolve(getOriginalResponse()); + } + + // Bypass requests with the explicit bypass header + if (requestClone.headers.get(bypassHeaderName) === "true") { + const modifiedHeaders = serializeHeaders(requestClone.headers); + // Remove the bypass header to comply with the CORS preflight check + delete modifiedHeaders[bypassHeaderName]; + + const originalRequest = new Request(requestClone, { + headers: new Headers(modifiedHeaders), + }); + + return resolve(fetch(originalRequest)); + } + + const reqHeaders = serializeHeaders(request.headers); + const body = await request.text(); + + const rawClientMessage = await sendToClient(client, { + type: "REQUEST", + payload: { + url: request.url, + method: request.method, + headers: reqHeaders, + cache: request.cache, + mode: request.mode, + credentials: request.credentials, + destination: request.destination, + integrity: request.integrity, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + body, + bodyUsed: request.bodyUsed, + keepalive: request.keepalive, + }, + }); + + const clientMessage = rawClientMessage; + + switch (clientMessage.type) { + case "MOCK_SUCCESS": { + setTimeout( + resolve.bind(this, createResponse(clientMessage)), + clientMessage.payload.delay + ); + break; + } + + case "MOCK_NOT_FOUND": { + return resolve(getOriginalResponse()); + } + + case "NETWORK_ERROR": { + const { name, message } = clientMessage.payload; + const networkError = new Error(message); + networkError.name = name; + + // Rejecting a request Promise emulates a network error. + return reject(networkError); + } + + case "INTERNAL_ERROR": { + const parsedBody = JSON.parse(clientMessage.payload.body); + + console.error( + `\ +[MSW] Request handler function for "%s %s" has thrown the following exception: + +${parsedBody.errorType}: ${parsedBody.message} +(see more detailed error stack trace in the mocked response body) + +This exception has been gracefully handled as a 500 response, however, it's strongly recommended to resolve this error. +If you wish to mock an error response, please refer to this guide: https://mswjs.io/docs/recipes/mocking-error-responses\ + `, + request.method, + request.url + ); + + return resolve(createResponse(clientMessage)); + } + } + }).catch((error) => { + console.error( + '[MSW] Failed to mock a "%s" request to "%s": %s', + request.method, + request.url, + error + ); + }) + ); +}); + +function serializeHeaders(headers) { + const reqHeaders = {}; + headers.forEach((value, name) => { + reqHeaders[name] = reqHeaders[name] + ? [].concat(reqHeaders[name]).concat(value) + : value; + }); + return reqHeaders; +} + +function sendToClient(client, message) { + return new Promise((resolve, reject) => { + const channel = new MessageChannel(); + + channel.port1.onmessage = (event) => { + if (event.data && event.data.error) { + reject(event.data.error); + } else { + resolve(event.data); + } + }; + + client.postMessage(JSON.stringify(message), [channel.port2]); + }); +} + +function createResponse(clientMessage) { + return new Response(clientMessage.payload.body, { + ...clientMessage.payload, + headers: clientMessage.payload.headers, + }); +} + +function ensureKeys(keys, obj) { + return Object.keys(obj).reduce((acc, key) => { + if (keys.includes(key)) { + acc[key] = obj[key]; + } + + return acc; + }, {}); +} diff --git a/package-lock.json b/package-lock.json index 1cfa296798..6929dbc128 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4511,6 +4511,12 @@ "@types/node": ">= 8" } }, + "@open-draft/until": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-1.0.3.tgz", + "integrity": "sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==", + "dev": true + }, "@popperjs/core": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.4.0.tgz", @@ -5107,6 +5113,12 @@ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", "dev": true }, + "@types/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==", + "dev": true + }, "@types/events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", @@ -16249,6 +16261,12 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, + "headers-utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/headers-utils/-/headers-utils-1.2.0.tgz", + "integrity": "sha512-4/BMXcWrJErw7JpM87gF8MNEXcIMLzepYZjNRv/P9ctgupl2Ywa3u1PgHtNhSRq84bHH9Ndlkdy7bSi+bZ9I9A==", + "dev": true + }, "history": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/history/-/history-3.3.0.tgz", @@ -25362,6 +25380,229 @@ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, + "msw": { + "version": "0.20.5", + "resolved": "https://registry.npmjs.org/msw/-/msw-0.20.5.tgz", + "integrity": "sha512-hmEsey5BbVicMGt7aOh/GZ9ltga5N3tK6NiJXnbfCkAGKgnAVnjASr3i7Z+sWlZyY5uuMUFyLCEcqrlXxC6qIA==", + "dev": true, + "requires": { + "@open-draft/until": "^1.0.3", + "@types/cookie": "^0.4.0", + "chalk": "^4.1.0", + "cookie": "^0.4.1", + "graphql": "^15.3.0", + "headers-utils": "^1.2.0", + "node-fetch": "^2.6.0", + "node-match-path": "^0.4.4", + "node-request-interceptor": "^0.3.5", + "statuses": "^2.0.0", + "yargs": "^15.4.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "graphql": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.3.0.tgz", + "integrity": "sha512-GTCJtzJmkFLWRfFJuoo9RWWa/FfamUHgiFosxi/X1Ani4AVWbeyBenZTNX6dM+7WSbbFfTo/25eh0LLkwHMw2w==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "statuses": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.0.tgz", + "integrity": "sha512-w9jNUUQdpuVoYqXxnyOakhckBbOxRaoYqJscyIBYCS5ixyCnO7nQn7zBZvP9zf5QOPZcz2DLUpE3KsNPbJBOFA==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + } + } + }, "multicast-dns": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", @@ -25693,6 +25934,12 @@ } } }, + "node-match-path": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/node-match-path/-/node-match-path-0.4.4.tgz", + "integrity": "sha512-pBq9gp7TG0r0VXuy/oeZmQsjBSnYQo7G886Ly/B3azRwZuEtHCY155dzmfoKWcDPGgyfIGD8WKVC7h3+6y7yTg==", + "dev": true + }, "node-modules-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", @@ -25749,6 +25996,17 @@ "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", "dev": true }, + "node-request-interceptor": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/node-request-interceptor/-/node-request-interceptor-0.3.6.tgz", + "integrity": "sha512-pN8Tt43XuLamN+bspAZ9tEMGDp1bOfaxluYop1/qmNRQmM5BOelFqr4jRvARD6y/7iuhLjOEjMQgy5HweXN7Kg==", + "dev": true, + "requires": { + "@open-draft/until": "^1.0.3", + "debug": "^4.1.1", + "headers-utils": "^1.2.0" + } + }, "nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", diff --git a/package.json b/package.json index d88d4414bc..73e03f030e 100644 --- a/package.json +++ b/package.json @@ -140,6 +140,7 @@ "localStorage": "1.0.4", "marked": "1.1.1", "mini-css-extract-plugin": "0.11.0", + "msw": "0.20.5", "node": "10.22.0", "postcss": "7.0.32", "postcss-loader": "3.0.0", diff --git a/scripts/ensureConfig.js b/scripts/ensureConfig.js index db9030db3f..5aed9df00b 100644 --- a/scripts/ensureConfig.js +++ b/scripts/ensureConfig.js @@ -9,13 +9,3 @@ if (!fs.existsSync(configFilePath)) { "utf8" ); } - -// Create a proxy.dev to make getting started easier -const proxyFilePath = "./webpack/proxy.dev.js"; -if (!fs.existsSync(proxyFilePath)) { - fs.writeFileSync( - proxyFilePath, - fs.readFileSync("./webpack/proxy.template.js", "utf8"), - "utf8" - ); -} diff --git a/src/js/__tests__/__snapshots__/tslint-test.ts.snap b/src/js/__tests__/__snapshots__/tslint-test.ts.snap index 3273c5eaa2..95980372f2 100644 --- a/src/js/__tests__/__snapshots__/tslint-test.ts.snap +++ b/src/js/__tests__/__snapshots__/tslint-test.ts.snap @@ -527,6 +527,7 @@ exports[`tslint snapshot should be up to date 1`] = ` /src/js/index.tsx - non-arrow functions are forbidden /src/js/index.tsx - require statement not part of an import statement /src/js/index.tsx - require statement not part of an import statement +/src/js/index.tsx - require statement not part of an import statement /src/js/pages/catalog/PackageDetailTab.tsx - Lambdas are forbidden in JSX attributes due to their rendering performance impact /src/js/pages/catalog/PackageDetailTab.tsx - Shadowed name: 'dependency' /src/js/pages/catalog/PackageDetailTab.tsx - don't declare variable item to return it immediately diff --git a/src/js/__tests__/__snapshots__/typecheck-test.ts.snap b/src/js/__tests__/__snapshots__/typecheck-test.ts.snap index 87ef8bec88..2ed0e2eb0f 100644 --- a/src/js/__tests__/__snapshots__/typecheck-test.ts.snap +++ b/src/js/__tests__/__snapshots__/typecheck-test.ts.snap @@ -6079,6 +6079,7 @@ src/js/stores/__mocks__/MesosSummaryStore.ts: error TS2571: Object is of type 'u src/js/stores/__mocks__/UserSettingsStore.ts: error TS2571: Object is of type 'unknown'. src/js/stores/__tests__/AuthStore-test.ts: error TS2740: type * is missing the following properties from type 'Document': URL, alinkColor, all, anchors, and 237 more. src/js/stores/__tests__/AuthStore-test.ts: error TS2339: Property 'calls' does not exist on type *. +src/js/stores/__tests__/AuthStore-test.ts: error TS2339: Property 'calls' does not exist on type *. src/js/stores/__tests__/CosmosPackagesStore-test.ts: error TS2531: Object is possibly 'null'. src/js/stores/__tests__/CosmosPackagesStore-test.ts: error TS2531: Object is possibly 'null'. src/js/stores/__tests__/CosmosPackagesStore-test.ts: error TS2531: Object is possibly 'null'. diff --git a/src/js/index.tsx b/src/js/index.tsx index 526754d4c5..9f49521417 100644 --- a/src/js/index.tsx +++ b/src/js/index.tsx @@ -28,6 +28,10 @@ import NavigationServiceUtil from "./utils/NavigationServiceUtil"; import RequestErrorMsg from "./components/RequestErrorMsg"; import RouterUtil from "./utils/RouterUtil"; +if (process.env.NODE_ENV !== "production" && !process.env.CLUSTER_URL) { + require("../mocks/handlers"); +} + const productIconSprite = require("!svg-inline-loader!@dcos/ui-kit/dist/packages/icons/dist/product-icons-sprite.svg"); const systemIconSprite = require("!svg-inline-loader!@dcos/ui-kit/dist/packages/icons/dist/system-icons-sprite.svg"); diff --git a/src/mocks/handlers.ts b/src/mocks/handlers.ts new file mode 100644 index 0000000000..77b46b4556 --- /dev/null +++ b/src/mocks/handlers.ts @@ -0,0 +1,26 @@ +import { setupWorker, rest } from "msw"; + +const fx_ = (name) => require(`../../tests/_fixtures/${name}.json`); +const fx = (name) => (_, res, ctx) => res(ctx.json(fx_(name))); + +setupWorker( + rest.get("/dcos-metadata/ui-config.json", fx("config/no-plugins")), + rest.get("/dcos-metadata/dcos-version.json", fx("dcos/dcos-version")), + rest.post(/mesos\/api\/v1/, (req, res, ctx) => { + const mesosMap = { + subscribe: "marathon-1-task/mesos-subscribe", + GET_MASTER: "marathon-1-task/mesos-get-master", + GET_VERSION: "v1/get-version", + // @ts-ignore + }[[...req.url.searchParams.keys()][0]]; + return res(ctx.json(fx_(mesosMap))); + }), + rest.get("/mesos/master/state-summary", fx("marathon-1-task/summary")), + rest.get("/metadata", fx("dcos/metadata")), + rest.get("/navstar/lashup/key", (_, res, ctx) => res(ctx.json({}))), + rest.get("/service/metronome/v1/jobs", fx("metronome/jobs")) +).start(); + +document.cookie = + "dcos-acs-info-cookie=eyJ1aWQiOiJ1aS1ib3QiLCJkZXNjcmlwdGlvbiI6IlVJIEF1dG9tYXRlZCBUZXN0IEJvdCJ9Cg=="; // {"uid":"ui-bot","description":"UI Automated Test Bot"} +// "dcos-acs-info-cookie=eyJ1aWQiOiJ1aS1ib3QiLCJkZXNjcmlwdGlvbiI6IlVJIEF1dG9tYXRlZCBUZXN0IEJvdCIsImlzX3JlbW90ZSI6dHJ1ZX0K" // {"uid":"ui-bot","description":"UI Automated Test Bot","is_remote":true} diff --git a/tests/_fixtures/marathon-1-task/mesos-subscribe.json b/tests/_fixtures/marathon-1-task/mesos-subscribe.json new file mode 100644 index 0000000000..403684f567 --- /dev/null +++ b/tests/_fixtures/marathon-1-task/mesos-subscribe.json @@ -0,0 +1,886 @@ +{ + "type": "SUBSCRIBED", + "subscribed": { + "get_state": { + "get_executors": {}, + "get_frameworks": { + "frameworks": [ + { + "active": true, + "checkpoint": true, + "failover_timeout": 604800, + "hostname": "dcos-01", + "framework_info": { + "id": { "value": "20150827-210452-1695027628-5050-1445-0000" } + }, + "name": "marathon", + "offered_resources": { "cpus": 0, "disk": 0, "mem": 0 }, + "offers": [], + "pid": "scheduler-88e0ffb7-5d54-4bc4-984b-e546d4b1ebb1@172.17.8.101:47277", + "registered_time": 1443995290.94997, + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "role": "slave_public", + "unregistered_time": 0, + "used_resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "user": "root", + "webui_url": "http://$($MESOS_IP_DISCOVERY_COMMAND):8080" + } + ] + }, + "get_tasks": { + "tasks": [ + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-3b430455-6986-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1443846094.6048 }, + { "state": "TASK_FINISHED", "timestamp": 1443996197.14069 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-b7fd2856-6ae3-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1443996198.21829 }, + { "state": "TASK_FINISHED", "timestamp": 1443999198.2245 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-b4b0b847-6aea-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1443999199.15845 }, + { "state": "TASK_FINISHED", "timestamp": 1444002199.18058 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-b0f29aa8-6af1-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444002199.3564 }, + { "state": "TASK_FINISHED", "timestamp": 1444005199.3805 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-ad30ac79-6af8-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444005199.53381 }, + { "state": "TASK_FINISHED", "timestamp": 1444008199.60506 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-a9ce918a-6aff-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444008200.33441 }, + { "state": "TASK_FINISHED", "timestamp": 1444011200.42012 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-a6489aeb-6b06-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444011200.89914 }, + { "state": "TASK_FINISHED", "timestamp": 1444014200.97995 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-a30f3dac-6b0d-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444014201.96757 }, + { "state": "TASK_FINISHED", "timestamp": 1444017201.99879 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-9f6ff2ad-6b14-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444017202.36779 }, + { "state": "TASK_FINISHED", "timestamp": 1444020202.4466 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-9c0b189e-6b1b-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444020203.14604 }, + { "state": "TASK_FINISHED", "timestamp": 1444023203.21804 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-98a2e32f-6b22-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444023203.91109 }, + { "state": "TASK_FINISHED", "timestamp": 1444026203.9707 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-9566c6d0-6b29-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444026204.96326 }, + { "state": "TASK_FINISHED", "timestamp": 1444029204.97044 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-91c88d41-6b30-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444029205.36863 }, + { "state": "TASK_FINISHED", "timestamp": 1444032205.46451 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-8e505242-6b37-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444032206.02287 }, + { "state": "TASK_FINISHED", "timestamp": 1444035206.10147 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-8b0e1b63-6b3e-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444035207.03334 }, + { "state": "TASK_FINISHED", "timestamp": 1444038207.10142 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-87d22614-6b45-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444038208.08709 }, + { "state": "TASK_FINISHED", "timestamp": 1444041208.14045 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-843c9f15-6b4c-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444041208.54866 }, + { "state": "TASK_FINISHED", "timestamp": 1444044208.57445 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-81025776-6b53-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444044209.61482 }, + { "state": "TASK_FINISHED", "timestamp": 1444047209.64726 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-7dcddc37-6b5a-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444047210.71503 }, + { "state": "TASK_FINISHED", "timestamp": 1444050210.77893 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-7a315058-6b61-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444050211.12949 }, + { "state": "TASK_FINISHED", "timestamp": 1444053211.20732 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-76f33829-6b68-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444053212.16655 }, + { "state": "TASK_FINISHED", "timestamp": 1444056212.25805 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-73c880ea-6b6f-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_FINISHED", + "statuses": [ + { "state": "TASK_RUNNING", "timestamp": 1444056213.33406 }, + { "state": "TASK_FINISHED", "timestamp": 1444059213.41515 } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-7084272b-6b76-11e5-a953-08002719334a._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "state": "TASK_RUNNING", + "statuses": [ + { + "state": "TASK_RUNNING", + "timestamp": 1444059214.32713, + "container_status": { + "container_id": { + "value": "2f6cd6c5-cc11-4ea6-adbe-a4f02439d9d2" + }, + "network_infos": [ + { + "labels": [{ "key": "DCOS_SPACE", "value": "/sleep" }], + "ip_addresses": [ + { "protocol": "IPv4", "ip_address": "9.0.2.34" } + ], + "name": "dcos-1" + } + ] + } + } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-7084272b-6b76-11e5-a953-08002719334b._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.5 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S1" }, + "state": "TASK_RUNNING", + "statuses": [ + { + "state": "TASK_RUNNING", + "timestamp": 1444059214.32713, + "container_status": { + "container_id": { + "value": "2f6cd6c5-cc11-4ea6-adbe-a4f02439d9d2" + }, + "network_infos": [ + { + "labels": [{ "key": "DCOS_SPACE", "value": "/sleep" }], + "ip_addresses": [ + { "protocol": "IPv4", "ip_address": "9.0.2.34" } + ], + "name": "dcos-1" + } + ] + } + } + ] + }, + { + "executor_id": { "value": "" }, + "framework_id": { + "value": "20150827-210452-1695027628-5050-1445-0000" + }, + "task_id": { + "value": "sleep.instance-7084272b-6b76-11e5-a953-08002719334c._app.1" + }, + "labels": [], + "name": "sleep", + "resources": [ + { "name": "cpus", "type": "SCALAR", "scalar": { "value": 0.1 } }, + { "name": "disk", "type": "SCALAR", "scalar": { "value": 0 } }, + { "name": "mem", "type": "SCALAR", "scalar": { "value": 16 } }, + { + "name": "ports", + "type": "RANGES", + "ranges": { "range": "[10000-10000]" } + } + ], + "agent_id": { "value": "20151002-000353-1695027628-5050-1177-S2" }, + "state": "TASK_RUNNING", + "statuses": [ + { + "state": "TASK_RUNNING", + "timestamp": 1444059214.32713, + "container_status": { + "container_id": { + "value": "2f6cd6c5-cc11-4ea6-adbe-a4f02439d9d2" + }, + "network_infos": [ + { + "labels": [{ "key": "DCOS_SPACE", "value": "/sleep" }], + "ip_addresses": [ + { "protocol": "IPv4", "ip_address": "9.0.2.34" } + ], + "name": "dcos-1" + } + ] + } + } + ] + } + ] + }, + "get_agents": { + "agents": [ + { + "active": true, + "attributes": {}, + "hostname": "dcos-01", + "id": { "value": "20151002-000353-1695027628-5050-1177-S0" }, + "offered_resources": { "cpus": 0, "disk": 0, "mem": 0 }, + "domain": { + "fault_domain": { + "region": { "name": "eu-central-1" }, + "zone": { "name": "eu-central-1c" } + } + }, + "pid": "slave(1)@172.17.8.101:5051", + "registered_time": 1443995289.19971, + "reregistered_time": 1443995289.19981, + "reserved_resources": {}, + "resources": { + "cpus": 4, + "disk": 10823, + "mem": 2933, + "ports": "[1025-2180, 2182-3887, 3889-5049, 5052-8079, 8082-8180, 8182-32000]" + }, + "unreserved_resources": { + "cpus": 4, + "disk": 10823, + "mem": 2933, + "ports": "[1025-2180, 2182-3887, 3889-5049, 5052-8079, 8082-8180, 8182-32000]" + }, + "used_resources": { + "cpus": 0.1, + "disk": 0, + "mem": 16, + "ports": "[10000-10000]" + } + }, + { + "active": true, + "attributes": {}, + "hostname": "dcos-02", + "id": { "value": "20151002-000353-1695027628-5050-1177-S1" }, + "offered_resources": { "cpus": 0, "disk": 0, "mem": 0 }, + "domain": { + "fault_domain": { + "region": { "name": "eu-central-1" }, + "zone": { "name": "eu-central-1b" } + } + }, + "pid": "slave(1)@172.17.8.101:5051", + "registered_time": 1443995289.19971, + "reregistered_time": 1443995289.19981, + "reserved_resources": {}, + "resources": { + "cpus": 4, + "disk": 10823, + "mem": 2933, + "ports": "[1025-2180, 2182-3887, 3889-5049, 5052-8079, 8082-8180, 8182-32000]" + }, + "unreserved_resources": { + "cpus": 4, + "disk": 10823, + "mem": 2933, + "ports": "[1025-2180, 2182-3887, 3889-5049, 5052-8079, 8082-8180, 8182-32000]" + }, + "used_resources": { + "cpus": 0.1, + "disk": 0, + "mem": 16, + "ports": "[10000-10000]" + } + }, + { + "active": true, + "attributes": {}, + "hostname": "dcos-03", + "id": { "value": "20151002-000353-1695027628-5050-1177-S2" }, + "offered_resources": { "cpus": 0, "disk": 0, "mem": 0 }, + "domain": { + "fault_domain": { + "region": { "name": "ap-northeast-1" }, + "zone": { "name": "ap-northeast-1a" } + } + }, + "pid": "slave(1)@172.17.8.101:5051", + "registered_time": 1443995289.19971, + "reregistered_time": 1443995289.19981, + "reserved_resources": {}, + "resources": { + "cpus": 4, + "disk": 10823, + "mem": 2933, + "ports": "[1025-2180, 2182-3887, 3889-5049, 5052-8079, 8082-8180, 8182-32000]" + }, + "unreserved_resources": { + "cpus": 4, + "disk": 10823, + "mem": 2933, + "ports": "[1025-2180, 2182-3887, 3889-5049, 5052-8079, 8082-8180, 8182-32000]" + }, + "used_resources": { + "cpus": 0.1, + "disk": 0, + "mem": 16, + "ports": "[10000-10000]" + } + } + ] + } + } + } +} diff --git a/webpack/proxy.dev.js b/webpack/proxy.dev.js deleted file mode 100644 index 684e8efed6..0000000000 --- a/webpack/proxy.dev.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Set proxy options - */ -module.exports = { - "*": { - target: process.env.CLUSTER_URL, - secure: false, - }, -}; diff --git a/webpack/proxy.template.js b/webpack/proxy.template.js deleted file mode 100644 index b3debc5d34..0000000000 --- a/webpack/proxy.template.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - Set proxy options - */ -module.exports = { - /* - * Develop on the mesos ui with dcos ui - * - * 1. Uncomment the following section - * 2. Clone the mesos repository referenced in the mesos package locally: - * https://github.com/dcos/dcos/blob/master/packages/mesos/buildinfo.json#L6 - * 3. Checkout the branch referenced in the mesos package: - * https://github.com/dcos/dcos/blob/master/packages/mesos/buildinfo.json#L8 - * 4. Navigate to src/webui/master and run 'python -m SimpleHTTPServer' to - * host that folder on localhost:8000 (target should point to this host) - * 5. Restart the docs-ui server and when navigating to /mesos you should see - * your local ui - */ - // '/mesos/static/*': { - // target: 'http://127.0.0.1:8000', - // rewrite: function (req) { - // // Remove '/mesos' from the beginning of the url - // req.url = req.url.replace(/^\/mesos/, ''); - // } - // }, - "*": { - target: process.env.CLUSTER_URL, - secure: false, - }, -}; diff --git a/webpack/webpack.config.js b/webpack/webpack.config.js index e8a0d53234..11ceb8e09c 100644 --- a/webpack/webpack.config.js +++ b/webpack/webpack.config.js @@ -7,7 +7,7 @@ const devServer = { open: false, overlay: true, port: 4200, - proxy: require("./proxy.dev.js"), + proxy: { "*": { target: process.env.CLUSTER_URL, secure: false } }, }; if (process.env.NODE_ENV === "testing") { @@ -64,7 +64,7 @@ module.exports = { fs: "empty", // Jison-generated files fail otherwise }, plugins: [ - new EnvironmentPlugin(["NODE_ENV"]), + new EnvironmentPlugin(["CLUSTER_URL", "NODE_ENV"]), new DefinePlugin({ "process.env.LATER_COV": false, // prettycron fails otherwise }),