Commit 704eddbb authored by Mohammad Ismaeel's avatar Mohammad Ismaeel
Browse files

Optical configuration now will appear after update on the UI

parent 6022e03d
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@
// limitations under the License.

syntax = "proto3";
package openconfig_device;
package optical_device;

import "context.proto";

@@ -21,4 +21,6 @@ service OpenConfigService {
  rpc AddOpenConfigDevice   (context.OpticalConfig) returns (context.OpticalConfigId) {}
  rpc ConfigureOpticalDevice(context.OpticalConfig) returns (context.Empty          ) {}
  rpc DisableOpticalDevice(context.OpticalConfig) returns (context.Empty          ) {}
  rpc GetDeviceConfiguration(context.OpticalConfigList) returns (context.Empty) {}
  
}
+10 −2
Original line number Diff line number Diff line
@@ -15,12 +15,12 @@
import grpc, logging
from common.Constants import ServiceNameEnum
from common.Settings import get_service_host, get_service_port_grpc
from common.proto.context_pb2 import Device, DeviceConfig, DeviceId, Empty,OpticalConfig,OpticalConfigId
from common.proto.context_pb2 import Device, DeviceConfig, DeviceId, Empty,OpticalConfig,OpticalConfigId ,OpticalConfigList
from common.proto.device_pb2 import MonitoringSettings
from common.proto.device_pb2_grpc import DeviceServiceStub
from common.tools.client.RetryDecorator import retry, delay_exponential
from common.tools.grpc.Tools import grpc_message_to_json_string
from common.proto.openconfig_device_pb2_grpc import OpenConfigServiceStub
from common.proto.optical_device_pb2_grpc import OpenConfigServiceStub
LOGGER = logging.getLogger(__name__)
MAX_RETRIES = 15
DELAY_FUNCTION = delay_exponential(initial=0.01, increment=2.0, maximum=5.0)
@@ -89,8 +89,16 @@ class DeviceClient:
        LOGGER.debug('ConfigureOpticalDevice result: {:s}'.format(grpc_message_to_json_string(response)))
        return response
    
    def GetDeviceConfiguration(self, request : OpticalConfigList) -> Empty:
        LOGGER.debug('ConfigureOpticalDevice request: {:s}'.format(grpc_message_to_json_string(request)))
        response = self.openconfig_stub.GetDeviceConfiguration(request)
        LOGGER.debug('ConfigureOpticalDevice result: {:s}'.format(grpc_message_to_json_string(response)))
        return response
    
    def DisableOpticalDevice(self, request : OpticalConfig) -> Empty:
        LOGGER.debug('DisableOpticalDevice request: {:s}'.format(grpc_message_to_json_string(request)))
        response = self.openconfig_stub.DisableOpticalDevice(request)
        LOGGER.debug('DisableOpticalDevice result: {:s}'.format(grpc_message_to_json_string(response)))
        return response
    
    
+1 −1
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ import os
from common.Constants import ServiceNameEnum
from common.Settings import get_service_port_grpc
from common.proto.device_pb2_grpc import add_DeviceServiceServicer_to_server
from common.proto.openconfig_device_pb2_grpc import add_OpenConfigServiceServicer_to_server
from common.proto.optical_device_pb2_grpc import add_OpenConfigServiceServicer_to_server
from common.tools.service.GenericGrpcService import GenericGrpcService
from device.Config import LOAD_ALL_DEVICE_DRIVERS
from .driver_api.DriverInstanceCache import DriverInstanceCache
+37 −1
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ import grpc, logging, json
from common.method_wrappers.Decorator import MetricsPool, safe_and_metered_rpc_method
from common.method_wrappers.ServiceExceptions import NotFoundException
from common.proto.context_pb2 import (
    Device, DeviceId, DeviceOperationalStatusEnum, Empty, OpticalConfig, OpticalConfig
    Device, DeviceId, DeviceOperationalStatusEnum, Empty, OpticalConfig, OpticalConfig,OpticalConfigList
)
from common.proto.device_pb2_grpc import DeviceServiceServicer
from common.tools.context_queries.Device import get_device
@@ -105,6 +105,42 @@ class OpenConfigServicer(DeviceServiceServicer):
        return Empty()
    
    
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def GetDeviceConfiguration (self, request : OpticalConfigList, context : grpc.ServicerContext) -> Empty:

        for configs in request.opticalconfigs:

            device_uuid = configs.device_id.device_uuid.uuid

            LOGGER.info(f" Get DeviceConfigure  {device_uuid}")
            try:
                context_client = ContextClient()
                device = get_device(
                    context_client, device_uuid, rw_copy=True, include_endpoints=True, include_components=False,
                    include_config_rules=False)
         
                if device is None:
                    raise NotFoundException('Device', device_uuid, extra_details='loading in ConfigureDevice')
               
                driver : _Driver = get_driver(self.driver_instance_cache, device)
           
                results = driver.GetConfig(resource_keys=[]) 
                for resource_data in results :
                    resource_key, resource_value = resource_data
                           
                    if resource_key.startswith('/opticalconfigs/opticalconfig/'):
                        if 'opticalconfig' in resource_value:
                                context_client.SetOpticalConfig(resource_value['opticalconfig'])

                #TODO: add a control with the NETCONF get
                #driver.GetConfig(resource_keys=filter_fields)
            except Exception as e:
                    LOGGER.info("error in configuring %s",e)    
            return Empty()
        
    
    
    
    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def DisableOpticalDevice (self, request : OpticalConfig, context : grpc.ServicerContext) -> Empty:
        
+10 −4
Original line number Diff line number Diff line
@@ -14,16 +14,22 @@


from flask import current_app, render_template, Blueprint, flash, session, redirect, url_for
from common.proto.context_pb2 import Empty, OpticalLink, LinkId, OpticalLinkList
from common.proto.context_pb2 import Empty, OpticalLink, LinkId, OpticalLinkList ,OpticalConfigList
from common.tools.context_queries.EndPoint import get_endpoint_names
from common.tools.context_queries.Link import get_link
from common.tools.context_queries.Topology import get_topology
from context.client.ContextClient import ContextClient

from device.client.DeviceClient import DeviceClient

base_optical = Blueprint('base_optical', __name__, url_prefix='/base_optical')

device_client = DeviceClient()
context_client = ContextClient()
@base_optical.get('/')
def home():
    
    context_client.connect()
    opticalConfig_list:OpticalConfigList = context_client.GetOpticalConfig(Empty())
    context_client.close()
    device_client.connect()
    device_client.GetDeviceConfiguration(opticalConfig_list)
    device_client.close()
    return render_template("base_optical/home.html")
 No newline at end of file