Commit 6958674b authored by Shayan Hajipour's avatar Shayan Hajipour
Browse files

bug fix: port & device uuids extracted from device protobuf message instead of...

bug fix: port & device uuids extracted from device protobuf message instead of custom feature which is dedicated for emulated devices.
parent ddf485fe
Loading
Loading
Loading
Loading
+17 −10
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@

import json
import logging
import re
import time
from decimal import ROUND_HALF_EVEN, Decimal
from flask.json import jsonify
@@ -26,6 +27,9 @@ from common.tools.object_factory.Service import json_service_id

LOGGER = logging.getLogger(__name__)

RE_PORT_AND_IP_MATCH = r'resource_key: \"\/interface\[(.*)\]\/subinterface\[.*\]\"[.|\n]*.*\\\"address_ip\\\": \\\"{}\\\"'
RE_ENDPOINT_UUID_PORT_MATCH = r'\s*\n?\s*endpoint_uuid .\s*\n?\s*uuid: \"(.*)\"\n?\s*.\n?\s*.\n?\s*name: \"{}\"'
RE_DEVICE_UUID_MATCH = r'\n?\s*device_uuid \{\s*\n?\s*uuid: \"(.*)\"\n?\s*\}\n?\s*\}'

def service_2_bwInfo(service: Service) -> dict:
    response = {}
@@ -75,15 +79,18 @@ def bwInfo_2_service(client, bwInfo: dict) -> Service:
        a_ip = bwInfo['sessionFilter'][0]['sourceIp']
        z_ip = bwInfo['sessionFilter'][0]['dstAddress']

        devices = client.ListDevices(Empty()).devices
        devices = (str(device) for device in client.ListDevices(Empty()).devices)
        for device in devices:
            for cr in device.device_config.config_rules:
                if cr.WhichOneof('config_rule') == 'custom' and cr.custom.resource_key == '_connect/settings':
                    for ep in json.loads(cr.custom.resource_value)['endpoints']:
                        if 'ip' in ep and (ep['ip'] == a_ip or ep['ip'] == z_ip):
            for ep_id in (a_ip, z_ip):
                if look_up := re.search(RE_PORT_AND_IP_MATCH.format(ep_id), device):
                    physical_port = look_up.groups(0)[0]
                    # 'PORT-' is added as a prefix
                    port = 'PORT-' + physical_port
                    port_uuid = re.search(RE_ENDPOINT_UUID_PORT_MATCH.format(port), device).group(0)[0]
                    device_uuid = re.search(RE_DEVICE_UUID_MATCH, device).group(0)[0]
                    ep_id = EndPointId()
                            ep_id.endpoint_uuid.uuid = ep['uuid']
                            ep_id.device_id.device_uuid.uuid = device.device_id.device_uuid.uuid
                    ep_id.endpoint_uuid.uuid = port_uuid
                    ep_id.device_id.device_uuid.uuid = device_uuid
                    service.service_endpoint_ids.append(ep_id)
            
    service.service_type = ServiceTypeEnum.SERVICETYPE_L3NM