Loading src/webui/service/load_gen/forms.py +5 −8 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ from flask_wtf import FlaskForm from wtforms import BooleanField, FloatField, IntegerField, StringField, SubmitField from wtforms.validators import DataRequired, NumberRange class LoadGenStartForm(FlaskForm): class LoadGenForm(FlaskForm): num_requests = IntegerField('Num Requests', default=100, validators=[DataRequired(), NumberRange(min=0)]) num_generated = IntegerField('Num Generated', default=0, render_kw={'readonly': True}) Loading @@ -36,10 +36,7 @@ class LoadGenStartForm(FlaskForm): record_to_dlt = BooleanField('Record to DLT', default=False) dlt_domain_id = StringField('DLT Domain Id', default='') infinite_loop = BooleanField('Infinite Loop', default=False, render_kw={'readonly': True}) running = BooleanField('Running', default=False, render_kw={'readonly': True}) infinite_loop = BooleanField('Infinite Loop', default=False, render_kw={'disabled': True}) running = BooleanField('Running', default=False, render_kw={'disabled': True}) submit = SubmitField('Start') class LoadGenStopForm(FlaskForm): submit = SubmitField('Stop') submit = SubmitField('Start/Stop') src/webui/service/load_gen/routes.py +81 −68 Original line number Diff line number Diff line Loading @@ -12,102 +12,115 @@ # See the License for the specific language governing permissions and # limitations under the License. from flask import render_template, Blueprint, flash from typing import Any, Optional from flask import redirect, render_template, Blueprint, flash, url_for from common.proto.context_pb2 import Empty from common.proto.load_generator_pb2 import Parameters, RequestTypeEnum from load_generator.client.LoadGeneratorClient import LoadGeneratorClient from .forms import LoadGenStartForm, LoadGenStopForm from .forms import LoadGenForm load_gen = Blueprint('load_gen', __name__, url_prefix='/load_gen') def make_read_only(field, readonly : bool) -> None: def set_properties(field, data : Any, readonly : Optional[bool] = None, disabled : Optional[bool] = None) -> None: if not hasattr(field, 'render_kw'): field.render_kw = dict(readonly=readonly) field.render_kw = dict() elif field.render_kw is None: field.render_kw = dict(readonly=readonly) else: field.render_kw = dict() if readonly is not None: field.render_kw['readonly'] = readonly if disabled is not None: field.render_kw['disabled'] = disabled if (readonly is not None and readonly) or (disabled is not None and disabled): field.data = data @load_gen.route('home', methods=['GET', 'POST']) @load_gen.route('home', methods=['GET']) def home(): load_gen_client = LoadGeneratorClient() form_start = LoadGenStartForm() form_stop = LoadGenStopForm() load_gen_client.connect() status = load_gen_client.GetStatus(Empty()) load_gen_client.close() request_types = status.parameters.request_types _request_type_service_l2nm = RequestTypeEnum.REQUESTTYPE_SERVICE_L2NM in request_types _request_type_service_l3nm = RequestTypeEnum.REQUESTTYPE_SERVICE_L3NM in request_types _request_type_service_mw = RequestTypeEnum.REQUESTTYPE_SERVICE_MW in request_types _request_type_service_tapi = RequestTypeEnum.REQUESTTYPE_SERVICE_TAPI in request_types _request_type_slice_l2nm = RequestTypeEnum.REQUESTTYPE_SLICE_L2NM in request_types _request_type_slice_l3nm = RequestTypeEnum.REQUESTTYPE_SLICE_L3NM in request_types _offered_load = round(status.parameters.offered_load , ndigits=4) _holding_time = round(status.parameters.holding_time , ndigits=4) _inter_arrival_time = round(status.parameters.inter_arrival_time , ndigits=4) form = LoadGenForm() set_properties(form.num_requests , status.parameters.num_requests , readonly=status.running) set_properties(form.offered_load , _offered_load , readonly=status.running) set_properties(form.holding_time , _holding_time , readonly=status.running) set_properties(form.inter_arrival_time , _inter_arrival_time , readonly=status.running) set_properties(form.do_teardown , status.parameters.do_teardown , disabled=status.running) set_properties(form.record_to_dlt , status.parameters.record_to_dlt, disabled=status.running) set_properties(form.dlt_domain_id , status.parameters.dlt_domain_id, readonly=status.running) set_properties(form.request_type_service_l2nm, _request_type_service_l2nm , disabled=status.running) set_properties(form.request_type_service_l3nm, _request_type_service_l3nm , disabled=status.running) set_properties(form.request_type_service_mw , _request_type_service_mw , disabled=status.running) set_properties(form.request_type_service_tapi, _request_type_service_tapi , disabled=status.running) set_properties(form.request_type_slice_l2nm , _request_type_slice_l2nm , disabled=status.running) set_properties(form.request_type_slice_l3nm , _request_type_slice_l3nm , disabled=status.running) set_properties(form.num_generated , status.num_generated , disabled=True) set_properties(form.infinite_loop , status.infinite_loop , disabled=True) set_properties(form.running , status.running , disabled=True) if form_start.validate_on_submit(): form.submit.label.text = 'Stop' if status.running else 'Start' form_action = url_for('load_gen.stop') if status.running else url_for('load_gen.start') return render_template('load_gen/home.html', form=form, form_action=form_action) @load_gen.route('start', methods=['POST']) def start(): form = LoadGenForm() if form.validate_on_submit(): try: load_gen_params = Parameters() load_gen_params.num_requests = form_start.num_requests.data load_gen_params.offered_load = form_start.offered_load.data load_gen_params.holding_time = form_start.holding_time.data load_gen_params.inter_arrival_time = form_start.inter_arrival_time.data load_gen_params.do_teardown = form_start.do_teardown.data load_gen_params.num_requests = form.num_requests.data load_gen_params.offered_load = form.offered_load.data load_gen_params.holding_time = form.holding_time.data load_gen_params.inter_arrival_time = form.inter_arrival_time.data load_gen_params.do_teardown = form.do_teardown.data load_gen_params.dry_mode = False load_gen_params.record_to_dlt = form_start.record_to_dlt.data load_gen_params.dlt_domain_id = form_start.dlt_domain_id.data load_gen_params.record_to_dlt = form.record_to_dlt.data load_gen_params.dlt_domain_id = form.dlt_domain_id.data del load_gen_params.request_types[:] # pylint: disable=no-member request_types = list() if form_start.request_type_service_l2nm.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_L2NM) if form_start.request_type_service_l3nm.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_L3NM) if form_start.request_type_service_mw .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_MW ) if form_start.request_type_service_tapi.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_TAPI) if form_start.request_type_slice_l2nm .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SLICE_L2NM ) if form_start.request_type_slice_l3nm .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SLICE_L3NM ) if form.request_type_service_l2nm.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_L2NM) if form.request_type_service_l3nm.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_L3NM) if form.request_type_service_mw .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_MW ) if form.request_type_service_tapi.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_TAPI) if form.request_type_slice_l2nm .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SLICE_L2NM ) if form.request_type_slice_l3nm .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SLICE_L3NM ) load_gen_params.request_types.extend(request_types) # pylint: disable=no-member try: load_gen_client = LoadGeneratorClient() load_gen_client.connect() load_gen_client.Start(load_gen_params) load_gen_client.close() flash('Load Generator Started.', 'success') except Exception as e: # pylint: disable=broad-except flash('Problem starting Load Generator. {:s}'.format(str(e)), 'danger') return redirect(url_for('load_gen.home')) if form_stop.validate_on_submit(): @load_gen.route('stop', methods=['POST']) def stop(): form = LoadGenForm() if form.validate_on_submit(): try: load_gen_client = LoadGeneratorClient() load_gen_client.connect() load_gen_client.Stop(Empty()) load_gen_client.close() flash('Load Generator Stopped.', 'success') except Exception as e: # pylint: disable=broad-except flash('Problem stopping Load Generator. {:s}'.format(str(e)), 'danger') load_gen_client.connect() status = load_gen_client.GetStatus(Empty()) load_gen_client.close() form_start.num_requests .default = status.parameters.num_requests form_start.offered_load .default = status.parameters.offered_load form_start.holding_time .default = status.parameters.holding_time form_start.inter_arrival_time.default = status.parameters.inter_arrival_time form_start.do_teardown .default = status.parameters.do_teardown form_start.record_to_dlt .default = status.parameters.record_to_dlt form_start.dlt_domain_id .default = status.parameters.dlt_domain_id form_start.num_generated .default = status.num_generated form_start.infinite_loop .default = status.infinite_loop form_start.running .default = status.running request_types = status.parameters.request_types form_start.request_type_service_l2nm.default = RequestTypeEnum.REQUESTTYPE_SERVICE_L2NM in request_types form_start.request_type_service_l3nm.default = RequestTypeEnum.REQUESTTYPE_SERVICE_L3NM in request_types form_start.request_type_service_mw .default = RequestTypeEnum.REQUESTTYPE_SERVICE_MW in request_types form_start.request_type_service_tapi.default = RequestTypeEnum.REQUESTTYPE_SERVICE_TAPI in request_types form_start.request_type_slice_l2nm .default = RequestTypeEnum.REQUESTTYPE_SLICE_L2NM in request_types form_start.request_type_slice_l3nm .default = RequestTypeEnum.REQUESTTYPE_SLICE_L3NM in request_types make_read_only(form_start.num_requests , status.running) make_read_only(form_start.offered_load , status.running) make_read_only(form_start.holding_time , status.running) make_read_only(form_start.inter_arrival_time , status.running) make_read_only(form_start.do_teardown , status.running) make_read_only(form_start.record_to_dlt , status.running) make_read_only(form_start.dlt_domain_id , status.running) make_read_only(form_start.request_type_service_l2nm, status.running) make_read_only(form_start.request_type_service_l3nm, status.running) make_read_only(form_start.request_type_service_mw , status.running) make_read_only(form_start.request_type_service_tapi, status.running) make_read_only(form_start.request_type_slice_l2nm , status.running) make_read_only(form_start.request_type_slice_l3nm , status.running) return render_template('load_gen/home.html', form_start=form_start, form_stop=form_stop, is_running=status.running) return redirect(url_for('load_gen.home')) src/webui/service/templates/load_gen/home.html +43 −58 Original line number Diff line number Diff line Loading @@ -20,36 +20,34 @@ <h1>Load Generator</h1> <br /> <form id="load_gen_start" method="POST"> {% if not is_running %} {{ form_start.hidden_tag() }} {% endif %} <form id="load_gen_form" method="POST" action="{{ form_action }}"> {{ form.hidden_tag() }} <fieldset> <div class="row mb-3"> {{ form_start.num_requests.label(class="col-sm-2 col-form-label") }} {{ form.num_requests.label(class="col-sm-2 col-form-label") }} <div class="col-sm-10"> {% if form_start.num_requests.errors %} {{ form_start.num_requests(class="form-control is-invalid") }} {% if form.num_requests.errors %} {{ form.num_requests(class="form-control is-invalid") }} <div class="invalid-feedback"> {% for error in form_start.num_requests.errors %}<span>{{ error }}</span>{% endfor %} {% for error in form.num_requests.errors %}<span>{{ error }}</span>{% endfor %} </div> {% else %} {{ form_start.num_requests(class="form-control") }} {{ form.num_requests(class="form-control") }} {% endif %} </div> </div> <br /> <div class="row mb-3"> {{ form_start.num_generated.label(class="col-sm-2 col-form-label") }} {{ form.num_generated.label(class="col-sm-2 col-form-label") }} <div class="col-sm-10"> {% if form_start.num_generated.errors %} {{ form_start.num_generated(class="form-control is-invalid") }} {% if form.num_generated.errors %} {{ form.num_generated(class="form-control is-invalid") }} <div class="invalid-feedback"> {% for error in form_start.num_generated.errors %}<span>{{ error }}</span>{% endfor %} {% for error in form.num_generated.errors %}<span>{{ error }}</span>{% endfor %} </div> {% else %} {{ form_start.num_generated(class="form-control") }} {{ form.num_generated(class="form-control") }} {% endif %} </div> </div> Loading @@ -58,58 +56,58 @@ <div class="row mb-3"> <div class="col-sm-2 col-form-label">Service Types:</div> <div class="col-sm-10"> {{ form_start.request_type_slice_l2nm }} {{ form_start.request_type_slice_l2nm .label(class="col-sm-3 col-form-label") }} {{ form_start.request_type_slice_l3nm }} {{ form_start.request_type_slice_l3nm .label(class="col-sm-3 col-form-label") }} {{ form.request_type_slice_l2nm }} {{ form.request_type_slice_l2nm .label(class="col-sm-3 col-form-label") }} {{ form.request_type_slice_l3nm }} {{ form.request_type_slice_l3nm .label(class="col-sm-3 col-form-label") }} <br/> {{ form_start.request_type_service_l2nm }} {{ form_start.request_type_service_l2nm.label(class="col-sm-3 col-form-label") }} {{ form_start.request_type_service_l3nm }} {{ form_start.request_type_service_l3nm.label(class="col-sm-3 col-form-label") }} {{ form.request_type_service_l2nm }} {{ form.request_type_service_l2nm.label(class="col-sm-3 col-form-label") }} {{ form.request_type_service_l3nm }} {{ form.request_type_service_l3nm.label(class="col-sm-3 col-form-label") }} <br/> {{ form_start.request_type_service_mw }} {{ form_start.request_type_service_mw .label(class="col-sm-3 col-form-label") }} {{ form_start.request_type_service_tapi }} {{ form_start.request_type_service_tapi.label(class="col-sm-3 col-form-label") }} {{ form.request_type_service_mw }} {{ form.request_type_service_mw .label(class="col-sm-3 col-form-label") }} {{ form.request_type_service_tapi }} {{ form.request_type_service_tapi.label(class="col-sm-3 col-form-label") }} </div> </div> <br /> <div class="row mb-3"> {{ form_start.offered_load.label(class="col-sm-2 col-form-label") }} {{ form.offered_load.label(class="col-sm-2 col-form-label") }} <div class="col-sm-10"> {% if form_start.offered_load.errors %} {{ form_start.offered_load(class="form-control is-invalid") }} {% if form.offered_load.errors %} {{ form.offered_load(class="form-control is-invalid") }} <div class="invalid-feedback"> {% for error in form_start.offered_load.errors %}<span>{{ error }}</span>{% endfor %} {% for error in form.offered_load.errors %}<span>{{ error }}</span>{% endfor %} </div> {% else %} {{ form_start.offered_load(class="form-control") }} {{ form.offered_load(class="form-control") }} {% endif %} </div> </div> <br /> <div class="row mb-3"> {{ form_start.holding_time.label(class="col-sm-2 col-form-label") }} {{ form.holding_time.label(class="col-sm-2 col-form-label") }} <div class="col-sm-10"> {% if form_start.holding_time.errors %} {{ form_start.holding_time(class="form-control is-invalid") }} {% if form.holding_time.errors %} {{ form.holding_time(class="form-control is-invalid") }} <div class="invalid-feedback"> {% for error in form_start.holding_time.errors %}<span>{{ error }}</span>{% endfor %} {% for error in form.holding_time.errors %}<span>{{ error }}</span>{% endfor %} </div> {% else %} {{ form_start.holding_time(class="form-control") }} {{ form.holding_time(class="form-control") }} {% endif %} </div> </div> <br /> <div class="row mb-3"> {{ form_start.inter_arrival_time.label(class="col-sm-2 col-form-label") }} {{ form.inter_arrival_time.label(class="col-sm-2 col-form-label") }} <div class="col-sm-10"> {% if form_start.inter_arrival_time.errors %} {{ form_start.inter_arrival_time(class="form-control is-invalid") }} {% if form.inter_arrival_time.errors %} {{ form.inter_arrival_time(class="form-control is-invalid") }} <div class="invalid-feedback"> {% for error in form_start.inter_arrival_time.errors %}<span>{{ error }}</span>{% endfor %} {% for error in form.inter_arrival_time.errors %}<span>{{ error }}</span>{% endfor %} </div> {% else %} {{ form_start.inter_arrival_time(class="form-control") }} {{ form.inter_arrival_time(class="form-control") }} {% endif %} </div> </div> Loading @@ -117,7 +115,7 @@ <div class="row mb-3"> <div class="col-sm-10"> {{ form_start.do_teardown }} {{ form_start.do_teardown.label(class="col-sm-3 col-form-label") }}<br/> {{ form.do_teardown }} {{ form.do_teardown.label(class="col-sm-3 col-form-label") }}<br/> </div> </div> <br /> Loading @@ -125,15 +123,15 @@ <div class="row mb-3"> <div class="col-sm-2 col-form-label">DLT Settings:</div> <div class="col-sm-10"> {{ form_start.record_to_dlt }} {{ form_start.record_to_dlt.label(class="col-sm-3 col-form-label") }} <br/> {{ form_start.dlt_domain_id.label(class="col-sm-2 col-form-label") }} {% if form_start.dlt_domain_id.errors %} {{ form_start.dlt_domain_id(class="form-control is-invalid") }} {{ form.record_to_dlt }} {{ form.record_to_dlt.label(class="col-sm-3 col-form-label") }} <br/> {{ form.dlt_domain_id.label(class="col-sm-2 col-form-label") }} {% if form.dlt_domain_id.errors %} {{ form.dlt_domain_id(class="form-control is-invalid") }} <div class="invalid-feedback"> {% for error in form_start.dlt_domain_id.errors %}<span>{{ error }}</span>{% endfor %} {% for error in form.dlt_domain_id.errors %}<span>{{ error }}</span>{% endfor %} </div> {% else %} {{ form_start.dlt_domain_id(class="form-control") }} {{ form.dlt_domain_id(class="form-control") }} {% endif %} </div> </div> Loading @@ -142,29 +140,16 @@ <div class="row mb-3"> <div class="col-sm-2 col-form-label">Status:</div> <div class="col-sm-10"> {{ form_start.infinite_loop }} {{ form_start.infinite_loop.label(class="col-sm-3 col-form-label") }} {{ form_start.running }} {{ form_start.running.label(class="col-sm-3 col-form-label") }} {{ form.infinite_loop }} {{ form.infinite_loop.label(class="col-sm-3 col-form-label") }} {{ form.running }} {{ form.running.label(class="col-sm-3 col-form-label") }} </div> </div> <br /> {% if not is_running %} <div class="d-grid gap-2 d-md-flex justify-content-md-start"> {{ form_start.submit(class="btn btn-primary") }} {{ form.submit(class="btn btn-primary") }} </div> {% endif %} </fieldset> </form> {% if is_running %} <form id="load_gen_stop" method="POST"> {{ form_stop.hidden_tag() }} <fieldset> <div class="d-grid gap-2 d-md-flex justify-content-md-start"> {{ form_stop.submit(class="btn btn-primary") }} </div> </fieldset> </form> {% endif %} {% endblock %} Loading
src/webui/service/load_gen/forms.py +5 −8 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ from flask_wtf import FlaskForm from wtforms import BooleanField, FloatField, IntegerField, StringField, SubmitField from wtforms.validators import DataRequired, NumberRange class LoadGenStartForm(FlaskForm): class LoadGenForm(FlaskForm): num_requests = IntegerField('Num Requests', default=100, validators=[DataRequired(), NumberRange(min=0)]) num_generated = IntegerField('Num Generated', default=0, render_kw={'readonly': True}) Loading @@ -36,10 +36,7 @@ class LoadGenStartForm(FlaskForm): record_to_dlt = BooleanField('Record to DLT', default=False) dlt_domain_id = StringField('DLT Domain Id', default='') infinite_loop = BooleanField('Infinite Loop', default=False, render_kw={'readonly': True}) running = BooleanField('Running', default=False, render_kw={'readonly': True}) infinite_loop = BooleanField('Infinite Loop', default=False, render_kw={'disabled': True}) running = BooleanField('Running', default=False, render_kw={'disabled': True}) submit = SubmitField('Start') class LoadGenStopForm(FlaskForm): submit = SubmitField('Stop') submit = SubmitField('Start/Stop')
src/webui/service/load_gen/routes.py +81 −68 Original line number Diff line number Diff line Loading @@ -12,102 +12,115 @@ # See the License for the specific language governing permissions and # limitations under the License. from flask import render_template, Blueprint, flash from typing import Any, Optional from flask import redirect, render_template, Blueprint, flash, url_for from common.proto.context_pb2 import Empty from common.proto.load_generator_pb2 import Parameters, RequestTypeEnum from load_generator.client.LoadGeneratorClient import LoadGeneratorClient from .forms import LoadGenStartForm, LoadGenStopForm from .forms import LoadGenForm load_gen = Blueprint('load_gen', __name__, url_prefix='/load_gen') def make_read_only(field, readonly : bool) -> None: def set_properties(field, data : Any, readonly : Optional[bool] = None, disabled : Optional[bool] = None) -> None: if not hasattr(field, 'render_kw'): field.render_kw = dict(readonly=readonly) field.render_kw = dict() elif field.render_kw is None: field.render_kw = dict(readonly=readonly) else: field.render_kw = dict() if readonly is not None: field.render_kw['readonly'] = readonly if disabled is not None: field.render_kw['disabled'] = disabled if (readonly is not None and readonly) or (disabled is not None and disabled): field.data = data @load_gen.route('home', methods=['GET', 'POST']) @load_gen.route('home', methods=['GET']) def home(): load_gen_client = LoadGeneratorClient() form_start = LoadGenStartForm() form_stop = LoadGenStopForm() load_gen_client.connect() status = load_gen_client.GetStatus(Empty()) load_gen_client.close() request_types = status.parameters.request_types _request_type_service_l2nm = RequestTypeEnum.REQUESTTYPE_SERVICE_L2NM in request_types _request_type_service_l3nm = RequestTypeEnum.REQUESTTYPE_SERVICE_L3NM in request_types _request_type_service_mw = RequestTypeEnum.REQUESTTYPE_SERVICE_MW in request_types _request_type_service_tapi = RequestTypeEnum.REQUESTTYPE_SERVICE_TAPI in request_types _request_type_slice_l2nm = RequestTypeEnum.REQUESTTYPE_SLICE_L2NM in request_types _request_type_slice_l3nm = RequestTypeEnum.REQUESTTYPE_SLICE_L3NM in request_types _offered_load = round(status.parameters.offered_load , ndigits=4) _holding_time = round(status.parameters.holding_time , ndigits=4) _inter_arrival_time = round(status.parameters.inter_arrival_time , ndigits=4) form = LoadGenForm() set_properties(form.num_requests , status.parameters.num_requests , readonly=status.running) set_properties(form.offered_load , _offered_load , readonly=status.running) set_properties(form.holding_time , _holding_time , readonly=status.running) set_properties(form.inter_arrival_time , _inter_arrival_time , readonly=status.running) set_properties(form.do_teardown , status.parameters.do_teardown , disabled=status.running) set_properties(form.record_to_dlt , status.parameters.record_to_dlt, disabled=status.running) set_properties(form.dlt_domain_id , status.parameters.dlt_domain_id, readonly=status.running) set_properties(form.request_type_service_l2nm, _request_type_service_l2nm , disabled=status.running) set_properties(form.request_type_service_l3nm, _request_type_service_l3nm , disabled=status.running) set_properties(form.request_type_service_mw , _request_type_service_mw , disabled=status.running) set_properties(form.request_type_service_tapi, _request_type_service_tapi , disabled=status.running) set_properties(form.request_type_slice_l2nm , _request_type_slice_l2nm , disabled=status.running) set_properties(form.request_type_slice_l3nm , _request_type_slice_l3nm , disabled=status.running) set_properties(form.num_generated , status.num_generated , disabled=True) set_properties(form.infinite_loop , status.infinite_loop , disabled=True) set_properties(form.running , status.running , disabled=True) if form_start.validate_on_submit(): form.submit.label.text = 'Stop' if status.running else 'Start' form_action = url_for('load_gen.stop') if status.running else url_for('load_gen.start') return render_template('load_gen/home.html', form=form, form_action=form_action) @load_gen.route('start', methods=['POST']) def start(): form = LoadGenForm() if form.validate_on_submit(): try: load_gen_params = Parameters() load_gen_params.num_requests = form_start.num_requests.data load_gen_params.offered_load = form_start.offered_load.data load_gen_params.holding_time = form_start.holding_time.data load_gen_params.inter_arrival_time = form_start.inter_arrival_time.data load_gen_params.do_teardown = form_start.do_teardown.data load_gen_params.num_requests = form.num_requests.data load_gen_params.offered_load = form.offered_load.data load_gen_params.holding_time = form.holding_time.data load_gen_params.inter_arrival_time = form.inter_arrival_time.data load_gen_params.do_teardown = form.do_teardown.data load_gen_params.dry_mode = False load_gen_params.record_to_dlt = form_start.record_to_dlt.data load_gen_params.dlt_domain_id = form_start.dlt_domain_id.data load_gen_params.record_to_dlt = form.record_to_dlt.data load_gen_params.dlt_domain_id = form.dlt_domain_id.data del load_gen_params.request_types[:] # pylint: disable=no-member request_types = list() if form_start.request_type_service_l2nm.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_L2NM) if form_start.request_type_service_l3nm.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_L3NM) if form_start.request_type_service_mw .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_MW ) if form_start.request_type_service_tapi.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_TAPI) if form_start.request_type_slice_l2nm .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SLICE_L2NM ) if form_start.request_type_slice_l3nm .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SLICE_L3NM ) if form.request_type_service_l2nm.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_L2NM) if form.request_type_service_l3nm.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_L3NM) if form.request_type_service_mw .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_MW ) if form.request_type_service_tapi.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_TAPI) if form.request_type_slice_l2nm .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SLICE_L2NM ) if form.request_type_slice_l3nm .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SLICE_L3NM ) load_gen_params.request_types.extend(request_types) # pylint: disable=no-member try: load_gen_client = LoadGeneratorClient() load_gen_client.connect() load_gen_client.Start(load_gen_params) load_gen_client.close() flash('Load Generator Started.', 'success') except Exception as e: # pylint: disable=broad-except flash('Problem starting Load Generator. {:s}'.format(str(e)), 'danger') return redirect(url_for('load_gen.home')) if form_stop.validate_on_submit(): @load_gen.route('stop', methods=['POST']) def stop(): form = LoadGenForm() if form.validate_on_submit(): try: load_gen_client = LoadGeneratorClient() load_gen_client.connect() load_gen_client.Stop(Empty()) load_gen_client.close() flash('Load Generator Stopped.', 'success') except Exception as e: # pylint: disable=broad-except flash('Problem stopping Load Generator. {:s}'.format(str(e)), 'danger') load_gen_client.connect() status = load_gen_client.GetStatus(Empty()) load_gen_client.close() form_start.num_requests .default = status.parameters.num_requests form_start.offered_load .default = status.parameters.offered_load form_start.holding_time .default = status.parameters.holding_time form_start.inter_arrival_time.default = status.parameters.inter_arrival_time form_start.do_teardown .default = status.parameters.do_teardown form_start.record_to_dlt .default = status.parameters.record_to_dlt form_start.dlt_domain_id .default = status.parameters.dlt_domain_id form_start.num_generated .default = status.num_generated form_start.infinite_loop .default = status.infinite_loop form_start.running .default = status.running request_types = status.parameters.request_types form_start.request_type_service_l2nm.default = RequestTypeEnum.REQUESTTYPE_SERVICE_L2NM in request_types form_start.request_type_service_l3nm.default = RequestTypeEnum.REQUESTTYPE_SERVICE_L3NM in request_types form_start.request_type_service_mw .default = RequestTypeEnum.REQUESTTYPE_SERVICE_MW in request_types form_start.request_type_service_tapi.default = RequestTypeEnum.REQUESTTYPE_SERVICE_TAPI in request_types form_start.request_type_slice_l2nm .default = RequestTypeEnum.REQUESTTYPE_SLICE_L2NM in request_types form_start.request_type_slice_l3nm .default = RequestTypeEnum.REQUESTTYPE_SLICE_L3NM in request_types make_read_only(form_start.num_requests , status.running) make_read_only(form_start.offered_load , status.running) make_read_only(form_start.holding_time , status.running) make_read_only(form_start.inter_arrival_time , status.running) make_read_only(form_start.do_teardown , status.running) make_read_only(form_start.record_to_dlt , status.running) make_read_only(form_start.dlt_domain_id , status.running) make_read_only(form_start.request_type_service_l2nm, status.running) make_read_only(form_start.request_type_service_l3nm, status.running) make_read_only(form_start.request_type_service_mw , status.running) make_read_only(form_start.request_type_service_tapi, status.running) make_read_only(form_start.request_type_slice_l2nm , status.running) make_read_only(form_start.request_type_slice_l3nm , status.running) return render_template('load_gen/home.html', form_start=form_start, form_stop=form_stop, is_running=status.running) return redirect(url_for('load_gen.home'))
src/webui/service/templates/load_gen/home.html +43 −58 Original line number Diff line number Diff line Loading @@ -20,36 +20,34 @@ <h1>Load Generator</h1> <br /> <form id="load_gen_start" method="POST"> {% if not is_running %} {{ form_start.hidden_tag() }} {% endif %} <form id="load_gen_form" method="POST" action="{{ form_action }}"> {{ form.hidden_tag() }} <fieldset> <div class="row mb-3"> {{ form_start.num_requests.label(class="col-sm-2 col-form-label") }} {{ form.num_requests.label(class="col-sm-2 col-form-label") }} <div class="col-sm-10"> {% if form_start.num_requests.errors %} {{ form_start.num_requests(class="form-control is-invalid") }} {% if form.num_requests.errors %} {{ form.num_requests(class="form-control is-invalid") }} <div class="invalid-feedback"> {% for error in form_start.num_requests.errors %}<span>{{ error }}</span>{% endfor %} {% for error in form.num_requests.errors %}<span>{{ error }}</span>{% endfor %} </div> {% else %} {{ form_start.num_requests(class="form-control") }} {{ form.num_requests(class="form-control") }} {% endif %} </div> </div> <br /> <div class="row mb-3"> {{ form_start.num_generated.label(class="col-sm-2 col-form-label") }} {{ form.num_generated.label(class="col-sm-2 col-form-label") }} <div class="col-sm-10"> {% if form_start.num_generated.errors %} {{ form_start.num_generated(class="form-control is-invalid") }} {% if form.num_generated.errors %} {{ form.num_generated(class="form-control is-invalid") }} <div class="invalid-feedback"> {% for error in form_start.num_generated.errors %}<span>{{ error }}</span>{% endfor %} {% for error in form.num_generated.errors %}<span>{{ error }}</span>{% endfor %} </div> {% else %} {{ form_start.num_generated(class="form-control") }} {{ form.num_generated(class="form-control") }} {% endif %} </div> </div> Loading @@ -58,58 +56,58 @@ <div class="row mb-3"> <div class="col-sm-2 col-form-label">Service Types:</div> <div class="col-sm-10"> {{ form_start.request_type_slice_l2nm }} {{ form_start.request_type_slice_l2nm .label(class="col-sm-3 col-form-label") }} {{ form_start.request_type_slice_l3nm }} {{ form_start.request_type_slice_l3nm .label(class="col-sm-3 col-form-label") }} {{ form.request_type_slice_l2nm }} {{ form.request_type_slice_l2nm .label(class="col-sm-3 col-form-label") }} {{ form.request_type_slice_l3nm }} {{ form.request_type_slice_l3nm .label(class="col-sm-3 col-form-label") }} <br/> {{ form_start.request_type_service_l2nm }} {{ form_start.request_type_service_l2nm.label(class="col-sm-3 col-form-label") }} {{ form_start.request_type_service_l3nm }} {{ form_start.request_type_service_l3nm.label(class="col-sm-3 col-form-label") }} {{ form.request_type_service_l2nm }} {{ form.request_type_service_l2nm.label(class="col-sm-3 col-form-label") }} {{ form.request_type_service_l3nm }} {{ form.request_type_service_l3nm.label(class="col-sm-3 col-form-label") }} <br/> {{ form_start.request_type_service_mw }} {{ form_start.request_type_service_mw .label(class="col-sm-3 col-form-label") }} {{ form_start.request_type_service_tapi }} {{ form_start.request_type_service_tapi.label(class="col-sm-3 col-form-label") }} {{ form.request_type_service_mw }} {{ form.request_type_service_mw .label(class="col-sm-3 col-form-label") }} {{ form.request_type_service_tapi }} {{ form.request_type_service_tapi.label(class="col-sm-3 col-form-label") }} </div> </div> <br /> <div class="row mb-3"> {{ form_start.offered_load.label(class="col-sm-2 col-form-label") }} {{ form.offered_load.label(class="col-sm-2 col-form-label") }} <div class="col-sm-10"> {% if form_start.offered_load.errors %} {{ form_start.offered_load(class="form-control is-invalid") }} {% if form.offered_load.errors %} {{ form.offered_load(class="form-control is-invalid") }} <div class="invalid-feedback"> {% for error in form_start.offered_load.errors %}<span>{{ error }}</span>{% endfor %} {% for error in form.offered_load.errors %}<span>{{ error }}</span>{% endfor %} </div> {% else %} {{ form_start.offered_load(class="form-control") }} {{ form.offered_load(class="form-control") }} {% endif %} </div> </div> <br /> <div class="row mb-3"> {{ form_start.holding_time.label(class="col-sm-2 col-form-label") }} {{ form.holding_time.label(class="col-sm-2 col-form-label") }} <div class="col-sm-10"> {% if form_start.holding_time.errors %} {{ form_start.holding_time(class="form-control is-invalid") }} {% if form.holding_time.errors %} {{ form.holding_time(class="form-control is-invalid") }} <div class="invalid-feedback"> {% for error in form_start.holding_time.errors %}<span>{{ error }}</span>{% endfor %} {% for error in form.holding_time.errors %}<span>{{ error }}</span>{% endfor %} </div> {% else %} {{ form_start.holding_time(class="form-control") }} {{ form.holding_time(class="form-control") }} {% endif %} </div> </div> <br /> <div class="row mb-3"> {{ form_start.inter_arrival_time.label(class="col-sm-2 col-form-label") }} {{ form.inter_arrival_time.label(class="col-sm-2 col-form-label") }} <div class="col-sm-10"> {% if form_start.inter_arrival_time.errors %} {{ form_start.inter_arrival_time(class="form-control is-invalid") }} {% if form.inter_arrival_time.errors %} {{ form.inter_arrival_time(class="form-control is-invalid") }} <div class="invalid-feedback"> {% for error in form_start.inter_arrival_time.errors %}<span>{{ error }}</span>{% endfor %} {% for error in form.inter_arrival_time.errors %}<span>{{ error }}</span>{% endfor %} </div> {% else %} {{ form_start.inter_arrival_time(class="form-control") }} {{ form.inter_arrival_time(class="form-control") }} {% endif %} </div> </div> Loading @@ -117,7 +115,7 @@ <div class="row mb-3"> <div class="col-sm-10"> {{ form_start.do_teardown }} {{ form_start.do_teardown.label(class="col-sm-3 col-form-label") }}<br/> {{ form.do_teardown }} {{ form.do_teardown.label(class="col-sm-3 col-form-label") }}<br/> </div> </div> <br /> Loading @@ -125,15 +123,15 @@ <div class="row mb-3"> <div class="col-sm-2 col-form-label">DLT Settings:</div> <div class="col-sm-10"> {{ form_start.record_to_dlt }} {{ form_start.record_to_dlt.label(class="col-sm-3 col-form-label") }} <br/> {{ form_start.dlt_domain_id.label(class="col-sm-2 col-form-label") }} {% if form_start.dlt_domain_id.errors %} {{ form_start.dlt_domain_id(class="form-control is-invalid") }} {{ form.record_to_dlt }} {{ form.record_to_dlt.label(class="col-sm-3 col-form-label") }} <br/> {{ form.dlt_domain_id.label(class="col-sm-2 col-form-label") }} {% if form.dlt_domain_id.errors %} {{ form.dlt_domain_id(class="form-control is-invalid") }} <div class="invalid-feedback"> {% for error in form_start.dlt_domain_id.errors %}<span>{{ error }}</span>{% endfor %} {% for error in form.dlt_domain_id.errors %}<span>{{ error }}</span>{% endfor %} </div> {% else %} {{ form_start.dlt_domain_id(class="form-control") }} {{ form.dlt_domain_id(class="form-control") }} {% endif %} </div> </div> Loading @@ -142,29 +140,16 @@ <div class="row mb-3"> <div class="col-sm-2 col-form-label">Status:</div> <div class="col-sm-10"> {{ form_start.infinite_loop }} {{ form_start.infinite_loop.label(class="col-sm-3 col-form-label") }} {{ form_start.running }} {{ form_start.running.label(class="col-sm-3 col-form-label") }} {{ form.infinite_loop }} {{ form.infinite_loop.label(class="col-sm-3 col-form-label") }} {{ form.running }} {{ form.running.label(class="col-sm-3 col-form-label") }} </div> </div> <br /> {% if not is_running %} <div class="d-grid gap-2 d-md-flex justify-content-md-start"> {{ form_start.submit(class="btn btn-primary") }} {{ form.submit(class="btn btn-primary") }} </div> {% endif %} </fieldset> </form> {% if is_running %} <form id="load_gen_stop" method="POST"> {{ form_stop.hidden_tag() }} <fieldset> <div class="d-grid gap-2 d-md-flex justify-content-md-start"> {{ form_stop.submit(class="btn btn-primary") }} </div> </fieldset> </form> {% endif %} {% endblock %}