summaryrefslogtreecommitdiff
path: root/frontend/src/sagas/objects.js
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/sagas/objects.js')
-rw-r--r--frontend/src/sagas/objects.js140
1 files changed, 140 insertions, 0 deletions
diff --git a/frontend/src/sagas/objects.js b/frontend/src/sagas/objects.js
new file mode 100644
index 00000000..3cfd43a6
--- /dev/null
+++ b/frontend/src/sagas/objects.js
@@ -0,0 +1,140 @@
+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 { getAllSchedulers } from "../api/routes/schedulers";
+import { getSection } from "../api/routes/sections";
+import { getPathsOfSimulation, getSimulation } from "../api/routes/simulations";
+import {
+ getAllCPUs,
+ getAllGPUs,
+ getAllMemories,
+ getAllStorages,
+ getCoolingItem,
+ getCPU,
+ getFailureModel,
+ getGPU,
+ getMemory,
+ getPSU,
+ getStorage
+} from "../api/routes/specifications";
+import { getMachinesOfRackByTile, getRackByTile } from "../api/routes/tiles";
+import { getAllTraces } from "../api/routes/traces";
+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]);
+ let object = objectStore[id];
+ if (!object) {
+ object = yield apiCall;
+ yield put(addToStore(objectType, object));
+ }
+ return object;
+}
+
+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 fetchAndStoreAllCPUs = () =>
+ fetchAndStoreObjects("cpu", call(getAllCPUs));
+
+export const fetchAndStoreCPU = id =>
+ fetchAndStoreObject("cpu", id, call(getCPU, id));
+
+export const fetchAndStoreAllGPUs = () =>
+ fetchAndStoreObjects("gpu", call(getAllGPUs));
+
+export const fetchAndStoreGPU = id =>
+ fetchAndStoreObject("gpu", id, call(getGPU, id));
+
+export const fetchAndStoreAllMemories = () =>
+ fetchAndStoreObjects("memory", call(getAllMemories));
+
+export const fetchAndStoreMemory = id =>
+ fetchAndStoreObject("memory", id, call(getMemory, id));
+
+export const fetchAndStoreAllStorages = () =>
+ fetchAndStoreObjects("storage", call(getAllStorages));
+
+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));
+
+export const fetchAndStoreAllTraces = () =>
+ fetchAndStoreObjects("trace", call(getAllTraces));
+
+export const fetchAndStoreAllSchedulers = function*() {
+ const objects = yield call(getAllSchedulers);
+ for (let index in objects) {
+ objects[index].id = objects[index].name;
+ yield put(addToStore("scheduler", objects[index]));
+ }
+ return objects;
+};