From 7ed0cf90ca7b307b85214cf1304b547c3c8dc714 Mon Sep 17 00:00:00 2001
From: Thl CMK <thl-cmk@outlook.com>
Date: Tue, 4 Aug 2020 21:28:34 +0200
Subject: [PATCH] update project

---
 checks/cisco_api_status                |  29 +-
 inv_cisco_support.mkp                  | Bin 36739 -> 39613 bytes
 inventory/snmp_cisco_contract          | 109 +++----
 inventory/snmp_cisco_eox               | 129 +++-----
 inventory/snmp_cisco_suggestion        |  16 +-
 lib/nagios/plugins/cisco_api_status    | 240 ++++++++++----
 packages/inv_cisco_support             |   2 +-
 web/plugins/views/inv_cisco_support.py | 433 +++++++++++++++++++++----
 8 files changed, 670 insertions(+), 288 deletions(-)

diff --git a/checks/cisco_api_status b/checks/cisco_api_status
index aed0a8e..a2dc7fe 100644
--- a/checks/cisco_api_status
+++ b/checks/cisco_api_status
@@ -13,42 +13,41 @@ def cisco_api_status_arguments(params):
     # example 
     # {'psirt': {'warn-severity': 3, 'warn-days': 31, 'crit-days': 7, 'crit-severity': 1}}
 
-    # print params
     if params:
         if params.get('psirt'):
-            if params.get('psirt').get('crit-days') is not None:
+            if params.get('psirt').get('crit-days'):
                 args.append('--psirt-crit-days %s' % params.get('psirt').get('crit-days'))
-            if params.get('psirt').get('warn-days') is not None:
+            if params.get('psirt').get('warn-days'):
                 args.append('--psirt-warn-days %s' % params.get('psirt').get('warn-days'))
-            if params.get('psirt').get('warn-severity') is not None:
+            if params.get('psirt').get('warn-severity'):
                 args.append('--psirt-warn-severity %s' % params.get('psirt').get('warn-severity'))
-            if params.get('psirt').get('crit-severity') is not None:
+            if params.get('psirt').get('crit-severity'):
                 args.append('--psirt-crit-severity %s' % params.get('psirt').get('crit-severity'))
-            if params.get('psirt').get('not-active') is not None:
+            if params.get('psirt').get('not-active'):
                 args.append('--psirt-not-active %s' % params.get('psirt').get('not-active'))
 
         if params.get('eox'):
-            if params.get('eox').get('crit-new') is not None:
+            if params.get('eox').get('crit-new'):
                 args.append('--eox-crit-new %s' % params.get('eox').get('crit-new'))
-            if params.get('eox').get('warn-new') is not None:
+            if params.get('eox').get('warn-new'):
                 args.append('--eox-warn-new %s' % params.get('eox').get('warn-new'))
-            if params.get('eox').get('crit-change') is not None:
+            if params.get('eox').get('crit-change'):
                 args.append('--eox-crit-change %s' % params.get('eox').get('crit-change'))
-            if params.get('eox').get('warn-change') is not None:
+            if params.get('eox').get('warn-change'):
                 args.append('--eox-warn-change %s' % params.get('eox').get('warn-change'))
-            if params.get('eox').get('not-active') is not None:
+            if params.get('eox').get('not-active'):
                 args.append('--eox-not-active %s' % params.get('eox').get('not-active'))
 
         if params.get('sn2info'):
-            if params.get('sn2info').get('crit-change') is not None:
+            if params.get('sn2info').get('crit-change'):
                 args.append('--sn2info-crit-change %s' % params.get('sn2info').get('crit-change'))
-            if params.get('sn2info').get('warn-change') is not None :
+            if params.get('sn2info').get('warn-change'):
                 args.append('--sn2info-warn-change %s' % params.get('sn2info').get('warn-change'))
-            if params.get('sn2info').get('not-active') is not None:
+            if params.get('sn2info').get('not-active'):
                 args.append('--sn2info-not-active %s' % params.get('sn2info').get('not-active'))
 
         if params.get('suggestion'):
-            if params.get('suggestion').get('not-active') is not None:
+            if params.get('suggestion').get('not-active'):
                 args.append('--suggestion-not-active %s' % params.get('suggestion').get('not-active'))
 
     # in CMK v1.5.x global variable g_hostname was replaced by API call host_name()
diff --git a/inv_cisco_support.mkp b/inv_cisco_support.mkp
index 18b622e7747df2acd05515c0c31216b1ef93c364..e5f4fe72bb72b04ea1a6170be4e9a0d6155b8d33 100644
GIT binary patch
literal 39613
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
ay_EW5--^=zTZUd=z*Kaa4RAk@;Qj|$6y>=9

literal 36739
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
WWhzsd%2cLJ)Bgdal=PhdU<3dv11bCf

diff --git a/inventory/snmp_cisco_contract b/inventory/snmp_cisco_contract
index 6700d37..26ebeab 100644
--- a/inventory/snmp_cisco_contract
+++ b/inventory/snmp_cisco_contract
@@ -1,14 +1,22 @@
 #!/usr/bin/python
 # -*- encoding: utf-8; py-indent-offset: 4 -*-
 #
-# 20.03.2017 : writen by Th.L. to collect/show Cisco hardware contract status
+# License: GNU General Public License v2
 #
-# 29.05.2017 : fixed empty pid handling
-#            : added serial number cleanup
-# 09-04.2018 : removed import
-# 04.09.2018 : changes for CMK 1.5.x (inv_tree --> inv_tree_list)
-# 05.09.2018 : changes for CMK 1.5.x (replaced global variable g_hostname with api call host_name())
-# 13.08.2019 : chaged variable host_anme to _hostname for cmk1.5
+# Author: thl-cmk[at]outlook[dot]com
+# URL   : https://thl-cmk.hopto.org
+# Date  : 2027-03-20
+# 
+# collect/show Cisco hardware contract status
+#
+# 2017-05-29 : fixed empty pid handling
+#              added serial number cleanup
+# 2018-04-09 : removed import
+# 2018-09-04 : changes for CMK 1.5.x (inv_tree --> inv_tree_list)
+# 2018-09-05 : changes for CMK 1.5.x (replaced global variable g_hostname with api call host_name())
+# 2019-08-13 : chaged variable host_anme to _hostname for cmk1.5
+# 2020-08-04 : moved node tree from hardware.system.support to hardware.system
+#              cleanup create_sn2info_record
 #
 # import is done by Check_MK
 # import logging
@@ -17,7 +25,7 @@ import json
 import ConfigParser
 
 
-def create_sn2info_record(sn2infofile):
+def create_sn2info_record(sn2infofile, optional_columns):
     sn2info = {}
     if os.path.isfile(sn2infofile):
         with open(sn2infofile) as f:
@@ -27,52 +35,26 @@ def create_sn2info_record(sn2infofile):
         sn2info.update({'Last_checked': time.strftime('%Y-%m-%d', time.localtime(modifytime))
                         })
 
-        # get info's from sn2info File
-        serial_number = sn2inforecord.get('sr_no')
-        is_covered = sn2inforecord.get('is_covered')
-        contract_site_customer_name = sn2inforecord.get('contract_site_customer_name')
-        contract_site_address1 = sn2inforecord.get('contract_site_address1')
-        contract_site_city = sn2inforecord.get('contract_site_city')
-        contract_site_state_province = sn2inforecord.get('contract_site_state_province')
-        contract_site_country = sn2inforecord.get('contract_site_country')
-        service_line_descr = sn2inforecord.get('service_line_descr')
-        service_contract_number = sn2inforecord.get('service_contract_number')
-        covered_product_line_end_date = sn2inforecord.get('covered_product_line_end_date')
-        parent_sr_no = sn2inforecord.get('parent_sr_no')
-        warranty_type = sn2inforecord.get('warranty_type')
-        warranty_type_description = sn2inforecord.get('warranty_type_description')
-        warranty_end_date = sn2inforecord.get('warranty_end_date')
-
-        # add nonempty info's to sn2inforecord
-
-        if (serial_number is not None) and (serial_number != ''):
-            sn2info.update({'serial_number': serial_number})
-        if (is_covered is not None) and (is_covered != ''):
-            sn2info.update({'is_covered': is_covered})
-        if (contract_site_customer_name is not None) and (contract_site_customer_name != ''):
-            sn2info.update({'contract_site_customer_name': contract_site_customer_name})
-        if (contract_site_address1 is not None) and (contract_site_address1 != ''):
-            sn2info.update({'contract_site_address1': contract_site_address1})
-        if (contract_site_city is not None) and (contract_site_city != ''):
-            sn2info.update({'contract_site_city': contract_site_city})
-        if (contract_site_state_province is not None) and (contract_site_state_province != ''):
-            sn2info.update({'contract_site_state_province': contract_site_state_province})
-        if (contract_site_country is not None) and (contract_site_country != ''):
-            sn2info.update({'contract_site_country': contract_site_country})
-        if (service_line_descr is not None) and (service_line_descr != ''):
-            sn2info.update({'service_line_descr': service_line_descr})
-        if (service_contract_number is not None) and (service_contract_number != ''):
-            sn2info.update({'service_contract_number': service_contract_number})
-        if (covered_product_line_end_date is not None) and (covered_product_line_end_date != ''):
-            sn2info.update({'covered_product_line_end_date': covered_product_line_end_date})
-        if (parent_sr_no is not None) and (parent_sr_no != ''):
-            sn2info.update({'parent_sr_no': parent_sr_no})
-        if (warranty_type is not None) and (warranty_type != ''):
-            sn2info.update({'warranty_type': warranty_type})
-        if (warranty_type_description is not None) and (warranty_type_description != ''):
-            sn2info.update({'warranty_type_description': warranty_type_description})
-        if (warranty_end_date is not None) and (warranty_end_date != ''):
-            sn2info.update({'warranty_end_date': warranty_end_date})
+        # add nonempty values to sn2inforecord
+        for key, value in [
+            ('serial_number', sn2inforecord.get('sr_no')),
+            ('is_covered', sn2inforecord.get('is_covered')),
+            ('contract_site_customer_name', sn2inforecord.get('contract_site_customer_name')),
+            ('contract_site_address1', sn2inforecord.get('contract_site_address1')),
+            ('contract_site_city', sn2inforecord.get('contract_site_city')),
+            ('contract_site_state_province', sn2inforecord.get('contract_site_state_province')),
+            ('contract_site_country', sn2inforecord.get('contract_site_country')),
+            ('service_line_descr', sn2inforecord.get('service_line_descr')),
+            ('service_contract_number', sn2inforecord.get('service_contract_number')),
+            ('covered_product_line_end_date', sn2inforecord.get('covered_product_line_end_date')),
+            ('parent_sr_no', sn2inforecord.get('parent_sr_no')),
+            ('warranty_type', sn2inforecord.get('warranty_type')),
+            ('warranty_type_description', sn2inforecord.get('warranty_type_description')),
+            ('warranty_end_date', sn2inforecord.get('warranty_end_date')),
+        ]: 
+            value = value.strip()
+            if value != '' and key not in optional_columns:
+                sn2info[key] = value
 
     logging.info('create_sn2info_record sn2info: %s' % sn2info)
     return sn2info
@@ -119,7 +101,7 @@ def inv_cisco_contract(info, params):
     path_request = expand_path(sn2info_dir + '/request/')
     status_path = expand_path(base_path + '/status')
 
-    node = inv_tree_list('hardware.system.support.cisco_contract:')
+    node = inv_tree_list('hardware.support.cisco_contract:')
 
     serials = []
     serialscontract = []
@@ -142,15 +124,17 @@ def inv_cisco_contract(info, params):
         logging.info('raw sn   : %s' % physerialnum)
         logging.info('raw desc : %s' % phydescr)
 
-        pid = phymodelname.split()[0].upper()  # cut PID at first space sign, change to all Uppercase
+        # cut PID/SN at first space sign, change to all Uppercase
+        pid = phymodelname.split()[0].upper()
+        physerialnum = physerialnum.split()[0].upper()
 
-        # drop all PIDs on Black List
+        # drop all PIDs on Black List, create default node entry for SN
         if not pid_on_black_list(pid):
 
             logging.info('PID not on blacklist: %s' % pid)
             if phydescr == "":
                 phydescr = 'requested'
-            physerialnum = physerialnum.split()[0].upper()
+
             # create list of serial numbers to request contract info for
             serials.append(physerialnum)
 
@@ -167,7 +151,7 @@ def inv_cisco_contract(info, params):
         # find serial in SER-sn2info-covered
         if os.path.isfile(path_found + serial):
             logging.info("Serial number covered: %s" % serial)
-            serialscontract.append(create_sn2info_record(path_found + serial))
+            serialscontract.append(create_sn2info_record(path_found + serial, optionalcolumns))
             logging.info("Serial number Record: %s" % serialscontract)
         # find serial in SER-sn2info-notcovered
         elif os.path.isfile(path_not_found + serial):
@@ -191,17 +175,12 @@ def inv_cisco_contract(info, params):
 
     logging.info("Serials contract : %s" % serialscontract)
 
+    # update default entrys with data
     for i in node:
         # add contract data by serial number
         for serial in serialscontract:
             if i.get('serial_number') == serial.get('serial_number'):
                 i.update(serial)
-        # remove optional columns
-        logging.info('remove columns: %s' % optionalcolumns)
-        if optionalcolumns is not None:
-            for column in optionalcolumns:
-                logging.info('remove column: %s' % column)
-                i.pop(column, None)
 
     # create and write back api status, will be used for active check cisco_api_status
     apistatus = {}
diff --git a/inventory/snmp_cisco_eox b/inventory/snmp_cisco_eox
index d9bf001..ab1312f 100644
--- a/inventory/snmp_cisco_eox
+++ b/inventory/snmp_cisco_eox
@@ -1,14 +1,22 @@
 #!/usr/bin/python
 # -*- encoding: utf-8; py-indent-offset: 4 -*-
 #
-# 20.03.2017 : writen by Th.L. to collect/show Cisco hardware EoX status
+# License: GNU General Public License v2
 #
-# 29.05.2017 : fixed empty pid handling
-#            : added serial number cleanup
-# 09-04.2018 : removed import
-# 04.09.2018 : changes for CMK 1.5.x (inv_tree --> inv_tree_list)
-# 05.09.2018 : changes for CMK 1.5.x (replaced global variable g_hostname with api call host_name())
-# 13.08.2018 : changed variable host_name to _hostname for cmk 1.5
+# Author: thl-cmk[at]outlook[dot]com
+# URL   : https://thl-cmk.hopto.org
+# Date  : 2017-03-20
+#
+# collect/show Cisco hardware EoX status
+#
+# 2017-05-29 : fixed empty pid handling
+#              added serial number cleanup
+# 2018-04-09 : removed import
+# 2018-09-04 : changes for CMK 1.5.x (inv_tree --> inv_tree_list)
+# 2018-09-05 : changes for CMK 1.5.x (replaced global variable g_hostname with api call host_name())
+# 2018-08-13 : changed variable host_name to _hostname for cmk 1.5
+# 2020-08-04 : code cleanup (create_eox_record function)
+#              moved node tree from hardware.system.support to hardware.system
 #
 
 # import is done by Check_MK
@@ -18,79 +26,52 @@ import json
 import ConfigParser
 
 
-def create_eox_record(eoxfile):
+def create_eox_record(eoxfile, optional_columns):
     eox = {}
     if os.path.isfile(eoxfile):
         with open(eoxfile) as f:
             eoxrecord = json.load(f)
+
         modifytime = os.path.getmtime(eoxfile)
-        eox.update({'Last_checked': time.strftime('%Y-%m-%d', time.localtime(modifytime))})
-        eox.update({'pid': eoxrecord.get('EOLProductID')})
-
-        # get infos from EOX File
-        ProductIDDescription = eoxrecord.get('ProductIDDescription')
-        EOXExternalAnnouncementDate = eoxrecord.get('EOXExternalAnnouncementDate').get('value')
-        EndOfSaleDate = eoxrecord.get('EndOfSaleDate').get('value')
-        EndOfSvcAttachDate = eoxrecord.get('EndOfSvcAttachDate').get('value')
-        LastDateOfSupport = eoxrecord.get('LastDateOfSupport').get('value')
-        ProductBulletinNumber =  eoxrecord.get('ProductBulletinNumber')
-        LinkToProductBulletinURL = eoxrecord.get('LinkToProductBulletinURL')
-        UpdatedTimeStamp = eoxrecord.get('UpdatedTimeStamp').get('value')
-        EndOfSecurityVulSupportDate = eoxrecord.get('EndOfSecurityVulSupportDate').get('value')
-        EndOfSWMaintenanceReleases = eoxrecord.get('EndOfSWMaintenanceReleases').get('value')
-        EndOfRoutineFailureAnalysisDate = eoxrecord.get('EndOfRoutineFailureAnalysisDate').get('value')
-        EOXInputType = eoxrecord.get('EOXInputType')
+
+        eox['Last_checked'] = time.strftime('%Y-%m-%d', time.localtime(modifytime))
+        eox['pid'] = eoxrecord.get('EOLProductID')
 
         # Migration Info
         EOXMigrationDetails = eoxrecord.get('EOXMigrationDetails')
-        MigrationProductId = EOXMigrationDetails.get('MigrationProductId')
-        MigrationInformation = EOXMigrationDetails.get('MigrationInformation')
-        MigrationProductInfoURL = EOXMigrationDetails.get('MigrationProductInfoURL')
-        MigrationProductName = EOXMigrationDetails.get('MigrationProductName')
-
-        # add nonempty infos to eoxrecord
-        if (ProductIDDescription is not None) and (ProductIDDescription != ' '):
-            eox.update({'ProductIDDescription': ProductIDDescription})
-        if (EOXExternalAnnouncementDate is not None) and (EOXExternalAnnouncementDate != ' '):
-            eox.update({'EOXExternalAnnouncementDate': EOXExternalAnnouncementDate})
-        if (EndOfSaleDate is not None) and (EndOfSaleDate != ' '):
-            eox.update({'EndOfSaleDate': EndOfSaleDate})
-        if (EndOfSvcAttachDate is not None) and (EndOfSvcAttachDate != ' '):
-            eox.update({'EndOfSvcAttachDate': EndOfSvcAttachDate})
-        if (LastDateOfSupport is not None) and (LastDateOfSupport != ' '):
-            eox.update({'LastDateOfSupport': LastDateOfSupport})
-        if (ProductBulletinNumber is not None) and (ProductBulletinNumber != ' '):
-            eox.update({'ProductBulletinNumber': ProductBulletinNumber})
-        if (LinkToProductBulletinURL is not None) and (LinkToProductBulletinURL != ' '):
-            eox.update({'LinkToProductBulletinURL': LinkToProductBulletinURL})
-        if (UpdatedTimeStamp is not None) and (UpdatedTimeStamp != ' '):
-            eox.update({'UpdatedTimeStamp': UpdatedTimeStamp})
-        if (EndOfSecurityVulSupportDate is not None) and (EndOfSecurityVulSupportDate != ' '):
-            eox.update({'EndOfSecurityVulSupportDate': EndOfSecurityVulSupportDate})
-        if (EndOfSWMaintenanceReleases is not None) and (EndOfSWMaintenanceReleases != ' '):
-            eox.update({'EndOfSWMaintenanceReleases': EndOfSWMaintenanceReleases})
-        if (EndOfRoutineFailureAnalysisDate is not None) and (EndOfRoutineFailureAnalysisDate != ' '):
-            eox.update({'EndOfRoutineFailureAnalysisDate' : EndOfRoutineFailureAnalysisDate})
 
-        # Migration Info
-        if (MigrationProductId is not None) and (MigrationProductId != ' '):
-            eox.update({'MigrationProductId': MigrationProductId})
-        if (MigrationInformation is not None) and (MigrationInformation != ' '):
-            eox.update({'MigrationInformation': MigrationInformation})
-        if (MigrationProductInfoURL is not None) and (MigrationProductInfoURL != ' '):
-            eox.update({'MigrationProductInfoURL': MigrationProductInfoURL})
-        if (MigrationProductName is not None) and (MigrationProductName != ' '):
-            eox.update({'MigrationProductName': MigrationProductName})
+        for key, value in [
+            ('ProductIDDescription', eoxrecord.get('ProductIDDescription', '')),
+            ('EOXExternalAnnouncementDate', eoxrecord.get('EOXExternalAnnouncementDate').get('value', '')),
+            ('EndOfSaleDate', eoxrecord.get('EndOfSaleDate').get('value', '')),
+            ('EndOfSvcAttachDate', eoxrecord.get('EndOfSvcAttachDate').get('value', '')),
+            ('LastDateOfSupport', eoxrecord.get('LastDateOfSupport').get('value', '')),
+            ('ProductBulletinNumber', eoxrecord.get('ProductBulletinNumber', '')),
+            ('LinkToProductBulletinURL', eoxrecord.get('LinkToProductBulletinURL', '')),
+            ('UpdatedTimeStamp', eoxrecord.get('UpdatedTimeStamp').get('value', '')),
+            ('EndOfSecurityVulSupportDate', eoxrecord.get('EndOfSecurityVulSupportDate').get('value', '')),
+            ('EndOfSWMaintenanceReleases', eoxrecord.get('EndOfSWMaintenanceReleases').get('value', '')),
+            ('EndOfRoutineFailureAnalysisDate', eoxrecord.get('EndOfRoutineFailureAnalysisDate').get('value', '')),
+
+            # Migration Info
+            ('MigrationProductId', EOXMigrationDetails.get('MigrationProductId', '')),
+            ('MigrationInformation', EOXMigrationDetails.get('MigrationInformation', '')),
+            ('MigrationProductInfoURL', EOXMigrationDetails.get('MigrationProductInfoURL', '')),
+            ('MigrationProductName', EOXMigrationDetails.get('MigrationProductName', '')),
+        ]:
+            value = value.strip()
+            if value != '' and key not in optional_columns:
+                eox[key] = value
 
         # add serial if EoX from get_eox_by_serial
+        EOXInputType = eoxrecord.get('EOXInputType')
         if EOXInputType == 'ShowEOXBySerialNumber':
-            eox.update({'serial_number': eoxrecord.get('EOXInputValue')})
+            eox['serial_number'] = eoxrecord.get('EOXInputValue')
 
     return eox
 
 
 def inv_cisco_eox(info, params):
-
     set_loglevel()
 
     # list of PIDs to drop
@@ -109,6 +90,7 @@ def inv_cisco_eox(info, params):
                        'MigrationProductInfoURL',
                        'MigrationProductName',
                        ]
+
     base_path = '~/var/ciscoapi'
     conf_file = '~/etc/ciscoapi/ciscoapi.conf'
     conf_file = os.path.expanduser(conf_file)
@@ -151,7 +133,7 @@ def inv_cisco_eox(info, params):
 
     status_path = expand_path(base_path + '/status')
 
-    node = inv_tree_list('hardware.system.support.cisco_eox:')
+    node = inv_tree_list('hardware.support.cisco_eox:')
 
     pids = [] 
     pidseox = []
@@ -177,18 +159,17 @@ def inv_cisco_eox(info, params):
         logging.info('raw sn   : %s' % physerialnum)
         logging.info('raw desc : %s' % phydescr)
 
-        # cut PID at first space sign, change to all Uppercase
+        # cut PID/SN at first space sign, change to all Uppercase
         pid = phymodelname.split()[0].upper()
+        physerialnum = physerialnum.split()[0].upper()
 
-        # drop all PIDs on Black List
+        # drop all PIDs/SNs on Black List
         if not pid_on_black_list(pid) and not sn_on_black_list(physerialnum):
             logging.info('PID not on blacklist: %s' % pid)
 
             if phydescr == "":
                 phydescr = 'requested'
 
-            physerialnum = physerialnum.split()[0].upper()
-
             # check if PID on bad list, if so try serial number
             if pid_on_bad_list(pid) or always_use_serial:
                 logging.info('PID on bad list: %s' % pid)
@@ -198,6 +179,7 @@ def inv_cisco_eox(info, params):
                 pids.append(pid)
                 logging.info('PID not on bad list: %s' % pid)
 
+            # create default node entry for PID/SN
             node.append({
                 "serial_number"       : physerialnum,
                 "pid"                 : pid,
@@ -216,7 +198,7 @@ def inv_cisco_eox(info, params):
         # find pid in PID-EOX-known
         if os.path.isfile(path_found_pid + pidfile):
             logging.info("PID known: %s" % pid)
-            pidseox.append(create_eox_record(path_found_pid + pidfile))
+            pidseox.append(create_eox_record(path_found_pid + pidfile, optionalcolumns))
             logging.info("EOX Record: %s" % pidseox)
         # find pid in PID-EOX-unknown
         elif os.path.isfile(path_not_found_pid + pidfile):
@@ -244,7 +226,7 @@ def inv_cisco_eox(info, params):
         # find serial in SER-EOX-known
         if os.path.isfile(path_found_ser + serial):
             logging.info("Serialnumber known: %s" % serial)
-            serialseox.append(create_eox_record(path_found_ser + serial))
+            serialseox.append(create_eox_record(path_found_ser + serial, optionalcolumns))
             logging.info("Serialnumber Record: %s" % serialseox)
         # find serial in SER-EOX-unknown
         elif os.path.isfile(path_not_found_ser + serial):
@@ -269,6 +251,7 @@ def inv_cisco_eox(info, params):
     logging.info("PID EoX : %s" % pidseox)
     logging.info("Serials EoX : %s" % serialseox)
 
+    # update default entrys with data
     for i in node:
         # add EoX data by pid
         for pid in pidseox:
@@ -278,12 +261,6 @@ def inv_cisco_eox(info, params):
         for serial in serialseox:
             if i.get('serial_number') == serial.get('serial_number'):
                 i.update(serial)
-        # remove optional columns
-        logging.info('remove columns: %s' % optionalcolumns)
-        if optionalcolumns is not None:
-            for column in optionalcolumns:
-                logging.info('remove column: %s' % column)
-                i.pop(column, None)
 
     # create and write back api status, will be used for active check cisco_api_status
     apistatus = {}
diff --git a/inventory/snmp_cisco_suggestion b/inventory/snmp_cisco_suggestion
index 88bcfba..45fd11b 100644
--- a/inventory/snmp_cisco_suggestion
+++ b/inventory/snmp_cisco_suggestion
@@ -69,8 +69,8 @@ def create_suggested_record(pidfile, optionalcolumns):
         for product in cleanrecord:
             for suggestion in product.get('suggestion'):
                 for key in suggestion.keys():
-                    temp_value = suggestion.get(key)
-                    if (temp_value is None) or (temp_value == '') or (key in optionalcolumns):
+                    temp_value = suggestion.get(key, '')
+                    if temp_value == '' or key in optionalcolumns:
                         suggestion.pop(key)
 
             # move content from 'suggestion'.'product'.'suggestion' one stage up into 'suggestion'.'product'
@@ -257,12 +257,12 @@ def inv_cisco_suggestion(info, params):
         for product in suggestions:
             if i.get('pid') == product.get('pid'):
                 i.update(product)
-        # remove optional columns
-        logging.debug('remove columns: %s' % optionalcolumns)
-        if optionalcolumns is not None:
-            for column in optionalcolumns:
-                logging.debug('remove column: %s' % column)
-                i.pop(column, None)
+        # remove optional columns (already done by create_suggested_record)
+        #logging.debug('remove columns: %s' % optionalcolumns)
+        #if optionalcolumns is not None:
+        #    for column in optionalcolumns:
+        #        logging.debug('remove column: %s' % column)
+        #        i.pop(column, None)
 
     # create and write back api status, will be used for active checks
     apistatus = {}
diff --git a/lib/nagios/plugins/cisco_api_status b/lib/nagios/plugins/cisco_api_status
index b5323bb..a95e1d6 100755
--- a/lib/nagios/plugins/cisco_api_status
+++ b/lib/nagios/plugins/cisco_api_status
@@ -1,14 +1,12 @@
 #!/usr/bin/python
 # encoding: utf-8
 
-# Monitor Cisco API plugins for CheckMK
-# Author: thl-cmk[al]outlook[dot]com
-#
-#
-# 15.03.2020: changed getopt to argparse
+
+
 
 import os
-import argparse
+import sys
+import getopt
 import ConfigParser
 import json
 from datetime import datetime
@@ -16,6 +14,61 @@ import logging
 import sys
 
 
+def bail_out(reason):
+    # set logg modul name <file>:<module>.<function>
+    logger = logging.getLogger(__file__ + ':' + __name__ + '.' + sys._getframe().f_code.co_name)
+
+    sys.stderr.write("FATAL ERROR: %s\n" % reason)
+    sys.exit(3)
+
+
+def usage():
+    # set logg modul name <file>:<module>.<function>
+    logger = logging.getLogger(__file__ + ':' + __name__ + '.' + sys._getframe().f_code.co_name)
+
+    print """cisco_api_atatus [options] TARGET
+
+Check status of Cisco APIs for TARGET. TARGET is the hostname used by Check_MK.
+
+Other options:
+
+ PSIRT options
+ --psirt-crit-severity <severity>  if new/updated advisory equal or above severity set outcome to critical
+ --psirt-crit-days <days>          set outcome to critical is new/updated advisory not older then days
+ --psirt-warn-severity <severity>  if new/updated advisory equal or above severity set outcome to warning
+ --psirt-warn-days <days>          set outcome to warning is new/updated advisory not older then days
+ --psirt-not-active <status>       set outcome to status if PSIRT API is not active
+ 
+ --psirt-crit-days should be less then --psirt-warn-days
+ --psirt-warn-severity should be less then --psirt-crit-severity
+ 
+ EoX options
+ --eox-crit-new <days>             set outcome to critical if new announcement not older then days
+ --eox-warn-new <days>             set outcome to warning if new announcement not older then days 
+ --eox-crit-change <days>          set outcome to critical if announcement is about to change in lees then days
+ --eox-warn-change <days>          set outcome to warning if announcement is about to change in lees then days
+ --eox-not-active <status>         set outcome to status if EoX API is not active
+ 
+ sn2info (contract) options
+ --sn2info-crit-change <days>      set outcome to critical if contract is about to change in lees then days
+ --sn2info-warn-change <days>      set outcome to warning if contract is about to change in lees then days
+ --sn2info-not-active <status>     set outcome to status if sn2info API is not active
+ 
+ suggestion options
+ --suggestion-not-active <status>  set outcome to status if suggestion API is not active
+ 
+  
+ <severity> is one of : 1 (Critical), 2 (High), 3 (Medium), 4 (Low), 0 (All)
+ <days>               : >= 1
+ <status> is one of   : 0 (Ok), 1 (Warning), 2 (Critical)
+ 
+
+ -h, --help     show this help and exit
+ --debug        show Python exceptions verbosely
+
+"""
+
+
 # check if dir exists, if not try to create it.
 # return True if dir exists or creation was ok.
 # return False if dir not exists and creation was not ok
@@ -47,7 +100,7 @@ def expand_path(path):
     return path
 
 
-def check_eox_status(apistatus, options, cmd_args):
+def check_eox_status(apistatus, options):
     # set logg modul name <file>:<module>.<function>
     logger = logging.getLogger(__file__ + ':' + __name__ + '.' + sys._getframe().f_code.co_name)
 
@@ -59,10 +112,10 @@ def check_eox_status(apistatus, options, cmd_args):
     lastrun = apistatus.get('lastrun')
     refresh_known = options.get('refresh_known', 31)
     refresh_unknown = options.get('refresh_unknown', 7)
-    crit_new = cmd_args.eox_crit_new
-    warn_new = cmd_args.eox_warn_new
-    crit_change = cmd_args.eox_crit_change
-    warn_change = cmd_args.eox_warn_change
+    crit_new = options.get('crit-new', 0)
+    warn_new = options.get('warn-new', 0)
+    crit_change = options.get('crit-change', 0)
+    warn_change = options.get('warn-change', 0)
 
     for entry in lastrun:
         last_checked = entry.get('Last_checked')
@@ -89,7 +142,7 @@ def check_eox_status(apistatus, options, cmd_args):
 
             # check if date is about to change
             for key in entry.keys():
-                if key in EoL_dates and entry.get(key) != '':
+                if key in EoL_dates:
                     change_days = (datetime.strptime(entry.get(key), '%Y-%m-%d').date() - datetime.now().date()).days
                     change_text = EoL_dates_desc.get(key, 'key not found')
                     if ((change_days < crit_change) or (change_days < warn_change)) and (change_days >= 0):
@@ -136,7 +189,7 @@ def check_eox_status(apistatus, options, cmd_args):
     return output, long_output, status
 
 
-def check_psirt_status(apistatus, options, cmd_args):
+def check_psirt_status(apistatus, options):
     # set logg modul name <file>:<module>.<function>
     logger = logging.getLogger(__file__ + ':' + __name__ + '.' + sys._getframe().f_code.co_name)
 
@@ -159,10 +212,10 @@ def check_psirt_status(apistatus, options, cmd_args):
 
     refresh_found    = options.get('refresh_found', 1)
     refresh_notfound = options.get('refresh_notfound', 1)
-    warn_days        = cmd_args.psirt_warn_days
-    crit_days        = cmd_args.psirt_crit_days
-    warn_severity    = cmd_args.psirt_warn_severity
-    crit_severity    = cmd_args.psirt_crit_severity
+    warn_days        = options.get('warn-days')
+    crit_days        = options.get('crit-days')
+    warn_severity    = options.get('warn-severity', 0)
+    crit_severity    = options.get('crit-severity', 0)
 
     if (psirt_status == 'found') and (last_refresh > refresh_found):
         max_refresh_known = last_refresh
@@ -201,7 +254,7 @@ def check_psirt_status(apistatus, options, cmd_args):
     return output, long_output, status
 
 
-def check_sn2info_status(apistatus, options, cmd_args):
+def check_sn2info_status(apistatus, options):
     # set logg modul name <file>:<module>.<function>
     logger = logging.getLogger(__file__ + ':' + __name__ + '.' + sys._getframe().f_code.co_name)
 
@@ -214,8 +267,8 @@ def check_sn2info_status(apistatus, options, cmd_args):
 
     refresh_covered = options.get('refresh_covered', 31)
     refresh_notcovered = options.get('refresh_notcovered', 7)
-    crit_change = cmd_args.sn2info_crit_change
-    warn_change = cmd_args.sn2info_warn_change
+    crit_change = options.get('crit-change', 0)
+    warn_change = options.get('warn-change', 0)
 
     for entry in lastrun:
         last_checked = entry.get('Last_checked')
@@ -269,7 +322,7 @@ def check_sn2info_status(apistatus, options, cmd_args):
     return output, long_output, status
 
 
-def check_suggestion_status(apistatus, options, cmd_args):
+def check_suggestion_status(apistatus, options):
     # set logg modul name <file>:<module>.<function>
     logger = logging.getLogger(__file__ + ':' + __name__ + '.' + sys._getframe().f_code.co_name)
 
@@ -324,6 +377,7 @@ def main():
     output = ''
     long_output = ''
     apistatus = {}
+    target = ''
 
     loglevel = 'warning'
 
@@ -367,29 +421,79 @@ def main():
 
     os.unsetenv("LANG")
 
-    parser = argparse.ArgumentParser()
-    parser.add_argument('TARGET', type=str, help='Host to check (exact name form CheckMK)')
-    parser.add_argument('--psirt-crit-days', type=int, default=0, help='set check status to critical if new/updated advisory not older then days, should be less then --psirt-warn-days')
-    parser.add_argument('--psirt-warn-days', type=int, default=0, help='set check status to warning if new/updated advisory not older then days')
-    parser.add_argument('--psirt-crit-severity', type=int, default=0, choices=[0, 1, 2, 3, 4], help='if new/updated advisory equal or above severity {All, Critical, High, Medium, Low} set check status to critical')
-    parser.add_argument('--psirt-warn-severity', type=int, default=0, choices=[0, 1, 2, 3, 4], help='if new/updated advisory equal or above severity {All, Critical, High, Medium, Low} set check status to warning, should be less then --psirt-crit-severity')
-    parser.add_argument('--psirt-not-active', type=int, choices=[0, 1, 2], help='set check status to {Ok, Warn, Crit} if PSIRT API is not active')
-    parser.add_argument('--eox-crit-new', type=int, default=0, help='set check status to critical if new announcement not older then days')
-    parser.add_argument('--eox-warn-new', type=int, default=0, help='set check status to warning if new announcement not older then days')
-    parser.add_argument('--eox-crit-change', type=int, default=0, help='set check status to critical if announcement is about to change in lees then days')
-    parser.add_argument('--eox-warn-change', type=int, default=0, help='set check status to warning if announcement is about to change in lees then days')
-    parser.add_argument('--eox-not-active', type=int, choices=[0, 1, 2], help='set check status to {Ok, Warn, Crit} if EoX API is not active')
-    parser.add_argument('--sn2info-crit-change', type=int, default=0, help='set check status to critical if contract is about to change in lees then days')
-    parser.add_argument('--sn2info-warn-change', type=int, default=0, help='set check status to warning if contract is about to change in lees then days')
-    parser.add_argument('--sn2info-not-active', type=int, choices=[0, 1, 2], help='set check status to {Ok, Warn, Crit} if sn2info API is not active')
-    parser.add_argument('--suggestion-not-active', type=int, choices=[0, 1, 2], help='set check status to {Ok, Warn, Crit} if suggestion API is not active')
-
-    parser.parse_args()
-    cmd_args = parser.parse_args()
-    # print 'cmd_args: {}'.format(cmd_args)
-
-    target = cmd_args.TARGET
-    not_active = []
+    # short_options = "hw:W:c:C:nTI"
+    short_options = 'h'
+    long_options = ['help', 'debug', 
+                    'psirt-crit-severity=', 'psirt-crit-days=', 'psirt-warn-severity=', 'psirt-warn-days=', 'psirt-not-active=',
+                    'eox-not-active=', 'eox-crit-new=', 'eox-warn-new=', 'eox-crit-change=', 'eox-warn-change=',
+                    'sn2info-not-active=', 'sn2info-crit-change=', 'sn2info-warn-change=',
+                    'suggestion-not-active=',
+                    ]
+
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], short_options, long_options)
+
+        # first parse modifers
+    #    for o, a in opts:
+    #        if o in [ '-v', '--verbose' ]:
+    #            opt_verbose += 1
+    #        elif o in [ '-d', '--debug' ]:
+    #            opt_debug = True
+    #        elif o in [ '-w', '-W', '-c', '-C' ]:
+    #            routes.append((o[1], a))
+    #        elif o == '-n':
+    #            opt_nodns = True
+    #        elif o in [ '-T', '-I' ]:
+    #            opt_method = o
+
+        # now handle action options
+        for o, a in opts:
+            if o in ['--psirt-crit-severity']:
+                opt_psirt.update({'crit-severity': int(a)})
+            if o in ['--psirt-warn-severity']:
+                opt_psirt.update({'warn-severity': int(a)})
+            if o in ['--psirt-crit-days']:
+                if int(a) > 0:
+                    opt_psirt.update({'crit-days': int(a)})
+            if o in ['--psirt-warn-days']:
+                if int(a) > 0:
+                    opt_psirt.update({'warn-days': int(a)})
+            if o in ['--psirt-not-active']:
+                    opt_psirt.update({'not-active': int(a)})
+
+            if o in ['--eox-not-active']:
+                    opt_eox.update({'not-active': int(a)})
+            if o in ['--eox-crit-new']:
+                opt_eox.update({'crit-new': int(a)})
+            if o in ['--eox-warn-new']:
+                opt_eox.update({'warn-new': int(a)})
+            if o in ['--eox-crit-change']:
+                opt_eox.update({'crit-change': int(a)})
+            if o in ['--eox-warn-change']:
+                opt_eox.update({'warn-change': int(a)})
+
+            if o in ['--sn2info-not-active']:
+                opt_sn2info.update({'not-active': int(a)})
+            if o in ['--sn2info-crit-change']:
+                opt_sn2info.update({'crit-change': int(a)})
+            if o in ['--sn2info-warn-change']:
+                opt_sn2info.update({'warn-change': int(a)})
+
+            if o in ['--suggestion-not-active']:
+                opt_suggestion.update({'not-active': int(a)})
+
+            if o in ['-h', '--help']:
+                usage()
+                sys.exit(0)
+
+        if len(args) < 1:
+            bail_out("Please specify the target.")
+
+        target = args[0]
+
+
+    except Exception, e:
+        bail_out(e)
 
     eox_output = ''
     eox_long_output = ''
@@ -411,16 +515,16 @@ def main():
         output = 'Cisco API active.'
         with open(ciscoapistatus + target) as f:
             apistatus = json.load(f)
-        long_output = 'active API(s) found: ' + ', '.join(apistatus.keys())
+        long_output = 'active APIs found: ' + ', '.join(apistatus.keys())
         for key in apistatus.keys():
             if key == 'eox':
-                eox_output, eox_long_output, eox_status = check_eox_status(apistatus.get(key), opt_eox, cmd_args)
+                eox_output, eox_long_output, eox_status = check_eox_status(apistatus.get(key), opt_eox)
             if key == 'psirt':
-                psirt_output, psirt_long_output, psirt_status = check_psirt_status(apistatus.get(key), opt_psirt, cmd_args)
+                psirt_output, psirt_long_output, psirt_status = check_psirt_status(apistatus.get(key), opt_psirt)
             if key == 'sn2info':
-                sn2info_output, sn2info_long_output, sn2info_status = check_sn2info_status(apistatus.get(key), opt_sn2info, cmd_args)
+                sn2info_output, sn2info_long_output, sn2info_status = check_sn2info_status(apistatus.get(key), opt_sn2info)
             if key == 'suggestion':
-                suggestion_output, suggestion_long_output, suggestion_status = check_suggestion_status(apistatus.get(key), opt_suggestion, cmd_args)
+                suggestion_output, suggestion_long_output, suggestion_status = check_suggestion_status(apistatus.get(key), opt_suggestion)
 
         long_output += eox_long_output + sn2info_long_output + psirt_long_output + suggestion_long_output + '\n'
 
@@ -434,24 +538,26 @@ def main():
         if status > 0:
             output += ' (see long output for details)'
 
-        if cmd_args.psirt_not_active is not None and ('psirt' not in apistatus.keys()):
-            status = max(status, cmd_args.psirt_not_active)
-            not_active.append('PSIRT')
-
-        if cmd_args.eox_not_active is not None and ('eox' not in apistatus.keys()):
-            status = max(status, cmd_args.eox_not_active)
-            not_active.append('EoX')
-
-        if cmd_args.sn2info_not_active is not None and ('sn2info' not in apistatus.keys()):
-            status = max(status, cmd_args.sn2info_not_active)
-            not_active.append('SN2INFO')
-
-        if cmd_args.suggestion_not_active is not None and ('suggestion' not in apistatus.keys()):
-            status = max(status, cmd_args.suggestion_not_active)
-            not_active.append('SUGGESTION')
-
-        if len(not_active) > 0:
-            output += ' Not active API(s): {}'.format(', '.join(not_active))
+        if opt_psirt.get('not-active') and ('psirt' not in apistatus.keys()):
+            if status <= opt_psirt.get('not-active'):
+                status = opt_psirt.get('not-active')
+                output += ' PSIRT API not active.'
+
+        if opt_eox.get('not-active') and ('eox' not in apistatus.keys()):
+            if status <= opt_eox.get('not-active'):
+                status = opt_eox.get('not-active')
+                output += ' EoX API not active.'
+
+        if opt_sn2info.get('not-active') and ('sn2info' not in apistatus.keys()):
+            if status <= opt_sn2info.get('not-active'):
+                status = opt_sn2info.get('not-active')
+                output += ' SN2INFO API not active.'
+
+        if opt_suggestion.get('not-active') and ('suggestion' not in apistatus.keys()):
+            if status <= opt_suggestion.get('not-active'):
+                status = opt_suggestion.get('not-active')
+                output += ' SUGGESTION API not active.'
+                
     else:
         output = 'Cisco API not active(!)'
         status = max(1, status)
diff --git a/packages/inv_cisco_support b/packages/inv_cisco_support
index 9ecfc02..64bf31c 100644
--- a/packages/inv_cisco_support
+++ b/packages/inv_cisco_support
@@ -30,4 +30,4 @@
  'title': u'Inventory for Cisco Bug, EoX, contract status, PSIRT advisories and suggested software',
  'version': '20190830.v0.0.11',
  'version.min_required': '1.4.0p1',
- 'version.packaged': '1.6.0p8'}
\ No newline at end of file
+ 'version.packaged': '1.4.0p38'}
\ No newline at end of file
diff --git a/web/plugins/views/inv_cisco_support.py b/web/plugins/views/inv_cisco_support.py
index e078246..eca23a4 100644
--- a/web/plugins/views/inv_cisco_support.py
+++ b/web/plugins/views/inv_cisco_support.py
@@ -10,62 +10,380 @@
 #       (https://bst.cloudapps.cisco.com/bugsearch/bug/CSCuh91645)
 #
 
+import random
+
+
+def inv_paint_date_status(date_string):
+
+    warn_days = -90
+    crit_days = -30
+
+    #  check if date_sting not None, if so return no CSS Class and None
+    if date_string is None:
+        return '', ''
+
+    try:
+        days = int((time.time() - time.mktime(time.strptime(date_string, '%Y-%m-%d'))) / 86400)
+    except ValueError:
+        return '', date_string
+
+    if days > crit_days:
+        css_class = 'date_crit'
+    elif days > warn_days:
+        css_class = 'date_warn'
+    else:
+        css_class = 'date_default'
+
+    return css_class, '%s' % date_string
+
+
+def inv_paint_last_checked_status(date_string):
+
+    warn_days = 32
+    crit_days = 40
+
+    #  check if date_sting not None, if so return no CSS Class and None
+    if date_string is None:
+        return '', ''
+
+    #  check if _date_string in the right format, if not return CSS Class and date_string
+    try:
+        days = int((time.time() - time.mktime(time.strptime(date_string, '%Y-%m-%d'))) / 86400)
+    except ValueError:
+        return '', date_string
+
+    # last_checked is ok
+    if days <= warn_days:
+        css_class = ''
+    # no refresh for far to long
+    elif days >= crit_days:
+        css_class = 'date_crit'
+    # no refresh for to long
+    else:
+        css_class = 'date_warn'
+    # css_class = ''
+    return css_class, ' %s' % date_string
+
+
+def inv_paint_psirt_advisoryId(advisoryId):
+    psirt_url = '<a class="href_blue" target="_blank" href="https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/%s">%s</a>' % (advisoryId, advisoryId)
+    return '', psirt_url
+
+
+def inv_paint_eox_eolid(eolid):
+    if eolid is not None:
+        search_eolid_url = '<a class="href_blue" target="_blank" href="https://search.cisco.com/search?query=%s">%s</a>' % (eolid, eolid)
+    else:
+        search_eolid_url = ''
+    return '', search_eolid_url
+
+
+def render_inv_dicttable_suggestion_noqf(hostname, tree_id, invpath, node):
+    # In delta mode node is a pair of (old_items, new_items)
+    if type(node) == tuple:
+        html.write(_("Removed entries") + ":")
+        html.write("<span class=invold>")
+        render_inv_dicttable_suggestion_noqf(hostname, tree_id, invpath, node[0])
+        html.write("</span>")
+
+        html.write(_("New entries") + ":")
+        html.write("<span class=invnew>")
+        render_inv_dicttable_suggestion_noqf(hostname, tree_id, invpath, node[1])
+        html.write("</span>")
+        return
+
+    hint = inv_display_hint(invpath)
+    keyorder = hint.get("keyorder", []) # well known keys
+
+    # Add titles for those keys
+    titles = []
+    for key in keyorder:
+        invpath_sub = invpath + "0." + key
+        icon, title = inv_titleinfo(invpath_sub, None)
+        sub_hint = inv_display_hint(invpath_sub)
+        short_title = sub_hint.get("short", title)
+        titles.append((short_title, key))
+
+    # Determine *all* keys, in order to find unknown ones
+    keys = set([])
+    for entry in node:
+        keys.update(entry.keys())
+
+    # Order not well-known keys alphabetically
+    extratitles = []
+    for key in keys:
+        if key not in keyorder:
+            icon, title = inv_titleinfo(invpath + "0." + key, None)
+            extratitles.append((title, key))
+    extratitles.sort()
+    titles += extratitles
+
+    # Link to Multisite view with exactly this table
+    if "view" in hint:
+        url = html.makeuri_contextless([
+            ("view_name", hint["view"] ),
+            ("host", hostname)],
+            filename="view.py")
+        html.write('<div class=invtablelink><a href="%s">%s</a></div>' %
+            (url, _("Open this table for filtering / sorting")))
+
+    # We cannot use table here, since html.plug() does not work recursively
+    html.write('<table class=data>')
+    html.write('<tr>')
+    for title, key in titles:
+        html.write('<th>%s</th>' % title)
+    html.write('</tr>')
+
+    for nr, entry in enumerate(node):
+        html.write('<tr class=even0>')
+        for title, key in titles:
+            value = entry.get(key)
+            invpath_sub = invpath + "%d.%s" % (nr, key)
+            if type(value) == dict:
+                invpath_sub += "."
+            elif type(value) == list or (type(value) == tuple and type(value[0]) == list):
+                invpath_sub += ":"
+
+            hint = inv_display_hint(invpath_sub)
+            if "paint_function" in hint:
+                td_class, text = hint["paint_function"](value)
+                classtext = ' class="%s"' % td_class
+            else:
+                classtext = ""
+
+            html.write('<td%s>' % classtext)
+#            render_inv_subtree(hostname, tree_id, invpath_sub, value)
+            # render suggestions as not foldable
+            if key == 'suggestion' and type(value) == list:
+                render_inv_subtree_container(hostname, tree_id, invpath_sub, value)
+            else:
+                render_inv_subtree(hostname, tree_id, invpath_sub, value)
+            html.write('</td>')
+        html.write('</tr>')
+    html.write('</table>')
+
+
+def render_inv_dicttable_suggestion(hostname, tree_id, invpath, node):
+    # In delta mode node is a pair of (old_items, new_items)
+    if type(node) == tuple:
+        html.write(_("Removed entries") + ":")
+        html.write("<span class=invold>")
+        render_inv_dicttable_suggestion(hostname, tree_id, invpath, node[0])
+        html.write("</span>")
+
+        html.write(_("New entries") + ":")
+        html.write("<span class=invnew>")
+        render_inv_dicttable_suggestion(hostname, tree_id, invpath, node[1])
+        html.write("</span>")
+        return
+
+    hint = inv_display_hint(invpath)
+    keyorder = hint.get("keyorder", []) # well known keys
+
+    # Add titles for those keys
+    titles = []
+    for key in keyorder:
+        invpath_sub = invpath + "0." + key
+        icon, title = inv_titleinfo(invpath_sub, None)
+        sub_hint = inv_display_hint(invpath_sub)
+        short_title = sub_hint.get("short", title)
+        titles.append((short_title, key))
+
+    # Determine *all* keys, in order to find unknown ones
+    keys = set([])
+    for entry in node:
+        keys.update(entry.keys())
+
+    # Order not well-known keys alphabetically
+    extratitles = []
+    for key in keys:
+        if key not in keyorder:
+            icon, title = inv_titleinfo(invpath + "0." + key, None)
+            extratitles.append((title, key))
+    extratitles.sort()
+    titles += extratitles
+
+    # Link to Multisite view with exactly this table
+    if "view" in hint:
+        url = html.makeuri_contextless([
+            ("view_name", hint["view"] ),
+            ("host", hostname)],
+            filename="view.py")
+        html.write('<div class=invtablelink><a href="%s">%s</a></div>' %
+            (url, _("Open this table for filtering / sorting")))
+
+    #
+    # Th.L.: insert jscript for quickfilter
+    #
+    qfurl = html.makeuri([],filename="TableFilter/tablefilter.js", delvars=["host","selection","site","view_name"])
+    html.write('<script language="javascript" type="text/javascript" src="%s"></script>' % qfurl)
+
+    # Th.L.: create random table id
+    qf_table_id = "qf_id_" + "".join(random.SystemRandom().choice('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') for _ in range(10))
+
+    # We cannot use table here, since html.plug() does not work recursively
+    #    html.write('<table class=data>')
+    html.write('<table id=%s class=data>' % qf_table_id)
+    # html.write('<tr>')
+    html.write('<thead><tr>')  # Th.L.:  added thead for quickfilter (sort)
+    for title, key in titles:
+        html.write('<th>%s</th>' % title)
+    #html.write('</tr>')
+    html.write('</tr></thead><tbody>')  # Th.L.:  added thead and tbody for quickfilter (sort)
+
+    for nr, entry in enumerate(node):
+        html.write('<tr class=even0>')
+        for title, key in titles:
+            value = entry.get(key)
+            invpath_sub = invpath + "%d.%s" % (nr, key)
+            if type(value) == dict:
+                invpath_sub += "."
+            elif type(value) == list or (type(value) == tuple and type(value[0]) == list):
+                invpath_sub += ":"
+
+            hint = inv_display_hint(invpath_sub)
+            if "paint_function" in hint:
+                td_class, text = hint["paint_function"](value)
+                classtext = ' class="%s"' % td_class
+            else:
+                classtext = ""
+
+            html.write('<td%s>' % classtext)
+#            render_inv_subtree(hostname, tree_id, invpath_sub, value)
+            # render suggestions as not foldable
+            if key == 'suggestion' and type(value) == list:
+                render_inv_subtree_container(hostname, tree_id, invpath_sub, value)
+            else:
+                render_inv_subtree(hostname, tree_id, invpath_sub, value)
+            html.write('</td>')
+        html.write('</tr>')
+    #html.write('</table>')
+    html.write('</tbody></table>')  # Th.L.:  added tbody for quickfilter (sort)
+
+    #
+    # Th.L.: add jscript for quickfilter
+    #
+    html.write('<script data-config>\n')
+    html.write('    var filtersConfig = {\n')
+    html.write('        base_path: "TableFilter/",\n')
+    html.write('        alternate_rows: true,\n')
+    html.write('        rows_counter: true,\n')
+    html.write('        btn_reset: true,\n')
+    html.write('        bnt_reset_text: "Clear all",\n')
+    html.write('        loader: true,\n')
+    html.write('        status_bar: true,\n')
+    html.write('        status_bar_text : "status:",\n')
+    html.write('        loader : true,\n')
+    html.write('        mark_active_columns: true,\n')
+    html.write('        highlight_keywords: true,\n')
+    html.write('        auto_filter: true,\n')
+    html.write('        auto_filter_delay: 100,\n')
+    html.write('        paging: true,\n')
+    html.write('        mark_active_columns: true,\n')
+    html.write('        results_per_page: [" Results per page",[10,25,50,100,250,500,1000]],\n')
+    html.write('        no_results_message: true,\n')
+    html.write('        extensions:[{ name: "sort"},\n')
+    html.write('                    { name: "colsVisibility",\n')
+    html.write('                      tick_to_hide: false,\n')
+    html.write('                      at_start: [11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65],\n')
+    html.write('                      text: "Displayed columns: ",\n')
+    html.write('                      enable_tick_all: true,\n')
+    html.write('                      btn_html: "<button>Columns manager &#9660;</button>",\n')
+    html.write('                      btn_close_html: "<button>Close</button>",\n')
+    html.write('                      enable_hover: false,\n')
+    html.write('                    },\n')
+#    html.write('                    {name: "filtersVisibility"}
+    html.write('                   ]\n')
+    html.write('    };\n')
+    html.write('\n')
+    html.write('    var tf = new TableFilter("%s", filtersConfig);\n'  % qf_table_id)
+    html.write('    tf.init();\n')
+    html.write('\n')
+    html.write('</script>\n')
+
+
+def inv_paint_bug_status(bug_status):
+    _bug_status = {
+        'F': 'Fixed',
+        'O': 'Open',
+        'T': 'Terminated'
+    }
+    return '', _bug_status.get(bug_status, bug_status)
+
+
+def inv_paint_bug_behavior_changed(behavior_changed):
+    _behavior_changed = {
+        'Y': 'yes',
+        'N': 'no',
+    }
+    return '', _behavior_changed.get(behavior_changed, behavior_changed)
+
+
+def inv_paint_bug_bugid(bugid):
+    if bugid is not None:
+        search_bugid_url = '<a class="href_blue" target="_blank" href="https://bst.cloudapps.cisco.com/bugsearch/bug/%s">%s</a>' % (bugid, bugid)
+    else:
+        search_eolid_url = ''
+    return '', search_bugid_url
+
 
 inventory_displayhints.update({
     # EoX display hints    
-    '.hardware.system.support.cisco_eox:': {'title': _('Cisco EoX status'),
+    '.hardware.support.cisco_eox:': {'title': _('Cisco EoX status'),
+                                            'render': render_inv_dicttable,
                                             'keyorder': ['pid', 'serial_number', 'ProductIDDescription', 'Last_checked',
                                                          'EOXExternalAnnouncementDate', 'EndOfSaleDate',
                                                          'LastDateOfSupport', 'EndOfSvcAttachDate', 'UpdatedTimeStamp',
                                                          'ProductBulletinNumber',
                                                          ],
-#                                            'view': 'invciscoeox_of_host',
+                                            'view': 'invciscoeox_of_host',
                                             },
-    '.hardware.system.support.cisco_eox:*.pid': {'title': _('PID (EoX)') },
-    '.hardware.system.support.cisco_eox:*.serial_number': {'title': _('Serial number') },
-    '.hardware.system.support.cisco_eox:*.ProductIDDescription': {'title': _('Description'), },
-    '.hardware.system.support.cisco_eox:*.EOXExternalAnnouncementDate': {'title': _('EOL Announcement') },
-    '.hardware.system.support.cisco_eox:*.EndOfSaleDate': {'title': _('End of sale') },
-    '.hardware.system.support.cisco_eox:*.EndOfSvcAttachDate': {'title': _('End of service attachment') },
-    '.hardware.system.support.cisco_eox:*.LastDateOfSupport': {'title': _('End of support') },
-    '.hardware.system.support.cisco_eox:*.ProductBulletinNumber': {'title': _('EOL bulletin ID') },
-    '.hardware.system.support.cisco_eox:*.LinkToProductBulletinURL': {'title': _('EOL bulletin URL') },
-    '.hardware.system.support.cisco_eox:*.UpdatedTimeStamp': {'title': _('EOL bulletin last update') },
-    '.hardware.system.support.cisco_eox:*.EndOfSecurityVulSupportDate': {'title': _('End of service vulnerability support') },
-    '.hardware.system.support.cisco_eox:*.EndOfSWMaintenanceReleases': {'title': _('End of software maintenace releases') },
-    '.hardware.system.support.cisco_eox:*.EndOfRoutineFailureAnalysisDate': {'title': _('End of routine failure analysis') },
-    '.hardware.system.support.cisco_eox:*.MigrationProductId': {'title': _('Migration PID') },
-    '.hardware.system.support.cisco_eox:*.MigrationInformation': {'title': _('Migration information') },
-    '.hardware.system.support.cisco_eox:*.MigrationProductInfoURL': {'title': _('Migration PID URL') },
-    '.hardware.system.support.cisco_eox:*.MigrationProductName': {'title': _('Migration product name') },
-    '.hardware.system.support.cisco_eox:*.Last_checked': {'title': _('Last checked') },
+    '.hardware.support.cisco_eox:*.pid': {'title': _('PID (EoX)'), },
+    '.hardware.support.cisco_eox:*.serial_number': {'title': _('Serial number'), },
+    '.hardware.support.cisco_eox:*.ProductIDDescription': {'title': _('Description'), },
+    '.hardware.support.cisco_eox:*.EOXExternalAnnouncementDate': {'title': _('EOL Announcement'), 'paint': 'date_status', 'filter': visuals.FilterInvtableText, },
+    '.hardware.support.cisco_eox:*.EndOfSaleDate': {'title': _('End of sale'), 'paint': 'date_status', 'filter': visuals.FilterInvtableText, },
+    '.hardware.support.cisco_eox:*.EndOfSvcAttachDate': {'title': _('End of service attachment'), 'paint': 'date_status', 'filter': visuals.FilterInvtableText, },
+    '.hardware.support.cisco_eox:*.LastDateOfSupport': {'title': _('End of support'), 'paint': 'date_status', 'filter': visuals.FilterInvtableText, },
+    '.hardware.support.cisco_eox:*.ProductBulletinNumber': {'title': _('EOL bulletin ID'), 'paint': 'eox_eolid', 'filter': visuals.FilterInvtableText, },
+    '.hardware.support.cisco_eox:*.LinkToProductBulletinURL': {'title': _('EOL bulletin URL'), },
+    '.hardware.support.cisco_eox:*.UpdatedTimeStamp': {'title': _('EOL bulletin last update'), },
+    '.hardware.support.cisco_eox:*.EndOfSecurityVulSupportDate': {'title': _('End of service vulnerability support'), 'paint': 'date_status', 'filter': visuals.FilterInvtableText, },
+    '.hardware.support.cisco_eox:*.EndOfSWMaintenanceReleases': {'title': _('End of software maintenace releases'), 'paint': 'date_status', 'filter': visuals.FilterInvtableText, },
+    '.hardware.support.cisco_eox:*.EndOfRoutineFailureAnalysisDate': {'title': _('End of routine failure analysis'), 'paint': 'date_status', 'filter': visuals.FilterInvtableText, },
+    '.hardware.support.cisco_eox:*.MigrationProductId': {'title': _('Migration PID'), },
+    '.hardware.support.cisco_eox:*.MigrationInformation': {'title': _('Migration information'), },
+    '.hardware.support.cisco_eox:*.MigrationProductInfoURL': {'title': _('Migration PID URL'), },
+    '.hardware.support.cisco_eox:*.MigrationProductName': {'title': _('Migration product name'), },
+    '.hardware.support.cisco_eox:*.Last_checked': {'title': _('Last checked'), 'paint': 'last_checked_status', 'filter': visuals.FilterInvtableText, },
 
 
     #  SN2Info (contract) display hints
-    '.hardware.system.support.cisco_contract:': {'title': _('Cisco contract status'),
+    '.hardware.support.cisco_contract:': {'title': _('Cisco contract status'),
+                                                 'render': render_inv_dicttable,
                                                  'keyorder': ['pid', 'serial_number', 'ProductIDDescription',
                                                               'Last_checked', 'is_covered', 'service_contract_number',
                                                               'covered_product_line_end_date',
                                                               ],
-#                                                 'view': 'invciscocontract_of_host',
+                                                 'view': 'invciscocontract_of_host',
                                                  },
-    '.hardware.system.support.cisco_contract:*.pid': {'title': _('PID (contract)'), },
-    '.hardware.system.support.cisco_contract:*.serial_number': {'title': _('Serial number'), },
-    '.hardware.system.support.cisco_contract:*.ProductIDDescription': {'title': _('Description'), },
-    '.hardware.system.support.cisco_contract:*.Last_checked': {'title': _('Last checked'),},
-    '.hardware.system.support.cisco_contract:*.is_covered': {'title': _('is covered'), },
-    '.hardware.system.support.cisco_contract:*.contract_site_customer_name': {'title': _('Customer name'), },
-    '.hardware.system.support.cisco_contract:*.contract_site_address1': {'title': _('Address'), },
-    '.hardware.system.support.cisco_contract:*.contract_site_city': {'title': _('City'), },
-    '.hardware.system.support.cisco_contract:*.contract_site_state_province': {'title': _('State/Province'), },
-    '.hardware.system.support.cisco_contract:*.contract_site_country': {'title': _('Country'), },
-    '.hardware.system.support.cisco_contract:*.service_line_descr': {'title': _('Service description'), },
-    '.hardware.system.support.cisco_contract:*.service_contract_number': {'title': _('Contract number'), },
-    '.hardware.system.support.cisco_contract:*.covered_product_line_end_date': {'title': _('Contract end date'),},
-    '.hardware.system.support.cisco_contract:*.parent_sr_no': {'title': _('Parent S/N'), },
-    '.hardware.system.support.cisco_contract:*.warranty_type': {'title': _('Warranty type'), },
-    '.hardware.system.support.cisco_contract:*.warranty_type_description': {'title': _('Warranty Description'), },
-    '.hardware.system.support.cisco_contract:*.warranty_end_date': {'title': _('Warranty end date'), },
+    '.hardware.support.cisco_contract:*.pid': {'title': _('PID (contract)'), },
+    '.hardware.support.cisco_contract:*.serial_number': {'title': _('Serial number'), },
+    '.hardware.support.cisco_contract:*.ProductIDDescription': {'title': _('Description'), },
+    '.hardware.support.cisco_contract:*.Last_checked': {'title': _('Last checked'),  'paint': 'last_checked_status', 'filter': visuals.FilterInvtableText,},
+    '.hardware.support.cisco_contract:*.is_covered': {'title': _('is covered'), },
+    '.hardware.support.cisco_contract:*.contract_site_customer_name': {'title': _('Customer name'), },
+    '.hardware.support.cisco_contract:*.contract_site_address1': {'title': _('Address'), },
+    '.hardware.support.cisco_contract:*.contract_site_city': {'title': _('City'), },
+    '.hardware.support.cisco_contract:*.contract_site_state_province': {'title': _('State/Province'), },
+    '.hardware.support.cisco_contract:*.contract_site_country': {'title': _('Country'), },
+    '.hardware.support.cisco_contract:*.service_line_descr': {'title': _('Service description'), },
+    '.hardware.support.cisco_contract:*.service_contract_number': {'title': _('Contract number'), },
+    '.hardware.support.cisco_contract:*.covered_product_line_end_date': {'title': _('Contract end date'), 'paint': 'date_status', 'filter': visuals.FilterInvtableText,},
+    '.hardware.support.cisco_contract:*.parent_sr_no': {'title': _('Parent S/N'), },
+    '.hardware.support.cisco_contract:*.warranty_type': {'title': _('Warranty type'), },
+    '.hardware.support.cisco_contract:*.warranty_type_description': {'title': _('Warranty Description'), },
+    '.hardware.support.cisco_contract:*.warranty_end_date': {'title': _('Warranty end date'), },
 
 
     # BUG display hints
@@ -75,19 +393,20 @@ inventory_displayhints.update({
     '.software.support.cisco_bug.PID': {'title': _('PID'), },
     '.software.support.cisco_bug.os_version': {'title': _('OS version'), },
     '.software.support.cisco_bug.bugs:': {'title': _('Cisco BUG IDs'),
+                                                  'render': render_inv_dicttable,
                                                   'keyorder': ['bug_id',  'last_modified_date', 'headline', 'severity', 'status', 'support_case_count', 'behavior_changed', ],
-#                                                  'view': 'invciscobugs_of_host',
+                                                  'view': 'invciscobugs_of_host',
                                           },
-    '.software.support.cisco_bug.bugs:*.status': {'title': _('Status'),  },
+    '.software.support.cisco_bug.bugs:*.status': {'title': _('Status'), 'paint': 'bug_status', 'filter': visuals.FilterInvtableText, },
     '.software.support.cisco_bug.bugs:*.product': {'title': _('Product'), },
     '.software.support.cisco_bug.bugs:*.description': {'title': _('Description'), },
     '.software.support.cisco_bug.bugs:*.headline': {'title': _('Headline'), },
     '.software.support.cisco_bug.bugs:*.support_case_count': {'title': _('Support case count'), },
     '.software.support.cisco_bug.bugs:*.last_modified_date': {'title': _('Last modified date'), },
-    '.software.support.cisco_bug.bugs:*.behavior_changed': {'title': _('Behavior changed'),  },
-    '.software.support.cisco_bug.bugs:*.bug_id': {'title': _('Bug ID'),  },
+    '.software.support.cisco_bug.bugs:*.behavior_changed': {'title': _('Behavior changed'), 'paint': 'bug_behavior_changed', 'filter': visuals.FilterInvtableText, },
+    '.software.support.cisco_bug.bugs:*.bug_id': {'title': _('Bug ID'), 'paint': 'bug_bugid', },
     '.software.support.cisco_bug.bugs:*.base_pid': {'title': _('Base PID'), },
-    '.software.support.cisco_bug.bugs:*.known_fixed_releases': {'title': _('Known fixed releases'),  },
+    '.software.support.cisco_bug.bugs:*.known_fixed_releases': {'title': _('Known fixed releases'), 'filter': visuals.FilterInvtableText, },
     '.software.support.cisco_bug.bugs:*.id': {'title': _('ID'), },
     '.software.support.cisco_bug.bugs:*.known_affected_releases': {'title': _('known affected releases'), },
     '.software.support.cisco_bug.bugs:*.severity': {'title': _('Severity'), },
@@ -98,13 +417,14 @@ inventory_displayhints.update({
     '.software.support.cisco_psirt.dont_show_not_updated_since': {'title': _('Don\'t show advisories not updated for X days'), },
     '.software.support.cisco_psirt.removed_advisories': {'title': _('Advisories removed'), },
     '.software.support.cisco_psirt.advisories:': {'title': _('Cisco PSIRT advisories'),
+                                                  'render': render_inv_dicttable,
                                                   'keyorder': ['advisoryId', 'sir', 'cvssBaseScore', 'advisoryTitle',
                                                                ],
-#                                                  'view': 'invciscopsirt_of_host',
+                                                  'view': 'invciscopsirt_of_host',
                                                   },
-    '.software.support.cisco_psirt.advisories:*.advisoryId': {'title': _('Advisory ID'),  },
+    '.software.support.cisco_psirt.advisories:*.advisoryId': {'title': _('Advisory ID'), 'paint': 'psirt_advisoryId', 'filter': visuals.FilterInvtableText, },
     '.software.support.cisco_psirt.advisories:*.advisoryTitle': {'title': _('Advisory Title'), },
-    '.software.support.cisco_psirt.advisories:*.bugIDs': {'title': _('Bug IDs'), },  
+    '.software.support.cisco_psirt.advisories:*.bugIDs': {'title': _('Bug IDs'), },  #  'paint': 'psirt_bugid', 'filter': visuals.FilterInvtableText,
     '.software.support.cisco_psirt.advisories:*.cvssBaseScore': {'title': _('CVSS base Score'), },
     '.software.support.cisco_psirt.advisories:*.firstFixed': {'title': _('First fixed in'), },
     '.software.support.cisco_psirt.advisories:*.firstPublished': {'title': _('First Published'), },
@@ -120,25 +440,26 @@ inventory_displayhints.update({
     '.software.support.cisco_psirt.advisories:*.cvrfUrl': {'title': _('CVRF URL'), },
     '.software.support.cisco_psirt.advisories:*.ovalUrl': {'title': _('OVAL URL'), },
     '.software.support.cisco_psirt.os_version': {'title': _('OS version'), },
-    '.software.support.cisco_psirt.Last_checked': {'title': _('Last checked'), },
+    '.software.support.cisco_psirt.Last_checked': {'title': _('Last checked'), 'paint': 'last_checked_status', 'filter': visuals.FilterInvtableText,},
     '.software.support.cisco_psirt.not_updated_for_x_days': {'title': _('don\'t show advisories not updated for X days'), },
     '.software.support.cisco_psirt.dont_show_older_then': {'title': _('don\'t show advisories not updated after'), },
 
     # SUGGESTION display hints
     '.software.support.cisco_suggestion:': {'title': _('Cisco suggested software'),
+                                            'render': render_inv_dicttable_suggestion,
                                             'keyorder': ['pid', 'ProductIDDescription', 'Last_checked',
                                                          ],
 #                                            'view'    : 'invciscosuggestion_of_host',
                                             },
     '.software.support.cisco_suggestion:*.pid': {'title': _('PID (suggestion)'), },
     '.software.support.cisco_suggestion:*.ProductIDDescription': {'title': _('Description'), },
-    '.software.support.cisco_suggestion:*.Last_checked': {'title': _('Last checked'),  },
+    '.software.support.cisco_suggestion:*.Last_checked': {'title': _('Last checked'), 'paint': 'last_checked_status', 'filter': visuals.FilterInvtableText,},
     '.software.support.cisco_suggestion:*.suggestion': {'title': _('Suggestion(s)'), },
-    '.software.support.cisco_suggestion:*.suggestion:': {'keyorder': ['productName', 'softwareType']},
+    '.software.support.cisco_suggestion:*.suggestion:': {'render': render_inv_dicttable_suggestion_noqf, 'keyorder': ['productName', 'softwareType']},
     '.software.support.cisco_suggestion:*.suggestion:*.productName': {'title': _('Product name'), },
     '.software.support.cisco_suggestion:*.suggestion:*.softwareType': {'title': _('Software type'), },
     '.software.support.cisco_suggestion:*.suggestion:*.suggestion': {'title': _('Suggestion(s)'), },
-    '.software.support.cisco_suggestion:*.suggestion:*.suggestion:': {'keyorder': ['id', 'releaseFormat2', 'releaseDate']},
+    '.software.support.cisco_suggestion:*.suggestion:*.suggestion:': {'render': render_inv_dicttable_suggestion_noqf, 'keyorder': ['id', 'releaseFormat2', 'releaseDate']},
     '.software.support.cisco_suggestion:*.suggestion:*.suggestion:*.id': {'title': _('ID'), },
     '.software.support.cisco_suggestion:*.suggestion:*.suggestion:*.releaseDate': {'title': _('Release date'), },
     '.software.support.cisco_suggestion:*.suggestion:*.suggestion:*.releaseFormat2': {'title': _('Version'), },
@@ -152,8 +473,8 @@ inventory_displayhints.update({
 })
 
 
-# declare_invtable_view('invciscoeox', '.hardware.system.support.cisco_eox:', _('Cisco EoX status'), _('Cisco EoX status'))
-# declare_invtable_view('invciscocontract', '.hardware.system.support.cisco_contract:', _('Cisco contract status'), _('Cisco contract status'))
-# declare_invtable_view('invciscopsirt', '.software.support.cisco_psirt.advisories:', _('Cisco PSIRT advisories'), _('Cisco PSIRT advisories'))
-# declare_invtable_view('invciscobugs', '.software.support.cisco_bug.bugs:', _('Cisco BUG IDs'), _('Cisco Bug IDs'))
-# declare_invtable_view('invciscosuggestion', '.software.support.cisco_suggestion:', _('Cisco suggested software'), _('Cisco suggested software'))
+declare_invtable_view('invciscoeox', '.hardware.support.cisco_eox:', _('Cisco EoX status'), _('Cisco EoX status'))
+declare_invtable_view('invciscocontract', '.hardware.support.cisco_contract:', _('Cisco contract status'), _('Cisco contract status'))
+declare_invtable_view('invciscopsirt', '.software.support.cisco_psirt.advisories:', _('Cisco PSIRT advisories'), _('Cisco PSIRT advisories'))
+declare_invtable_view('invciscobugs', '.software.support.cisco_bug.bugs:', _('Cisco BUG IDs'), _('Cisco Bug IDs'))
+#declare_invtable_view('invciscosuggestion', '.software.support.cisco_suggestion:', _('Cisco suggested software'), _('Cisco suggested software'))
-- 
GitLab