diff options
| author | Georgios Andreadis <info@gandreadis.com> | 2020-06-29 15:47:09 +0200 |
|---|---|---|
| committer | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2020-08-24 16:08:41 +0200 |
| commit | 90fae26aa4bd0e0eb3272ff6e6524060e9004fbb (patch) | |
| tree | bf6943882f5fa5f3114c01fc571503c79ee1056d /frontend/src/api | |
| parent | 7032a007d4431f5a0c4c5e2d3f3bd20462d49950 (diff) | |
Prepare frontend repository for monorepo
This change prepares the frontend Git repository for the monorepo
residing at https://github.com/atlarge-research.com/opendc. To
accomodate for this, we move all files into a frontend subdirectory.
Diffstat (limited to 'frontend/src/api')
| -rw-r--r-- | frontend/src/api/index.js | 13 | ||||
| -rw-r--r-- | frontend/src/api/routes/datacenters.js | 26 | ||||
| -rw-r--r-- | frontend/src/api/routes/experiments.js | 33 | ||||
| -rw-r--r-- | frontend/src/api/routes/jobs.js | 5 | ||||
| -rw-r--r-- | frontend/src/api/routes/paths.js | 30 | ||||
| -rw-r--r-- | frontend/src/api/routes/room-types.js | 9 | ||||
| -rw-r--r-- | frontend/src/api/routes/rooms.js | 46 | ||||
| -rw-r--r-- | frontend/src/api/routes/schedulers.js | 5 | ||||
| -rw-r--r-- | frontend/src/api/routes/sections.js | 5 | ||||
| -rw-r--r-- | frontend/src/api/routes/simulations.js | 70 | ||||
| -rw-r--r-- | frontend/src/api/routes/specifications.js | 57 | ||||
| -rw-r--r-- | frontend/src/api/routes/tiles.js | 146 | ||||
| -rw-r--r-- | frontend/src/api/routes/token-signin.js | 7 | ||||
| -rw-r--r-- | frontend/src/api/routes/traces.js | 9 | ||||
| -rw-r--r-- | frontend/src/api/routes/users.js | 71 | ||||
| -rw-r--r-- | frontend/src/api/routes/util.js | 37 | ||||
| -rw-r--r-- | frontend/src/api/socket.js | 52 |
17 files changed, 621 insertions, 0 deletions
diff --git a/frontend/src/api/index.js b/frontend/src/api/index.js new file mode 100644 index 00000000..37c288a3 --- /dev/null +++ b/frontend/src/api/index.js @@ -0,0 +1,13 @@ +import { sendSocketRequest } from "./socket"; + +export function sendRequest(request) { + return new Promise((resolve, reject) => { + sendSocketRequest(request, response => { + if (response.status.code === 200) { + resolve(response.content); + } else { + reject(response); + } + }); + }); +} diff --git a/frontend/src/api/routes/datacenters.js b/frontend/src/api/routes/datacenters.js new file mode 100644 index 00000000..20cf4935 --- /dev/null +++ b/frontend/src/api/routes/datacenters.js @@ -0,0 +1,26 @@ +import { sendRequest } from "../index"; +import { getById } from "./util"; + +export function getDatacenter(datacenterId) { + return getById("/datacenters/{datacenterId}", { datacenterId }); +} + +export function getRoomsOfDatacenter(datacenterId) { + return getById("/datacenters/{datacenterId}/rooms", { datacenterId }); +} + +export function addRoomToDatacenter(room) { + return sendRequest({ + path: "/datacenters/{datacenterId}/rooms", + method: "POST", + parameters: { + body: { + room + }, + path: { + datacenterId: room.datacenterId + }, + query: {} + } + }); +} diff --git a/frontend/src/api/routes/experiments.js b/frontend/src/api/routes/experiments.js new file mode 100644 index 00000000..f61698c5 --- /dev/null +++ b/frontend/src/api/routes/experiments.js @@ -0,0 +1,33 @@ +import { deleteById, getById } from "./util"; + +export function getExperiment(experimentId) { + return getById("/experiments/{experimentId}", { experimentId }); +} + +export function deleteExperiment(experimentId) { + return deleteById("/experiments/{experimentId}", { experimentId }); +} + +export function getLastSimulatedTick(experimentId) { + return getById("/experiments/{experimentId}/last-simulated-tick", { + experimentId + }); +} + +export function getAllMachineStates(experimentId) { + return getById("/experiments/{experimentId}/machine-states", { + experimentId + }); +} + +export function getAllRackStates(experimentId) { + return getById("/experiments/{experimentId}/rack-states", { experimentId }); +} + +export function getAllRoomStates(experimentId) { + return getById("/experiments/{experimentId}/room-states", { experimentId }); +} + +export function getAllTaskStates(experimentId) { + return getById("/experiments/{experimentId}/task-states", { experimentId }); +} diff --git a/frontend/src/api/routes/jobs.js b/frontend/src/api/routes/jobs.js new file mode 100644 index 00000000..355acc32 --- /dev/null +++ b/frontend/src/api/routes/jobs.js @@ -0,0 +1,5 @@ +import { getById } from "./util"; + +export function getTasksOfJob(jobId) { + return getById("/jobs/{jobId}/tasks", { jobId }); +} diff --git a/frontend/src/api/routes/paths.js b/frontend/src/api/routes/paths.js new file mode 100644 index 00000000..78ef7d6e --- /dev/null +++ b/frontend/src/api/routes/paths.js @@ -0,0 +1,30 @@ +import { sendRequest } from "../index"; +import { getById } from "./util"; + +export function getPath(pathId) { + return getById("/paths/{pathId}", { pathId }); +} + +export function getBranchesOfPath(pathId) { + return getById("/paths/{pathId}/branches", { pathId }); +} + +export function branchFromPath(pathId, section) { + return sendRequest({ + path: "/paths/{pathId}/branches", + method: "POST", + parameters: { + body: { + section + }, + path: { + pathId + }, + query: {} + } + }); +} + +export function getSectionsOfPath(pathId) { + return getById("/paths/{pathId}/sections", { pathId }); +} diff --git a/frontend/src/api/routes/room-types.js b/frontend/src/api/routes/room-types.js new file mode 100644 index 00000000..8a3eac58 --- /dev/null +++ b/frontend/src/api/routes/room-types.js @@ -0,0 +1,9 @@ +import { getAll, getById } from "./util"; + +export function getAvailableRoomTypes() { + return getAll("/room-types"); +} + +export function getAllowedObjectsOfRoomType(name) { + return getById("/room-types/{name}/allowed-objects", { name }); +} diff --git a/frontend/src/api/routes/rooms.js b/frontend/src/api/routes/rooms.js new file mode 100644 index 00000000..56395d7f --- /dev/null +++ b/frontend/src/api/routes/rooms.js @@ -0,0 +1,46 @@ +import { sendRequest } from "../index"; +import { deleteById, getById } from "./util"; + +export function getRoom(roomId) { + return getById("/rooms/{roomId}", { roomId }); +} + +export function updateRoom(room) { + return sendRequest({ + path: "/rooms/{roomId}", + method: "PUT", + parameters: { + body: { + room + }, + path: { + roomId: room.id + }, + query: {} + } + }); +} + +export function deleteRoom(roomId) { + return deleteById("/rooms/{roomId}", { roomId }); +} + +export function getTilesOfRoom(roomId) { + return getById("/rooms/{roomId}/tiles", { roomId }); +} + +export function addTileToRoom(tile) { + return sendRequest({ + path: "/rooms/{roomId}/tiles", + method: "POST", + parameters: { + body: { + tile + }, + path: { + roomId: tile.roomId + }, + query: {} + } + }); +} diff --git a/frontend/src/api/routes/schedulers.js b/frontend/src/api/routes/schedulers.js new file mode 100644 index 00000000..ea360967 --- /dev/null +++ b/frontend/src/api/routes/schedulers.js @@ -0,0 +1,5 @@ +import { getAll } from "./util"; + +export function getAllSchedulers() { + return getAll("/schedulers"); +} diff --git a/frontend/src/api/routes/sections.js b/frontend/src/api/routes/sections.js new file mode 100644 index 00000000..5e1a077d --- /dev/null +++ b/frontend/src/api/routes/sections.js @@ -0,0 +1,5 @@ +import { getById } from "./util"; + +export function getSection(sectionId) { + return getById("/sections/{sectionId}", { sectionId }); +} diff --git a/frontend/src/api/routes/simulations.js b/frontend/src/api/routes/simulations.js new file mode 100644 index 00000000..dcb9ac5f --- /dev/null +++ b/frontend/src/api/routes/simulations.js @@ -0,0 +1,70 @@ +import { sendRequest } from "../index"; +import { deleteById, getById } from "./util"; + +export function getSimulation(simulationId) { + return getById("/simulations/{simulationId}", { simulationId }); +} + +export function addSimulation(simulation) { + return sendRequest({ + path: "/simulations", + method: "POST", + parameters: { + body: { + simulation + }, + path: {}, + query: {} + } + }); +} + +export function updateSimulation(simulation) { + return sendRequest({ + path: "/simulations/{simulationId}", + method: "PUT", + parameters: { + body: { + simulation + }, + path: { + simulationId: simulation.id + }, + query: {} + } + }); +} + +export function deleteSimulation(simulationId) { + return deleteById("/simulations/{simulationId}", { simulationId }); +} + +export function getAuthorizationsBySimulation(simulationId) { + return getById("/simulations/{simulationId}/authorizations", { + simulationId + }); +} + +export function getPathsOfSimulation(simulationId) { + return getById("/simulations/{simulationId}/paths", { simulationId }); +} + +export function getExperimentsOfSimulation(simulationId) { + return getById("/simulations/{simulationId}/experiments", { simulationId }); +} + +export function addExperiment(simulationId, experiment) { + return sendRequest({ + path: "/simulations/{simulationId}/experiments", + method: "POST", + parameters: { + body: { + experiment + }, + path: { + simulationId + }, + query: {} + } + }); +} diff --git a/frontend/src/api/routes/specifications.js b/frontend/src/api/routes/specifications.js new file mode 100644 index 00000000..0f60b571 --- /dev/null +++ b/frontend/src/api/routes/specifications.js @@ -0,0 +1,57 @@ +import { getAll, getById } from "./util"; + +export function getAllCoolingItems() { + return getAll("/specifications/cooling-items"); +} + +export function getCoolingItem(id) { + return getById("/specifications/cooling-items/{id}", { id }); +} + +export function getAllCPUs() { + return getAll("/specifications/cpus"); +} + +export function getCPU(id) { + return getById("/specifications/cpus/{id}", { id }); +} + +export function getAllFailureModels() { + return getAll("/specifications/failure-models"); +} + +export function getFailureModel(id) { + return getById("/specifications/failure-models/{id}", { id }); +} + +export function getAllGPUs() { + return getAll("/specifications/gpus"); +} + +export function getGPU(id) { + return getById("/specifications/gpus/{id}", { id }); +} + +export function getAllMemories() { + return getAll("/specifications/memories"); +} + +export function getMemory(id) { + return getById("/specifications/memories/{id}", { id }); +} + +export function getAllPSUs() { + return getAll("/specifications/psus"); +} + +export function getPSU(id) { + return getById("/specifications/psus/{id}", { id }); +} + +export function getAllStorages() { + return getAll("/specifications/storages"); +} + +export function getStorage(id) { + return getById("/specifications/storages/{id}", { id }); +} diff --git a/frontend/src/api/routes/tiles.js b/frontend/src/api/routes/tiles.js new file mode 100644 index 00000000..08481ef4 --- /dev/null +++ b/frontend/src/api/routes/tiles.js @@ -0,0 +1,146 @@ +import { sendRequest } from "../index"; +import { deleteById, getById } from "./util"; + +export function getTile(tileId) { + return getById("/tiles/{tileId}", { tileId }); +} + +export function deleteTile(tileId) { + return deleteById("/tiles/{tileId}", { tileId }); +} + +export function getRackByTile(tileId) { + return getTileObject(tileId, "/rack"); +} + +export function addRackToTile(tileId, rack) { + return addTileObject(tileId, { rack }, "/rack"); +} + +export function updateRackOnTile(tileId, rack) { + return updateTileObject(tileId, { rack }, "/rack"); +} + +export function deleteRackFromTile(tileId) { + return deleteTileObject(tileId, "/rack"); +} + +export function getMachinesOfRackByTile(tileId) { + return getById("/tiles/{tileId}/rack/machines", { tileId }); +} + +export function addMachineToRackOnTile(tileId, machine) { + return sendRequest({ + path: "/tiles/{tileId}/rack/machines", + method: "POST", + parameters: { + body: { + machine + }, + path: { + tileId + }, + query: {} + } + }); +} + +export function updateMachineInRackOnTile(tileId, position, machine) { + return sendRequest({ + path: "/tiles/{tileId}/rack/machines/{position}", + method: "PUT", + parameters: { + body: { + machine + }, + path: { + tileId, + position + }, + query: {} + } + }); +} + +export function deleteMachineInRackOnTile(tileId, position) { + return sendRequest({ + path: "/tiles/{tileId}/rack/machines/{position}", + method: "DELETE", + parameters: { + body: {}, + path: { + tileId, + position + }, + query: {} + } + }); +} + +export function getCoolingItemByTile(tileId) { + return getTileObject(tileId, "/cooling-item"); +} + +export function addCoolingItemToTile(tileId, coolingItemId) { + return addTileObject(tileId, { coolingItemId }, "/cooling-item"); +} + +export function updateCoolingItemOnTile(tileId, coolingItemId) { + return updateTileObject(tileId, { coolingItemId }, "/cooling-item"); +} + +export function deleteCoolingItemFromTile(tileId) { + return deleteTileObject(tileId, "/cooling-item"); +} + +export function getPSUByTile(tileId) { + return getTileObject(tileId, "/psu"); +} + +export function addPSUToTile(tileId, psuId) { + return addTileObject(tileId, { psuId }, "/psu"); +} + +export function updatePSUOnTile(tileId, psuId) { + return updateTileObject(tileId, { psuId }, "/psu"); +} + +export function deletePSUFromTile(tileId) { + return deleteTileObject(tileId, "/psu"); +} + +function getTileObject(tileId, endpoint) { + return getById("/tiles/{tileId}" + endpoint, { tileId }); +} + +function addTileObject(tileId, objectBody, endpoint) { + return sendRequest({ + path: "/tiles/{tileId}" + endpoint, + method: "POST", + parameters: { + body: objectBody, + path: { + tileId + }, + query: {} + } + }); +} + +function updateTileObject(tileId, objectBody, endpoint) { + return sendRequest({ + path: "/tiles/{tileId}" + endpoint, + method: "PUT", + parameters: { + body: objectBody, + path: { + tileId + }, + query: {} + } + }); +} + +function deleteTileObject(tileId, endpoint) { + return deleteById("/tiles/{tileId}" + endpoint, { tileId }); +} diff --git a/frontend/src/api/routes/token-signin.js b/frontend/src/api/routes/token-signin.js new file mode 100644 index 00000000..26875606 --- /dev/null +++ b/frontend/src/api/routes/token-signin.js @@ -0,0 +1,7 @@ +export function performTokenSignIn(token) { + return new Promise(resolve => { + window["jQuery"].post("/tokensignin", { idtoken: token }, data => + resolve(data) + ); + }); +} diff --git a/frontend/src/api/routes/traces.js b/frontend/src/api/routes/traces.js new file mode 100644 index 00000000..a9ee4fae --- /dev/null +++ b/frontend/src/api/routes/traces.js @@ -0,0 +1,9 @@ +import { getAll, getById } from "./util"; + +export function getAllTraces() { + return getAll("/traces"); +} + +export function getJobsOfTrace(traceId) { + return getById("/traces/{traceId}/jobs", { traceId }); +} diff --git a/frontend/src/api/routes/users.js b/frontend/src/api/routes/users.js new file mode 100644 index 00000000..f8d8039c --- /dev/null +++ b/frontend/src/api/routes/users.js @@ -0,0 +1,71 @@ +import { sendRequest } from "../index"; +import { deleteById, getById } from "./util"; + +export function getUserByEmail(email) { + return sendRequest({ + path: "/users", + method: "GET", + parameters: { + body: {}, + path: {}, + query: { + email + } + } + }); +} + +export function addUser(user) { + return sendRequest({ + path: "/users", + method: "POST", + parameters: { + body: { + user: user + }, + path: {}, + query: {} + } + }); +} + +export function getUser(userId) { + return sendRequest({ + path: "/users/{userId}", + method: "GET", + parameters: { + body: {}, + path: { + userId + }, + query: {} + } + }); +} + +export function updateUser(userId, user) { + return sendRequest({ + path: "/users/{userId}", + method: "PUT", + parameters: { + body: { + user: { + givenName: user.givenName, + familyName: user.familyName + } + }, + path: { + userId + }, + query: {} + } + }); +} + +export function deleteUser(userId) { + return deleteById("/users/{userId}", { userId }); +} + +export function getAuthorizationsByUser(userId) { + return getById("/users/{userId}/authorizations", { userId }); +} diff --git a/frontend/src/api/routes/util.js b/frontend/src/api/routes/util.js new file mode 100644 index 00000000..35a40333 --- /dev/null +++ b/frontend/src/api/routes/util.js @@ -0,0 +1,37 @@ +import { sendRequest } from "../index"; + +export function getAll(path) { + return sendRequest({ + path, + method: "GET", + parameters: { + body: {}, + path: {}, + query: {} + } + }); +} + +export function getById(path, pathObject) { + return sendRequest({ + path, + method: "GET", + parameters: { + body: {}, + path: pathObject, + query: {} + } + }); +} + +export function deleteById(path, pathObject) { + return sendRequest({ + path, + method: "DELETE", + parameters: { + body: {}, + path: pathObject, + query: {} + } + }); +} diff --git a/frontend/src/api/socket.js b/frontend/src/api/socket.js new file mode 100644 index 00000000..fadb77ad --- /dev/null +++ b/frontend/src/api/socket.js @@ -0,0 +1,52 @@ +import io from "socket.io-client"; +import { getAuthToken } from "../auth/index"; + +let socket; +let requestIdCounter = 0; +const callbacks = {}; + +export function setupSocketConnection(onConnect) { + let port = window.location.port; + if (process.env.NODE_ENV !== "production") { + port = 8081; + } + socket = io.connect( + window.location.protocol + "//" + window.location.hostname + ":" + port + ); + socket.on("connect", onConnect); + socket.on("response", onSocketResponse); +} + +export function sendSocketRequest(request, callback) { + if (!socket.connected) { + console.error("Attempted to send request over unconnected socket"); + return; + } + + const newId = requestIdCounter++; + callbacks[newId] = callback; + + request.id = newId; + request.token = getAuthToken(); + + if (!request.isRootRoute) { + request.path = "/v2" + request.path; + } + + socket.emit("request", request); + + if (process.env.NODE_ENV !== "production") { + console.log("Sent socket request:", request); + } +} + +function onSocketResponse(json) { + const response = JSON.parse(json); + + if (process.env.NODE_ENV !== "production") { + console.log("Received socket response:", response); + } + + callbacks[response.id](response); + delete callbacks[response.id]; +} |
