Skip to content
Snippets Groups Projects
LoadGeneratorServiceServicerImpl.py 2.81 KiB
Newer Older
  • Learn to ignore specific revisions
  • Lluis Gifre Renom's avatar
    Lluis Gifre Renom committed
    # Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
    
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    from typing import Optional
    import grpc, logging
    from apscheduler.schedulers.background import BackgroundScheduler
    from common.proto.context_pb2 import Empty
    from common.proto.load_generator_pb2_grpc import LoadGeneratorServiceServicer
    from load_generator.load_gen.Constants import RequestType
    from load_generator.load_gen.Parameters import Parameters
    from load_generator.load_gen.RequestGenerator import RequestGenerator
    from load_generator.load_gen.RequestScheduler import RequestScheduler
    
    LOGGER = logging.getLogger(__name__)
    
    class LoadGeneratorServiceServicerImpl(LoadGeneratorServiceServicer):
        def __init__(self):
            LOGGER.debug('Creating Servicer...')
            self._parameters = Parameters(
    
                num_requests = 100,
    
                request_types = [
                    RequestType.SERVICE_L2NM,
                    RequestType.SERVICE_L3NM,
                    #RequestType.SERVICE_MW,
                    #RequestType.SERVICE_TAPI,
                    RequestType.SLICE_L2NM,
                    RequestType.SLICE_L3NM,
                ],
                offered_load  = 50,
    
                holding_time  = 10,
    
                do_teardown   = True,
    
                dry_mode      = False,           # in dry mode, no request is sent to TeraFlowSDN
                record_to_dlt = False,           # if record_to_dlt, changes in device/link/service/slice are uploaded to DLT
                dlt_domain_id = 'dlt-perf-eval', # domain used to uploaded entities, ignored when record_to_dlt = False
            )
            self._generator : Optional[RequestGenerator] = None
            self._scheduler : Optional[RequestScheduler] = None
            LOGGER.debug('Servicer Created')
    
        def Start(self, request : Empty, context : grpc.ServicerContext) -> Empty:
            LOGGER.info('Initializing Generator...')
            self._generator = RequestGenerator(self._parameters)
            self._generator.initialize()
    
            LOGGER.info('Running Schedule...')
            self._scheduler = RequestScheduler(self._parameters, self._generator, scheduler_class=BackgroundScheduler)
            self._scheduler.start()
            return Empty()
    
        def Stop(self, request : Empty, context : grpc.ServicerContext) -> Empty:
            if self._scheduler is not None:
                self._scheduler.stop()
            return Empty()