diff options
| author | Georgios Andreadis <g.andreadis@student.tudelft.nl> | 2017-08-25 17:48:12 +0200 |
|---|---|---|
| committer | Georgios Andreadis <g.andreadis@student.tudelft.nl> | 2017-09-23 10:05:44 +0200 |
| commit | c47a27b826f7d76410308a4151611a366f9eaf46 (patch) | |
| tree | c1ca374204714cedabcacb8620848b903a0bf8d6 /src/sagas/objects.js | |
| parent | 1ddbbd3563af77a218020021ea50a8832900b4db (diff) | |
Fetch and display datacenter topology
Diffstat (limited to 'src/sagas/objects.js')
| -rw-r--r-- | src/sagas/objects.js | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/src/sagas/objects.js b/src/sagas/objects.js new file mode 100644 index 00000000..5fac6c3e --- /dev/null +++ b/src/sagas/objects.js @@ -0,0 +1,109 @@ +import {call, put, select} from "redux-saga/effects"; +import {addToStore} from "../actions/objects"; +import {getDatacenter, getRoomsOfDatacenter} from "../api/routes/datacenters"; +import {getPath, getSectionsOfPath} from "../api/routes/paths"; +import {getTilesOfRoom} from "../api/routes/rooms"; +import {getSection} from "../api/routes/sections"; +import {getPathsOfSimulation, getSimulation} from "../api/routes/simulations"; +import { + getCoolingItem, + getCPU, + getFailureModel, + getGPU, + getMemory, + getPSU, + getStorage +} from "../api/routes/specifications"; +import {getMachinesOfRackByTile, getRackByTile} from "../api/routes/tiles"; +import {getUser} from "../api/routes/users"; + +export const OBJECT_SELECTORS = { + simulation: state => state.objects.simulation, + user: state => state.objects.user, + authorization: state => state.objects.authorization, + failureModel: state => state.objects.failureModel, + cpu: state => state.objects.cpu, + gpu: state => state.objects.gpu, + memory: state => state.objects.memory, + storage: state => state.objects.storage, + machine: state => state.objects.machine, + rack: state => state.objects.rack, + coolingItem: state => state.objects.coolingItem, + psu: state => state.objects.psu, + tile: state => state.objects.tile, + room: state => state.objects.room, + datacenter: state => state.objects.datacenter, + section: state => state.objects.section, + path: state => state.objects.path, +}; + +function* fetchAndStoreObject(objectType, id, apiCall) { + const objectStore = yield select(OBJECT_SELECTORS[objectType]); + if (!objectStore[id]) { + const object = yield apiCall; + yield put(addToStore(objectType, object)); + } + return objectStore[id]; +} + +function* fetchAndStoreObjects(objectType, apiCall) { + const objects = yield apiCall; + for (let index in objects) { + yield put(addToStore(objectType, objects[index])); + } + return objects; +} + +export const fetchAndStoreSimulation = (id) => + fetchAndStoreObject("simulation", id, call(getSimulation, id)); + +export const fetchAndStoreUser = (id) => + fetchAndStoreObject("user", id, call(getUser, id)); + +export const fetchAndStoreFailureModel = (id) => + fetchAndStoreObject("failureModel", id, call(getFailureModel, id)); + +export const fetchAndStoreCPU = (id) => + fetchAndStoreObject("cpu", id, call(getCPU, id)); + +export const fetchAndStoreGPU = (id) => + fetchAndStoreObject("gpu", id, call(getGPU, id)); + +export const fetchAndStoreMemory = (id) => + fetchAndStoreObject("memory", id, call(getMemory, id)); + +export const fetchAndStoreStorage = (id) => + fetchAndStoreObject("storage", id, call(getStorage, id)); + +export const fetchAndStoreMachinesOfTile = (tileId) => + fetchAndStoreObjects("machine", call(getMachinesOfRackByTile, tileId)); + +export const fetchAndStoreRackOnTile = (id, tileId) => + fetchAndStoreObject("rack", id, call(getRackByTile, tileId)); + +export const fetchAndStoreCoolingItem = (id) => + fetchAndStoreObject("coolingItem", id, call(getCoolingItem, id)); + +export const fetchAndStorePSU = (id) => + fetchAndStoreObject("psu", id, call(getPSU, id)); + +export const fetchAndStoreTilesOfRoom = (roomId) => + fetchAndStoreObjects("tile", call(getTilesOfRoom, roomId)); + +export const fetchAndStoreRoomsOfDatacenter = (datacenterId) => + fetchAndStoreObjects("room", call(getRoomsOfDatacenter, datacenterId)); + +export const fetchAndStoreDatacenter = (id) => + fetchAndStoreObject("datacenter", id, call(getDatacenter, id)); + +export const fetchAndStoreSection = (id) => + fetchAndStoreObject("section", id, call(getSection, id)); + +export const fetchAndStoreSectionsOfPath = (pathId) => + fetchAndStoreObjects("section", call(getSectionsOfPath, pathId)); + +export const fetchAndStorePath = (id) => + fetchAndStoreObject("path", id, call(getPath, id)); + +export const fetchAndStorePathsOfSimulation = (simulationId) => + fetchAndStoreObjects("path", call(getPathsOfSimulation, simulationId)); |
