diff --git a/src/context/service/database/Constraint.py b/src/context/service/database/Constraint.py index 5ebe36f99182c8a60ea145c0d902c6ce62475eb5..3a73f6589f9332aa4c84f8f296f2cb56db3048bf 100644 --- a/src/context/service/database/Constraint.py +++ b/src/context/service/database/Constraint.py @@ -86,26 +86,24 @@ def upsert_constraints( ) -> bool: uuids_to_upsert : Dict[str, int] = dict() rules_to_upsert : List[Dict] = list() - if not is_delete: - for constraint in constraints: - constraint_uuid = constraint['constraint_uuid'] - position = uuids_to_upsert.get(constraint_uuid) - if position is None: - # if not added, add it - rules_to_upsert.append(constraint) - uuids_to_upsert[constraint_uuid] = len(rules_to_upsert) - 1 - else: - # if already added, update occurrence - rules_to_upsert[position] = constraint + for constraint in constraints: + constraint_uuid = constraint['constraint_uuid'] + position = uuids_to_upsert.get(constraint_uuid) + if position is None: + # if not added, add it + rules_to_upsert.append(constraint) + uuids_to_upsert[constraint_uuid] = len(rules_to_upsert) - 1 + else: + # if already added, update occurrence + rules_to_upsert[position] = constraint # Delete all constraints not in uuids_to_upsert delete_affected = False - if is_delete or len(uuids_to_upsert) > 0: + if len(uuids_to_upsert) > 0: stmt = delete(ConstraintModel) if service_uuid is not None: stmt = stmt.where(ConstraintModel.service_uuid == service_uuid) if slice_uuid is not None: stmt = stmt.where(ConstraintModel.slice_uuid == slice_uuid ) - if not is_delete: - stmt = stmt.where(ConstraintModel.constraint_uuid.not_in(set(uuids_to_upsert.keys()))) + stmt = stmt.where(ConstraintModel.constraint_uuid.not_in(set(uuids_to_upsert.keys()))) #str_stmt = stmt.compile(dialect=postgresql.dialect(), compile_kwargs={"literal_binds": True}) #LOGGER.warning('delete stmt={:s}'.format(str(str_stmt))) constraint_deletes = session.execute(stmt) diff --git a/src/load_generator/load_gen/Constants.py b/src/load_generator/load_gen/Constants.py index b71dd9a35329e2aef6ce64739f59103a656b4de3..9ae3cdc1216891ca4dfcf01c1bd49d27bf4ef6f6 100644 --- a/src/load_generator/load_gen/Constants.py +++ b/src/load_generator/load_gen/Constants.py @@ -26,3 +26,5 @@ ENDPOINT_COMPATIBILITY = { 'PHOTONIC_MEDIA:FLEX:G_6_25GHZ:INPUT': 'PHOTONIC_MEDIA:FLEX:G_6_25GHZ:OUTPUT', 'PHOTONIC_MEDIA:DWDM:G_50GHZ:INPUT' : 'PHOTONIC_MEDIA:DWDM:G_50GHZ:OUTPUT', } + +MAX_WORKER_THREADS = 10 \ No newline at end of file diff --git a/src/load_generator/load_gen/RequestGenerator.py b/src/load_generator/load_gen/RequestGenerator.py index a6d14307eee9bbc531e09495d4b650e361aa3d26..0ada285bc88e7d6a2405c3639f31778824d84855 100644 --- a/src/load_generator/load_gen/RequestGenerator.py +++ b/src/load_generator/load_gen/RequestGenerator.py @@ -230,9 +230,9 @@ class RequestGenerator: ] if request_type == RequestType.SERVICE_L2NM: - availability = int(random.uniform(00.0, 99.99) * 100.0) / 100.0 - capacity_gbps = int(random.uniform(0.1, 100.0) * 100.0) / 100.0 - e2e_latency_ms = int(random.uniform(5.0, 100.0) * 100.0) / 100.0 + availability = round(random.uniform(0.0, 99.99), ndigits=2) + capacity_gbps = round(random.uniform(0.1, 100.00), ndigits=2) + e2e_latency_ms = round(random.uniform(5.0, 100.00), ndigits=2) constraints = [ json_constraint_sla_availability(1, True, availability), @@ -275,9 +275,9 @@ class RequestGenerator: request_uuid, endpoint_ids=endpoint_ids, constraints=constraints, config_rules=config_rules) elif request_type == RequestType.SERVICE_L3NM: - availability = int(random.uniform(00.0, 99.99) * 100.0) / 100.0 - capacity_gbps = int(random.uniform(0.1, 100.0) * 100.0) / 100.0 - e2e_latency_ms = int(random.uniform(5.0, 100.0) * 100.0) / 100.0 + availability = round(random.uniform(0.0, 99.99), ndigits=2) + capacity_gbps = round(random.uniform(0.1, 100.00), ndigits=2) + e2e_latency_ms = round(random.uniform(5.0, 100.00), ndigits=2) constraints = [ json_constraint_sla_availability(1, True, availability), @@ -380,9 +380,9 @@ class RequestGenerator: json_endpoint_id(json_device_id(dst_device_uuid), dst_endpoint_uuid), ] - availability = int(random.uniform(00.0, 99.99) * 100.0) / 100.0 - capacity_gbps = int(random.uniform(0.1, 100.0) * 100.0) / 100.0 - e2e_latency_ms = int(random.uniform(5.0, 100.0) * 100.0) / 100.0 + availability = round(random.uniform(0.0, 99.99), ndigits=2) + capacity_gbps = round(random.uniform(0.1, 100.00), ndigits=2) + e2e_latency_ms = round(random.uniform(5.0, 100.00), ndigits=2) constraints = [ json_constraint_sla_availability(1, True, availability), json_constraint_sla_capacity(capacity_gbps), diff --git a/src/load_generator/load_gen/RequestScheduler.py b/src/load_generator/load_gen/RequestScheduler.py index 57afe80bec569b29d2931256a8c1cf7a1ab3eb85..773a37eac258f8b3c16c966464ced124d3c77c85 100644 --- a/src/load_generator/load_gen/RequestScheduler.py +++ b/src/load_generator/load_gen/RequestScheduler.py @@ -21,6 +21,7 @@ from typing import Dict, Optional from common.proto.context_pb2 import Service, ServiceId, Slice, SliceId from service.client.ServiceClient import ServiceClient from slice.client.SliceClient import SliceClient +from .Constants import MAX_WORKER_THREADS from .DltTools import explore_entities_to_record, record_entities from .Parameters import Parameters from .RequestGenerator import RequestGenerator @@ -37,7 +38,7 @@ class RequestScheduler: self._scheduler = scheduler_class() self._scheduler.configure( jobstores = {'default': MemoryJobStore()}, - executors = {'default': ThreadPoolExecutor(max_workers=10)}, + executors = {'default': ThreadPoolExecutor(max_workers=MAX_WORKER_THREADS)}, job_defaults = { 'coalesce': False, 'max_instances': 100, diff --git a/src/webui/service/__init__.py b/src/webui/service/__init__.py index ef5253b876085c152fa7a71ffb5a29cfd1f90516..fca1071419b3b2b61739c2a0d1d8bfa45aba5119 100644 --- a/src/webui/service/__init__.py +++ b/src/webui/service/__init__.py @@ -98,6 +98,7 @@ def create_app(use_config=None, web_app_root=None): app.jinja_env.globals.update({ # pylint: disable=no-member 'enumerate' : enumerate, 'json_to_list' : json_to_list, + 'round' : round, 'get_working_context' : get_working_context, 'get_working_topology': get_working_topology, }) diff --git a/src/webui/service/templates/service/detail.html b/src/webui/service/templates/service/detail.html index d99ede3e02c9716782317efc60fcc8d92e2e811a..e17b8539f6e3312097a684f505322f070dfae379 100644 --- a/src/webui/service/templates/service/detail.html +++ b/src/webui/service/templates/service/detail.html @@ -141,7 +141,7 @@ <td>SLA Capacity</td> <td>-</td> <td> - {{ constraint.sla_capacity.capacity_gbps }} Gbps + {{ round(constraint.sla_capacity.capacity_gbps, ndigits=2) }} Gbps </td> </tr> {% elif constraint.WhichOneof('constraint')=='sla_latency' %} @@ -149,7 +149,7 @@ <td>SLA E2E Latency</td> <td>-</td> <td> - {{ constraint.sla_latency.e2e_latency_ms }} ms + {{ round(constraint.sla_latency.e2e_latency_ms, ndigits=2) }} ms </td> </tr> {% elif constraint.WhichOneof('constraint')=='sla_availability' %} diff --git a/src/webui/service/templates/slice/detail.html b/src/webui/service/templates/slice/detail.html index 6c8d15aed6fcf91580e9fa3bfe9f2f9a14e7666b..0c11744cb6758490c7f5aeb286d365a2dd92a031 100644 --- a/src/webui/service/templates/slice/detail.html +++ b/src/webui/service/templates/slice/detail.html @@ -141,7 +141,7 @@ <td>SLA Capacity</td> <td>-</td> <td> - {{ constraint.sla_capacity.capacity_gbps }} Gbps + {{ round(constraint.sla_capacity.capacity_gbps, ndigits=2) }} Gbps </td> </tr> {% elif constraint.WhichOneof('constraint')=='sla_latency' %} @@ -149,7 +149,7 @@ <td>SLA E2E Latency</td> <td>-</td> <td> - {{ constraint.sla_latency.e2e_latency_ms }} ms + {{ round(constraint.sla_latency.e2e_latency_ms, ndigits=2) }} ms </td> </tr> {% elif constraint.WhichOneof('constraint')=='sla_availability' %}