Skip to content
Snippets Groups Projects
Commit 4b5eff48 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

WebUI component:

- Added parametrization of availability, capacity and latency constraints in Load Generator dashboard
parent d3350bae
No related branches found
No related tags found
2 merge requests!142Release TeraFlowSDN 2.1,!92New features in Load Generator
......@@ -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
......
......@@ -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)])
......@@ -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)
......
......@@ -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')
......@@ -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)
......@@ -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
......@@ -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)
......
......@@ -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/>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment