diff options
9 files changed, 23 insertions, 11 deletions
diff --git a/frontend/src/components/app/map/MapConstants.js b/frontend/src/components/app/map/MapConstants.js index 0a970701..d6ea1f84 100644 --- a/frontend/src/components/app/map/MapConstants.js +++ b/frontend/src/components/app/map/MapConstants.js @@ -23,6 +23,6 @@ export const MAP_SCALE_PER_EVENT = 1.1 export const MAP_MIN_SCALE = 0.5 export const MAP_MAX_SCALE = 1.5 -export const MAX_NUM_UNITS_PER_MACHINE = 4 +export const MAX_NUM_UNITS_PER_MACHINE = 6 export const DEFAULT_RACK_SLOT_CAPACITY = 42 export const DEFAULT_RACK_POWER_CAPACITY = 10000 diff --git a/frontend/src/components/app/sidebars/topology/machine/MachineSidebarComponent.js b/frontend/src/components/app/sidebars/topology/machine/MachineSidebarComponent.js index 02e7b8d4..7c78cf9e 100644 --- a/frontend/src/components/app/sidebars/topology/machine/MachineSidebarComponent.js +++ b/frontend/src/components/app/sidebars/topology/machine/MachineSidebarComponent.js @@ -6,7 +6,7 @@ import UnitTabsContainer from '../../../../../containers/app/sidebars/topology/m const MachineSidebarComponent = ({ machineId }) => { return ( - <div> + <div className="h-100 overflow-auto"> <MachineNameContainer /> <BackToRackContainer /> <DeleteMachineContainer /> diff --git a/frontend/src/components/app/sidebars/topology/machine/UnitAddComponent.js b/frontend/src/components/app/sidebars/topology/machine/UnitAddComponent.js index d5ecbce3..4e9dbc7e 100644 --- a/frontend/src/components/app/sidebars/topology/machine/UnitAddComponent.js +++ b/frontend/src/components/app/sidebars/topology/machine/UnitAddComponent.js @@ -11,7 +11,7 @@ class UnitAddComponent extends React.Component { return ( <div className="form-inline"> <div className="form-group w-100"> - <select className="form-control w-75 mr-1" ref={(unitSelect) => (this.unitSelect = unitSelect)}> + <select className="form-control w-70 mr-1" ref={(unitSelect) => (this.unitSelect = unitSelect)}> {this.props.units.map((unit) => ( <option value={unit._id} key={unit._id}> {unit.name} diff --git a/frontend/src/components/app/sidebars/topology/machine/UnitTabsComponent.js b/frontend/src/components/app/sidebars/topology/machine/UnitTabsComponent.js index 15c89ed5..c03b826f 100644 --- a/frontend/src/components/app/sidebars/topology/machine/UnitTabsComponent.js +++ b/frontend/src/components/app/sidebars/topology/machine/UnitTabsComponent.js @@ -22,7 +22,7 @@ const UnitTabsComponent = () => ( </li> <li className="nav-item"> <a className="nav-link" data-toggle="tab" href="#storage-units" role="tab"> - Storage + Stor. </a> </li> </ul> diff --git a/frontend/src/components/modals/custom-components/NewTopologyModalComponent.js b/frontend/src/components/modals/custom-components/NewTopologyModalComponent.js index a244b730..d8262baa 100644 --- a/frontend/src/components/modals/custom-components/NewTopologyModalComponent.js +++ b/frontend/src/components/modals/custom-components/NewTopologyModalComponent.js @@ -64,7 +64,7 @@ class NewTopologyModalComponent extends React.Component { /> </div> <div className="form-group"> - <label className="form-control-label">Topology to duplicate (not supported yet)</label> + <label className="form-control-label">Topology to duplicate</label> <select className="form-control" ref={(originTopology) => (this.originTopology = originTopology)} diff --git a/frontend/src/containers/app/sidebars/project/TopologyListContainer.js b/frontend/src/containers/app/sidebars/project/TopologyListContainer.js index f65982ef..e1de18f9 100644 --- a/frontend/src/containers/app/sidebars/project/TopologyListContainer.js +++ b/frontend/src/containers/app/sidebars/project/TopologyListContainer.js @@ -4,7 +4,7 @@ import { setCurrentTopology } from '../../../../actions/topology/building' import { openNewTopologyModal } from '../../../../actions/modals/topology' import { withRouter } from 'react-router-dom' import { getState } from '../../../../util/state-utils' -import { deleteScenario } from '../../../../actions/scenarios' +import { deleteTopology } from '../../../../actions/topologies' const mapStateToProps = (state) => { let topologies = state.objects.project[state.currentProjectId] @@ -33,7 +33,7 @@ const mapDispatchToProps = (dispatch, ownProps) => { onDeleteTopology: async (id) => { if (id) { const state = await getState(dispatch) - dispatch(deleteScenario(id)) + dispatch(deleteTopology(id)) dispatch(setCurrentTopology(state.objects.project[state.currentProjectId].topologyIds[0])) ownProps.history.push(`/projects/${state.currentProjectId}`) } diff --git a/frontend/src/index.sass b/frontend/src/index.sass index ec756bc5..77acc23a 100644 --- a/frontend/src/index.sass +++ b/frontend/src/index.sass @@ -42,3 +42,6 @@ a, a:hover .app-page-container padding-left: $side-bar-width padding-top: 15px + +.w-70 + width: 70% !important diff --git a/simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/telemetry/parquet/ParquetRunEventWriter.kt b/simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/telemetry/parquet/ParquetRunEventWriter.kt index c1724369..043e4670 100644 --- a/simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/telemetry/parquet/ParquetRunEventWriter.kt +++ b/simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/telemetry/parquet/ParquetRunEventWriter.kt @@ -51,6 +51,7 @@ public class ParquetRunEventWriter(path: File, bufferSize: Int) : record.put("topology", scenario.topology.name) record.put("workload_name", scenario.workload.name) record.put("workload_fraction", scenario.workload.fraction) + record.put("workload_sampler", scenario.workload.samplingStrategy) record.put("allocation_policy", scenario.allocationPolicy) record.put("failure_frequency", scenario.operationalPhenomena.failureFrequency) record.put("interference", scenario.operationalPhenomena.hasInterference) @@ -69,6 +70,7 @@ public class ParquetRunEventWriter(path: File, bufferSize: Int) : .name("topology").type().stringType().noDefault() .name("workload_name").type().stringType().noDefault() .name("workload_fraction").type().doubleType().noDefault() + .name("workload_sampler").type().stringType().noDefault() .name("allocation_policy").type().stringType().noDefault() .name("failure_frequency").type().doubleType().noDefault() .name("interference").type().booleanType().noDefault() diff --git a/simulator/opendc/opendc-runner-web/src/main/kotlin/com/atlarge/opendc/runner/web/Main.kt b/simulator/opendc/opendc-runner-web/src/main/kotlin/com/atlarge/opendc/runner/web/Main.kt index 0ff9b870..807c119e 100644 --- a/simulator/opendc/opendc-runner-web/src/main/kotlin/com/atlarge/opendc/runner/web/Main.kt +++ b/simulator/opendc/opendc-runner-web/src/main/kotlin/com/atlarge/opendc/runner/web/Main.kt @@ -276,6 +276,9 @@ class RunnerCli : CliktCommand(name = "runner") { } } + val POLL_INTERVAL = 5000L // ms = 5 s + val HEARTBEAT_INTERVAL = 60000L // ms = 1 min + override fun run() = runBlocking(Dispatchers.Default) { logger.info { "Starting OpenDC web runner" } logger.info { "Connecting to MongoDB instance" } @@ -293,7 +296,7 @@ class RunnerCli : CliktCommand(name = "runner") { val scenario = manager.findNext() if (scenario == null) { - delay(5000) + delay(POLL_INTERVAL) continue } @@ -308,9 +311,11 @@ class RunnerCli : CliktCommand(name = "runner") { coroutineScope { // Launch heartbeat process - launch { - delay(60000) - manager.heartbeat(id) + val heartbeat = launch { + while (true) { + delay(HEARTBEAT_INTERVAL) + manager.heartbeat(id) + } } try { @@ -326,6 +331,8 @@ class RunnerCli : CliktCommand(name = "runner") { } catch (e: Exception) { logger.warn(e) { "Scenario failed to finish" } manager.fail(id) + } finally { + heartbeat.cancel() } } } |
