From bef5cd37eb338ec9ea0101d4af9945a8c377e6b5 Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Sat, 18 May 2024 19:01:15 +0200
Subject: [PATCH] update project

---
 README.md                     |   2 +-
 mkp/nvdct-0.8.9-20240518.mkp  | Bin 0 -> 39407 bytes
 source/bin/nvdct/lib/utils.py |   2 +-
 source/bin/nvdct/nvdct.py     |  85 +++++++++++++++++++++++++---------
 source/packages/nvdct         |   2 +-
 5 files changed, 66 insertions(+), 25 deletions(-)
 create mode 100644 mkp/nvdct-0.8.9-20240518.mkp

diff --git a/README.md b/README.md
index 604763c..9e10c1c 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[PACKAGE]: ../../raw/master/mkp/nvdct-0.8.8-20240508.mkp "nvdct-0.8.8-20240508.mkp"
+[PACKAGE]: ../../raw/master/mkp/nvdct-0.8.9-20240518.mkp "nvdct-0.8.9-20240518.mkp"
 Network Visualization Data Creation Tool (NVDCT)
 
 This script creates the topology data file needed for the [Checkmk Exchange Network visualization](https://exchange.checkmk.com/p/network-visualization) plugin by Andreas Boesl and [schnetz](https://exchange.checkmk.com/u/schnetz).\
diff --git a/mkp/nvdct-0.8.9-20240518.mkp b/mkp/nvdct-0.8.9-20240518.mkp
new file mode 100644
index 0000000000000000000000000000000000000000..56d6a36ea2f20ee8588ad32227b3487e7599da62
GIT binary patch
literal 39407
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

literal 0
HcmV?d00001

diff --git a/source/bin/nvdct/lib/utils.py b/source/bin/nvdct/lib/utils.py
index 4ec0812..49f2986 100755
--- a/source/bin/nvdct/lib/utils.py
+++ b/source/bin/nvdct/lib/utils.py
@@ -22,7 +22,7 @@ from time import time as now_time
 from tomllib import loads as toml_loads, TOMLDecodeError
 from typing import List, Dict, Any, TextIO
 
-NVDCT_VERSION = '0.8.8-20240507'
+NVDCT_VERSION = '0.8.9-20240518'
 
 
 @unique
diff --git a/source/bin/nvdct/nvdct.py b/source/bin/nvdct/nvdct.py
index ffa5fb1..9b564ed 100755
--- a/source/bin/nvdct/nvdct.py
+++ b/source/bin/nvdct/nvdct.py
@@ -86,7 +86,7 @@
 #             min inv_lldp_cache version: 0.9.3-20240320 -> host label nvdct/has_lldp_neighbours
 # 2024-03-27: added option --api-port, defaults to 80
 # 2024-03-28: changed restapi get_interface_data to use one call to fetch all data
-# 2024-03-29: added L3V4_IGNORE_IP and L3V4_IRNORE_WILDCARD to toml file
+# 2024-03-29: added L3V4_IGNORE_IP and L3V4_IGNORE_WILDCARD to toml file
 # 2024-03-31: fixed: L3V3_REPLACE -> L3V4_REPLACE
 #             made input from toml more bullet proof
 # 2024-04-03: change HostCacheMultiSite to be child of HostCacheLiveStatus
@@ -102,6 +102,10 @@
 #             added tooltip for --skip-l3-if and --skip-l3-ip
 # 2024-04-30: automatically create @default if it doesn't exist
 # 2024-05-07: fixed handling of ignore wildcard in L3v4 topology
+# 2024-05-17: added support for Extreme interfaces in LLDP without stack id (1 -> 1:1)
+# 2024-05-18: added support for NXOS interfaces in LLDP in short from (Eth1/1 -> Ethernet1/1)
+#             added IP-Address/IP-Network as quickinfo
+# 2024-05-18: fixed crash non empty neighbour port (ThX to andreas doehler)
 
 # creating topology data json from inventory data
 #
@@ -142,8 +146,8 @@ __objects = {
         # "link": {},                                # object not in CMK core
         'metadata': {
             'images': {
-                'icon': 'icon_warning',              # additional immage shown at the node
-                'emblem': 'ip-network_80',           # image to show for a object
+                'icon': 'icon_warning',              # additional image shown at the node
+                'emblem': 'ip-network_80',           # image to show for an object
             },
             'tooltip': {
                 'html': "Test message<div style='color: blue'>Some color <b>test</b></div>",
@@ -263,7 +267,8 @@ def add_host_object(host: str, emblem: bool = False) -> None:
                     'images': {
                         'emblem': EMBLEMS.host_node,  # node image
                         # 'icon': 'icon_tick',  # status image, top left from emblem
-                    }
+                    },
+                    **({'tooltip': {'quickinfo': [{'name': 'Host node', 'value': host}]}} if not link else {})
                 }
 
         NV_OBJECTS[host] = {
@@ -342,7 +347,8 @@ def add_service_object(
                 'images': {
                     'emblem': EMBLEMS.service_node,  # node image
                     # 'icon': 'icon_tick',  # status image, top left from emblem
-                }
+                },
+                **({'tooltip': {'quickinfo': [{'name': 'Service node', 'value': item}]}} if not link else {})
             })
         if isinstance(native_speed, int):
             metadata.update({'native_speed': native_speed})
@@ -368,6 +374,11 @@ def add_ipv4_network_object(network: str, emblem: str | None = None) -> None:
                 'images': {
                     'emblem': emblem,  # node image
                     # 'icon': 'icon_tick',  # status image, top left from emblem
+                },
+                'tooltip': {
+                    'quickinfo': [
+                        {'name': 'IP-Network', 'value': network},
+                    ]
                 }
             }
         }
@@ -387,6 +398,11 @@ def add_ipv4_address_object(host: str, interface: str | None, ipv4_address: str)
                 'images': {
                     'emblem': EMBLEMS.ip_address,
                     # 'icon': 'icon_tick',
+                },
+                'tooltip': {
+                    'quickinfo': [
+                        {'name': 'IP-Address', 'value': ipv4_address},
+                    ]
                 }
             }
         }
@@ -600,26 +616,51 @@ def get_service_by_interface(host: str, interface: str) -> Tuple[str | None, str
     Returns:
         Tuple of interface item, native interface speed in bits per second
     """
+
+    _alternate_if_name = {
+        'ethernet': 'eth',
+        # 'fastethernet': 'Fa',
+        # 'gigabitethernet': 'Gi',
+        # 'tengigabitethernet': 'Te',
+        # 'fortygigabitethernet': 'Fo',
+        # 'hundredgigabitethernet': 'Hu',
+        # 'management': 'Ma',
+    }
+
+    def _get_short_if_name(interface: str) -> str:
+        """
+        returns short interface name from long interface name
+        interface: is the long interface name
+        :type interface: str
+        """
+        if not interface:
+            return interface
+        for interface_prefix in _alternate_if_name.keys():
+            if interface.lower().startswith(interface_prefix.lower()):
+                interface_short = _alternate_if_name[interface_prefix]
+                return interface.lower().replace(interface_prefix.lower(), interface_short, 1)
+        return interface
+
     # try to find the item for an interface
-    def _match_entry_with_item(_entry: Dict[str, str], services: List[str]) -> str | None:
+    def _match_entry_with_item(_entry: Dict[str, str], services: List[str]) -> Tuple[str | None, str | None]:
         values = [_entry.get('name'), _entry.get('description'), _entry.get('alias')]
         for value in values:
             if value in services:
-                return value
+                return value, _entry.get('speed')
 
         index = str(_entry.get('index'))
         # for index try with padding
         for i in range(1, 6):
             index_padded = f'{index:0>{i}}'
             if index_padded in services:
-                return index_padded
+                return index_padded, _entry.get('speed')
             # still not found try values + index
             for value in values:
                 if f'{value} {index_padded}' in services:
-                    return f'{value} {index_padded}'
+                    return f'{value} {index_padded}', _entry.get('speed')
 
         LOGGER.warning(f'no match found |{_entry}|{services}|')
-        return None
+        return None, None
 
     # empty host/neighbour should never happen here
     if not host:
@@ -657,14 +698,12 @@ def get_service_by_interface(host: str, interface: str) -> Tuple[str | None, str
             str(_entry.get('index')),
             _entry.get('phys_address'),
         ]:
-            _interface = _match_entry_with_item(_entry, interface_items)
-            if _interface:
-                native_speed = _entry.get('speed')
-                LOGGER.debug(
-                    msg=f'Device: {host}: speed for interface '
-                    f'{interface} is {native_speed}'
-                )
-                return _interface, native_speed
+            return _match_entry_with_item(_entry, interface_items)
+        elif f'1:{interface}' == _entry.get('name'):  # Extreme non stack:
+            return _match_entry_with_item(_entry, interface_items)
+        elif _entry.get('name') is not None and _get_short_if_name(
+                _entry.get('name')) == interface.lower():  # Cisco NXOS
+            return _match_entry_with_item(_entry, interface_items)
 
     LOGGER.warning(msg=f'Device: {host}: service for interface {interface} not found')
     return None, None
@@ -679,8 +718,12 @@ def create_device_from_inv(
     data: Dict = {'connections': {}, "interfaces": []}
 
     for topo_neighbour in inv_data:
-        neighbour = topo_neighbour.get(inv_columns.neighbour)
-        if not neighbour:
+        # check if required data are not empty
+        if not (neighbour := topo_neighbour.get(inv_columns.neighbour)):
+            continue
+        if not (raw_local_port := topo_neighbour.get(inv_columns.local_port)):
+            continue
+        if not (raw_neighbour_port := topo_neighbour.get(inv_columns.neighbour_port)):
             continue
 
         # drop neighbour if inventory neighbour is invalid
@@ -711,7 +754,6 @@ def create_device_from_inv(
             neighbour = HOST_MAP[neighbour]
 
         # getting/checking interfaces
-        raw_local_port = topo_neighbour.get(inv_columns.local_port, '')
         local_port, _local_speed = get_service_by_interface(host, raw_local_port)
         if not local_port:
             local_port = raw_local_port
@@ -722,7 +764,6 @@ def create_device_from_inv(
                 msg=f'host: {host}, raw_local_port: {raw_local_port} -> local_port: {local_port}'
             )
 
-        raw_neighbour_port = topo_neighbour.get(inv_columns.neighbour_port, '')
         neighbour_port, _neighbour_speed = get_service_by_interface(neighbour, raw_neighbour_port)
         if not neighbour_port:
             neighbour_port = raw_neighbour_port
diff --git a/source/packages/nvdct b/source/packages/nvdct
index 36a3ef5..d046438 100644
--- a/source/packages/nvdct
+++ b/source/packages/nvdct
@@ -57,7 +57,7 @@
                    'htdocs/images/icons/location_80.png']},
  'name': 'nvdct',
  'title': 'Network Visualization Data Creation Tool (NVDCT)',
- 'version': '0.8.8-20240508',
+ 'version': '0.8.9-20240518',
  'version.min_required': '2.2.0b1',
  'version.packaged': '2.2.0p24',
  'version.usable_until': '2.4.0p1'}
-- 
GitLab