summaryrefslogtreecommitdiff
path: root/src/containers
diff options
context:
space:
mode:
authorGeorgios Andreadis <g.andreadis@student.tudelft.nl>2017-09-17 17:55:04 +0200
committerGeorgios Andreadis <g.andreadis@student.tudelft.nl>2017-09-23 10:06:03 +0200
commiteb208a7e2fd020ab5d07d11cc6d52d1e3dcfcc7c (patch)
treed2ec8a20408b7b2880e62feaa70fe95a78c484dd /src/containers
parent326b74fc39f63f47c71359276601ea93f7345dc6 (diff)
Add simulation mode framework
Includes object states in the store (by tick), charting, and progress bars.
Diffstat (limited to 'src/containers')
-rw-r--r--src/containers/map/DatacenterContainer.js2
-rw-r--r--src/containers/map/RackContainer.js26
-rw-r--r--src/containers/map/TileContainer.js15
-rw-r--r--src/containers/sidebars/elements/LoadBarContainer.js25
-rw-r--r--src/containers/sidebars/elements/LoadChartContainer.js26
-rw-r--r--src/containers/sidebars/topology/building/BuildingSidebarContainer.js2
-rw-r--r--src/containers/sidebars/topology/building/CancelNewRoomConstructionButton.js16
-rw-r--r--src/containers/sidebars/topology/building/FinishNewRoomConstructionButton.js16
-rw-r--r--src/containers/sidebars/topology/building/NewRoomConstructionContainer.js28
-rw-r--r--src/containers/sidebars/topology/building/StartNewRoomConstructionButton.js16
-rw-r--r--src/containers/sidebars/topology/machine/MachineSidebarContainer.js15
-rw-r--r--src/containers/sidebars/topology/rack/MachineContainer.js15
-rw-r--r--src/containers/sidebars/topology/rack/RackSidebarContainer.js15
-rw-r--r--src/containers/sidebars/topology/room/RoomSidebarContainer.js2
14 files changed, 167 insertions, 52 deletions
diff --git a/src/containers/map/DatacenterContainer.js b/src/containers/map/DatacenterContainer.js
index 8c80146d..b56adbac 100644
--- a/src/containers/map/DatacenterContainer.js
+++ b/src/containers/map/DatacenterContainer.js
@@ -8,7 +8,7 @@ const mapStateToProps = state => {
return {
datacenter: state.objects.datacenter[state.currentDatacenterId],
- interactionLevel: state.interactionLevel
+ interactionLevel: state.interactionLevel,
};
};
diff --git a/src/containers/map/RackContainer.js b/src/containers/map/RackContainer.js
new file mode 100644
index 00000000..60df9aaf
--- /dev/null
+++ b/src/containers/map/RackContainer.js
@@ -0,0 +1,26 @@
+import {connect} from "react-redux";
+import RackGroup from "../../components/map/groups/RackGroup";
+import {getStateLoad} from "../../util/simulation-load";
+
+const mapStateToProps = (state, ownProps) => {
+ const inSimulation = state.currentExperimentId !== -1;
+
+ let rackLoad = undefined;
+ if (inSimulation) {
+ if (state.states.rack[state.currentTick] && state.states.rack[state.currentTick][ownProps.tile.objectId]) {
+ rackLoad = getStateLoad(state.loadMetric, state.states.rack[state.currentTick][ownProps.tile.objectId]);
+ }
+ }
+
+ return {
+ interactionLevel: state.interactionLevel,
+ inSimulation,
+ rackLoad,
+ };
+};
+
+const RackContainer = connect(
+ mapStateToProps
+)(RackGroup);
+
+export default RackContainer;
diff --git a/src/containers/map/TileContainer.js b/src/containers/map/TileContainer.js
index 9e98636a..75fac5ad 100644
--- a/src/containers/map/TileContainer.js
+++ b/src/containers/map/TileContainer.js
@@ -1,11 +1,24 @@
import {connect} from "react-redux";
import {goFromRoomToRack} from "../../actions/interaction-level";
import TileGroup from "../../components/map/groups/TileGroup";
+import {getStateLoad} from "../../util/simulation-load";
const mapStateToProps = (state, ownProps) => {
+ const tile = state.objects.tile[ownProps.tileId];
+ const inSimulation = state.currentExperimentId !== -1;
+
+ let roomLoad = undefined;
+ if (inSimulation) {
+ if (state.states.room[state.currentTick] && state.states.room[state.currentTick][tile.roomId]) {
+ roomLoad = getStateLoad(state.loadMetric, state.states.room[state.currentTick][tile.roomId]);
+ }
+ }
+
return {
interactionLevel: state.interactionLevel,
- tile: state.objects.tile[ownProps.tileId],
+ tile,
+ inSimulation,
+ roomLoad,
};
};
diff --git a/src/containers/sidebars/elements/LoadBarContainer.js b/src/containers/sidebars/elements/LoadBarContainer.js
new file mode 100644
index 00000000..08aec93c
--- /dev/null
+++ b/src/containers/sidebars/elements/LoadBarContainer.js
@@ -0,0 +1,25 @@
+import {connect} from "react-redux";
+import LoadBarComponent from "../../../components/sidebars/elements/LoadBarComponent";
+import {getStateLoad} from "../../../util/simulation-load";
+
+const mapStateToProps = (state, ownProps) => {
+ let percent = 0;
+ let enabled = false;
+
+ const objectStates = state.states[ownProps.objectType];
+ if (objectStates[state.currentTick] && objectStates[state.currentTick][ownProps.objectId]) {
+ percent = Math.floor(100 * getStateLoad(state.loadMetric, objectStates[state.currentTick][ownProps.objectId]));
+ enabled = true;
+ }
+
+ return {
+ percent,
+ enabled
+ };
+};
+
+const LoadBarContainer = connect(
+ mapStateToProps
+)(LoadBarComponent);
+
+export default LoadBarContainer;
diff --git a/src/containers/sidebars/elements/LoadChartContainer.js b/src/containers/sidebars/elements/LoadChartContainer.js
new file mode 100644
index 00000000..7d8b10e5
--- /dev/null
+++ b/src/containers/sidebars/elements/LoadChartContainer.js
@@ -0,0 +1,26 @@
+import {connect} from "react-redux";
+import LoadChartComponent from "../../../components/sidebars/elements/LoadChartComponent";
+import {getStateLoad} from "../../../util/simulation-load";
+
+const mapStateToProps = (state, ownProps) => {
+ const data = [];
+
+ if (state.lastSimulatedTick !== -1) {
+ const objectStates = state.states[ownProps.objectType];
+ Object.keys(objectStates).forEach(tick => {
+ if (objectStates[tick][ownProps.objectId]) {
+ data.push({x: tick, y: getStateLoad(state.loadMetric, objectStates[tick][ownProps.objectId])});
+ }
+ });
+ }
+
+ return {
+ data
+ };
+};
+
+const LoadChartContainer = connect(
+ mapStateToProps
+)(LoadChartComponent);
+
+export default LoadChartContainer;
diff --git a/src/containers/sidebars/topology/building/BuildingSidebarContainer.js b/src/containers/sidebars/topology/building/BuildingSidebarContainer.js
index a91ad5ef..a3e09149 100644
--- a/src/containers/sidebars/topology/building/BuildingSidebarContainer.js
+++ b/src/containers/sidebars/topology/building/BuildingSidebarContainer.js
@@ -3,7 +3,7 @@ import BuildingSidebarComponent from "../../../../components/sidebars/topology/b
const mapStateToProps = state => {
return {
- currentRoomInConstruction: state.construction.currentRoomInConstruction
+ inSimulation: state.construction.currentExperimentId !== -1
};
};
diff --git a/src/containers/sidebars/topology/building/CancelNewRoomConstructionButton.js b/src/containers/sidebars/topology/building/CancelNewRoomConstructionButton.js
deleted file mode 100644
index 399c7a0d..00000000
--- a/src/containers/sidebars/topology/building/CancelNewRoomConstructionButton.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import {connect} from "react-redux";
-import {cancelNewRoomConstruction} from "../../../../actions/topology/building";
-import CancelNewRoomConstructionComponent from "../../../../components/sidebars/topology/building/CancelNewRoomConstructionComponent";
-
-const mapDispatchToProps = dispatch => {
- return {
- onClick: () => dispatch(cancelNewRoomConstruction()),
- };
-};
-
-const CancelNewRoomConstructionButton = connect(
- null,
- mapDispatchToProps
-)(CancelNewRoomConstructionComponent);
-
-export default CancelNewRoomConstructionButton;
diff --git a/src/containers/sidebars/topology/building/FinishNewRoomConstructionButton.js b/src/containers/sidebars/topology/building/FinishNewRoomConstructionButton.js
deleted file mode 100644
index 8fc192e0..00000000
--- a/src/containers/sidebars/topology/building/FinishNewRoomConstructionButton.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import {connect} from "react-redux";
-import {finishNewRoomConstruction} from "../../../../actions/topology/building";
-import FinishNewRoomConstructionComponent from "../../../../components/sidebars/topology/building/FinishNewRoomConstructionComponent";
-
-const mapDispatchToProps = dispatch => {
- return {
- onClick: () => dispatch(finishNewRoomConstruction()),
- };
-};
-
-const FinishNewRoomConstructionButton = connect(
- null,
- mapDispatchToProps
-)(FinishNewRoomConstructionComponent);
-
-export default FinishNewRoomConstructionButton;
diff --git a/src/containers/sidebars/topology/building/NewRoomConstructionContainer.js b/src/containers/sidebars/topology/building/NewRoomConstructionContainer.js
new file mode 100644
index 00000000..0236522d
--- /dev/null
+++ b/src/containers/sidebars/topology/building/NewRoomConstructionContainer.js
@@ -0,0 +1,28 @@
+import {connect} from "react-redux";
+import {
+ cancelNewRoomConstruction,
+ finishNewRoomConstruction,
+ startNewRoomConstruction
+} from "../../../../actions/topology/building";
+import StartNewRoomConstructionComponent from "../../../../components/sidebars/topology/building/NewRoomConstructionComponent";
+
+const mapStateToProps = state => {
+ return {
+ currentRoomInConstruction: state.construction.currentRoomInConstruction
+ };
+};
+
+const mapDispatchToProps = dispatch => {
+ return {
+ onStart: () => dispatch(startNewRoomConstruction()),
+ onFinish: () => dispatch(finishNewRoomConstruction()),
+ onCancel: () => dispatch(cancelNewRoomConstruction()),
+ };
+};
+
+const NewRoomConstructionButton = connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(StartNewRoomConstructionComponent);
+
+export default NewRoomConstructionButton;
diff --git a/src/containers/sidebars/topology/building/StartNewRoomConstructionButton.js b/src/containers/sidebars/topology/building/StartNewRoomConstructionButton.js
deleted file mode 100644
index c2c9808a..00000000
--- a/src/containers/sidebars/topology/building/StartNewRoomConstructionButton.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import {connect} from "react-redux";
-import {startNewRoomConstruction} from "../../../../actions/topology/building";
-import StartNewRoomConstructionComponent from "../../../../components/sidebars/topology/building/StartNewRoomConstructionComponent";
-
-const mapDispatchToProps = dispatch => {
- return {
- onClick: () => dispatch(startNewRoomConstruction()),
- };
-};
-
-const StartNewRoomConstructionButton = connect(
- null,
- mapDispatchToProps
-)(StartNewRoomConstructionComponent);
-
-export default StartNewRoomConstructionButton;
diff --git a/src/containers/sidebars/topology/machine/MachineSidebarContainer.js b/src/containers/sidebars/topology/machine/MachineSidebarContainer.js
new file mode 100644
index 00000000..b0d5eed9
--- /dev/null
+++ b/src/containers/sidebars/topology/machine/MachineSidebarContainer.js
@@ -0,0 +1,15 @@
+import {connect} from "react-redux";
+import MachineSidebarComponent from "../../../../components/sidebars/topology/machine/MachineSidebarComponent";
+
+const mapStateToProps = state => {
+ return {
+ machineId: state.interactionLevel.machineId,
+ inSimulation: state.currentExperimentId !== -1,
+ };
+};
+
+const MachineSidebarContainer = connect(
+ mapStateToProps
+)(MachineSidebarComponent);
+
+export default MachineSidebarContainer;
diff --git a/src/containers/sidebars/topology/rack/MachineContainer.js b/src/containers/sidebars/topology/rack/MachineContainer.js
index 21ab06c4..7406d191 100644
--- a/src/containers/sidebars/topology/rack/MachineContainer.js
+++ b/src/containers/sidebars/topology/rack/MachineContainer.js
@@ -1,10 +1,23 @@
import {connect} from "react-redux";
import {goFromRackToMachine} from "../../../../actions/interaction-level";
import MachineComponent from "../../../../components/sidebars/topology/rack/MachineComponent";
+import {getStateLoad} from "../../../../util/simulation-load";
const mapStateToProps = (state, ownProps) => {
+ const machine = state.objects.machine[ownProps.machineId];
+ const inSimulation = state.currentExperimentId !== -1;
+
+ let machineLoad = undefined;
+ if (inSimulation) {
+ if (state.states.machine[state.currentTick] && state.states.machine[state.currentTick][machine.id]) {
+ machineLoad = getStateLoad(state.loadMetric, state.states.machine[state.currentTick][machine.id]);
+ }
+ }
+
return {
- machine: state.objects.machine[ownProps.machineId],
+ machine,
+ inSimulation,
+ machineLoad
};
};
diff --git a/src/containers/sidebars/topology/rack/RackSidebarContainer.js b/src/containers/sidebars/topology/rack/RackSidebarContainer.js
new file mode 100644
index 00000000..4652b968
--- /dev/null
+++ b/src/containers/sidebars/topology/rack/RackSidebarContainer.js
@@ -0,0 +1,15 @@
+import {connect} from "react-redux";
+import RackSidebarComponent from "../../../../components/sidebars/topology/rack/RackSidebarComponent";
+
+const mapStateToProps = state => {
+ return {
+ rackId: state.objects.tile[state.interactionLevel.tileId].objectId,
+ inSimulation: state.currentExperimentId !== -1,
+ };
+};
+
+const RackSidebarContainer = connect(
+ mapStateToProps
+)(RackSidebarComponent);
+
+export default RackSidebarContainer;
diff --git a/src/containers/sidebars/topology/room/RoomSidebarContainer.js b/src/containers/sidebars/topology/room/RoomSidebarContainer.js
index b7ded316..6dded3e7 100644
--- a/src/containers/sidebars/topology/room/RoomSidebarContainer.js
+++ b/src/containers/sidebars/topology/room/RoomSidebarContainer.js
@@ -3,7 +3,9 @@ import RoomSidebarComponent from "../../../../components/sidebars/topology/room/
const mapStateToProps = state => {
return {
+ roomId: state.interactionLevel.roomId,
roomType: state.objects.room[state.interactionLevel.roomId].roomType,
+ inSimulation: state.currentExperimentId !== -1,
};
};