diff --git a/.gitignore b/.gitignore index 32761fef9b6640f2b5f04157d2eeeb9fc6d23d37..73358ad82e86b0ccf2133b18798a2cf27f15d6cf 100644 --- a/.gitignore +++ b/.gitignore @@ -49,7 +49,6 @@ coverage.xml *.py,cover .hypothesis/ .pytest_cache/ -.benchmarks/ cover/ # Translations @@ -86,7 +85,7 @@ ipython_config.py # pyenv # For a library or package, you might want to ignore these files since the code is # intended to run in multiple environments; otherwise, check them in: -.python-version +# .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. @@ -118,9 +117,6 @@ venv.bak/ .spyderproject .spyproject -# VSCode project settings -.vscode/ - # Rope project settings .ropeproject diff --git a/manifests/contextservice.yaml b/manifests/contextservice.yaml deleted file mode 100644 index b05c37b4972246e4a1f4697885d48fe8fe209ef1..0000000000000000000000000000000000000000 --- a/manifests/contextservice.yaml +++ /dev/null @@ -1,53 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: contextservice -spec: - selector: - matchLabels: - app: contextservice - template: - metadata: - labels: - app: contextservice - spec: - terminationGracePeriodSeconds: 5 - containers: - - name: server - image: context_service:develop - imagePullPolicy: Never - ports: - - containerPort: 7070 - env: - - name: DB_ENGINE - value: "redis" - - name: REDISDB_DATABASE_ID - value: "0" - - name: LOG_LEVEL - value: "DEBUG" - readinessProbe: - exec: - command: ["/bin/grpc_health_probe", "-addr=:7070"] - livenessProbe: - exec: - command: ["/bin/grpc_health_probe", "-addr=:7070"] - resources: - requests: - cpu: 250m - memory: 512Mi - limits: - cpu: 700m - memory: 1024Mi ---- -apiVersion: v1 -kind: Service -metadata: - name: contextservice -spec: - type: ClusterIP - selector: - app: contextservice - ports: - - name: grpc - port: 7070 - targetPort: 7070 diff --git a/manifests/redisdb.yaml b/manifests/redisdb.yaml deleted file mode 100644 index b16c8282eec705055083fc8d09fead62591b7639..0000000000000000000000000000000000000000 --- a/manifests/redisdb.yaml +++ /dev/null @@ -1,38 +0,0 @@ ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: redisdb -spec: - selector: - matchLabels: - app: redisdb - replicas: 1 - template: - metadata: - labels: - app: redisdb - version: v1 - spec: - containers: - - name: redisdb - image: redis:6.2 - ports: - - containerPort: 6379 ---- -apiVersion: v1 -kind: Service -metadata: - name: redisdb - labels: - app: redisdb -spec: - type: ClusterIP - selector: - app: redisdb - ports: - - name: redisdb - protocol: TCP - port: 6379 - targetPort: 6379 ---- diff --git a/src/build.sh b/src/build.sh index e5cb21fb1340056de9c362307809b80726d33d4d..b022ed8c3e38020c6a28e98ca61e8f32491b29d2 100755 --- a/src/build.sh +++ b/src/build.sh @@ -1,13 +1,5 @@ #!/usr/bin/env bash -# Make folder containing the script the root folder for its execution -cd $(dirname $0) - -echo "BUILD context" -context/genproto.sh -docker build -t "context_service:develop" -f context/Dockerfile_develop --quiet . -docker build -t "context_service:test" -f context/Dockerfile_test --quiet . - cd monitoring ./genproto.sh cd .. @@ -15,5 +7,3 @@ cd .. echo "BUILD monitoring" docker build -t "monitoring:dockerfile" -f monitoring/Dockerfile . -echo "Prune unused images" -docker image prune --force diff --git a/src/common/database/__init__.py b/src/common/database/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/common/database/inmemory/InMemoryDatabase.py b/src/common/database/inmemory/InMemoryDatabase.py deleted file mode 100644 index 59a2274a9785501ffb902015a066c5ae3792a1d8..0000000000000000000000000000000000000000 --- a/src/common/database/inmemory/InMemoryDatabase.py +++ /dev/null @@ -1,13 +0,0 @@ -import logging, json - -LOGGER = logging.getLogger(__name__) - -FILEPATH = 'data/topo_nsfnet.json' - -class InMemoryDatabase: - def __init__(self, filepath=FILEPATH, **parameters): - with open(filepath, 'r') as f: - self.json_topology = json.loads(f.read()) - - def get_topology(self): - return(self.json_topology) diff --git a/src/common/database/inmemory/__init__.py b/src/common/database/inmemory/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/common/database/redis/RedisDatabase.py b/src/common/database/redis/RedisDatabase.py deleted file mode 100644 index 38b0bf34b8db01bd2fc93712876ce93a56294fed..0000000000000000000000000000000000000000 --- a/src/common/database/redis/RedisDatabase.py +++ /dev/null @@ -1,62 +0,0 @@ -import logging, json, os, redis -#from .context_api.Context import Context - -LOGGER = logging.getLogger(__name__) - -# 60.0 seconds (aprox) in incremental steps from 0.002 till 29.99 seconds -RETRY_DELAY_INITIAL = 0.002 -RETRY_DELAY_INCREMENT = 1.831 -MAX_RETRIES = 15 - -URL_TEMPLATE = 'redis://{host}:{port}/{dbid}' - -FILEPATH = 'data/topo_nsfnet.json' - -class RedisDatabase: - def __init__(self, **parameters): - host = os.environ.get('REDISDB_SERVICE_HOST') - if(host is None): raise Exception('EnvironmentVariable(REDISDB_SERVICE_HOST) not found') - port = os.environ.get('REDISDB_SERVICE_PORT') - if(port is None): raise Exception('EnvironmentVariable(REDISDB_SERVICE_PORT) not found') - dbid = os.environ.get('REDISDB_DATABASE_ID') - if(dbid is None): raise Exception('EnvironmentVariable(REDISDB_DATABASE_ID) not found') - self.redis_url = URL_TEMPLATE.format(host=host, port=port, dbid=dbid) - self.handler = None - self.connect() # initialize self.handler and connect to server - - def connect(self): - self.handler = redis.Redis.from_url(self.redis_url) - - def close(self): - if(self.handler is not None): del self.handler - self.handler = None - - def get_topology(self): - str_topology = self.handler.get('topology') - if(str_topology is None): - with open(FILEPATH, 'r') as f: - json_topology = json.loads(f.read()) - str_topology = json.dumps(json_topology) - self.handler.setnx('topology', str_topology) - json_topology['source'] = 'redis missing, loaded from file' - else: - json_topology = json.loads(str_topology) - json_topology['source'] = 'redis found!' - return(json_topology) - - #def __getattr__(self, method_name): - # # Expose all methods in the database engine as owned - # def method(*args, **kwargs): - # num_try, delay = 1, RETRY_DELAY_INITIAL - # while num_try <= MAX_RETRIES: - # try: - # handler_method = getattr(self.handler, method_name, None) - # if handler_method is None: raise Exception('Redis does not support method({})'.format(method_name)) - # return handler_method(*args, **kwargs) - # except ConnectionError: # as e: - # #if('Channel is closed' not in str(e)): raise - # self.connect() # Try to reconnect - # time.sleep(delay) - # num_try, delay = num_try + 1, delay * RETRY_DELAY_INCREMENT - # raise Exception('Unable to reconnect to Redis after {}'.format(MAX_RETRIES)) - # return(method) diff --git a/src/common/database/redis/__init__.py b/src/common/database/redis/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/common/tools/RetryDecorator.py b/src/common/tools/RetryDecorator.py deleted file mode 100644 index d3f7f3e38c3e8b16afd39628bcfa4196f82b077e..0000000000000000000000000000000000000000 --- a/src/common/tools/RetryDecorator.py +++ /dev/null @@ -1,71 +0,0 @@ -# This decorator re-executes the decorated function when it raises an exception. It enables to control the exception -# classes that should trigger the re-execution, the maximum number of retries, the delay between retries, and set the -# execution of a preparation method before every retry. The delay is specfied by means of user-customizable functions. -# -# Delay functions should return a compute function with a single parameter, the number of retry. For instance: -# delay_linear(initial=0, increment=0): -# adds a constant delay of 0 seconds between retries -# delay_linear(initial=1, increment=0): -# adds a constant delay of 1 second between retries -# delay_linear(initial=1, increment=0.5, maximum=10): -# adds an increasing delay between retries, starting with 1 second, and incresing it linearly by steps of 0.5 -# seconds, up to 10 seconds, every time an exception is caught within the current execution. -# E.g. 1.0, 1.5, 2.0, 2.5, ..., 10.0, 10.0, 10.0, ... -# delay_exponential(initial=1, increment=1): adds a constant delay of 1 second between retries -# delay_exponential(initial=1, increment=2, maximum=10): -# adds an increasing delay between retries, starting with 1 second, and incresing it exponentially by steps of 2 -# seconds, up to 10 seconds, every time an exception is caught within the current execution. -# E.g. 1.0, 2.0, 4.0, 8.0, 10.0, 10.0, 10.0, ... - -# Arguments: -# - exceptions: defines the set of exception classes to be catched for reconnection. Others are re-raised. -# By default all exceptions are re-raised. -# - max_retries: defines the maximum number of retries acceptable before giving up. By default, 0 retries are executed. -# - delay_function: defines the delay computation method to be used. By default, delay_linear with a fixed delay of 0.1 -# seconds is used. -# - prepare_method_name: if not None, defines the name of the preparation method within the same class to be executed -# when an exception in exceptions is caught, and before running the next retry. By default, is None, meaning that no -# method is executed. -# - prepare_method_args: defines the list of positional arguments to be provided to the preparation method. If no -# preparation method is specified, the argument is silently ignored. By default, an empty list is defined. -# - prepare_method_kwargs: defines the dictionary of keyword arguments to be provided to the preparation method. If no -# preparation method is specified, the argument is silently ignored. By default, an empty dictionary is defined. - -import time - -def delay_linear(initial=0, increment=0, maximum=None): - def compute(num_try): - delay = initial + (num_try - 1) * increment - if maximum is not None: delay = max(delay, maximum) - return delay - return compute - -def delay_exponential(initial=1, increment=1, maximum=None): - def compute(num_try): - delay = initial * (num_try - 1) ^ increment - if maximum is not None: delay = max(delay, maximum) - return delay - return compute - -def retry(exceptions=set(), max_retries=0, delay_function=delay_linear(initial=0, increment=0), - prepare_method_name=None, prepare_method_args=[], prepare_method_kwargs={}): - def _reconnect(func): - def wrapper(self, *args, **kwargs): - if prepare_method_name is not None: - prepare_method = getattr(self, prepare_method_name, None) - if prepare_method is None: raise Exception('Prepare Method ({}) not found'.format(prepare_method_name)) - num_try, given_up = 0, False - while not given_up: - try: - return func(self, *args, **kwargs) - except Exception as e: - if not isinstance(e, tuple(exceptions)): raise - - num_try += 1 - given_up = num_try > max_retries - if given_up: raise Exception('Giving up... {} tries failed'.format(max_retries)) - if delay_function is not None: time.sleep(delay_function(num_try)) - - if prepare_method_name is not None: prepare_method(*prepare_method_args, **prepare_method_kwargs) - return(wrapper) - return(_reconnect) diff --git a/src/common/tools/__init__.py b/src/common/tools/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/context/Config.py b/src/context/Config.py deleted file mode 100644 index 2f2114d6195e5979ad5db736748616091c087a04..0000000000000000000000000000000000000000 --- a/src/context/Config.py +++ /dev/null @@ -1,10 +0,0 @@ -import logging - -# gRPC settings -SERVICE_PORT = 7070 -MAX_WORKERS = 10 -GRACE_PERIOD = 60 -LOG_LEVEL = logging.WARNING - -# Prometheus settings -METRICS_PORT = 8080 diff --git a/src/context/Dockerfile_develop b/src/context/Dockerfile_develop deleted file mode 100644 index 57175a3ab66df2ff96dc8964be9b93ab4a159913..0000000000000000000000000000000000000000 --- a/src/context/Dockerfile_develop +++ /dev/null @@ -1,35 +0,0 @@ -FROM python:3-slim - -# Install dependencies -RUN apt-get --yes --quiet --quiet update && \ - apt-get --yes --quiet --quiet install wget g++ && \ - rm -rf /var/lib/apt/lists/* - -# Set Python to show logs as they occur -ENV PYTHONUNBUFFERED=0 - -# Download the gRPC health probe -RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ - wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && \ - chmod +x /bin/grpc_health_probe - -# Get generic Python packages -RUN python3 -m pip install --upgrade pip setuptools wheel pip-tools - -# Set working directory -WORKDIR /var/teraflow - -# Create module sub-folders -RUN mkdir -p /var/teraflow/context - -# Get Python packages per module -COPY context/requirements.in context/requirements.in -RUN pip-compile --output-file=context/requirements.txt context/requirements.in -RUN python3 -m pip install -r context/requirements.in - -# Add files into working directory -COPY common/. common -COPY context/. context - -# Start context service -ENTRYPOINT ["python", "-m", "context.service"] diff --git a/src/context/Dockerfile_test b/src/context/Dockerfile_test deleted file mode 100644 index 5487a3ac9b1f5f72415d9dce37396675301a6822..0000000000000000000000000000000000000000 --- a/src/context/Dockerfile_test +++ /dev/null @@ -1,4 +0,0 @@ -FROM context_service:develop - -# Run integration tests -ENTRYPOINT ["pytest", "-v", "--log-level=DEBUG", "context/tests/test_integration.py"] diff --git a/src/context/__init__.py b/src/context/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/context/client/ContextClient.py b/src/context/client/ContextClient.py deleted file mode 100644 index 83d511cd70fedeb266be3c53516a4be19c6b677f..0000000000000000000000000000000000000000 --- a/src/context/client/ContextClient.py +++ /dev/null @@ -1,35 +0,0 @@ -import grpc, logging -from google.protobuf.json_format import MessageToDict -from common.tools.RetryDecorator import retry, delay_exponential -from context.proto.context_pb2_grpc import ContextServiceStub - -LOGGER = logging.getLogger(__name__) -MAX_RETRIES = 15 -DELAY_FUNCTION = delay_exponential(initial=0.01, increment=2.0, maximum=5.0) - -class ContextClient: - def __init__(self, address, port): - self.endpoint = '{}:{}'.format(address, port) - LOGGER.debug('Creating channel to {}...'.format(self.endpoint)) - self.channel = None - self.stub = None - self.connect() - LOGGER.debug('Channel created') - - def connect(self): - self.channel = grpc.insecure_channel(self.endpoint) - self.stub = ContextServiceStub(self.channel) - - def close(self): - if(self.channel is not None): self.channel.close() - self.channel = None - self.stub = None - - @retry(exceptions=set(), max_retries=MAX_RETRIES, delay_function=DELAY_FUNCTION, prepare_method_name='connect') - def GetTopology(self, request): - LOGGER.debug('GetTopology request: {}'.format(request)) - response = self.stub.GetTopology(request) - LOGGER.debug('GetTopology result: {}'.format(response)) - return MessageToDict( - response, including_default_value_fields=True, preserving_proto_field_name=True, - use_integers_for_enums=False) diff --git a/src/context/client/__init__.py b/src/context/client/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/context/genproto.sh b/src/context/genproto.sh deleted file mode 100755 index 55d596b50a7aef5243eb293658292130ae336776..0000000000000000000000000000000000000000 --- a/src/context/genproto.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -eu -# -# Copyright 2018 Google LLC -# -# 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. - -#!/bin/bash -e - -# Make folder containing the script the root folder for its execution -cd $(dirname $0) - -rm -rf proto/*.py -touch proto/__init__.py - -python -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto context.proto - -sed -i -E 's/(import\ .*)_pb2/from context.proto \1_pb2/g' proto/context_pb2.py -sed -i -E 's/(import\ .*)_pb2/from context.proto \1_pb2/g' proto/context_pb2_grpc.py diff --git a/src/context/proto/__init__.py b/src/context/proto/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/context/proto/context_pb2.py b/src/context/proto/context_pb2.py deleted file mode 100644 index e4acb11a579694017d1ee5572f1f94848731802a..0000000000000000000000000000000000000000 --- a/src/context/proto/context_pb2.py +++ /dev/null @@ -1,805 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: context.proto -"""Generated protocol buffer code.""" -from google.protobuf.internal import enum_type_wrapper -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='context.proto', - package='context', - syntax='proto3', - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\rcontext.proto\x12\x07\x63ontext\"\x07\n\x05\x45mpty\"{\n\x07\x43ontext\x12%\n\tcontextId\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12\x1f\n\x04topo\x18\x02 \x01(\x0b\x32\x11.context.Topology\x12(\n\x03\x63tl\x18\x03 \x01(\x0b\x32\x1b.context.TeraFlowController\"/\n\tContextId\x12\"\n\x0b\x63ontextUuid\x18\x01 \x01(\x0b\x32\r.context.Uuid\"m\n\x08Topology\x12#\n\x06topoId\x18\x02 \x01(\x0b\x32\x13.context.TopologyId\x12\x1f\n\x06\x64\x65vice\x18\x03 \x03(\x0b\x32\x0f.context.Device\x12\x1b\n\x04link\x18\x04 \x03(\x0b\x32\r.context.Link\"1\n\x04Link\x12)\n\x0c\x65ndpointList\x18\x01 \x03(\x0b\x32\x13.context.EndPointId\"R\n\nTopologyId\x12%\n\tcontextId\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12\x1d\n\x06topoId\x18\x02 \x01(\x0b\x32\r.context.Uuid\"?\n\nConstraint\x12\x17\n\x0f\x63onstraint_type\x18\x01 \x01(\t\x12\x18\n\x10\x63onstraint_value\x18\x02 \x01(\t\"\xda\x01\n\x06\x44\x65vice\x12$\n\tdevice_id\x18\x01 \x01(\x0b\x32\x11.context.DeviceId\x12\x13\n\x0b\x64\x65vice_type\x18\x02 \x01(\t\x12,\n\rdevice_config\x18\x03 \x01(\x0b\x32\x15.context.DeviceConfig\x12>\n\x14\x64\x65vOperationalStatus\x18\x04 \x01(\x0e\x32 .context.DeviceOperationalStatus\x12\'\n\x0c\x65ndpointList\x18\x05 \x03(\x0b\x32\x11.context.EndPoint\"%\n\x0c\x44\x65viceConfig\x12\x15\n\rdevice_config\x18\x01 \x01(\t\"C\n\x08\x45ndPoint\x12$\n\x07port_id\x18\x01 \x01(\x0b\x32\x13.context.EndPointId\x12\x11\n\tport_type\x18\x02 \x01(\t\"t\n\nEndPointId\x12#\n\x06topoId\x18\x01 \x01(\x0b\x32\x13.context.TopologyId\x12!\n\x06\x64\x65v_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\x12\x1e\n\x07port_id\x18\x03 \x01(\x0b\x32\r.context.Uuid\",\n\x08\x44\x65viceId\x12 \n\tdevice_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\"\x14\n\x04Uuid\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"K\n\x12TeraFlowController\x12\"\n\x06\x63tl_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12\x11\n\tipaddress\x18\x02 \x01(\t\"Q\n\x14\x41uthenticationResult\x12\"\n\x06\x63tl_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12\x15\n\rauthenticated\x18\x02 \x01(\x08*4\n\x17\x44\x65viceOperationalStatus\x12\x0c\n\x08\x44ISABLED\x10\x00\x12\x0b\n\x07\x45NABLED\x10\x01\x32\x44\n\x0e\x43ontextService\x12\x32\n\x0bGetTopology\x12\x0e.context.Empty\x1a\x11.context.Topology\"\x00\x62\x06proto3' -) - -_DEVICEOPERATIONALSTATUS = _descriptor.EnumDescriptor( - name='DeviceOperationalStatus', - full_name='context.DeviceOperationalStatus', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='DISABLED', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='ENABLED', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=1195, - serialized_end=1247, -) -_sym_db.RegisterEnumDescriptor(_DEVICEOPERATIONALSTATUS) - -DeviceOperationalStatus = enum_type_wrapper.EnumTypeWrapper(_DEVICEOPERATIONALSTATUS) -DISABLED = 0 -ENABLED = 1 - - - -_EMPTY = _descriptor.Descriptor( - name='Empty', - full_name='context.Empty', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=26, - serialized_end=33, -) - - -_CONTEXT = _descriptor.Descriptor( - name='Context', - full_name='context.Context', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='contextId', full_name='context.Context.contextId', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='topo', full_name='context.Context.topo', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='ctl', full_name='context.Context.ctl', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=35, - serialized_end=158, -) - - -_CONTEXTID = _descriptor.Descriptor( - name='ContextId', - full_name='context.ContextId', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='contextUuid', full_name='context.ContextId.contextUuid', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=160, - serialized_end=207, -) - - -_TOPOLOGY = _descriptor.Descriptor( - name='Topology', - full_name='context.Topology', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='topoId', full_name='context.Topology.topoId', index=0, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='device', full_name='context.Topology.device', index=1, - number=3, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='link', full_name='context.Topology.link', index=2, - number=4, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=209, - serialized_end=318, -) - - -_LINK = _descriptor.Descriptor( - name='Link', - full_name='context.Link', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='endpointList', full_name='context.Link.endpointList', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=320, - serialized_end=369, -) - - -_TOPOLOGYID = _descriptor.Descriptor( - name='TopologyId', - full_name='context.TopologyId', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='contextId', full_name='context.TopologyId.contextId', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='topoId', full_name='context.TopologyId.topoId', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=371, - serialized_end=453, -) - - -_CONSTRAINT = _descriptor.Descriptor( - name='Constraint', - full_name='context.Constraint', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='constraint_type', full_name='context.Constraint.constraint_type', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='constraint_value', full_name='context.Constraint.constraint_value', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=455, - serialized_end=518, -) - - -_DEVICE = _descriptor.Descriptor( - name='Device', - full_name='context.Device', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='device_id', full_name='context.Device.device_id', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='device_type', full_name='context.Device.device_type', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='device_config', full_name='context.Device.device_config', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='devOperationalStatus', full_name='context.Device.devOperationalStatus', index=3, - number=4, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='endpointList', full_name='context.Device.endpointList', index=4, - number=5, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=521, - serialized_end=739, -) - - -_DEVICECONFIG = _descriptor.Descriptor( - name='DeviceConfig', - full_name='context.DeviceConfig', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='device_config', full_name='context.DeviceConfig.device_config', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=741, - serialized_end=778, -) - - -_ENDPOINT = _descriptor.Descriptor( - name='EndPoint', - full_name='context.EndPoint', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='port_id', full_name='context.EndPoint.port_id', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='port_type', full_name='context.EndPoint.port_type', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=780, - serialized_end=847, -) - - -_ENDPOINTID = _descriptor.Descriptor( - name='EndPointId', - full_name='context.EndPointId', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='topoId', full_name='context.EndPointId.topoId', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='dev_id', full_name='context.EndPointId.dev_id', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='port_id', full_name='context.EndPointId.port_id', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=849, - serialized_end=965, -) - - -_DEVICEID = _descriptor.Descriptor( - name='DeviceId', - full_name='context.DeviceId', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='device_id', full_name='context.DeviceId.device_id', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=967, - serialized_end=1011, -) - - -_UUID = _descriptor.Descriptor( - name='Uuid', - full_name='context.Uuid', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='uuid', full_name='context.Uuid.uuid', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1013, - serialized_end=1033, -) - - -_TERAFLOWCONTROLLER = _descriptor.Descriptor( - name='TeraFlowController', - full_name='context.TeraFlowController', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='ctl_id', full_name='context.TeraFlowController.ctl_id', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='ipaddress', full_name='context.TeraFlowController.ipaddress', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1035, - serialized_end=1110, -) - - -_AUTHENTICATIONRESULT = _descriptor.Descriptor( - name='AuthenticationResult', - full_name='context.AuthenticationResult', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='ctl_id', full_name='context.AuthenticationResult.ctl_id', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='authenticated', full_name='context.AuthenticationResult.authenticated', index=1, - number=2, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1112, - serialized_end=1193, -) - -_CONTEXT.fields_by_name['contextId'].message_type = _CONTEXTID -_CONTEXT.fields_by_name['topo'].message_type = _TOPOLOGY -_CONTEXT.fields_by_name['ctl'].message_type = _TERAFLOWCONTROLLER -_CONTEXTID.fields_by_name['contextUuid'].message_type = _UUID -_TOPOLOGY.fields_by_name['topoId'].message_type = _TOPOLOGYID -_TOPOLOGY.fields_by_name['device'].message_type = _DEVICE -_TOPOLOGY.fields_by_name['link'].message_type = _LINK -_LINK.fields_by_name['endpointList'].message_type = _ENDPOINTID -_TOPOLOGYID.fields_by_name['contextId'].message_type = _CONTEXTID -_TOPOLOGYID.fields_by_name['topoId'].message_type = _UUID -_DEVICE.fields_by_name['device_id'].message_type = _DEVICEID -_DEVICE.fields_by_name['device_config'].message_type = _DEVICECONFIG -_DEVICE.fields_by_name['devOperationalStatus'].enum_type = _DEVICEOPERATIONALSTATUS -_DEVICE.fields_by_name['endpointList'].message_type = _ENDPOINT -_ENDPOINT.fields_by_name['port_id'].message_type = _ENDPOINTID -_ENDPOINTID.fields_by_name['topoId'].message_type = _TOPOLOGYID -_ENDPOINTID.fields_by_name['dev_id'].message_type = _DEVICEID -_ENDPOINTID.fields_by_name['port_id'].message_type = _UUID -_DEVICEID.fields_by_name['device_id'].message_type = _UUID -_TERAFLOWCONTROLLER.fields_by_name['ctl_id'].message_type = _CONTEXTID -_AUTHENTICATIONRESULT.fields_by_name['ctl_id'].message_type = _CONTEXTID -DESCRIPTOR.message_types_by_name['Empty'] = _EMPTY -DESCRIPTOR.message_types_by_name['Context'] = _CONTEXT -DESCRIPTOR.message_types_by_name['ContextId'] = _CONTEXTID -DESCRIPTOR.message_types_by_name['Topology'] = _TOPOLOGY -DESCRIPTOR.message_types_by_name['Link'] = _LINK -DESCRIPTOR.message_types_by_name['TopologyId'] = _TOPOLOGYID -DESCRIPTOR.message_types_by_name['Constraint'] = _CONSTRAINT -DESCRIPTOR.message_types_by_name['Device'] = _DEVICE -DESCRIPTOR.message_types_by_name['DeviceConfig'] = _DEVICECONFIG -DESCRIPTOR.message_types_by_name['EndPoint'] = _ENDPOINT -DESCRIPTOR.message_types_by_name['EndPointId'] = _ENDPOINTID -DESCRIPTOR.message_types_by_name['DeviceId'] = _DEVICEID -DESCRIPTOR.message_types_by_name['Uuid'] = _UUID -DESCRIPTOR.message_types_by_name['TeraFlowController'] = _TERAFLOWCONTROLLER -DESCRIPTOR.message_types_by_name['AuthenticationResult'] = _AUTHENTICATIONRESULT -DESCRIPTOR.enum_types_by_name['DeviceOperationalStatus'] = _DEVICEOPERATIONALSTATUS -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -Empty = _reflection.GeneratedProtocolMessageType('Empty', (_message.Message,), { - 'DESCRIPTOR' : _EMPTY, - '__module__' : 'context_pb2' - # @@protoc_insertion_point(class_scope:context.Empty) - }) -_sym_db.RegisterMessage(Empty) - -Context = _reflection.GeneratedProtocolMessageType('Context', (_message.Message,), { - 'DESCRIPTOR' : _CONTEXT, - '__module__' : 'context_pb2' - # @@protoc_insertion_point(class_scope:context.Context) - }) -_sym_db.RegisterMessage(Context) - -ContextId = _reflection.GeneratedProtocolMessageType('ContextId', (_message.Message,), { - 'DESCRIPTOR' : _CONTEXTID, - '__module__' : 'context_pb2' - # @@protoc_insertion_point(class_scope:context.ContextId) - }) -_sym_db.RegisterMessage(ContextId) - -Topology = _reflection.GeneratedProtocolMessageType('Topology', (_message.Message,), { - 'DESCRIPTOR' : _TOPOLOGY, - '__module__' : 'context_pb2' - # @@protoc_insertion_point(class_scope:context.Topology) - }) -_sym_db.RegisterMessage(Topology) - -Link = _reflection.GeneratedProtocolMessageType('Link', (_message.Message,), { - 'DESCRIPTOR' : _LINK, - '__module__' : 'context_pb2' - # @@protoc_insertion_point(class_scope:context.Link) - }) -_sym_db.RegisterMessage(Link) - -TopologyId = _reflection.GeneratedProtocolMessageType('TopologyId', (_message.Message,), { - 'DESCRIPTOR' : _TOPOLOGYID, - '__module__' : 'context_pb2' - # @@protoc_insertion_point(class_scope:context.TopologyId) - }) -_sym_db.RegisterMessage(TopologyId) - -Constraint = _reflection.GeneratedProtocolMessageType('Constraint', (_message.Message,), { - 'DESCRIPTOR' : _CONSTRAINT, - '__module__' : 'context_pb2' - # @@protoc_insertion_point(class_scope:context.Constraint) - }) -_sym_db.RegisterMessage(Constraint) - -Device = _reflection.GeneratedProtocolMessageType('Device', (_message.Message,), { - 'DESCRIPTOR' : _DEVICE, - '__module__' : 'context_pb2' - # @@protoc_insertion_point(class_scope:context.Device) - }) -_sym_db.RegisterMessage(Device) - -DeviceConfig = _reflection.GeneratedProtocolMessageType('DeviceConfig', (_message.Message,), { - 'DESCRIPTOR' : _DEVICECONFIG, - '__module__' : 'context_pb2' - # @@protoc_insertion_point(class_scope:context.DeviceConfig) - }) -_sym_db.RegisterMessage(DeviceConfig) - -EndPoint = _reflection.GeneratedProtocolMessageType('EndPoint', (_message.Message,), { - 'DESCRIPTOR' : _ENDPOINT, - '__module__' : 'context_pb2' - # @@protoc_insertion_point(class_scope:context.EndPoint) - }) -_sym_db.RegisterMessage(EndPoint) - -EndPointId = _reflection.GeneratedProtocolMessageType('EndPointId', (_message.Message,), { - 'DESCRIPTOR' : _ENDPOINTID, - '__module__' : 'context_pb2' - # @@protoc_insertion_point(class_scope:context.EndPointId) - }) -_sym_db.RegisterMessage(EndPointId) - -DeviceId = _reflection.GeneratedProtocolMessageType('DeviceId', (_message.Message,), { - 'DESCRIPTOR' : _DEVICEID, - '__module__' : 'context_pb2' - # @@protoc_insertion_point(class_scope:context.DeviceId) - }) -_sym_db.RegisterMessage(DeviceId) - -Uuid = _reflection.GeneratedProtocolMessageType('Uuid', (_message.Message,), { - 'DESCRIPTOR' : _UUID, - '__module__' : 'context_pb2' - # @@protoc_insertion_point(class_scope:context.Uuid) - }) -_sym_db.RegisterMessage(Uuid) - -TeraFlowController = _reflection.GeneratedProtocolMessageType('TeraFlowController', (_message.Message,), { - 'DESCRIPTOR' : _TERAFLOWCONTROLLER, - '__module__' : 'context_pb2' - # @@protoc_insertion_point(class_scope:context.TeraFlowController) - }) -_sym_db.RegisterMessage(TeraFlowController) - -AuthenticationResult = _reflection.GeneratedProtocolMessageType('AuthenticationResult', (_message.Message,), { - 'DESCRIPTOR' : _AUTHENTICATIONRESULT, - '__module__' : 'context_pb2' - # @@protoc_insertion_point(class_scope:context.AuthenticationResult) - }) -_sym_db.RegisterMessage(AuthenticationResult) - - - -_CONTEXTSERVICE = _descriptor.ServiceDescriptor( - name='ContextService', - full_name='context.ContextService', - file=DESCRIPTOR, - index=0, - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_start=1249, - serialized_end=1317, - methods=[ - _descriptor.MethodDescriptor( - name='GetTopology', - full_name='context.ContextService.GetTopology', - index=0, - containing_service=None, - input_type=_EMPTY, - output_type=_TOPOLOGY, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), -]) -_sym_db.RegisterServiceDescriptor(_CONTEXTSERVICE) - -DESCRIPTOR.services_by_name['ContextService'] = _CONTEXTSERVICE - -# @@protoc_insertion_point(module_scope) diff --git a/src/context/proto/context_pb2_grpc.py b/src/context/proto/context_pb2_grpc.py deleted file mode 100644 index 51c61c053221a4bd98b322b96e3ea3ba95e7cbeb..0000000000000000000000000000000000000000 --- a/src/context/proto/context_pb2_grpc.py +++ /dev/null @@ -1,66 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc - -from context.proto import context_pb2 as context__pb2 - - -class ContextServiceStub(object): - """Missing associated documentation comment in .proto file.""" - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.GetTopology = channel.unary_unary( - '/context.ContextService/GetTopology', - request_serializer=context__pb2.Empty.SerializeToString, - response_deserializer=context__pb2.Topology.FromString, - ) - - -class ContextServiceServicer(object): - """Missing associated documentation comment in .proto file.""" - - def GetTopology(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - -def add_ContextServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'GetTopology': grpc.unary_unary_rpc_method_handler( - servicer.GetTopology, - request_deserializer=context__pb2.Empty.FromString, - response_serializer=context__pb2.Topology.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'context.ContextService', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) - - - # This class is part of an EXPERIMENTAL API. -class ContextService(object): - """Missing associated documentation comment in .proto file.""" - - @staticmethod - def GetTopology(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary(request, target, '/context.ContextService/GetTopology', - context__pb2.Empty.SerializeToString, - context__pb2.Topology.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/src/context/requirements.in b/src/context/requirements.in deleted file mode 100644 index 25abdad1b5767117956a88b816399635348884c7..0000000000000000000000000000000000000000 --- a/src/context/requirements.in +++ /dev/null @@ -1,6 +0,0 @@ -grpcio-health-checking -grpcio -prometheus-client -pytest -pytest-benchmark -redis diff --git a/src/context/run_integration_tests.sh b/src/context/run_integration_tests.sh deleted file mode 100755 index ab607bed4c644caed9722ae99f6bba7151e82a5c..0000000000000000000000000000000000000000 --- a/src/context/run_integration_tests.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Make folder containing the script the root folder for its execution -cd $(dirname $0) - -ENDPOINT=($(kubectl --namespace teraflow-development get service contextservice -o 'jsonpath={.spec.clusterIP} {.spec.ports[?(@.name=="grpc")].port}')) -docker run -it --env TEST_TARGET_ADDRESS=${ENDPOINT[0]} --env TEST_TARGET_PORT=${ENDPOINT[1]} context_service:test diff --git a/src/context/run_unitary_tests.sh b/src/context/run_unitary_tests.sh deleted file mode 100755 index 08e941f31502fe8dc32ffcfc1563c2223bb4d8d3..0000000000000000000000000000000000000000 --- a/src/context/run_unitary_tests.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Make folder containing the script the root folder for its execution -cd $(dirname $0) - -mkdir -p data -pytest -v --log-level=DEBUG tests/test_unitary.py diff --git a/src/context/service/ContextService.py b/src/context/service/ContextService.py deleted file mode 100644 index 41c23266592b6e7b83cc03472777b21c68616280..0000000000000000000000000000000000000000 --- a/src/context/service/ContextService.py +++ /dev/null @@ -1,55 +0,0 @@ -import grpc -import logging -from concurrent import futures -from grpc_health.v1.health import HealthServicer, OVERALL_HEALTH -from grpc_health.v1.health_pb2 import HealthCheckResponse -from grpc_health.v1.health_pb2_grpc import add_HealthServicer_to_server -from context.proto.context_pb2_grpc import add_ContextServiceServicer_to_server -from context.service.ContextServiceServicerImpl import ContextServiceServicerImpl -from context.Config import SERVICE_PORT, MAX_WORKERS, GRACE_PERIOD - -BIND_ADDRESS = '0.0.0.0' -LOGGER = logging.getLogger(__name__) - -class ContextService: - def __init__(self, database, address=BIND_ADDRESS, port=SERVICE_PORT, max_workers=MAX_WORKERS, - grace_period=GRACE_PERIOD): - self.database = database - self.address = address - self.port = port - self.endpoint = None - self.max_workers = max_workers - self.grace_period = grace_period - self.context_servicer = None - self.health_servicer = None - self.pool = None - self.server = None - - def start(self): - self.endpoint = '{}:{}'.format(self.address, self.port) - LOGGER.debug('Starting Service (tentative endpoint: {}, max_workers: {})...'.format( - self.endpoint, self.max_workers)) - - self.pool = futures.ThreadPoolExecutor(max_workers=self.max_workers) - self.server = grpc.server(self.pool) # , interceptors=(tracer_interceptor,)) - - self.context_servicer = ContextServiceServicerImpl(self.database) - add_ContextServiceServicer_to_server(self.context_servicer, self.server) - - self.health_servicer = HealthServicer( - experimental_non_blocking=True, experimental_thread_pool=futures.ThreadPoolExecutor(max_workers=1)) - add_HealthServicer_to_server(self.health_servicer, self.server) - - port = self.server.add_insecure_port(self.endpoint) - self.endpoint = '{}:{}'.format(self.address, port) - LOGGER.info('Listening on {}...'.format(self.endpoint)) - self.server.start() - self.health_servicer.set(OVERALL_HEALTH, HealthCheckResponse.SERVING) # pylint: disable=maybe-no-member - - LOGGER.debug('Service started') - - def stop(self): - LOGGER.debug('Stopping service (grace period {} seconds)...'.format(self.grace_period)) - self.health_servicer.enter_graceful_shutdown() - self.server.stop(self.grace_period) - LOGGER.debug('Service stopped') diff --git a/src/context/service/ContextServiceServicerImpl.py b/src/context/service/ContextServiceServicerImpl.py deleted file mode 100644 index 599c8b2c4985957426c56b922937fc529283e5fb..0000000000000000000000000000000000000000 --- a/src/context/service/ContextServiceServicerImpl.py +++ /dev/null @@ -1,37 +0,0 @@ -import grpc, logging -from prometheus_client import Counter, Histogram -from context.proto.context_pb2 import Topology -from context.proto.context_pb2_grpc import ContextServiceServicer - -LOGGER = logging.getLogger(__name__) - -GETTOPOLOGY_COUNTER_STARTED = Counter ('context_gettopology_counter_started', - 'Context:GetTopology counter of requests started' ) -GETTOPOLOGY_COUNTER_COMPLETED = Counter ('context_gettopology_counter_completed', - 'Context:GetTopology counter of requests completed') -GETTOPOLOGY_COUNTER_FAILED = Counter ('context_gettopology_counter_failed', - 'Context:GetTopology counter of requests failed' ) -GETTOPOLOGY_HISTOGRAM_DURATION = Histogram('context_gettopology_histogram_duration', - 'Context:GetTopology histogram of request duration') - -class ContextServiceServicerImpl(ContextServiceServicer): - def __init__(self, database): - LOGGER.debug('Creating Servicer...') - self.database = database - LOGGER.debug('Servicer Created') - - @GETTOPOLOGY_HISTOGRAM_DURATION.time() - def GetTopology(self, request, context): - # request=Empty(), returns=Topology() - GETTOPOLOGY_COUNTER_STARTED.inc() - try: - LOGGER.debug('GetTopology request: {}'.format(str(request))) - reply = Topology(**self.database.get_topology()) - LOGGER.debug('GetTopology reply: {}'.format(str(reply))) - GETTOPOLOGY_COUNTER_COMPLETED.inc() - return reply - except: - LOGGER.exception('GetTopology exception') - GETTOPOLOGY_COUNTER_FAILED.inc() - context.set_code(grpc.StatusCode.INTERNAL) - return Topology() diff --git a/src/context/service/__init__.py b/src/context/service/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/context/service/__main__.py b/src/context/service/__main__.py deleted file mode 100644 index 5c20c3cec3c67c8d5a00d32d4b44a63758c9461c..0000000000000000000000000000000000000000 --- a/src/context/service/__main__.py +++ /dev/null @@ -1,52 +0,0 @@ -import logging, os, signal, sys, threading -from prometheus_client import start_http_server -from common.database.Factory import get_database -from context.service.ContextService import ContextService -from context.Config import SERVICE_PORT, MAX_WORKERS, GRACE_PERIOD, LOG_LEVEL, METRICS_PORT - -terminate = threading.Event() -logger = None - -def signal_handler(signal, frame): - global terminate, logger - logger.warning('Terminate signal received') - terminate.set() - -def main(): - global terminate, logger - - service_port = os.environ.get('CONTEXTSERVICE_SERVICE_PORT_GRPC', SERVICE_PORT) - max_workers = os.environ.get('MAX_WORKERS', MAX_WORKERS ) - grace_period = os.environ.get('GRACE_PERIOD', GRACE_PERIOD) - log_level = os.environ.get('LOG_LEVEL', LOG_LEVEL ) - metrics_port = os.environ.get('METRICS_PORT', METRICS_PORT) - - logging.basicConfig(level=log_level) - logger = logging.getLogger(__name__) - - signal.signal(signal.SIGINT, signal_handler) - signal.signal(signal.SIGTERM, signal_handler) - - logger.info('Starting...') - - # Start metrics server - start_http_server(metrics_port) - - # Get database instance - database = get_database() - - # Starting context service - service = ContextService(database, port=service_port, max_workers=max_workers, grace_period=grace_period) - service.start() - - # Wait for Ctrl+C or termination signal - while not terminate.wait(0.1): pass - - logger.info('Terminating...') - service.stop() - - logger.info('Bye') - return(0) - -if __name__ == '__main__': - sys.exit(main()) diff --git a/src/context/tests/__init__.py b/src/context/tests/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/context/tests/test_integration.py b/src/context/tests/test_integration.py deleted file mode 100644 index eab068b493a06754ec335ea118fa60e671fddec7..0000000000000000000000000000000000000000 --- a/src/context/tests/test_integration.py +++ /dev/null @@ -1,24 +0,0 @@ -import logging, os, pytest, sys - -from pathlib import Path -sys.path.append(__file__.split('src')[0] + 'src') -print(sys.path) - -from context.client.ContextClient import ContextClient -from context.proto.context_pb2 import Empty -from .tools.ValidateTopology import validate_topology_dict - -LOGGER = logging.getLogger(__name__) -LOGGER.setLevel(logging.DEBUG) - -@pytest.fixture(scope='session') -def remote_context_client(): - address = os.environ.get('TEST_TARGET_ADDRESS') - if(address is None): raise Exception('EnvironmentVariable(TEST_TARGET_ADDRESS) not specified') - port = os.environ.get('TEST_TARGET_PORT') - if(port is None): raise Exception('EnvironmentVariable(TEST_TARGET_PORT) not specified') - return ContextClient(address=address, port=port) - -def test_remote_get_topology(remote_context_client): - response = remote_context_client.GetTopology(Empty()) - validate_topology_dict(response) diff --git a/src/context/tests/test_unitary.py b/src/context/tests/test_unitary.py deleted file mode 100644 index 61e580ea704260cd034273e2bd74ae9fbbd606e6..0000000000000000000000000000000000000000 --- a/src/context/tests/test_unitary.py +++ /dev/null @@ -1,31 +0,0 @@ -import logging, pytest, sys - -from pathlib import Path -sys.path.append(__file__.split('src')[0] + 'src') -print(sys.path) - -from context.client.ContextClient import ContextClient -from context.database.Factory import get_database, DatabaseEngineEnum -from context.proto.context_pb2 import Empty -from context.service.ContextService import ContextService -from context.Config import SERVICE_PORT, MAX_WORKERS, GRACE_PERIOD -from context.tests.tools.ValidateTopology import validate_topology_dict - -LOGGER = logging.getLogger(__name__) -LOGGER.setLevel(logging.DEBUG) - -@pytest.fixture(scope='session') -def local_context_service(): - database = get_database(engine=DatabaseEngineEnum.INMEMORY, filepath='data/topo_nsfnet.json') - _service = ContextService(database, port=SERVICE_PORT, max_workers=MAX_WORKERS, grace_period=GRACE_PERIOD) - _service.start() - yield _service - _service.stop() - -@pytest.fixture(scope='session') -def local_context_client(local_context_service): - return ContextClient(address='127.0.0.1', port=SERVICE_PORT) - -def test_local_get_topology(local_context_client): - response = local_context_client.GetTopology(Empty()) - validate_topology_dict(response) diff --git a/src/context/tests/tools/ValidateTopology.py b/src/context/tests/tools/ValidateTopology.py deleted file mode 100644 index b52546e39c27292bec4f11755dade987929e5e71..0000000000000000000000000000000000000000 --- a/src/context/tests/tools/ValidateTopology.py +++ /dev/null @@ -1,6 +0,0 @@ -def validate_topology_dict(topology): - assert type(topology) is dict - assert len(topology.keys()) > 0 - assert 'topoId' in topology - assert 'device' in topology - assert 'link' in topology diff --git a/src/context/tests/tools/__init__.py b/src/context/tests/tools/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000