import PropTypes from 'prop-types' import React, { useRef, useState } from 'react' import { Portfolio } from '../../../shapes' import Modal from '../Modal' import { Checkbox, Form, FormGroup, FormSection, FormSelect, FormSelectOption, NumberInput, TextInput, } from '@patternfly/react-core' import { useSchedulers, useTraces } from '../../../data/experiments' import { useProjectTopologies } from '../../../data/topology' import { usePortfolio } from '../../../data/project' const NewScenarioModal = ({ portfolioId, isOpen, onSubmit: onSubmitUpstream, onCancel: onCancelUpstream }) => { const { data: portfolio } = usePortfolio(portfolioId) const { data: topologies = [] } = useProjectTopologies(portfolio?.projectId) const { data: traces = [] } = useTraces() const { data: schedulers = [] } = useSchedulers() const [isSubmitted, setSubmitted] = useState(false) const [traceLoad, setTraceLoad] = useState(100) const [trace, setTrace] = useState(undefined) const [topology, setTopology] = useState(undefined) const [scheduler, setScheduler] = useState(undefined) const [failuresEnabled, setFailuresEnabled] = useState(false) const [opPhenEnabled, setOpPhenEnabled] = useState(false) const nameInput = useRef(null) const resetState = () => { setSubmitted(false) setTraceLoad(100) setTrace(undefined) setTopology(undefined) setScheduler(undefined) setFailuresEnabled(false) setOpPhenEnabled(false) nameInput.current.value = '' } const onSubmit = (event) => { setSubmitted(true) if (event) { event.preventDefault() } const name = nameInput.current.value onSubmitUpstream( name, portfolio._id, { traceId: trace || traces[0]._id, loadSamplingFraction: traceLoad / 100, }, { topologyId: topology || topologies[0]._id, }, { failuresEnabled, performanceInterferenceEnabled: opPhenEnabled, schedulerName: scheduler || schedulers[0].name, } ) resetState() return true } const onCancel = () => { onCancelUpstream() resetState() } return (
{traces.map((trace) => ( ))} setTraceLoad((load) => load - 1)} onPlus={() => setTraceLoad((load) => load + 1)} onChange={(e) => setTraceLoad(Number(e.target.value))} unit="%" /> {topologies.map((topology) => ( ))} {schedulers.map((scheduler) => ( ))} setFailuresEnabled((e) => !e)} /> setOpPhenEnabled((e) => !e)} />
) } NewScenarioModal.propTypes = { portfolioId: PropTypes.string, isOpen: PropTypes.bool.isRequired, onSubmit: PropTypes.func.isRequired, onCancel: PropTypes.func.isRequired, } export default NewScenarioModal