From f84f8157171163a857ca10411d803a2fe91cc1a3 Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Sun, 16 Jun 2024 18:49:09 +0200 Subject: [PATCH] update project --- README.md | 2 +- mkp/inv_cisco_support-0.3.2-20240616.mkp | Bin 0 -> 24880 bytes source/packages/inv_cisco_support | 8 +- .../web/plugins/views/inv_cisco_livecycle.py | 172 +++++++----------- 4 files changed, 67 insertions(+), 115 deletions(-) create mode 100644 mkp/inv_cisco_support-0.3.2-20240616.mkp diff --git a/README.md b/README.md index bae1456..05418a9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[PACKAGE]: ../../raw/master/mkp/inv_cisco_support-0.3.1-20240615.mkp "inv_cisco_support-0.3.1-20240615.mkp" +[PACKAGE]: ../../raw/master/mkp/inv_cisco_support-0.3.2-20240616.mkp "inv_cisco_support-0.3.2-20240616.mkp" # Cisco support APIs inventory plugin Adds live cycle information for Cisco devices to the inventory. diff --git a/mkp/inv_cisco_support-0.3.2-20240616.mkp b/mkp/inv_cisco_support-0.3.2-20240616.mkp new file mode 100644 index 0000000000000000000000000000000000000000..3440a7639015d979c73021ef5174276792d6564c GIT binary patch literal 24880 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 CPGDaE literal 0 HcmV?d00001 diff --git a/source/packages/inv_cisco_support b/source/packages/inv_cisco_support index e37648c..ffca570 100644 --- a/source/packages/inv_cisco_support +++ b/source/packages/inv_cisco_support @@ -38,7 +38,7 @@ 'name': 'inv_cisco_support', 'title': 'Inventory for Cisco Bug, EoX, contract status, PSIRT advisories and ' 'suggested software', - 'version': '0.3.1-20240615', - 'version.min_required': '2.2.0b1', - 'version.packaged': '2.2.0p24', - 'version.usable_until': '2.3.0b1'} + 'version': '0.3.2-20240616', + 'version.min_required': '2.3.0b1', + 'version.packaged': 'cmk-mkp-tool 0.2.0', + 'version.usable_until': '2.4.0b1'} diff --git a/source/web/plugins/views/inv_cisco_livecycle.py b/source/web/plugins/views/inv_cisco_livecycle.py index 3c47bd0..16ed923 100644 --- a/source/web/plugins/views/inv_cisco_livecycle.py +++ b/source/web/plugins/views/inv_cisco_livecycle.py @@ -18,24 +18,16 @@ # removed declare_view # 2023-10-25: fixed loading of painters for CMK 2.2.0 # 2024-06-15: moved view back to ~/local/share/check_mk/web/plugin/views +# 2024-06-16: modified imports for CMK 2.3 import time -from cmk.gui.i18n import _ -from cmk.gui.views.inventory.registry import inventory_displayhints - -from cmk.gui.views.inventory import ( - decorate_inv_paint, - PaintResult, - update_paint_functions, -) -from cmk.gui.plugins.visuals.inventory import ( - FilterInvtableText, -) +from cmk.gui.i18n import _ +from cmk.gui.inventory.filters import FilterInvtableText from cmk.gui.utils.html import HTML +from cmk.gui.views.inventory import PaintResult, decorate_inv_paint +from cmk.gui.views.inventory.registry import inventory_displayhints -# -ENABLE_PAINTERS = True # ################################################################################# # @@ -67,9 +59,6 @@ def inv_paint_date_status(date_string) -> PaintResult: return css_class, '%s' % date_string -update_paint_functions({'inv_paint_date_status': inv_paint_date_status}) - - @decorate_inv_paint() def inv_paint_last_checked_status(date_string) -> PaintResult: warn_days = 32 @@ -89,9 +78,6 @@ def inv_paint_last_checked_status(date_string) -> PaintResult: return css_class, ' %s' % date_string -update_paint_functions({'inv_paint_last_checked_status': inv_paint_last_checked_status}) - - @decorate_inv_paint() def inv_paint_psirt_advisoryid(advisoryId) -> PaintResult: psirt_url = HTML( @@ -100,9 +86,6 @@ def inv_paint_psirt_advisoryid(advisoryId) -> PaintResult: return '', psirt_url -update_paint_functions({'inv_paint_psirt_advisoryid': inv_paint_psirt_advisoryid}) - - @decorate_inv_paint() def inv_paint_eox_eolid(eolid) -> PaintResult: if eolid is not None: @@ -114,9 +97,6 @@ def inv_paint_eox_eolid(eolid) -> PaintResult: return '', search_eolid_url -update_paint_functions({'inv_paint_eox_eolid': inv_paint_eox_eolid}) - - @decorate_inv_paint() def inv_paint_bug_bugid(bugid) -> PaintResult: if bugid is not None: @@ -128,9 +108,6 @@ def inv_paint_bug_bugid(bugid) -> PaintResult: return '', search_bugid_url -update_paint_functions({'inv_paint_bug_bugid': inv_paint_bug_bugid}) - - @decorate_inv_paint() def inv_paint_psirt_bugid(bugids) -> PaintResult: search_bugid_url = '' @@ -145,8 +122,6 @@ def inv_paint_psirt_bugid(bugids) -> PaintResult: return '', search_bugid_url -update_paint_functions({'inv_paint_psirt_bugid': inv_paint_psirt_bugid}) - # # Painter functions END # @@ -168,15 +143,34 @@ inventory_displayhints.update({ ], 'view': 'invciscoeox_of_host', }, - '.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'}, + '.hardware.support.cisco_eox:*.EndOfRoutineFailureAnalysisDate': { + 'title': _('End of routine failure analysis'), 'paint': 'date_status'}, + '.hardware.support.cisco_eox:*.EndOfSWMaintenanceReleases': { + 'title': _('End of software maintenace releases'), 'paint': 'date_status' + }, + '.hardware.support.cisco_eox:*.EndOfSaleDate': {'title': _('End of sale'), 'paint': 'date_status'}, + '.hardware.support.cisco_eox:*.EndOfSecurityVulSupportDate': { + 'title': _('End of service vulnerability support'), 'paint': 'date_status' + }, + '.hardware.support.cisco_eox:*.EndOfSvcAttachDate': { + 'title': _('End of service attachment'), 'paint': 'date_status' + }, + '.hardware.support.cisco_eox:*.LastDateOfSupport': {'title': _('End of support'), 'paint': 'date_status'}, + '.hardware.support.cisco_eox:*.Last_checked': {'title': _('Last checked'), 'paint': 'last_checked_status'}, '.hardware.support.cisco_eox:*.LinkToProductBulletinURL': {'title': _('EOL bulletin URL'), }, - '.hardware.support.cisco_eox:*.UpdatedTimeStamp': {'title': _('EOL bulletin last update'), }, - '.hardware.support.cisco_eox:*.MigrationProductId': {'title': _('Migration PID'), }, '.hardware.support.cisco_eox:*.MigrationInformation': {'title': _('Migration information'), }, + '.hardware.support.cisco_eox:*.MigrationProductId': {'title': _('Migration PID'), }, '.hardware.support.cisco_eox:*.MigrationProductInfoURL': {'title': _('Migration PID URL'), }, '.hardware.support.cisco_eox:*.MigrationProductName': {'title': _('Migration product name'), }, + '.hardware.support.cisco_eox:*.ProductBulletinNumber': { + 'title': _('EOL bulletin ID'), 'filter': FilterInvtableText, 'paint': 'eox_eolid' + }, + '.hardware.support.cisco_eox:*.ProductIDDescription': {'title': _('Description'), }, + '.hardware.support.cisco_eox:*.UpdatedTimeStamp': {'title': _('EOL bulletin last update'), }, + '.hardware.support.cisco_eox:*.pid': {'title': _('PID (EoX)'), }, + '.hardware.support.cisco_eox:*.serial_number': {'title': _('Serial number'), }, }) # SN2Info (contract) display hints @@ -189,21 +183,25 @@ inventory_displayhints.update({ ], 'view': 'invciscocontract_of_host', }, - '.hardware.support.cisco_contract:*.pid': {'title': _('PID (contract)'), }, - '.hardware.support.cisco_contract:*.serial_number': {'title': _('Serial number'), }, + '.hardware.support.cisco_contract:*.Last_checked': {'title': _('Last checked'), 'paint': 'last_checked_status'}, '.hardware.support.cisco_contract:*.ProductIDDescription': {'title': _('Description'), }, - '.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:*.contract_site_customer_name': {'title': _('Customer name'), }, + '.hardware.support.cisco_contract:*.contract_site_state_province': {'title': _('State/Province'), }, + '.hardware.support.cisco_contract:*.covered_product_line_end_date': { + 'title': _('Contract end date'), 'paint': 'date_status' + }, + '.hardware.support.cisco_contract:*.is_covered': {'title': _('is covered'), }, '.hardware.support.cisco_contract:*.parent_sr_no': {'title': _('Parent S/N'), }, + '.hardware.support.cisco_contract:*.pid': {'title': _('PID (contract)'), }, + '.hardware.support.cisco_contract:*.serial_number': {'title': _('Serial number'), }, + '.hardware.support.cisco_contract:*.service_contract_number': {'title': _('Contract number'), }, + '.hardware.support.cisco_contract:*.service_line_descr': {'title': _('Service description'), }, + '.hardware.support.cisco_contract:*.warranty_end_date': {'title': _('Warranty end date'), }, '.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 @@ -221,18 +219,19 @@ inventory_displayhints.update({ ], 'view': 'invciscobugs_of_host', }, - '.software.support.cisco_bug.bugs:*.status': {'title': _('Status'), }, - '.software.support.cisco_bug.bugs:*.product': {'title': _('Product'), }, + '.software.support.cisco_bug.bugs:*.base_pid': {'title': _('Base PID'), }, + '.software.support.cisco_bug.bugs:*.behavior_changed': {'title': _('Behavior changed'), }, + '.software.support.cisco_bug.bugs:*.bug_id': {'title': _('Bug ID'), 'paint': 'bug_bugid'}, '.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:*.base_pid': {'title': _('Base PID'), }, - '.software.support.cisco_bug.bugs:*.known_fixed_releases': {'title': _('Known fixed releases'), }, '.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:*.known_fixed_releases': {'title': _('Known fixed releases'), }, + '.software.support.cisco_bug.bugs:*.last_modified_date': {'title': _('Last modified date'), }, + '.software.support.cisco_bug.bugs:*.product': {'title': _('Product'), }, '.software.support.cisco_bug.bugs:*.severity': {'title': _('Severity'), }, + '.software.support.cisco_bug.bugs:*.status': {'title': _('Status'), }, + '.software.support.cisco_bug.bugs:*.support_case_count': {'title': _('Support case count'), }, }) # PSIRT display hints @@ -249,74 +248,27 @@ inventory_displayhints.update({ ], 'view': 'invciscopsirt_of_host', }, + '.software.support.cisco_psirt.Last_checked': {'title': _('Last checked'), 'paint': 'last_checked_status'}, + '.software.support.cisco_psirt.advisories:*.advisoryId': {'title': _('Advisory ID'), 'paint': 'psirt_advisoryid'}, '.software.support.cisco_psirt.advisories:*.advisoryTitle': {'title': _('Advisory Title'), }, + '.software.support.cisco_psirt.advisories:*.bugIDs': {'title': _('Bug IDs'), 'paint': 'psirt_bugid'}, + '.software.support.cisco_psirt.advisories:*.cves': {'title': _('CVEs'), }, + '.software.support.cisco_psirt.advisories:*.cvrfUrl': {'title': _('CVRF URL')}, '.software.support.cisco_psirt.advisories:*.cvssBaseScore': {'title': _('CVSS base Score'), }, + '.software.support.cisco_psirt.advisories:*.cwe': {'title': _('CWE'), }, '.software.support.cisco_psirt.advisories:*.firstFixed': {'title': _('First fixed in'), }, '.software.support.cisco_psirt.advisories:*.firstPublished': {'title': _('First Published'), }, '.software.support.cisco_psirt.advisories:*.installed_version': {'title': _('OS version/family'), }, + '.software.support.cisco_psirt.advisories:*.ipsSignatures': {'title': _('IPS signatures')}, '.software.support.cisco_psirt.advisories:*.lastUpdated': {'title': _('Last Updated'), }, + '.software.support.cisco_psirt.advisories:*.ovalUrl': {'title': _('OVAL URL')}, + '.software.support.cisco_psirt.advisories:*.productNames': {'title': _('Product names'), }, '.software.support.cisco_psirt.advisories:*.publicationUrl': {'title': _('Public URL'), }, '.software.support.cisco_psirt.advisories:*.sir': {'title': _('Severity'), }, '.software.support.cisco_psirt.advisories:*.summary': {'title': _('Summary'), }, - '.software.support.cisco_psirt.advisories:*.cwe': {'title': _('CWE'), }, - '.software.support.cisco_psirt.advisories:*.cves': {'title': _('CVEs'), }, - '.software.support.cisco_psirt.advisories:*.productNames': {'title': _('Product names'), }, - '.software.support.cisco_psirt.advisories:*.ipsSignatures': {'title': _('IPS signatures')}, - '.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.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')}, + '.software.support.cisco_psirt.not_updated_for_x_days': { + 'title': _('don\'t show advisories not updated for X days') + }, + '.software.support.cisco_psirt.os_version': {'title': _('OS version')}, }) - - -if ENABLE_PAINTERS: - inventory_displayhints.update({ - # EoX - '.hardware.support.cisco_eox:*.EOXExternalAnnouncementDate': {'title': _('EOL Announcement'), 'paint': 'date_status'}, - '.hardware.support.cisco_eox:*.EndOfSvcAttachDate': {'title': _('End of service attachment'), 'paint': 'date_status'}, - '.hardware.support.cisco_eox:*.EndOfSecurityVulSupportDate': {'title': _('End of service vulnerability support'), 'paint': 'date_status'}, - '.hardware.support.cisco_eox:*.EndOfSWMaintenanceReleases': {'title': _('End of software maintenace releases'), 'paint': 'date_status'}, - '.hardware.support.cisco_eox:*.EndOfRoutineFailureAnalysisDate': {'title': _('End of routine failure analysis'), 'paint': 'date_status'}, - '.hardware.support.cisco_eox:*.EndOfSaleDate': {'title': _('End of sale'), 'paint': 'date_status'}, - '.hardware.support.cisco_eox:*.LastDateOfSupport': {'title': _('End of support'), 'paint': 'date_status'}, - '.hardware.support.cisco_eox:*.ProductBulletinNumber': {'title': _('EOL bulletin ID'), 'filter': FilterInvtableText,'paint': 'eox_eolid'}, - '.hardware.support.cisco_eox:*.Last_checked': {'title': _('Last checked'), 'paint': 'last_checked_status'}, - - # SN2Info - '.hardware.support.cisco_contract:*.Last_checked': {'title': _('Last checked'), 'paint': 'last_checked_status'}, - '.hardware.support.cisco_contract:*.covered_product_line_end_date': {'title': _('Contract end date'), 'paint': 'date_status'}, - - # Bug - '.software.support.cisco_bug.bugs:*.bug_id': {'title': _('Bug ID'), 'paint': 'bug_bugid'}, - - # Psirt - '.software.support.cisco_psirt.advisories:*.advisoryId': {'title': _('Advisory ID'), 'paint': 'psirt_advisoryid'}, - '.software.support.cisco_psirt.advisories:*.bugIDs': {'title': _('Bug IDs'), 'paint': 'psirt_bugid'}, - '.software.support.cisco_psirt.Last_checked': {'title': _('Last checked'), 'paint': 'last_checked_status'}, - }) -else: - inventory_displayhints.update(({ - # EoX - '.hardware.support.cisco_eox:*.EOXExternalAnnouncementDate': {'title': _('EOL Announcement')}, - '.hardware.support.cisco_eox:*.EndOfSvcAttachDate': {'title': _('End of service attachment')}, - '.hardware.support.cisco_eox:*.EndOfSecurityVulSupportDate': {'title': _('End of service vulnerability support')}, - '.hardware.support.cisco_eox:*.EndOfSWMaintenanceReleases': {'title': _('End of software maintenace releases')}, - '.hardware.support.cisco_eox:*.EndOfRoutineFailureAnalysisDate': {'title': _('End of routine failure analysis')}, - '.hardware.support.cisco_eox:*.EndOfSaleDate': {'title': _('End of sale')}, - '.hardware.support.cisco_eox:*.LastDateOfSupport': {'title': _('End of support')}, - '.hardware.support.cisco_eox:*.ProductBulletinNumber': {'title': _('EOL bulletin ID')}, - '.hardware.support.cisco_eox:*.Last_checked': {'title': _('Last checked'),}, - - # SN2Info - '.hardware.support.cisco_contract:*.Last_checked': {'title': _('Last checked')}, - '.hardware.support.cisco_contract:*.covered_product_line_end_date': {'title': _('Contract end date')}, - - # Bug - '.software.support.cisco_bug.bugs:*.bug_id': {'title': _('Bug ID')}, - - # Psirt - '.software.support.cisco_psirt.advisories:*.advisoryId': {'title': _('Advisory ID')}, - '.software.support.cisco_psirt.advisories:*.bugIDs': {'title': _('Bug IDs')}, - '.software.support.cisco_psirt.Last_checked': {'title': _('Last checked')}, - })) -- GitLab