amd-node-scraper 1.1.5__tar.gz → 1.1.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/PKG-INFO +7 -3
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/README.md +1 -1
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/amd_node_scraper.egg-info/PKG-INFO +7 -3
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/amd_node_scraper.egg-info/SOURCES.txt +37 -1
- amd_node_scraper-1.1.7/amd_node_scraper.egg-info/entry_points.txt +6 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/amd_node_scraper.egg-info/requires.txt +2 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/docs/PLUGIN_DOC.md +23 -11
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/base/__init__.py +2 -0
- amd_node_scraper-1.1.7/nodescraper/base/oobsshdataplugin.py +54 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/cli/cli.py +14 -15
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/cli/helper.py +2 -2
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/configbuilder.py +7 -0
- amd_node_scraper-1.1.7/nodescraper/configregistry.py +183 -0
- amd_node_scraper-1.1.7/nodescraper/connection/oob_ssh/__init__.py +28 -0
- amd_node_scraper-1.1.7/nodescraper/connection/oob_ssh/oob_ssh_connection_manager.py +124 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/connection/redfish/__init__.py +2 -1
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/connection/redfish/redfish_params.py +29 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/interfaces/connectionmanager.py +1 -1
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/interfaces/dataplugin.py +209 -67
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/models/pluginconfig.py +31 -1
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/pluginexecutor.py +86 -45
- amd_node_scraper-1.1.7/nodescraper/pluginrecipe/__init__.py +51 -0
- amd_node_scraper-1.1.7/nodescraper/pluginrecipe/all_plugins.py +24 -0
- amd_node_scraper-1.1.7/nodescraper/pluginrecipe/discovery.py +108 -0
- amd_node_scraper-1.1.7/nodescraper/pluginrecipe/node_status.py +38 -0
- amd_node_scraper-1.1.7/nodescraper/pluginrecipe/pluginrecipe.py +177 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/pluginregistry.py +5 -3
- amd_node_scraper-1.1.7/nodescraper/plugins/generic_collection/__init__.py +49 -0
- amd_node_scraper-1.1.7/nodescraper/plugins/generic_collection/analyzer_args.py +126 -0
- amd_node_scraper-1.1.7/nodescraper/plugins/generic_collection/collector_args.py +136 -0
- amd_node_scraper-1.1.7/nodescraper/plugins/generic_collection/generic_analyzer.py +266 -0
- amd_node_scraper-1.1.7/nodescraper/plugins/generic_collection/generic_collection_collector.py +121 -0
- amd_node_scraper-1.1.7/nodescraper/plugins/generic_collection/generic_collection_data.py +48 -0
- amd_node_scraper-1.1.7/nodescraper/plugins/generic_collection/generic_collection_plugin_mixin.py +52 -0
- amd_node_scraper-1.1.7/nodescraper/plugins/generic_collection/inband_plugin.py +42 -0
- amd_node_scraper-1.1.7/nodescraper/plugins/generic_collection/oob_plugin.py +42 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/amdsmi/amdsmi_analyzer.py +237 -17
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/amdsmi/amdsmi_collector.py +82 -19
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/amdsmi/amdsmidata.py +270 -66
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/amdsmi/analyzer_args.py +7 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dmesg/dmesg_analyzer.py +15 -2
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/pcie/pcie_collector.py +27 -2
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/pcie/pcie_data.py +1 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sys_settings/collector_args.py +4 -2
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/syslog/syslog_collector.py +19 -6
- amd_node_scraper-1.1.7/nodescraper/plugins/ooband/bmc_archive/__init__.py +40 -0
- amd_node_scraper-1.1.7/nodescraper/plugins/ooband/bmc_archive/bmc_archive_collector.py +351 -0
- amd_node_scraper-1.1.7/nodescraper/plugins/ooband/bmc_archive/bmc_archive_data.py +65 -0
- amd_node_scraper-1.1.7/nodescraper/plugins/ooband/bmc_archive/bmc_archive_plugin.py +44 -0
- amd_node_scraper-1.1.7/nodescraper/plugins/ooband/bmc_archive/collector_args.py +115 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_endpoint/collector_args.py +4 -2
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_oem_diag/collector_args.py +4 -2
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/typeutils.py +8 -5
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/pyproject.toml +9 -3
- amd_node_scraper-1.1.7/test/functional/fixtures/amdsmi_plugin_config.json +14 -0
- amd_node_scraper-1.1.7/test/functional/fixtures/generic_collection_plugin_config.json +150 -0
- amd_node_scraper-1.1.7/test/functional/test_generic_collection_plugin.py +141 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/test_plugin_configs.py +3 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/cli/test_plugin_configs_cli.py +5 -9
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/common/shared_utils.py +2 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/test_cli_helper.py +6 -1
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/test_config_builder.py +2 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/test_config_registry.py +2 -1
- amd_node_scraper-1.1.7/test/unit/framework/test_config_registry_entry_points.py +163 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/test_dataplugin.py +140 -1
- amd_node_scraper-1.1.7/test/unit/framework/test_pluginconfig.py +47 -0
- amd_node_scraper-1.1.7/test/unit/framework/test_pluginrecipe.py +130 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/test_type_utils.py +12 -0
- amd_node_scraper-1.1.7/test/unit/plugin/fixtures/pcie_plugin_advanced_config.json +28 -0
- amd_node_scraper-1.1.7/test/unit/plugin/fixtures/pcie_plugin_config.json +19 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_amdsmi_analyzer.py +129 -11
- amd_node_scraper-1.1.7/test/unit/plugin/test_amdsmi_data.py +514 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_dmesg_analyzer.py +53 -7
- amd_node_scraper-1.1.7/test/unit/plugin/test_generic_analyzer.py +239 -0
- amd_node_scraper-1.1.7/test/unit/plugin/test_generic_collection_collector.py +223 -0
- amd_node_scraper-1.1.7/test/unit/plugin/test_oob_bmc_archive_plugin.py +272 -0
- amd_node_scraper-1.1.7/test/unit/plugin/test_oob_generic_collection_plugin.py +73 -0
- amd_node_scraper-1.1.7/test/unit/plugin/test_pcie_collector.py +111 -0
- amd_node_scraper-1.1.7/test/unit/plugin/test_pcie_plugin.py +140 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_syslog_collector.py +45 -2
- amd_node_scraper-1.1.5/amd_node_scraper.egg-info/entry_points.txt +0 -2
- amd_node_scraper-1.1.5/nodescraper/configregistry.py +0 -66
- amd_node_scraper-1.1.5/nodescraper/configs/node_status.json +0 -19
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/.github/CODEOWNERS +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/.github/pull_request_template.md +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/.github/scripts/plugin_convention_warnings.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/.github/workflows/code_quality_checks.yml +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/.github/workflows/functional-test.yml +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/.github/workflows/release-trusted-publisher.yml +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/.github/workflows/unit-test.yml +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/.github/workflows/update-plugin-docs.yml +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/.gitignore +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/.mypy.ini +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/.pre-commit-config.yaml +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/CONTRIBUTING.md +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/EXTENDING.md +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/LICENSE +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/SECURITY.md +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/amd_node_scraper.egg-info/dependency_links.txt +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/amd_node_scraper.egg-info/top_level.txt +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/dev-setup.sh +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/docs/generate_plugin_doc_bundle.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/docs/node-scraper-external/README.md +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/docs/node-scraper-external/ext_nodescraper_plugins/sample/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_data.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/docs/node-scraper-external/pyproject.toml +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/base/inbandcollectortask.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/base/inbanddataplugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/base/oobanddataplugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/base/redfishcollectortask.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/base/regexanalyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/cli/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/cli/compare_runs.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/cli/constants.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/cli/dynamicparserbuilder.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/cli/embed.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/cli/host_cli_embed.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/cli/inputargtypes.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/cli/invocation.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/connection/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/connection/inband/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/connection/inband/inband.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/connection/inband/inbandlocal.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/connection/inband/inbandmanager.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/connection/inband/inbandremote.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/connection/inband/sshparams.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/connection/redfish/redfish_connection.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/connection/redfish/redfish_constants.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/connection/redfish/redfish_manager.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/connection/redfish/redfish_oem_diag.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/connection/redfish/redfish_path.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/constants.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/enums/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/enums/eventcategory.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/enums/eventpriority.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/enums/executionstatus.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/enums/osfamily.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/enums/systeminteraction.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/enums/systemlocation.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/enums/taskstate.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/generictypes.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/helpers/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/interfaces/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/interfaces/dataanalyzertask.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/interfaces/datacollectortask.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/interfaces/plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/interfaces/resultcollator.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/interfaces/task.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/interfaces/taskresulthook.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/models/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/models/analyzerargs.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/models/collectorargs.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/models/connectionconfig.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/models/datamodel.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/models/datapluginresult.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/models/event.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/models/pluginresult.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/models/priority_override.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/models/systeminfo.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/models/taskresult.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/models/timerangeargs.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/amdsmi/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/amdsmi/amdsmi_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/amdsmi/collector_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/amdsmi/cper.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/bios/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/bios/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/bios/bios_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/bios/bios_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/bios/bios_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/bios/biosdata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/cmdline/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/cmdline/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/cmdline/cmdline_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/cmdline/cmdline_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/cmdline/cmdline_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/cmdline/cmdlineconfig.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/cmdline/cmdlinedata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/device_enumeration/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/device_enumeration/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/device_enumeration/device_enumeration_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/device_enumeration/device_enumeration_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/device_enumeration/device_enumeration_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/device_enumeration/deviceenumdata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dimm/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dimm/collector_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dimm/dimm_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dimm/dimm_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dimm/dimmdata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dkms/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dkms/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dkms/dkms_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dkms/dkms_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dkms/dkms_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dkms/dkmsdata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dmesg/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dmesg/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dmesg/collector_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dmesg/dmesg_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dmesg/dmesg_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dmesg/dmesgdata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dmesg/run_compare.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/fabrics/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/fabrics/fabrics_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/fabrics/fabrics_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/fabrics/fabricsdata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/journal/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/journal/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/journal/collector_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/journal/journal_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/journal/journal_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/journal/journal_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/journal/journaldata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel/kernel_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel/kernel_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel/kernel_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel/kerneldata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel_module/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel_module/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel_module/kernel_module_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel_module/kernel_module_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel_module/kernel_module_data.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel_module/kernel_module_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/memory/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/memory/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/memory/memory_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/memory/memory_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/memory/memory_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/memory/memorydata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/network/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/network/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/network/collector_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/network/ethtool_vendor.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/network/network_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/network/network_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/network/network_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/network/networkdata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nic/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nic/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nic/collector_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nic/nic_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nic/nic_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nic/nic_data.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nic/nic_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nvme/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nvme/nvme_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nvme/nvme_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nvme/nvmedata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/os/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/os/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/os/os_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/os/os_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/os/os_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/os/osdata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/package/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/package/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/package/package_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/package/package_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/package/package_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/package/packagedata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/pcie/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/pcie/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/pcie/pcie_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/pcie/pcie_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/process/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/process/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/process/collector_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/process/process_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/process/process_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/process/process_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/process/processdata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rdma/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rdma/rdma_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rdma/rdma_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rdma/rdma_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rdma/rdmadata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rocm/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rocm/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rocm/collector_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rocm/rocm_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rocm/rocm_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rocm/rocm_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rocm/rocmdata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/storage/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/storage/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/storage/collector_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/storage/storage_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/storage/storage_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/storage/storage_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/storage/storagedata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sys_settings/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sys_settings/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sys_settings/sys_settings_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sys_settings/sys_settings_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sys_settings/sys_settings_data.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sys_settings/sys_settings_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sysctl/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sysctl/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sysctl/sysctl_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sysctl/sysctl_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sysctl/sysctl_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sysctl/sysctldata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/syslog/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/syslog/syslog_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/syslog/syslogdata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/uptime/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/uptime/uptime_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/uptime/uptime_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/uptime/uptimedata.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_endpoint/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_endpoint/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_data.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_oem_diag/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_oem_diag/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_data.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/regex_search/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/regex_search/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/regex_search/regex_search_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/regex_search/regex_search_data.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/plugins/regex_search/regex_search_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/resultcollators/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/resultcollators/tablesummary.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/serialization.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/taskresulthooks/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/taskresulthooks/filesystemloghook.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/nodescraper/utils.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/pytest.ini +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/setup.cfg +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/setup.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/__init__.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/conftest.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/bios_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/cmdline_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/dimm_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/dkms_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/dmesg_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/dmesg_plugin_config_custom_regex.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/dmesg_sample.log +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/dmesg_sample_with_collapsing.log +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/fabrics_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/journal_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/kernel_module_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/kernel_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/memory_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/network_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/nic_plugin_config_full_analyzer_args.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/niccli_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/nvme_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/os_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/package_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/pcie_plugin_advanced_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/pcie_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/process_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/rdma_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/redfish_connection_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/redfish_endpoint_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/redfish_endpoint_plugin_config_full_args.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/regex_search_multi_logs/app_error.log +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/regex_search_multi_logs/no_errors.log +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/regex_search_multi_logs/storage_warn.log +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/regex_search_sample.log +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/rocm_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/storage_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/sys_settings_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/sysctl_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/syslog_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/fixtures/uptime_plugin_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/test_cli_describe.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/test_cli_help.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/test_cli_no_console_log.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/test_fabrics_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/test_network_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/test_nic_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/test_pcie_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/test_plugin_registry.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/test_rdma_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/test_redfish_endpoint_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/test_reference_config_workflow.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/test_run_plugins.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/functional/test_sys_settings_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/cli/test_build_global_argument_parser.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/cli/test_cli_embed_api.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/cli/test_cli_no_console_stdout.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/cli/test_host_cli_embed.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/conftest.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/connection/redfish/test_redfish_connection_paging.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/connection/redfish/test_redfish_oem_diag.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/fixtures/compare_runs_sysctl/run1/sysctl_plugin/sysctl_collector/result.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/fixtures/compare_runs_sysctl/run1/sysctl_plugin/sysctl_collector/sysctldatamodel.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/fixtures/compare_runs_sysctl/run2/sysctl_plugin/sysctl_collector/result.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/fixtures/compare_runs_sysctl/run2/sysctl_plugin/sysctl_collector/sysctldatamodel.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/fixtures/example.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/fixtures/example_config.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/fixtures/invalid.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/fixtures/log_dir/collector/biosdatamodel.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/fixtures/log_dir/collector/result.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/test_analyzerargs.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/test_cli.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/test_compare_runs.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/test_connection_manager_entrypoints.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/test_dataanalyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/test_datacollector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/test_file_artifact.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/test_plugin_executor.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/framework/test_regexanalyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/fixtures/package_commands.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/fixtures/rdma_link_example_data.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/fixtures/rdma_statistic_example_data.json +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_amdsmi_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_analyzer_args_build_from_model.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_bios_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_bios_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_cmdline_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_cmdline_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_device_enumeration_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_device_enumeration_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_dimms_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_dkms_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_dkms_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_dmesg_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_fabrics_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_journal_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_kernel_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_kernel_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_kernel_module_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_kernel_module_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_memory_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_memory_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_network_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_network_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_niccli_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_nvme_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_os_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_os_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_package_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_package_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_process_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_process_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_rdma_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_rdma_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_redfish_endpoint_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_redfish_endpoint_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_redfish_endpoint_plugin.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_redfish_oem_diag_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_redfish_oem_diag_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_regex_search_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_rocm_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_rocm_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_storage_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_storage_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_sys_settings_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_sys_settings_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_sysctl_analyzer.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_sysctl_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/plugin/test_uptime_collector.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/test_serialization.py +0 -0
- {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.7}/test/unit/test_version.py +0 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: amd-node-scraper
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.7
|
|
4
4
|
Summary: A framework for automated error detection and data collection
|
|
5
|
+
Author: AMD
|
|
5
6
|
Project-URL: homepage, https://github.com/amd/node-scraper
|
|
6
7
|
Project-URL: documentation, https://github.com/amd/node-scraper
|
|
7
8
|
Project-URL: repository, https://github.com/amd/node-scraper
|
|
@@ -25,6 +26,9 @@ Requires-Dist: pre-commit; extra == "dev"
|
|
|
25
26
|
Requires-Dist: pytest; extra == "dev"
|
|
26
27
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
27
28
|
Requires-Dist: mypy; extra == "dev"
|
|
29
|
+
Requires-Dist: types-paramiko; extra == "dev"
|
|
30
|
+
Requires-Dist: types-setuptools; extra == "dev"
|
|
31
|
+
Dynamic: license-file
|
|
28
32
|
|
|
29
33
|
# Node Scraper
|
|
30
34
|
Node Scraper is a tool which performs automated data collection and analysis for the purposes of
|
|
@@ -144,7 +148,7 @@ options:
|
|
|
144
148
|
Comma-separated built-in names and/or plugin config
|
|
145
149
|
JSON paths (e.g. --plugin-
|
|
146
150
|
configs=NodeStatus,/path/c.json). Built-ins:
|
|
147
|
-
|
|
151
|
+
AllPlugins, NodeStatus (default: None)
|
|
148
152
|
--system-config STRING
|
|
149
153
|
Path to system config json (default: None)
|
|
150
154
|
--connection-config STRING
|
|
@@ -116,7 +116,7 @@ options:
|
|
|
116
116
|
Comma-separated built-in names and/or plugin config
|
|
117
117
|
JSON paths (e.g. --plugin-
|
|
118
118
|
configs=NodeStatus,/path/c.json). Built-ins:
|
|
119
|
-
|
|
119
|
+
AllPlugins, NodeStatus (default: None)
|
|
120
120
|
--system-config STRING
|
|
121
121
|
Path to system config json (default: None)
|
|
122
122
|
--connection-config STRING
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: amd-node-scraper
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.7
|
|
4
4
|
Summary: A framework for automated error detection and data collection
|
|
5
|
+
Author: AMD
|
|
5
6
|
Project-URL: homepage, https://github.com/amd/node-scraper
|
|
6
7
|
Project-URL: documentation, https://github.com/amd/node-scraper
|
|
7
8
|
Project-URL: repository, https://github.com/amd/node-scraper
|
|
@@ -25,6 +26,9 @@ Requires-Dist: pre-commit; extra == "dev"
|
|
|
25
26
|
Requires-Dist: pytest; extra == "dev"
|
|
26
27
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
27
28
|
Requires-Dist: mypy; extra == "dev"
|
|
29
|
+
Requires-Dist: types-paramiko; extra == "dev"
|
|
30
|
+
Requires-Dist: types-setuptools; extra == "dev"
|
|
31
|
+
Dynamic: license-file
|
|
28
32
|
|
|
29
33
|
# Node Scraper
|
|
30
34
|
Node Scraper is a tool which performs automated data collection and analysis for the purposes of
|
|
@@ -144,7 +148,7 @@ options:
|
|
|
144
148
|
Comma-separated built-in names and/or plugin config
|
|
145
149
|
JSON paths (e.g. --plugin-
|
|
146
150
|
configs=NodeStatus,/path/c.json). Built-ins:
|
|
147
|
-
|
|
151
|
+
AllPlugins, NodeStatus (default: None)
|
|
148
152
|
--system-config STRING
|
|
149
153
|
Path to system config json (default: None)
|
|
150
154
|
--connection-config STRING
|
|
@@ -50,6 +50,7 @@ nodescraper/base/__init__.py
|
|
|
50
50
|
nodescraper/base/inbandcollectortask.py
|
|
51
51
|
nodescraper/base/inbanddataplugin.py
|
|
52
52
|
nodescraper/base/oobanddataplugin.py
|
|
53
|
+
nodescraper/base/oobsshdataplugin.py
|
|
53
54
|
nodescraper/base/redfishcollectortask.py
|
|
54
55
|
nodescraper/base/regexanalyzer.py
|
|
55
56
|
nodescraper/cli/__init__.py
|
|
@@ -62,7 +63,6 @@ nodescraper/cli/helper.py
|
|
|
62
63
|
nodescraper/cli/host_cli_embed.py
|
|
63
64
|
nodescraper/cli/inputargtypes.py
|
|
64
65
|
nodescraper/cli/invocation.py
|
|
65
|
-
nodescraper/configs/node_status.json
|
|
66
66
|
nodescraper/connection/__init__.py
|
|
67
67
|
nodescraper/connection/inband/__init__.py
|
|
68
68
|
nodescraper/connection/inband/inband.py
|
|
@@ -70,6 +70,8 @@ nodescraper/connection/inband/inbandlocal.py
|
|
|
70
70
|
nodescraper/connection/inband/inbandmanager.py
|
|
71
71
|
nodescraper/connection/inband/inbandremote.py
|
|
72
72
|
nodescraper/connection/inband/sshparams.py
|
|
73
|
+
nodescraper/connection/oob_ssh/__init__.py
|
|
74
|
+
nodescraper/connection/oob_ssh/oob_ssh_connection_manager.py
|
|
73
75
|
nodescraper/connection/redfish/__init__.py
|
|
74
76
|
nodescraper/connection/redfish/redfish_connection.py
|
|
75
77
|
nodescraper/connection/redfish/redfish_constants.py
|
|
@@ -108,7 +110,21 @@ nodescraper/models/priority_override.py
|
|
|
108
110
|
nodescraper/models/systeminfo.py
|
|
109
111
|
nodescraper/models/taskresult.py
|
|
110
112
|
nodescraper/models/timerangeargs.py
|
|
113
|
+
nodescraper/pluginrecipe/__init__.py
|
|
114
|
+
nodescraper/pluginrecipe/all_plugins.py
|
|
115
|
+
nodescraper/pluginrecipe/discovery.py
|
|
116
|
+
nodescraper/pluginrecipe/node_status.py
|
|
117
|
+
nodescraper/pluginrecipe/pluginrecipe.py
|
|
111
118
|
nodescraper/plugins/__init__.py
|
|
119
|
+
nodescraper/plugins/generic_collection/__init__.py
|
|
120
|
+
nodescraper/plugins/generic_collection/analyzer_args.py
|
|
121
|
+
nodescraper/plugins/generic_collection/collector_args.py
|
|
122
|
+
nodescraper/plugins/generic_collection/generic_analyzer.py
|
|
123
|
+
nodescraper/plugins/generic_collection/generic_collection_collector.py
|
|
124
|
+
nodescraper/plugins/generic_collection/generic_collection_data.py
|
|
125
|
+
nodescraper/plugins/generic_collection/generic_collection_plugin_mixin.py
|
|
126
|
+
nodescraper/plugins/generic_collection/inband_plugin.py
|
|
127
|
+
nodescraper/plugins/generic_collection/oob_plugin.py
|
|
112
128
|
nodescraper/plugins/inband/__init__.py
|
|
113
129
|
nodescraper/plugins/inband/amdsmi/__init__.py
|
|
114
130
|
nodescraper/plugins/inband/amdsmi/amdsmi_analyzer.py
|
|
@@ -270,6 +286,11 @@ nodescraper/plugins/inband/uptime/uptime_collector.py
|
|
|
270
286
|
nodescraper/plugins/inband/uptime/uptime_plugin.py
|
|
271
287
|
nodescraper/plugins/inband/uptime/uptimedata.py
|
|
272
288
|
nodescraper/plugins/ooband/__init__.py
|
|
289
|
+
nodescraper/plugins/ooband/bmc_archive/__init__.py
|
|
290
|
+
nodescraper/plugins/ooband/bmc_archive/bmc_archive_collector.py
|
|
291
|
+
nodescraper/plugins/ooband/bmc_archive/bmc_archive_data.py
|
|
292
|
+
nodescraper/plugins/ooband/bmc_archive/bmc_archive_plugin.py
|
|
293
|
+
nodescraper/plugins/ooband/bmc_archive/collector_args.py
|
|
273
294
|
nodescraper/plugins/ooband/redfish_endpoint/__init__.py
|
|
274
295
|
nodescraper/plugins/ooband/redfish_endpoint/analyzer_args.py
|
|
275
296
|
nodescraper/plugins/ooband/redfish_endpoint/collector_args.py
|
|
@@ -299,6 +320,7 @@ test/functional/test_cli_describe.py
|
|
|
299
320
|
test/functional/test_cli_help.py
|
|
300
321
|
test/functional/test_cli_no_console_log.py
|
|
301
322
|
test/functional/test_fabrics_plugin.py
|
|
323
|
+
test/functional/test_generic_collection_plugin.py
|
|
302
324
|
test/functional/test_network_plugin.py
|
|
303
325
|
test/functional/test_nic_plugin.py
|
|
304
326
|
test/functional/test_pcie_plugin.py
|
|
@@ -309,6 +331,7 @@ test/functional/test_redfish_endpoint_plugin.py
|
|
|
309
331
|
test/functional/test_reference_config_workflow.py
|
|
310
332
|
test/functional/test_run_plugins.py
|
|
311
333
|
test/functional/test_sys_settings_plugin.py
|
|
334
|
+
test/functional/fixtures/amdsmi_plugin_config.json
|
|
312
335
|
test/functional/fixtures/bios_plugin_config.json
|
|
313
336
|
test/functional/fixtures/cmdline_plugin_config.json
|
|
314
337
|
test/functional/fixtures/dimm_plugin_config.json
|
|
@@ -318,6 +341,7 @@ test/functional/fixtures/dmesg_plugin_config_custom_regex.json
|
|
|
318
341
|
test/functional/fixtures/dmesg_sample.log
|
|
319
342
|
test/functional/fixtures/dmesg_sample_with_collapsing.log
|
|
320
343
|
test/functional/fixtures/fabrics_plugin_config.json
|
|
344
|
+
test/functional/fixtures/generic_collection_plugin_config.json
|
|
321
345
|
test/functional/fixtures/journal_plugin_config.json
|
|
322
346
|
test/functional/fixtures/kernel_module_plugin_config.json
|
|
323
347
|
test/functional/fixtures/kernel_plugin_config.json
|
|
@@ -362,12 +386,15 @@ test/unit/framework/test_cli_helper.py
|
|
|
362
386
|
test/unit/framework/test_compare_runs.py
|
|
363
387
|
test/unit/framework/test_config_builder.py
|
|
364
388
|
test/unit/framework/test_config_registry.py
|
|
389
|
+
test/unit/framework/test_config_registry_entry_points.py
|
|
365
390
|
test/unit/framework/test_connection_manager_entrypoints.py
|
|
366
391
|
test/unit/framework/test_dataanalyzer.py
|
|
367
392
|
test/unit/framework/test_datacollector.py
|
|
368
393
|
test/unit/framework/test_dataplugin.py
|
|
369
394
|
test/unit/framework/test_file_artifact.py
|
|
370
395
|
test/unit/framework/test_plugin_executor.py
|
|
396
|
+
test/unit/framework/test_pluginconfig.py
|
|
397
|
+
test/unit/framework/test_pluginrecipe.py
|
|
371
398
|
test/unit/framework/test_regexanalyzer.py
|
|
372
399
|
test/unit/framework/test_type_utils.py
|
|
373
400
|
test/unit/framework/common/shared_utils.py
|
|
@@ -382,6 +409,7 @@ test/unit/framework/fixtures/log_dir/collector/biosdatamodel.json
|
|
|
382
409
|
test/unit/framework/fixtures/log_dir/collector/result.json
|
|
383
410
|
test/unit/plugin/test_amdsmi_analyzer.py
|
|
384
411
|
test/unit/plugin/test_amdsmi_collector.py
|
|
412
|
+
test/unit/plugin/test_amdsmi_data.py
|
|
385
413
|
test/unit/plugin/test_analyzer_args_build_from_model.py
|
|
386
414
|
test/unit/plugin/test_bios_analyzer.py
|
|
387
415
|
test/unit/plugin/test_bios_collector.py
|
|
@@ -395,6 +423,8 @@ test/unit/plugin/test_dkms_collector.py
|
|
|
395
423
|
test/unit/plugin/test_dmesg_analyzer.py
|
|
396
424
|
test/unit/plugin/test_dmesg_collector.py
|
|
397
425
|
test/unit/plugin/test_fabrics_collector.py
|
|
426
|
+
test/unit/plugin/test_generic_analyzer.py
|
|
427
|
+
test/unit/plugin/test_generic_collection_collector.py
|
|
398
428
|
test/unit/plugin/test_journal_collector.py
|
|
399
429
|
test/unit/plugin/test_kernel_analyzer.py
|
|
400
430
|
test/unit/plugin/test_kernel_collector.py
|
|
@@ -406,10 +436,14 @@ test/unit/plugin/test_network_analyzer.py
|
|
|
406
436
|
test/unit/plugin/test_network_collector.py
|
|
407
437
|
test/unit/plugin/test_niccli_collector.py
|
|
408
438
|
test/unit/plugin/test_nvme_collector.py
|
|
439
|
+
test/unit/plugin/test_oob_bmc_archive_plugin.py
|
|
440
|
+
test/unit/plugin/test_oob_generic_collection_plugin.py
|
|
409
441
|
test/unit/plugin/test_os_analyzer.py
|
|
410
442
|
test/unit/plugin/test_os_collector.py
|
|
411
443
|
test/unit/plugin/test_package_analyzer.py
|
|
412
444
|
test/unit/plugin/test_package_collector.py
|
|
445
|
+
test/unit/plugin/test_pcie_collector.py
|
|
446
|
+
test/unit/plugin/test_pcie_plugin.py
|
|
413
447
|
test/unit/plugin/test_process_analyzer.py
|
|
414
448
|
test/unit/plugin/test_process_collector.py
|
|
415
449
|
test/unit/plugin/test_rdma_analyzer.py
|
|
@@ -431,5 +465,7 @@ test/unit/plugin/test_sysctl_collector.py
|
|
|
431
465
|
test/unit/plugin/test_syslog_collector.py
|
|
432
466
|
test/unit/plugin/test_uptime_collector.py
|
|
433
467
|
test/unit/plugin/fixtures/package_commands.json
|
|
468
|
+
test/unit/plugin/fixtures/pcie_plugin_advanced_config.json
|
|
469
|
+
test/unit/plugin/fixtures/pcie_plugin_config.json
|
|
434
470
|
test/unit/plugin/fixtures/rdma_link_example_data.json
|
|
435
471
|
test/unit/plugin/fixtures/rdma_statistic_example_data.json
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
| Plugin | Collection | Analyzer Args | Collection Args | DataModel | Collector | Analyzer |
|
|
6
6
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
7
|
-
| AmdSmiPlugin | bad-pages<br>firmware --json<br>list --json<br>metric -g all<br>partition --json<br>process --json<br>ras --cper --folder={folder}<br>ras --afid --cper-file {cper_file}<br>static -g all --json<br>static -g {gpu_id} --json<br>topology<br>version --json<br>xgmi -l<br>xgmi -m | **Analyzer Args:**<br>- `check_static_data`: bool — If True, run static data checks (e.g. driver version, partition mode).<br>- `expected_gpu_processes`: Optional[int] — Expected number of GPU processes.<br>- `expected_max_power`: Optional[int] — Expected maximum power value (e.g. watts).<br>- `expected_driver_version`: Optional[str] — Expected AMD driver version string.<br>- `expected_memory_partition_mode`: Optional[str] — Expected memory partition mode (e.g. sp3, dp).<br>- `expected_compute_partition_mode`: Optional[str] — Expected compute partition mode.<br>- `expected_firmware_versions`: Optional[dict[str, str]] — Expected firmware versions keyed by amd-smi fw_id (e.g. PLDM_BUNDLE).<br>- `l0_to_recovery_count_error_threshold`: Optional[int] — L0-to-recovery count above which an error is raised.<br>- `l0_to_recovery_count_warning_threshold`: Optional[int] — L0-to-recovery count above which a warning is raised.<br>- `vendorid_ep`: Optional[str] — Expected endpoint vendor ID (e.g. for PCIe).<br>- `vendorid_ep_vf`: Optional[str] — Expected endpoint VF vendor ID.<br>- `devid_ep`: Optional[str] — Expected endpoint device ID.<br>- `devid_ep_vf`: Optional[str] — Expected endpoint VF device ID.<br>- `sku_name`: Optional[str] — Expected SKU name string for GPU.<br>- `expected_xgmi_speed`: Optional[list[float]] — Expected xGMI speed value(s) (e.g. link rate).<br>- `analysis_range_start`: Optional[datetime.datetime] — Start of time range for time-windowed analysis.<br>- `analysis_range_end`: Optional[datetime.datetime] — End of time range for time-windowed analysis. | **Collection Args:**<br>- `analysis_firmware_ids`: Optional[list[str]] — amd-smi fw_id values to record in analysis_ref.firmware_versions<br>- `cper_file_path`: Optional[str] — Path to CPER folder or file for RAS AFID collection (ras --afid --cper-file). | [AmdSmiDataModel](#AmdSmiDataModel-Model) | [AmdSmiCollector](#Collector-Class-AmdSmiCollector) | [AmdSmiAnalyzer](#Data-Analyzer-Class-AmdSmiAnalyzer) |
|
|
7
|
+
| AmdSmiPlugin | bad-pages<br>firmware --json<br>list --json<br>metric -g all<br>partition --json<br>process --json<br>ras --cper --folder={folder}<br>ras --afid --cper-file {cper_file}<br>static -g all --json<br>static -g {gpu_id} --json<br>topology<br>version --json<br>xgmi -l<br>xgmi -m | **Analyzer Args:**<br>- `check_static_data`: bool — If True, run static data checks (e.g. driver version, partition mode).<br>- `expected_gpu_processes`: Optional[int] — Expected number of GPU processes.<br>- `expected_max_power`: Optional[int] — Expected maximum power value (e.g. watts).<br>- `expected_power_management`: Optional[str] — Expected amd-smi metric power_management value per GPU (e.g. DISABLED for active/full power, ENABLED for power-manage...<br>- `expected_driver_version`: Optional[str] — Expected AMD driver version string.<br>- `expected_memory_partition_mode`: Optional[str] — Expected memory partition mode (e.g. sp3, dp).<br>- `expected_compute_partition_mode`: Optional[str] — Expected compute partition mode.<br>- `expected_firmware_versions`: Optional[dict[str, str]] — Expected firmware versions keyed by amd-smi fw_id (e.g. PLDM_BUNDLE).<br>- `l0_to_recovery_count_error_threshold`: Optional[int] — L0-to-recovery count above which an error is raised.<br>- `l0_to_recovery_count_warning_threshold`: Optional[int] — L0-to-recovery count above which a warning is raised.<br>- `vendorid_ep`: Optional[str] — Expected endpoint vendor ID (e.g. for PCIe).<br>- `vendorid_ep_vf`: Optional[str] — Expected endpoint VF vendor ID.<br>- `devid_ep`: Optional[str] — Expected endpoint device ID.<br>- `devid_ep_vf`: Optional[str] — Expected endpoint VF device ID.<br>- `sku_name`: Optional[str] — Expected SKU name string for GPU.<br>- `expected_xgmi_speed`: Optional[list[float]] — Expected xGMI speed value(s) (e.g. link rate).<br>- `analysis_range_start`: Optional[datetime.datetime] — Start of time range for time-windowed analysis.<br>- `analysis_range_end`: Optional[datetime.datetime] — End of time range for time-windowed analysis. | **Collection Args:**<br>- `analysis_firmware_ids`: Optional[list[str]] — amd-smi fw_id values to record in analysis_ref.firmware_versions<br>- `cper_file_path`: Optional[str] — Path to CPER folder or file for RAS AFID collection (ras --afid --cper-file). | [AmdSmiDataModel](#AmdSmiDataModel-Model) | [AmdSmiCollector](#Collector-Class-AmdSmiCollector) | [AmdSmiAnalyzer](#Data-Analyzer-Class-AmdSmiAnalyzer) |
|
|
8
8
|
| BiosPlugin | sh -c 'cat /sys/devices/virtual/dmi/id/bios_version'<br>wmic bios get SMBIOSBIOSVersion /Value | **Analyzer Args:**<br>- `exp_bios_version`: list[str] — Expected BIOS version(s) to match against collected value (str or list).<br>- `regex_match`: bool — If True, match exp_bios_version as regex; otherwise exact match. | - | [BiosDataModel](#BiosDataModel-Model) | [BiosCollector](#Collector-Class-BiosCollector) | [BiosAnalyzer](#Data-Analyzer-Class-BiosAnalyzer) |
|
|
9
9
|
| CmdlinePlugin | cat /proc/cmdline | **Analyzer Args:**<br>- `required_cmdline`: Union[str, List] — Command-line parameters that must be present (e.g. 'pci=bfsort').<br>- `banned_cmdline`: Union[str, List] — Command-line parameters that must not be present.<br>- `os_overrides`: Dict[str, nodescraper.plugins.inband.cmdline.cmdlineconfig.OverrideConfig] — Per-OS overrides for required_cmdline and banned_cmdline (keyed by OS identifier).<br>- `platform_overrides`: Dict[str, nodescraper.plugins.inband.cmdline.cmdlineconfig.OverrideConfig] — Per-platform overrides for required_cmdline and banned_cmdline (keyed by platform). | - | [CmdlineDataModel](#CmdlineDataModel-Model) | [CmdlineCollector](#Collector-Class-CmdlineCollector) | [CmdlineAnalyzer](#Data-Analyzer-Class-CmdlineAnalyzer) |
|
|
10
10
|
| DeviceEnumerationPlugin | powershell -Command "(Get-WmiObject -Class Win32_Processor | Measure-Object).Count"<br>lspci -d {vendorid_ep}: | grep -iE 'VGA|Display|3D|Processing accelerators|Co-processor|Accelerator' | grep -vi 'Virtual Function' | wc -l<br>powershell -Command "(wmic path win32_VideoController get name | findstr AMD | Measure-Object).Count"<br>lscpu<br>lshw<br>lspci -d {vendorid_ep}: | grep -i 'Virtual Function' | wc -l<br>powershell -Command "(Get-VMHostPartitionableGpu | Measure-Object).Count" | **Analyzer Args:**<br>- `cpu_count`: Optional[list[int]] — Expected CPU count(s); pass as int or list of ints. Analysis passes if actual is in list.<br>- `gpu_count`: Optional[list[int]] — Expected GPU count(s); pass as int or list of ints. Analysis passes if actual is in list.<br>- `vf_count`: Optional[list[int]] — Expected virtual function count(s); pass as int or list of ints. Analysis passes if actual is in list. | - | [DeviceEnumerationDataModel](#DeviceEnumerationDataModel-Model) | [DeviceEnumerationCollector](#Collector-Class-DeviceEnumerationCollector) | [DeviceEnumerationAnalyzer](#Data-Analyzer-Class-DeviceEnumerationAnalyzer) |
|
|
11
11
|
| DimmPlugin | sh -c 'dmidecode -t 17 | tr -s " " | grep -v "Volatile\|None\|Module" | grep Size' 2>/dev/null<br>dmidecode<br>wmic memorychip get Capacity | - | **Collection Args:**<br>- `skip_sudo`: bool — If True, do not use sudo when running dmidecode or wmic for memory info. | [DimmDataModel](#DimmDataModel-Model) | [DimmCollector](#Collector-Class-DimmCollector) | - |
|
|
12
12
|
| DkmsPlugin | dkms status<br>dkms --version | **Analyzer Args:**<br>- `dkms_status`: Union[str, list] — Expected dkms status string(s) to match (e.g. 'amd/1.0.0'). At least one of dkms_status or dkms_version required.<br>- `dkms_version`: Union[str, list] — Expected dkms version string(s) to match. At least one of dkms_status or dkms_version required.<br>- `regex_match`: bool — If True, match dkms_status and dkms_version as regex; otherwise exact match. | - | [DkmsDataModel](#DkmsDataModel-Model) | [DkmsCollector](#Collector-Class-DkmsCollector) | [DkmsAnalyzer](#Data-Analyzer-Class-DkmsAnalyzer) |
|
|
13
|
-
| DmesgPlugin | dmesg --time-format iso -x<br>ls -1 /var/log/dmesg* 2>/dev/null | grep -E '^/var/log/dmesg(\.[0-9]+(\.gz)?)?$' || true | **Built-in Regexes:**<br>- Out of memory error: `(?:oom_kill_process.*)|(?:Out of memory.*)`<br>- I/O Page Fault: `IO_PAGE_FAULT`<br>- Kernel Panic: `\bkernel panic\b.*`<br>- SQ Interrupt: `sq_intr`<br>- SRAM ECC: `sram_ecc.*`<br>- Failed to load driver. IP hardware init error.: `\[amdgpu\]\] \*ERROR\* hw_init of IP block.*`<br>- Failed to load driver. IP software init error.: `\[amdgpu\]\] \*ERROR\* sw_init of IP block.*`<br>- Real Time throttling activated: `sched: RT throttling activated.*`<br>- RCU preempt detected stalls: `rcu_preempt detected stalls.*`<br>- RCU preempt self-detected stall: `rcu_preempt self-detected stall.*`<br>- QCM fence timeout: `qcm fence wait loop timeout.*`<br>- General protection fault: `(?:[\w-]+(?:\[[0-9.]+\])?\s+)?general protectio...`<br>- Segmentation fault: `(?:segfault.*in .*\[)|(?:[Ss]egmentation [Ff]au...`<br>- Failed to disallow cf state: `amdgpu: Failed to disallow cf state.*`<br>- Failed to terminate tmr: `\*ERROR\* Failed to terminate tmr.*`<br>- Suspend of IP block failed: `\*ERROR\* suspend of IP block <\w+> failed.*`<br>- amdgpu Page Fault: `(amdgpu \w{4}:\w{2}:\w{2}\.\w:\s+amdgpu:\s+\[\S...`<br>- Page Fault: `page fault for address.*`<br>- Fatal error during GPU init: `(?:amdgpu)(.*Fatal error during GPU init)|(Fata...`<br>- PCIe AER Error Status: `(pcieport [\w:.]+: AER: aer_status:[^\n]*(?:\n[...`<br>- PCIe AER Correctable Error Status: `(.*aer_cor_status: 0x[0-9a-fA-F]+, aer_cor_mask...`<br>- PCIe AER Uncorrectable Error Status: `(.*aer_uncor_status: 0x[0-9a-fA-F]+, aer_uncor_...`<br>- PCIe AER Uncorrectable Error Severity with TLP Header: `(.*aer_uncor_severity: 0x[0-9a-fA-F]+.*)(\n.*TL...`<br>- Failed to read journal file: `Failed to read journal file.*`<br>- Journal file corrupted or uncleanly shut down: `journal corrupted or uncleanly shut down.*`<br>- ACPI BIOS Error: `ACPI BIOS Error`<br>- ACPI Error: `ACPI Error`<br>- Filesystem corrupted!: `EXT4-fs error \(device .*\):`<br>- Error in buffered IO, check filesystem integrity: `(Buffer I\/O error on dev)(?:ice)? (\w+)`<br>- PCIe card no longer present: `pcieport (\w+:\w+:\w+\.\w+):\s+(\w+):\s+(Slot\(...`<br>- PCIe Link Down: `pcieport (\w+:\w+:\w+\.\w+):\s+(\w+):\s+(Slot\(...`<br>- Mismatched clock configuration between PCIe device and host: `pcieport (\w+:\w+:\w+\.\w+):\s+(\w+):\s+(curren...`<br>- RAS Correctable Error: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`<br>- RAS Uncorrectable Error: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`<br>- RAS Deferred Error: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`<br>- RAS Corrected PCIe Error: `((?:\[Hardware Error\]:\s+)?event severity: cor...`<br>- GPU Reset: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`<br>- GPU reset failed: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`<br>- ACA Error: `(Accelerator Check Architecture[^\n]*)(?:\n[^\n...`<br>- ACA Error: `(Accelerator Check Architecture[^\n]*)(?:\n[^\n...`<br>- MCE Error: `\[Hardware Error\]:.+MC\d+_STATUS
|
|
13
|
+
| DmesgPlugin | dmesg --time-format iso -x<br>ls -1 /var/log/dmesg* 2>/dev/null | grep -E '^/var/log/dmesg(\.[0-9]+(\.gz)?)?$' || true | **Built-in Regexes:**<br>- Out of memory error: `(?:oom_kill_process.*)|(?:Out of memory.*)`<br>- I/O Page Fault: `IO_PAGE_FAULT`<br>- Kernel Panic: `\bkernel panic\b.*`<br>- SQ Interrupt: `sq_intr`<br>- SRAM ECC: `sram_ecc.*`<br>- Failed to load driver. IP hardware init error.: `\[amdgpu\]\] \*ERROR\* hw_init of IP block.*`<br>- Failed to load driver. IP software init error.: `\[amdgpu\]\] \*ERROR\* sw_init of IP block.*`<br>- Real Time throttling activated: `sched: RT throttling activated.*`<br>- RCU preempt detected stalls: `rcu_preempt detected stalls.*`<br>- RCU preempt self-detected stall: `rcu_preempt self-detected stall.*`<br>- QCM fence timeout: `qcm fence wait loop timeout.*`<br>- General protection fault: `(?:[\w-]+(?:\[[0-9.]+\])?\s+)?general protectio...`<br>- Segmentation fault: `(?:segfault.*in .*\[)|(?:[Ss]egmentation [Ff]au...`<br>- Failed to disallow cf state: `amdgpu: Failed to disallow cf state.*`<br>- Failed to terminate tmr: `\*ERROR\* Failed to terminate tmr.*`<br>- Suspend of IP block failed: `\*ERROR\* suspend of IP block <\w+> failed.*`<br>- amdgpu Page Fault: `(amdgpu \w{4}:\w{2}:\w{2}\.\w:\s+amdgpu:\s+\[\S...`<br>- Page Fault: `page fault for address.*`<br>- Fatal error during GPU init: `(?:amdgpu)(.*Fatal error during GPU init)|(Fata...`<br>- PCIe AER Error Status: `(pcieport [\w:.]+: AER: aer_status:[^\n]*(?:\n[...`<br>- PCIe AER Correctable Error Status: `(.*aer_cor_status: 0x[0-9a-fA-F]+, aer_cor_mask...`<br>- PCIe AER Uncorrectable Error Status: `(.*aer_uncor_status: 0x[0-9a-fA-F]+, aer_uncor_...`<br>- PCIe AER Uncorrectable Error Severity with TLP Header: `(.*aer_uncor_severity: 0x[0-9a-fA-F]+.*)(\n.*TL...`<br>- Failed to read journal file: `Failed to read journal file.*`<br>- Journal file corrupted or uncleanly shut down: `journal corrupted or uncleanly shut down.*`<br>- ACPI BIOS Error: `ACPI BIOS Error`<br>- ACPI Error: `ACPI Error`<br>- Filesystem corrupted!: `EXT4-fs error \(device .*\):`<br>- Error in buffered IO, check filesystem integrity: `(Buffer I\/O error on dev)(?:ice)? (\w+)`<br>- PCIe card no longer present: `pcieport (\w+:\w+:\w+\.\w+):\s+(\w+):\s+(Slot\(...`<br>- PCIe Link Down: `pcieport (\w+:\w+:\w+\.\w+):\s+(\w+):\s+(Slot\(...`<br>- Mismatched clock configuration between PCIe device and host: `pcieport (\w+:\w+:\w+\.\w+):\s+(\w+):\s+(curren...`<br>- RAS Correctable Error: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`<br>- RAS Uncorrectable Error: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`<br>- RAS Deferred Error: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`<br>- RAS Corrected PCIe Error: `((?:\[Hardware Error\]:\s+)?event severity: cor...`<br>- GPU Reset: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`<br>- GPU reset failed: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`<br>- ACA Error: `(Accelerator Check Architecture[^\n]*)(?:\n[^\n...`<br>- ACA Error: `(Accelerator Check Architecture[^\n]*)(?:\n[^\n...`<br>- MCE Corrected Error: `\[Hardware Error\]:.+MC\d+_STATUS\[[^\]]*\|CE\|...`<br>- MCE Uncorrected Error: `\[Hardware Error\]:.+MC\d+_STATUS\[[^\]]*\|UC\|...`<br>- Mode 2 Reset Failed: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)? (...`<br>- RAS Corrected Error: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`<br>- SGX Error: `x86/cpu: SGX disabled by BIOS`<br>- MMP Error: `Failed to load MMP firmware qat_4xxx_mmp.bin`<br>- GPU Throttled: `amdgpu \w{4}:\w{2}:\w{2}.\w: amdgpu: WARN: GPU ...`<br>- RAS Poison Consumed: `amdgpu[ 0-9a-fA-F:.]+:(?:\s*amdgpu:)?\s+(?:{\d+...`<br>- RAS Poison created: `amdgpu[ 0-9a-fA-F:.]+:(?:\s*amdgpu:)?\s+(?:{\d+...`<br>- Bad page threshold exceeded: `(amdgpu: Saved bad pages (\d+) reaches threshol...`<br>- RAS Hardware Error: `Hardware error from APEI Generic Hardware Error...`<br>- Error Address: `Error Address.*(?:\s.*)`<br>- RAS EDR Event: `EDR: EDR event received`<br>- DPC Event: `DPC: .*`<br>- LNet: ko2iblnd has no matching interfaces: `(?:\[[^\]]+\]\s*)?LNetError:.*ko2iblnd:\s*No ma...`<br>- LNet: Error starting up LNI: `(?:\[[^\]]+\]\s*)?LNetError:\s*.*Error\s*-?\d+\...`<br>- Lustre: network initialisation failed: `LustreError:.*ptlrpc_init_portals\(\).*network ...` | **Collection Args:**<br>- `collect_rotated_logs`: bool — If True, also collect rotated dmesg log files from /var/log/dmesg*.<br>- `skip_sudo`: bool — If True, do not use sudo when running dmesg or listing log files.<br>- `log_dmesg_data`: bool — If True, log the collected dmesg output in artifacts. | [DmesgData](#DmesgData-Model) | [DmesgCollector](#Collector-Class-DmesgCollector) | [DmesgAnalyzer](#Data-Analyzer-Class-DmesgAnalyzer) |
|
|
14
14
|
| FabricsPlugin | lspci | grep -i cassini<br>lsmod | grep cxi<br>cxi_stat<br>ibstat<br>ibv_devinfo<br>ls -l /sys/class/infiniband/*/device/net<br>fi_info -p cxi<br>mst start<br>mst status -v<br>ip link show<br>ofed_info -s | - | - | [FabricsDataModel](#FabricsDataModel-Model) | [FabricsCollector](#Collector-Class-FabricsCollector) | - |
|
|
15
15
|
| JournalPlugin | journalctl --no-pager --system --output=short-iso<br>journalctl --no-pager --system --output=json | **Analyzer Args:**<br>- `analysis_range_start`: Optional[datetime.datetime] — Start of time range for analysis (ISO format). Only events on or after this time are analyzed.<br>- `analysis_range_end`: Optional[datetime.datetime] — End of time range for analysis (ISO format). Only events before this time are analyzed.<br>- `check_priority`: Optional[int] — Check against journal log priority (0=emergency..7=debug). If an entry has priority <= check_priority, an ERROR event...<br>- `group`: bool — If True, group entries that have the same priority and message. | **Collection Args:**<br>- `boot`: Optional[int] — Optional boot ID to limit journal collection to a specific boot. | [JournalData](#JournalData-Model) | [JournalCollector](#Collector-Class-JournalCollector) | [JournalAnalyzer](#Data-Analyzer-Class-JournalAnalyzer) |
|
|
16
16
|
| KernelPlugin | sh -c 'uname -a'<br>sh -c 'cat /proc/sys/kernel/numa_balancing'<br>wmic os get Version /Value | **Analyzer Args:**<br>- `exp_kernel`: Union[str, list] — Expected kernel version string(s) to match (e.g. from uname -a).<br>- `exp_numa`: Optional[int] — Expected value for kernel.numa_balancing (e.g. 0 or 1).<br>- `regex_match`: bool — If True, match exp_kernel as regex; otherwise exact match. | - | [KernelDataModel](#KernelDataModel-Model) | [KernelCollector](#Collector-Class-KernelCollector) | [KernelAnalyzer](#Data-Analyzer-Class-KernelAnalyzer) |
|
|
@@ -21,14 +21,14 @@
|
|
|
21
21
|
| NvmePlugin | nvme smart-log {dev}<br>nvme error-log {dev} --log-entries=256<br>nvme id-ctrl {dev}<br>nvme id-ns {dev}{ns}<br>nvme fw-log {dev}<br>nvme self-test-log {dev}<br>nvme get-log {dev} --log-id=6 --log-len=512<br>nvme telemetry-log {dev} --output-file={dev}_{f_name}<br>nvme list -o json | - | - | [NvmeDataModel](#NvmeDataModel-Model) | [NvmeCollector](#Collector-Class-NvmeCollector) | - |
|
|
22
22
|
| OsPlugin | sh -c '( lsb_release -ds || (cat /etc/*release | grep PRETTY_NAME) || uname -om ) 2>/dev/null | head -n1'<br>cat /etc/*release | grep VERSION_ID<br>wmic os get Version /value<br>wmic os get Caption /Value | **Analyzer Args:**<br>- `exp_os`: Union[str, list] — Expected OS name/version string(s) to match (e.g. from lsb_release or /etc/os-release).<br>- `exact_match`: bool — If True, require exact match for exp_os; otherwise substring match. | - | [OsDataModel](#OsDataModel-Model) | [OsCollector](#Collector-Class-OsCollector) | [OsAnalyzer](#Data-Analyzer-Class-OsAnalyzer) |
|
|
23
23
|
| PackagePlugin | dnf list --installed<br>dpkg-query -W<br>pacman -Q<br>cat /etc/*release<br>wmic product get name,version | **Analyzer Args:**<br>- `exp_package_ver`: Dict[str, Optional[str]] — Map package name -> expected version (None = any version). Checked against installed packages.<br>- `regex_match`: bool — If True, match package versions with regex; otherwise exact or prefix match.<br>- `rocm_regex`: Optional[str] — Optional regex to identify ROCm package version (used when enable_rocm_regex is True).<br>- `enable_rocm_regex`: bool — If True, use rocm_regex (or default pattern) to extract ROCm version for checks. | - | [PackageDataModel](#PackageDataModel-Model) | [PackageCollector](#Collector-Class-PackageCollector) | [PackageAnalyzer](#Data-Analyzer-Class-PackageAnalyzer) |
|
|
24
|
-
| PciePlugin | lspci -d {vendor_id}: -nn<br>lspci -x<br>lspci -xxxx<br>lspci -PP<br>lspci -PP -d {vendor_id}:{dev_id}<br>lspci -vvv<br>lspci -vvvt | **Analyzer Args:**<br>- `exp_speed`: int — Expected PCIe link speed (generation 1–5).<br>- `exp_width`: int — Expected PCIe link width in lanes (1–16).<br>- `exp_sriov_count`: int — Expected SR-IOV virtual function count.<br>- `exp_gpu_count_override`: Optional[int] — Override expected GPU count for validation.<br>- `exp_max_payload_size`: Union[Dict[int, int], int, NoneType] — Expected max payload size: int for all devices, or dict keyed by device ID.<br>- `exp_max_rd_req_size`: Union[Dict[int, int], int, NoneType] — Expected max read request size: int for all devices, or dict keyed by device ID.<br>- `exp_ten_bit_tag_req_en`: Union[Dict[int, int], int, NoneType] — Expected 10-bit tag request enable: int for all devices, or dict keyed by device ID. | - | [PcieDataModel](#PcieDataModel-Model) | [PcieCollector](#Collector-Class-PcieCollector) | [PcieAnalyzer](#Data-Analyzer-Class-PcieAnalyzer) |
|
|
24
|
+
| PciePlugin | lspci -d {vendor_id}: -nn<br>lspci -x<br>lspci -xxxx<br>lspci -PP<br>lspci -PP -d {vendor_id}:{dev_id}<br>lspci -PP -D -d {vendor_id}:{dev_id}<br>lspci -PP -D<br>lspci -vvv<br>lspci -vvvt | **Analyzer Args:**<br>- `exp_speed`: int — Expected PCIe link speed (generation 1–5).<br>- `exp_width`: int — Expected PCIe link width in lanes (1–16).<br>- `exp_sriov_count`: int — Expected SR-IOV virtual function count.<br>- `exp_gpu_count_override`: Optional[int] — Override expected GPU count for validation.<br>- `exp_max_payload_size`: Union[Dict[int, int], int, NoneType] — Expected max payload size: int for all devices, or dict keyed by device ID.<br>- `exp_max_rd_req_size`: Union[Dict[int, int], int, NoneType] — Expected max read request size: int for all devices, or dict keyed by device ID.<br>- `exp_ten_bit_tag_req_en`: Union[Dict[int, int], int, NoneType] — Expected 10-bit tag request enable: int for all devices, or dict keyed by device ID. | - | [PcieDataModel](#PcieDataModel-Model) | [PcieCollector](#Collector-Class-PcieCollector) | [PcieAnalyzer](#Data-Analyzer-Class-PcieAnalyzer) |
|
|
25
25
|
| ProcessPlugin | top -b -n 1<br>rocm-smi --showpids<br>top -b -n 1 -o %CPU | **Analyzer Args:**<br>- `max_kfd_processes`: int — Maximum allowed number of KFD (Kernel Fusion Driver) processes; 0 disables the check.<br>- `max_cpu_usage`: float — Maximum allowed CPU usage (percent) for process checks. | **Collection Args:**<br>- `top_n_process`: int — Number of top processes by CPU usage to collect (e.g. for top -b -n 1 -o %%CPU). | [ProcessDataModel](#ProcessDataModel-Model) | [ProcessCollector](#Collector-Class-ProcessCollector) | [ProcessAnalyzer](#Data-Analyzer-Class-ProcessAnalyzer) |
|
|
26
26
|
| RdmaPlugin | rdma link -j<br>rdma dev<br>rdma link<br>rdma statistic -j | - | - | [RdmaDataModel](#RdmaDataModel-Model) | [RdmaCollector](#Collector-Class-RdmaCollector) | [RdmaAnalyzer](#Data-Analyzer-Class-RdmaAnalyzer) |
|
|
27
27
|
| RocmPlugin | {rocm_path}/opencl/bin/*/clinfo<br>env | grep -Ei 'rocm|hsa|hip|mpi|openmp|ucx|miopen'<br>ls /sys/class/kfd/kfd/proc/<br>grep -i -E 'rocm' /etc/ld.so.conf.d/*<br>{rocm_path}/bin/rocminfo<br>ls -v -d {rocm_path}*<br>ls -v -d {rocm_path}-[3-7]* | tail -1<br>ldconfig -p | grep -i -E 'rocm'<br>grep . -H -r -i {rocm_path}/.info/* | **Analyzer Args:**<br>- `exp_rocm`: Union[str, list] — Expected ROCm version string(s) to match (e.g. from rocminfo).<br>- `exp_rocm_latest`: str — Expected 'latest' ROCm path or version string for versioned installs.<br>- `exp_rocm_sub_versions`: dict[str, Union[str, list]] — Map sub-version name (e.g. version_rocm) to expected string or list of allowed strings. | **Collection Args:**<br>- `rocm_path`: str — Base path to ROCm installation (e.g. /opt/rocm). Used for rocminfo, clinfo, and version discovery. | [RocmDataModel](#RocmDataModel-Model) | [RocmCollector](#Collector-Class-RocmCollector) | [RocmAnalyzer](#Data-Analyzer-Class-RocmAnalyzer) |
|
|
28
28
|
| StoragePlugin | sh -c 'df -lH -B1 | grep -v 'boot''<br>wmic LogicalDisk Where DriveType="3" Get DeviceId,Size,FreeSpace | - | **Collection Args:**<br>- `skip_sudo`: bool — If True, do not use sudo when running df and related storage commands. | [StorageDataModel](#StorageDataModel-Model) | [StorageCollector](#Collector-Class-StorageCollector) | [StorageAnalyzer](#Data-Analyzer-Class-StorageAnalyzer) |
|
|
29
29
|
| SysSettingsPlugin | cat /sys/{}<br>ls -1 /sys/{}<br>ls -l /sys/{} | **Analyzer Args:**<br>- `checks`: Optional[list[nodescraper.plugins.inband.sys_settings.analyzer_args.SysfsCheck]] — List of sysfs checks (path, expected values or pattern, display name). | **Collection Args:**<br>- `paths`: list[str] — Sysfs paths to read (cat). Paths with '*' are collected with ls -l (e.g. class/net/*/device).<br>- `directory_paths`: list[str] — Sysfs paths to list (ls -1); used for checks that match entry names by regex. | [SysSettingsDataModel](#SysSettingsDataModel-Model) | [SysSettingsCollector](#Collector-Class-SysSettingsCollector) | [SysSettingsAnalyzer](#Data-Analyzer-Class-SysSettingsAnalyzer) |
|
|
30
30
|
| SysctlPlugin | sysctl -n | **Analyzer Args:**<br>- `exp_vm_swappiness`: Optional[int] — Expected vm.swappiness value.<br>- `exp_vm_numa_balancing`: Optional[int] — Expected vm.numa_balancing value.<br>- `exp_vm_oom_kill_allocating_task`: Optional[int] — Expected vm.oom_kill_allocating_task value.<br>- `exp_vm_compaction_proactiveness`: Optional[int] — Expected vm.compaction_proactiveness value.<br>- `exp_vm_compact_unevictable_allowed`: Optional[int] — Expected vm.compact_unevictable_allowed value.<br>- `exp_vm_extfrag_threshold`: Optional[int] — Expected vm.extfrag_threshold value.<br>- `exp_vm_zone_reclaim_mode`: Optional[int] — Expected vm.zone_reclaim_mode value.<br>- `exp_vm_dirty_background_ratio`: Optional[int] — Expected vm.dirty_background_ratio value.<br>- `exp_vm_dirty_ratio`: Optional[int] — Expected vm.dirty_ratio value.<br>- `exp_vm_dirty_writeback_centisecs`: Optional[int] — Expected vm.dirty_writeback_centisecs value.<br>- `exp_kernel_numa_balancing`: Optional[int] — Expected kernel.numa_balancing value. | - | [SysctlDataModel](#SysctlDataModel-Model) | [SysctlCollector](#Collector-Class-SysctlCollector) | [SysctlAnalyzer](#Data-Analyzer-Class-SysctlAnalyzer) |
|
|
31
|
-
| SyslogPlugin | ls -1 /var/log/syslog* 2>/dev/null | grep -E '^/var/log/syslog(\.[0-9]+(\.gz)?)?$' || true | - | - | [SyslogData](#SyslogData-Model) | [SyslogCollector](#Collector-Class-SyslogCollector) | - |
|
|
31
|
+
| SyslogPlugin | ls -1 /var/log/syslog* 2>/dev/null | grep -E '^/var/log/syslog(\.[0-9]+(\.gz)?)?$' || true<br>ls -1 /var/log/messages* 2>/dev/null | grep -E '^/var/log/messages(\.[0-9]+(\.gz)?)?$' || true | - | - | [SyslogData](#SyslogData-Model) | [SyslogCollector](#Collector-Class-SyslogCollector) | - |
|
|
32
32
|
| UptimePlugin | uptime | - | - | [UptimeDataModel](#UptimeDataModel-Model) | [UptimeCollector](#Collector-Class-UptimeCollector) | - |
|
|
33
33
|
|
|
34
34
|
# Collectors
|
|
@@ -686,11 +686,13 @@ class for collection of PCIe data only supports Linux OS type.
|
|
|
686
686
|
- `lspci -vvv` : Verbose collection of PCIe data
|
|
687
687
|
- `lspci -vvvt`: Verbose tree view of PCIe data
|
|
688
688
|
- `lspci -PP`: Path view of PCIe data for the GPUs
|
|
689
|
+
- `lspci -PP -D`: Path view of PCIe data for the GPUs (with domain prefix)
|
|
689
690
|
- If system interaction level is set to STANDARD or higher, the following commands will be run with sudo:
|
|
690
691
|
- `lspci -xxxx`: Hex view of PCIe data for the GPUs
|
|
691
692
|
- otherwise the following commands will be run without sudo:
|
|
692
693
|
- `lspci -x`: Hex view of PCIe data for the GPUs
|
|
693
|
-
- `lspci -d <vendor_id
|
|
694
|
+
- `lspci -d <vendor_id>:` : Detect AMD GPU device IDs in the system
|
|
695
|
+
- `lspci -PP -D -d <vendor_id>:<dev_id>` : Upstream BDF path for GPUs (with domain prefix)
|
|
694
696
|
- If system interaction level is set to STANDARD or higher, the following commands will be run with sudo:
|
|
695
697
|
- The sudo lspci -xxxx command is used to collect the PCIe configuration space for the GPUs in the system
|
|
696
698
|
- otherwise the following commands will be run without sudo:
|
|
@@ -706,10 +708,12 @@ class for collection of PCIe data only supports Linux OS type.
|
|
|
706
708
|
- **CMD_LSPCI_VERBOSE**: `lspci -vvv`
|
|
707
709
|
- **CMD_LSPCI_VERBOSE_TREE**: `lspci -vvvt`
|
|
708
710
|
- **CMD_LSPCI_PATH**: `lspci -PP`
|
|
711
|
+
- **CMD_LSPCI_PATH_DOMAIN**: `lspci -PP -D`
|
|
709
712
|
- **CMD_LSPCI_HEX_SUDO**: `lspci -xxxx`
|
|
710
713
|
- **CMD_LSPCI_HEX**: `lspci -x`
|
|
711
714
|
- **CMD_LSPCI_AMD_DEVICES**: `lspci -d {vendor_id}: -nn`
|
|
712
715
|
- **CMD_LSPCI_PATH_DEVICE**: `lspci -PP -d {vendor_id}:{dev_id}`
|
|
716
|
+
- **CMD_LSPCI_PATH_DEVICE_DOMAIN**: `lspci -PP -D -d {vendor_id}:{dev_id}`
|
|
713
717
|
|
|
714
718
|
### Provides Data
|
|
715
719
|
|
|
@@ -722,6 +726,8 @@ PcieDataModel
|
|
|
722
726
|
- lspci -xxxx
|
|
723
727
|
- lspci -PP
|
|
724
728
|
- lspci -PP -d {vendor_id}:{dev_id}
|
|
729
|
+
- lspci -PP -D -d {vendor_id}:{dev_id}
|
|
730
|
+
- lspci -PP -D
|
|
725
731
|
- lspci -vvv
|
|
726
732
|
- lspci -vvvt
|
|
727
733
|
|
|
@@ -907,6 +913,7 @@ Read syslog log
|
|
|
907
913
|
|
|
908
914
|
- **SUPPORTED_OS_FAMILY**: `{<OSFamily.LINUX: 3>}`
|
|
909
915
|
- **CMD**: `ls -1 /var/log/syslog* 2>/dev/null | grep -E '^/var/log/syslog(\.[0-9]+(\.gz)?)?$' || true`
|
|
916
|
+
- **CMD_MESSAGES**: `ls -1 /var/log/messages* 2>/dev/null | grep -E '^/var/log/messages(\.[0-9]+(\.gz)?)?$' || true`
|
|
910
917
|
|
|
911
918
|
### Provides Data
|
|
912
919
|
|
|
@@ -915,6 +922,7 @@ SyslogData
|
|
|
915
922
|
### Commands
|
|
916
923
|
|
|
917
924
|
- ls -1 /var/log/syslog* 2>/dev/null | grep -E '^/var/log/syslog(\.[0-9]+(\.gz)?)?$' || true
|
|
925
|
+
- ls -1 /var/log/messages* 2>/dev/null | grep -E '^/var/log/messages(\.[0-9]+(\.gz)?)?$' || true
|
|
918
926
|
|
|
919
927
|
## Collector Class UptimeCollector
|
|
920
928
|
|
|
@@ -1237,6 +1245,7 @@ class for collection of PCIe data.
|
|
|
1237
1245
|
- lspci_verbose: Verbose collection of PCIe data
|
|
1238
1246
|
- lspci_verbose_tree: Tree view of PCIe data
|
|
1239
1247
|
- lspci_path: Path view of PCIe data for the GPUs
|
|
1248
|
+
- lspci_path_domain: Path view of PCIe data for the GPUs (with domain prefix)
|
|
1240
1249
|
- lspci_hex: Hex view of PCIe data for the GPUs
|
|
1241
1250
|
|
|
1242
1251
|
**Link to code**: [pcie_data.py](https://github.com/amd/node-scraper/blob/HEAD/nodescraper/plugins/inband/pcie/pcie_data.py)
|
|
@@ -1467,17 +1476,18 @@ Check dmesg for errors
|
|
|
1467
1476
|
regex=re.compile('pcieport (\\w+:\\w+:\\w+\\.\\w+):\\s+(\\w+):\\s+(Slot\\(\\d+\\)):\\s+(Card not present)') message='PCIe card no longer present' event_category=<EventCategory.IO: 'IO'> event_priority=<EventPriority.ERROR: 3>,
|
|
1468
1477
|
regex=re.compile('pcieport (\\w+:\\w+:\\w+\\.\\w+):\\s+(\\w+):\\s+(Slot\\(\\d+\\)):\\s+(Link Down)') message='PCIe Link Down' event_category=<EventCategory.IO: 'IO'> event_priority=<EventPriority.ERROR: 3>,
|
|
1469
1478
|
regex=re.compile('pcieport (\\w+:\\w+:\\w+\\.\\w+):\\s+(\\w+):\\s+(current common clock configuration is inconsistent, reconfiguring)') message='Mismatched clock configuration between PCIe device and host' event_category=<EventCategory.IO: 'IO'> event_priority=<EventPriority.ERROR: 3>,
|
|
1470
|
-
regex=re.compile('(?:\\d{4}-\\d+-\\d+T\\d+:\\d+:\\d+,\\d+[+-]\\d+:\\d+)?(.* correctable hardware errors detected in total in \\w+ block.*)') message='RAS Correctable Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.
|
|
1479
|
+
regex=re.compile('(?:\\d{4}-\\d+-\\d+T\\d+:\\d+:\\d+,\\d+[+-]\\d+:\\d+)?(.* correctable hardware errors detected in total in \\w+ block.*)') message='RAS Correctable Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.WARNING: 2>,
|
|
1471
1480
|
regex=re.compile('(?:\\d{4}-\\d+-\\d+T\\d+:\\d+:\\d+,\\d+[+-]\\d+:\\d+)?(.* uncorrectable hardware errors detected in \\w+ block.*)') message='RAS Uncorrectable Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
|
|
1472
1481
|
regex=re.compile('(?:\\d{4}-\\d+-\\d+T\\d+:\\d+:\\d+,\\d+[+-]\\d+:\\d+)?(.* deferred hardware errors detected in \\w+ block.*)') message='RAS Deferred Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
|
|
1473
|
-
regex=re.compile('((?:\\[Hardware Error\\]:\\s+)?event severity: corrected.*)\\n.*(\\[Hardware Error\\]:\\s+Error \\d+, type: corrected.*)\\n.*(\\[Hardware Error\\]:\\s+section_type: PCIe error.*)') message='RAS Corrected PCIe Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.
|
|
1482
|
+
regex=re.compile('((?:\\[Hardware Error\\]:\\s+)?event severity: corrected.*)\\n.*(\\[Hardware Error\\]:\\s+Error \\d+, type: corrected.*)\\n.*(\\[Hardware Error\\]:\\s+section_type: PCIe error.*)') message='RAS Corrected PCIe Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.WARNING: 2>,
|
|
1474
1483
|
regex=re.compile('(?:\\d{4}-\\d+-\\d+T\\d+:\\d+:\\d+,\\d+[+-]\\d+:\\d+)?(.*GPU reset begin.*)') message='GPU Reset' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
|
|
1475
1484
|
regex=re.compile('(?:\\d{4}-\\d+-\\d+T\\d+:\\d+:\\d+,\\d+[+-]\\d+:\\d+)?(.*GPU reset(?:\\(\\d+\\))? failed.*)') message='GPU reset failed' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
|
|
1476
1485
|
regex=re.compile('(Accelerator Check Architecture[^\\n]*)(?:\\n[^\\n]*){0,10}?(amdgpu[ 0-9a-fA-F:.]+:? [^\\n]*entry\\[\\d+\\]\\.STATUS=0x[0-9a-fA-F]+)(?:\\n[^\\n]*){0,5}?(amdgpu[ 0-9a-fA-F:.]+:? [^\\n]*entry\\[\\d+\\], re.MULTILINE) message='ACA Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
|
|
1477
1486
|
regex=re.compile('(Accelerator Check Architecture[^\\n]*)(?:\\n[^\\n]*){0,10}?(amdgpu[ 0-9a-fA-F:.]+:? [^\\n]*CONTROL=0x[0-9a-fA-F]+)(?:\\n[^\\n]*){0,5}?(amdgpu[ 0-9a-fA-F:.]+:? [^\\n]*STATUS=0x[0-9a-fA-F]+)(?:\\n[^\\, re.MULTILINE) message='ACA Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
|
|
1478
|
-
regex=re.compile('\\[Hardware Error\\]:.+MC\\d+_STATUS.*(?:\\n.*){0,5}') message='MCE Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.
|
|
1487
|
+
regex=re.compile('\\[Hardware Error\\]:.+MC\\d+_STATUS\\[[^\\]]*\\|CE\\|[^\\]]*\\].*(?:\\n.*){0,5}') message='MCE Corrected Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.WARNING: 2>,
|
|
1488
|
+
regex=re.compile('\\[Hardware Error\\]:.+MC\\d+_STATUS\\[[^\\]]*\\|UC\\|[^\\]]*\\].*(?:\\n.*){0,5}') message='MCE Uncorrected Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
|
|
1479
1489
|
regex=re.compile('(?:\\d{4}-\\d+-\\d+T\\d+:\\d+:\\d+,\\d+[+-]\\d+:\\d+)? (.*Mode2 reset failed.*)') message='Mode 2 Reset Failed' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
|
|
1480
|
-
regex=re.compile('(?:\\d{4}-\\d+-\\d+T\\d+:\\d+:\\d+,\\d+[+-]\\d+:\\d+)?(.*\\[Hardware Error\\]: Corrected error.*)') message='RAS Corrected Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.
|
|
1490
|
+
regex=re.compile('(?:\\d{4}-\\d+-\\d+T\\d+:\\d+:\\d+,\\d+[+-]\\d+:\\d+)?(.*\\[Hardware Error\\]: Corrected error.*)') message='RAS Corrected Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.WARNING: 2>,
|
|
1481
1491
|
regex=re.compile('x86/cpu: SGX disabled by BIOS') message='SGX Error' event_category=<EventCategory.BIOS: 'BIOS'> event_priority=<EventPriority.WARNING: 2>,
|
|
1482
1492
|
regex=re.compile('Failed to load MMP firmware qat_4xxx_mmp.bin') message='MMP Error' event_category=<EventCategory.BIOS: 'BIOS'> event_priority=<EventPriority.WARNING: 2>,
|
|
1483
1493
|
regex=re.compile('amdgpu \\w{4}:\\w{2}:\\w{2}.\\w: amdgpu: WARN: GPU is throttled.*') message='GPU Throttled' event_category=<EventCategory.SW_DRIVER: 'SW_DRIVER'> event_priority=<EventPriority.WARNING: 2>,
|
|
@@ -1495,7 +1505,7 @@ Check dmesg for errors
|
|
|
1495
1505
|
|
|
1496
1506
|
### Regex Patterns
|
|
1497
1507
|
|
|
1498
|
-
*
|
|
1508
|
+
*58 items defined*
|
|
1499
1509
|
|
|
1500
1510
|
- **Built-in Regexes:**
|
|
1501
1511
|
- - Out of memory error: `(?:oom_kill_process.*)|(?:Out of memory.*)`
|
|
@@ -1538,7 +1548,8 @@ Check dmesg for errors
|
|
|
1538
1548
|
- - GPU reset failed: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`
|
|
1539
1549
|
- - ACA Error: `(Accelerator Check Architecture[^\n]*)(?:\n[^\n...`
|
|
1540
1550
|
- - ACA Error: `(Accelerator Check Architecture[^\n]*)(?:\n[^\n...`
|
|
1541
|
-
- - MCE Error: `\[Hardware Error\]:.+MC\d+_STATUS
|
|
1551
|
+
- - MCE Corrected Error: `\[Hardware Error\]:.+MC\d+_STATUS\[[^\]]*\|CE\|...`
|
|
1552
|
+
- - MCE Uncorrected Error: `\[Hardware Error\]:.+MC\d+_STATUS\[[^\]]*\|UC\|...`
|
|
1542
1553
|
- - Mode 2 Reset Failed: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)? (...`
|
|
1543
1554
|
- - RAS Corrected Error: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`
|
|
1544
1555
|
- - SGX Error: `x86/cpu: SGX disabled by BIOS`
|
|
@@ -1755,6 +1766,7 @@ Check sysctl matches expected sysctl details
|
|
|
1755
1766
|
- **check_static_data**: `bool` — If True, run static data checks (e.g. driver version, partition mode).
|
|
1756
1767
|
- **expected_gpu_processes**: `Optional[int]` — Expected number of GPU processes.
|
|
1757
1768
|
- **expected_max_power**: `Optional[int]` — Expected maximum power value (e.g. watts).
|
|
1769
|
+
- **expected_power_management**: `Optional[str]` — Expected amd-smi metric power_management value per GPU (e.g. DISABLED for active/full power, ENABLED for power-managed idle).
|
|
1758
1770
|
- **expected_driver_version**: `Optional[str]` — Expected AMD driver version string.
|
|
1759
1771
|
- **expected_memory_partition_mode**: `Optional[str]` — Expected memory partition mode (e.g. sp3, dp).
|
|
1760
1772
|
- **expected_compute_partition_mode**: `Optional[str]` — Expected compute partition mode.
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
from .inbandcollectortask import InBandDataCollector
|
|
27
27
|
from .inbanddataplugin import InBandDataPlugin
|
|
28
28
|
from .oobanddataplugin import OOBandDataPlugin
|
|
29
|
+
from .oobsshdataplugin import OOBSSHDataPlugin
|
|
29
30
|
from .redfishcollectortask import RedfishDataCollector
|
|
30
31
|
from .regexanalyzer import RegexAnalyzer
|
|
31
32
|
|
|
@@ -33,6 +34,7 @@ __all__ = [
|
|
|
33
34
|
"InBandDataCollector",
|
|
34
35
|
"InBandDataPlugin",
|
|
35
36
|
"OOBandDataPlugin",
|
|
37
|
+
"OOBSSHDataPlugin",
|
|
36
38
|
"RedfishDataCollector",
|
|
37
39
|
"RegexAnalyzer",
|
|
38
40
|
]
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
###############################################################################
|
|
2
|
+
#
|
|
3
|
+
# MIT License
|
|
4
|
+
#
|
|
5
|
+
# Copyright (c) 2026 Advanced Micro Devices, Inc.
|
|
6
|
+
#
|
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
# in the Software without restriction, including without limitation the rights
|
|
10
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
# furnished to do so, subject to the following conditions:
|
|
13
|
+
#
|
|
14
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
15
|
+
# copies or substantial portions of the Software.
|
|
16
|
+
#
|
|
17
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
23
|
+
# SOFTWARE.
|
|
24
|
+
#
|
|
25
|
+
###############################################################################
|
|
26
|
+
from __future__ import annotations
|
|
27
|
+
|
|
28
|
+
from typing import Generic
|
|
29
|
+
|
|
30
|
+
from nodescraper.connection.redfish import (
|
|
31
|
+
RedfishConnectionManager,
|
|
32
|
+
RedfishConnectionParams,
|
|
33
|
+
)
|
|
34
|
+
from nodescraper.generictypes import TAnalyzeArg, TCollectArg, TDataModel
|
|
35
|
+
from nodescraper.interfaces import DataPlugin
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class OOBSSHDataPlugin(
|
|
39
|
+
DataPlugin[
|
|
40
|
+
RedfishConnectionManager,
|
|
41
|
+
RedfishConnectionParams,
|
|
42
|
+
TDataModel,
|
|
43
|
+
TCollectArg,
|
|
44
|
+
TAnalyzeArg,
|
|
45
|
+
],
|
|
46
|
+
Generic[TDataModel, TCollectArg, TAnalyzeArg],
|
|
47
|
+
):
|
|
48
|
+
"""Base class for out-of-band (OOB) plugins that run shell commands on the BMC.
|
|
49
|
+
|
|
50
|
+
Configure the BMC using ``RedfishConnectionManager`` in the connection config.
|
|
51
|
+
Commands are executed over SSH (port 22) using the same host/username/password.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
CONNECTION_TYPE = RedfishConnectionManager
|
|
@@ -64,7 +64,7 @@ from nodescraper.connection.redfish import (
|
|
|
64
64
|
from nodescraper.connection.redfish.redfish_params import RedfishConnectionParams
|
|
65
65
|
from nodescraper.constants import DEFAULT_LOGGER
|
|
66
66
|
from nodescraper.enums import ExecutionStatus, SystemInteractionLevel, SystemLocation
|
|
67
|
-
from nodescraper.models import
|
|
67
|
+
from nodescraper.models import SystemInfo
|
|
68
68
|
from nodescraper.pluginexecutor import PluginExecutor
|
|
69
69
|
from nodescraper.pluginregistry import PluginRegistry
|
|
70
70
|
|
|
@@ -74,17 +74,16 @@ def _parse_plugin_configs_csv(value: str) -> list[str]:
|
|
|
74
74
|
return [p.strip() for p in value.split(",") if p.strip()]
|
|
75
75
|
|
|
76
76
|
|
|
77
|
-
def
|
|
78
|
-
"""
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
)
|
|
87
|
-
return config_reg
|
|
77
|
+
def _default_config_registry(_plugin_reg: PluginRegistry) -> ConfigRegistry:
|
|
78
|
+
"""Build the config registry from bundled JSON and plugin-config entry points.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
_plugin_reg (PluginRegistry): Unused; retained for call-site compatibility.
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
ConfigRegistry: Registry containing bundled and entry-point plugin configs.
|
|
85
|
+
"""
|
|
86
|
+
return ConfigRegistry()
|
|
88
87
|
|
|
89
88
|
|
|
90
89
|
def _add_cli_root_globals(
|
|
@@ -203,7 +202,7 @@ def _add_cli_root_globals(
|
|
|
203
202
|
def build_global_argument_parser(*, add_help: bool = True) -> argparse.ArgumentParser:
|
|
204
203
|
"""Globals only (no subcommands), for host CLIs."""
|
|
205
204
|
plugin_reg = PluginRegistry()
|
|
206
|
-
config_reg =
|
|
205
|
+
config_reg = _default_config_registry(plugin_reg)
|
|
207
206
|
parser = argparse.ArgumentParser(
|
|
208
207
|
description="node scraper CLI (global options only)",
|
|
209
208
|
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
@@ -406,7 +405,7 @@ def get_cli_top_level_subcommands() -> tuple[str, ...]:
|
|
|
406
405
|
Tuple of ``subcmd`` subparser names; call ``cache_clear()`` if registries change in-process.
|
|
407
406
|
"""
|
|
408
407
|
plugin_reg = PluginRegistry()
|
|
409
|
-
config_reg =
|
|
408
|
+
config_reg = _default_config_registry(plugin_reg)
|
|
410
409
|
parser, _plugin_subparser_map = build_parser(plugin_reg, config_reg)
|
|
411
410
|
return _top_level_subcommand_names(parser)
|
|
412
411
|
|
|
@@ -474,7 +473,7 @@ def main(
|
|
|
474
473
|
arg_input = sys.argv[1:]
|
|
475
474
|
|
|
476
475
|
plugin_reg = PluginRegistry()
|
|
477
|
-
config_reg =
|
|
476
|
+
config_reg = _default_config_registry(plugin_reg)
|
|
478
477
|
parser, plugin_subparser_map = build_parser(plugin_reg, config_reg)
|
|
479
478
|
|
|
480
479
|
try:
|
|
@@ -211,8 +211,8 @@ def parse_describe(
|
|
|
211
211
|
if not parsed_args.name:
|
|
212
212
|
out: list[str] = []
|
|
213
213
|
if parsed_args.type == "config":
|
|
214
|
-
out.append("Available
|
|
215
|
-
for name in config_reg.configs:
|
|
214
|
+
out.append("Available configs:")
|
|
215
|
+
for name in sorted(config_reg.configs):
|
|
216
216
|
out.append(f" {name}")
|
|
217
217
|
elif parsed_args.type == "plugin":
|
|
218
218
|
out.append("Available plugins:")
|
|
@@ -109,6 +109,13 @@ class ConfigBuilder:
|
|
|
109
109
|
return_dict = {}
|
|
110
110
|
for key, val in value.items():
|
|
111
111
|
return_dict[key] = cls._process_value(val)
|
|
112
|
+
return return_dict
|
|
113
|
+
|
|
114
|
+
if isinstance(value, list):
|
|
115
|
+
return_list = []
|
|
116
|
+
for item in value:
|
|
117
|
+
return_list.append(cls._process_value(item))
|
|
118
|
+
return return_list
|
|
112
119
|
|
|
113
120
|
elif not isinstance(
|
|
114
121
|
value,
|