Loading src/webui/Dockerfile +1 −0 Original line number Diff line number Diff line Loading @@ -79,6 +79,7 @@ COPY --chown=webui:webui src/device/__init__.py device/__init__.py COPY --chown=webui:webui src/device/client/. device/client/ COPY --chown=webui:webui src/load_generator/__init__.py load_generator/__init__.py COPY --chown=webui:webui src/load_generator/client/. load_generator/client/ COPY --chown=webui:webui src/load_generator/tools/. load_generator/tools/ COPY --chown=webui:webui src/service/__init__.py service/__init__.py COPY --chown=webui:webui src/service/client/. service/client/ COPY --chown=webui:webui src/slice/__init__.py slice/__init__.py Loading src/webui/service/load_gen/forms.py +10 −1 Original line number Diff line number Diff line Loading @@ -14,7 +14,12 @@ from flask_wtf import FlaskForm from wtforms import BooleanField, FloatField, IntegerField, StringField, SubmitField from wtforms.validators import DataRequired, NumberRange from wtforms.validators import DataRequired, NumberRange, Regexp from load_generator.tools.ListScalarRange import RE_SCALAR_RANGE_LIST DEFAULT_AVAILABILITY = '0.0..99.9999' DEFAULT_CAPACITY_GBPS = '0.1..100.00' #'10, 40, 50, 100, 400' DEFAULT_E2E_LATENCY_MS = '5.0..100.00' class LoadGenForm(FlaskForm): num_requests = IntegerField('Num Requests', default=100, validators=[DataRequired(), NumberRange(min=0)]) Loading @@ -31,6 +36,10 @@ class LoadGenForm(FlaskForm): holding_time = FloatField('Holding Time [seconds]', default=10, validators=[NumberRange(min=0.0)]) inter_arrival_time = FloatField('Inter Arrival Time [seconds]', default=0, validators=[NumberRange(min=0.0)]) availability = FloatField('Availability [%]', default=DEFAULT_AVAILABILITY, validators=[Regexp(RE_SCALAR_RANGE_LIST)]) capacity_gbps = FloatField('Capacity [Gbps]', default=DEFAULT_CAPACITY_GBPS, validators=[Regexp(RE_SCALAR_RANGE_LIST)]) e2e_latency_ms = FloatField('E2E Latency [ms]', default=DEFAULT_E2E_LATENCY_MS, validators=[Regexp(RE_SCALAR_RANGE_LIST)]) do_teardown = BooleanField('Do Teardown', default=True) record_to_dlt = BooleanField('Record to DLT', default=False) Loading src/webui/service/load_gen/routes.py +16 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ 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 load_generator.tools.ListScalarRange import list_scalar_range__to__grpc, parse_list_scalar_range from .forms import LoadGenForm load_gen = Blueprint('load_gen', __name__, url_prefix='/load_gen') Loading Loading @@ -55,11 +56,18 @@ def home(): _holding_time = round(status.parameters.holding_time , ndigits=4) _inter_arrival_time = round(status.parameters.inter_arrival_time , ndigits=4) _availability = str(status.parameters.availability ).replace(' ', '') _capacity_gbps = str(status.parameters.capacity_gbps ).replace(' ', '') _e2e_latency_ms = str(status.parameters.e2e_latency_ms).replace(' ', '') 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.availability , _availability , readonly=status.running) set_properties(form.capacity_gbps , _capacity_gbps , readonly=status.running) set_properties(form.e2e_latency_ms , _e2e_latency_ms , 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) Loading @@ -82,6 +90,10 @@ def start(): form = LoadGenForm() if form.validate_on_submit(): try: _availability = parse_list_scalar_range(form.availability.data ) _capacity_gbps = parse_list_scalar_range(form.capacity_gbps.data ) _e2e_latency_ms = parse_list_scalar_range(form.e2e_latency_ms.data) load_gen_params = Parameters() load_gen_params.num_requests = form.num_requests.data load_gen_params.offered_load = form.offered_load.data Loading @@ -92,6 +104,10 @@ def start(): load_gen_params.record_to_dlt = form.record_to_dlt.data load_gen_params.dlt_domain_id = form.dlt_domain_id.data list_scalar_range__to__grpc(_availability, load_gen_params.availability ) # pylint: disable=no-member list_scalar_range__to__grpc(_capacity_gbps, load_gen_params.capacity_gbps ) # pylint: disable=no-member list_scalar_range__to__grpc(_e2e_latency_ms, load_gen_params.e2e_latency_ms) # pylint: disable=no-member del load_gen_params.request_types[:] # pylint: disable=no-member request_types = list() if form.request_type_service_l2nm.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_L2NM) Loading src/webui/service/templates/load_gen/home.html +45 −0 Original line number Diff line number Diff line Loading @@ -113,6 +113,51 @@ </div> <br /> <div class="row mb-3"> {{ form.availability.label(class="col-sm-2 col-form-label") }} <div class="col-sm-10"> {% if form.availability.errors %} {{ form.availability(class="form-control is-invalid") }} <div class="invalid-feedback"> {% for error in form.availability.errors %}<span>{{ error }}</span>{% endfor %} </div> {% else %} {{ form.availability(class="form-control") }} {% endif %} </div> </div> <br /> <div class="row mb-3"> {{ form.capacity_gbps.label(class="col-sm-2 col-form-label") }} <div class="col-sm-10"> {% if form.capacity_gbps.errors %} {{ form.capacity_gbps(class="form-control is-invalid") }} <div class="invalid-feedback"> {% for error in form.capacity_gbps.errors %}<span>{{ error }}</span>{% endfor %} </div> {% else %} {{ form.capacity_gbps(class="form-control") }} {% endif %} </div> </div> <br /> <div class="row mb-3"> {{ form.e2e_latency_ms.label(class="col-sm-2 col-form-label") }} <div class="col-sm-10"> {% if form.e2e_latency_ms.errors %} {{ form.e2e_latency_ms(class="form-control is-invalid") }} <div class="invalid-feedback"> {% for error in form.e2e_latency_ms.errors %}<span>{{ error }}</span>{% endfor %} </div> {% else %} {{ form.e2e_latency_ms(class="form-control") }} {% endif %} </div> </div> <br /> <div class="row mb-3"> <div class="col-sm-10"> {{ form.do_teardown }} {{ form.do_teardown.label(class="col-sm-3 col-form-label") }}<br/> Loading Loading
src/webui/Dockerfile +1 −0 Original line number Diff line number Diff line Loading @@ -79,6 +79,7 @@ COPY --chown=webui:webui src/device/__init__.py device/__init__.py COPY --chown=webui:webui src/device/client/. device/client/ COPY --chown=webui:webui src/load_generator/__init__.py load_generator/__init__.py COPY --chown=webui:webui src/load_generator/client/. load_generator/client/ COPY --chown=webui:webui src/load_generator/tools/. load_generator/tools/ COPY --chown=webui:webui src/service/__init__.py service/__init__.py COPY --chown=webui:webui src/service/client/. service/client/ COPY --chown=webui:webui src/slice/__init__.py slice/__init__.py Loading
src/webui/service/load_gen/forms.py +10 −1 Original line number Diff line number Diff line Loading @@ -14,7 +14,12 @@ from flask_wtf import FlaskForm from wtforms import BooleanField, FloatField, IntegerField, StringField, SubmitField from wtforms.validators import DataRequired, NumberRange from wtforms.validators import DataRequired, NumberRange, Regexp from load_generator.tools.ListScalarRange import RE_SCALAR_RANGE_LIST DEFAULT_AVAILABILITY = '0.0..99.9999' DEFAULT_CAPACITY_GBPS = '0.1..100.00' #'10, 40, 50, 100, 400' DEFAULT_E2E_LATENCY_MS = '5.0..100.00' class LoadGenForm(FlaskForm): num_requests = IntegerField('Num Requests', default=100, validators=[DataRequired(), NumberRange(min=0)]) Loading @@ -31,6 +36,10 @@ class LoadGenForm(FlaskForm): holding_time = FloatField('Holding Time [seconds]', default=10, validators=[NumberRange(min=0.0)]) inter_arrival_time = FloatField('Inter Arrival Time [seconds]', default=0, validators=[NumberRange(min=0.0)]) availability = FloatField('Availability [%]', default=DEFAULT_AVAILABILITY, validators=[Regexp(RE_SCALAR_RANGE_LIST)]) capacity_gbps = FloatField('Capacity [Gbps]', default=DEFAULT_CAPACITY_GBPS, validators=[Regexp(RE_SCALAR_RANGE_LIST)]) e2e_latency_ms = FloatField('E2E Latency [ms]', default=DEFAULT_E2E_LATENCY_MS, validators=[Regexp(RE_SCALAR_RANGE_LIST)]) do_teardown = BooleanField('Do Teardown', default=True) record_to_dlt = BooleanField('Record to DLT', default=False) Loading
src/webui/service/load_gen/routes.py +16 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ 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 load_generator.tools.ListScalarRange import list_scalar_range__to__grpc, parse_list_scalar_range from .forms import LoadGenForm load_gen = Blueprint('load_gen', __name__, url_prefix='/load_gen') Loading Loading @@ -55,11 +56,18 @@ def home(): _holding_time = round(status.parameters.holding_time , ndigits=4) _inter_arrival_time = round(status.parameters.inter_arrival_time , ndigits=4) _availability = str(status.parameters.availability ).replace(' ', '') _capacity_gbps = str(status.parameters.capacity_gbps ).replace(' ', '') _e2e_latency_ms = str(status.parameters.e2e_latency_ms).replace(' ', '') 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.availability , _availability , readonly=status.running) set_properties(form.capacity_gbps , _capacity_gbps , readonly=status.running) set_properties(form.e2e_latency_ms , _e2e_latency_ms , 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) Loading @@ -82,6 +90,10 @@ def start(): form = LoadGenForm() if form.validate_on_submit(): try: _availability = parse_list_scalar_range(form.availability.data ) _capacity_gbps = parse_list_scalar_range(form.capacity_gbps.data ) _e2e_latency_ms = parse_list_scalar_range(form.e2e_latency_ms.data) load_gen_params = Parameters() load_gen_params.num_requests = form.num_requests.data load_gen_params.offered_load = form.offered_load.data Loading @@ -92,6 +104,10 @@ def start(): load_gen_params.record_to_dlt = form.record_to_dlt.data load_gen_params.dlt_domain_id = form.dlt_domain_id.data list_scalar_range__to__grpc(_availability, load_gen_params.availability ) # pylint: disable=no-member list_scalar_range__to__grpc(_capacity_gbps, load_gen_params.capacity_gbps ) # pylint: disable=no-member list_scalar_range__to__grpc(_e2e_latency_ms, load_gen_params.e2e_latency_ms) # pylint: disable=no-member del load_gen_params.request_types[:] # pylint: disable=no-member request_types = list() if form.request_type_service_l2nm.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_L2NM) Loading
src/webui/service/templates/load_gen/home.html +45 −0 Original line number Diff line number Diff line Loading @@ -113,6 +113,51 @@ </div> <br /> <div class="row mb-3"> {{ form.availability.label(class="col-sm-2 col-form-label") }} <div class="col-sm-10"> {% if form.availability.errors %} {{ form.availability(class="form-control is-invalid") }} <div class="invalid-feedback"> {% for error in form.availability.errors %}<span>{{ error }}</span>{% endfor %} </div> {% else %} {{ form.availability(class="form-control") }} {% endif %} </div> </div> <br /> <div class="row mb-3"> {{ form.capacity_gbps.label(class="col-sm-2 col-form-label") }} <div class="col-sm-10"> {% if form.capacity_gbps.errors %} {{ form.capacity_gbps(class="form-control is-invalid") }} <div class="invalid-feedback"> {% for error in form.capacity_gbps.errors %}<span>{{ error }}</span>{% endfor %} </div> {% else %} {{ form.capacity_gbps(class="form-control") }} {% endif %} </div> </div> <br /> <div class="row mb-3"> {{ form.e2e_latency_ms.label(class="col-sm-2 col-form-label") }} <div class="col-sm-10"> {% if form.e2e_latency_ms.errors %} {{ form.e2e_latency_ms(class="form-control is-invalid") }} <div class="invalid-feedback"> {% for error in form.e2e_latency_ms.errors %}<span>{{ error }}</span>{% endfor %} </div> {% else %} {{ form.e2e_latency_ms(class="form-control") }} {% endif %} </div> </div> <br /> <div class="row mb-3"> <div class="col-sm-10"> {{ form.do_teardown }} {{ form.do_teardown.label(class="col-sm-3 col-form-label") }}<br/> Loading