amd-node-scraper 1.1.4__tar.gz → 1.1.5__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/.github/CODEOWNERS +1 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/.github/workflows/code_quality_checks.yml +9 -2
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/.github/workflows/functional-test.yml +1 -1
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/.github/workflows/release-trusted-publisher.yml +1 -1
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/.github/workflows/unit-test.yml +1 -1
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/PKG-INFO +8 -3
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/README.md +7 -2
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/amd_node_scraper.egg-info/PKG-INFO +8 -3
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/amd_node_scraper.egg-info/SOURCES.txt +6 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/docs/PLUGIN_DOC.md +16 -11
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/base/inbandcollectortask.py +5 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/base/redfishcollectortask.py +27 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/cli/cli.py +3 -1
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/cli/host_cli_embed.py +1 -6
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/cli/invocation.py +4 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/connection/redfish/__init__.py +10 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/connection/redfish/redfish_connection.py +48 -0
- amd_node_scraper-1.1.5/nodescraper/connection/redfish/redfish_constants.py +38 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/connection/redfish/redfish_oem_diag.py +1 -3
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/constants.py +2 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/interfaces/connectionmanager.py +8 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/interfaces/datacollectortask.py +14 -1
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/interfaces/dataplugin.py +16 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/interfaces/plugin.py +8 -1
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/interfaces/task.py +37 -2
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/models/__init__.py +11 -1
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/models/datamodel.py +2 -2
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/models/event.py +27 -8
- amd_node_scraper-1.1.5/nodescraper/models/priority_override.py +126 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/pluginexecutor.py +16 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/device_enumeration/device_enumeration_collector.py +5 -1
- amd_node_scraper-1.1.5/nodescraper/plugins/inband/network/ethtool_vendor.py +662 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/network/network_analyzer.py +50 -14
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/network/network_collector.py +162 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/network/networkdata.py +5 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/nic/nic_collector.py +29 -13
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/pcie/pcie_analyzer.py +26 -2
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/rocm/rocm_collector.py +4 -2
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/rocm/rocmdata.py +26 -15
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/ooband/redfish_endpoint/collector_args.py +10 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_collector.py +29 -12
- amd_node_scraper-1.1.5/nodescraper/serialization.py +72 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/utils.py +6 -4
- amd_node_scraper-1.1.5/test/unit/connection/redfish/test_redfish_connection_paging.py +160 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/common/shared_utils.py +7 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/test_datacollector.py +11 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/test_dataplugin.py +141 -1
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/test_plugin_executor.py +6 -1
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_device_enumeration_collector.py +10 -2
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_network_analyzer.py +47 -1
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_network_collector.py +41 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_niccli_collector.py +38 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_redfish_endpoint_collector.py +110 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_rocm_collector.py +136 -54
- amd_node_scraper-1.1.5/test/unit/test_serialization.py +75 -0
- amd_node_scraper-1.1.4/.github/CODEOWNERS +0 -1
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/.github/pull_request_template.md +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/.github/scripts/plugin_convention_warnings.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/.github/workflows/update-plugin-docs.yml +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/.gitignore +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/.mypy.ini +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/.pre-commit-config.yaml +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/CONTRIBUTING.md +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/EXTENDING.md +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/LICENSE +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/SECURITY.md +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/amd_node_scraper.egg-info/dependency_links.txt +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/amd_node_scraper.egg-info/entry_points.txt +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/amd_node_scraper.egg-info/requires.txt +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/amd_node_scraper.egg-info/top_level.txt +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/dev-setup.sh +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/docs/generate_plugin_doc_bundle.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/docs/node-scraper-external/README.md +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/docs/node-scraper-external/ext_nodescraper_plugins/sample/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_data.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/docs/node-scraper-external/pyproject.toml +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/base/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/base/inbanddataplugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/base/oobanddataplugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/base/regexanalyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/cli/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/cli/compare_runs.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/cli/constants.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/cli/dynamicparserbuilder.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/cli/embed.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/cli/helper.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/cli/inputargtypes.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/configbuilder.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/configregistry.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/configs/node_status.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/connection/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/connection/inband/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/connection/inband/inband.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/connection/inband/inbandlocal.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/connection/inband/inbandmanager.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/connection/inband/inbandremote.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/connection/inband/sshparams.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/connection/redfish/redfish_manager.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/connection/redfish/redfish_params.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/connection/redfish/redfish_path.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/enums/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/enums/eventcategory.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/enums/eventpriority.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/enums/executionstatus.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/enums/osfamily.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/enums/systeminteraction.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/enums/systemlocation.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/enums/taskstate.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/generictypes.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/helpers/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/interfaces/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/interfaces/dataanalyzertask.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/interfaces/resultcollator.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/interfaces/taskresulthook.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/models/analyzerargs.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/models/collectorargs.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/models/connectionconfig.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/models/datapluginresult.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/models/pluginconfig.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/models/pluginresult.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/models/systeminfo.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/models/taskresult.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/models/timerangeargs.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/pluginregistry.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/amdsmi/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/amdsmi/amdsmi_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/amdsmi/amdsmi_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/amdsmi/amdsmi_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/amdsmi/amdsmidata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/amdsmi/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/amdsmi/collector_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/amdsmi/cper.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/bios/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/bios/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/bios/bios_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/bios/bios_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/bios/bios_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/bios/biosdata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/cmdline/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/cmdline/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/cmdline/cmdline_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/cmdline/cmdline_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/cmdline/cmdline_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/cmdline/cmdlineconfig.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/cmdline/cmdlinedata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/device_enumeration/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/device_enumeration/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/device_enumeration/device_enumeration_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/device_enumeration/device_enumeration_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/device_enumeration/deviceenumdata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dimm/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dimm/collector_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dimm/dimm_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dimm/dimm_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dimm/dimmdata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dkms/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dkms/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dkms/dkms_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dkms/dkms_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dkms/dkms_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dkms/dkmsdata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dmesg/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dmesg/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dmesg/collector_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dmesg/dmesg_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dmesg/dmesg_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dmesg/dmesg_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dmesg/dmesgdata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/dmesg/run_compare.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/fabrics/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/fabrics/fabrics_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/fabrics/fabrics_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/fabrics/fabricsdata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/journal/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/journal/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/journal/collector_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/journal/journal_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/journal/journal_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/journal/journal_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/journal/journaldata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/kernel/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/kernel/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/kernel/kernel_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/kernel/kernel_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/kernel/kernel_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/kernel/kerneldata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/kernel_module/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/kernel_module/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/kernel_module/kernel_module_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/kernel_module/kernel_module_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/kernel_module/kernel_module_data.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/kernel_module/kernel_module_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/memory/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/memory/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/memory/memory_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/memory/memory_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/memory/memory_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/memory/memorydata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/network/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/network/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/network/collector_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/network/network_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/nic/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/nic/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/nic/collector_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/nic/nic_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/nic/nic_data.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/nic/nic_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/nvme/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/nvme/nvme_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/nvme/nvme_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/nvme/nvmedata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/os/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/os/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/os/os_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/os/os_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/os/os_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/os/osdata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/package/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/package/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/package/package_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/package/package_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/package/package_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/package/packagedata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/pcie/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/pcie/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/pcie/pcie_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/pcie/pcie_data.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/pcie/pcie_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/process/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/process/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/process/collector_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/process/process_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/process/process_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/process/process_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/process/processdata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/rdma/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/rdma/rdma_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/rdma/rdma_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/rdma/rdma_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/rdma/rdmadata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/rocm/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/rocm/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/rocm/collector_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/rocm/rocm_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/rocm/rocm_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/storage/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/storage/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/storage/collector_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/storage/storage_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/storage/storage_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/storage/storage_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/storage/storagedata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/sys_settings/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/sys_settings/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/sys_settings/collector_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/sys_settings/sys_settings_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/sys_settings/sys_settings_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/sys_settings/sys_settings_data.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/sys_settings/sys_settings_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/sysctl/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/sysctl/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/sysctl/sysctl_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/sysctl/sysctl_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/sysctl/sysctl_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/sysctl/sysctldata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/syslog/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/syslog/syslog_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/syslog/syslog_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/syslog/syslogdata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/uptime/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/uptime/uptime_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/uptime/uptime_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/inband/uptime/uptimedata.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/ooband/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/ooband/redfish_endpoint/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/ooband/redfish_endpoint/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_data.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/ooband/redfish_oem_diag/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/ooband/redfish_oem_diag/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/ooband/redfish_oem_diag/collector_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_data.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/regex_search/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/regex_search/analyzer_args.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/regex_search/regex_search_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/regex_search/regex_search_data.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/plugins/regex_search/regex_search_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/resultcollators/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/resultcollators/tablesummary.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/taskresulthooks/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/taskresulthooks/filesystemloghook.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/typeutils.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/pyproject.toml +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/pytest.ini +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/setup.cfg +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/setup.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/__init__.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/conftest.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/bios_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/cmdline_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/dimm_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/dkms_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/dmesg_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/dmesg_plugin_config_custom_regex.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/dmesg_sample.log +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/dmesg_sample_with_collapsing.log +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/fabrics_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/journal_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/kernel_module_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/kernel_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/memory_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/network_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/nic_plugin_config_full_analyzer_args.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/niccli_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/nvme_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/os_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/package_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/pcie_plugin_advanced_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/pcie_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/process_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/rdma_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/redfish_connection_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/redfish_endpoint_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/redfish_endpoint_plugin_config_full_args.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/regex_search_multi_logs/app_error.log +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/regex_search_multi_logs/no_errors.log +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/regex_search_multi_logs/storage_warn.log +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/regex_search_sample.log +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/rocm_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/storage_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/sys_settings_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/sysctl_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/syslog_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/fixtures/uptime_plugin_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/test_cli_describe.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/test_cli_help.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/test_cli_no_console_log.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/test_fabrics_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/test_network_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/test_nic_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/test_pcie_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/test_plugin_configs.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/test_plugin_registry.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/test_rdma_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/test_redfish_endpoint_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/test_reference_config_workflow.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/test_run_plugins.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/functional/test_sys_settings_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/cli/test_build_global_argument_parser.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/cli/test_cli_embed_api.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/cli/test_cli_no_console_stdout.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/cli/test_host_cli_embed.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/cli/test_plugin_configs_cli.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/conftest.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/connection/redfish/test_redfish_oem_diag.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/fixtures/compare_runs_sysctl/run1/sysctl_plugin/sysctl_collector/result.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/fixtures/compare_runs_sysctl/run1/sysctl_plugin/sysctl_collector/sysctldatamodel.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/fixtures/compare_runs_sysctl/run2/sysctl_plugin/sysctl_collector/result.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/fixtures/compare_runs_sysctl/run2/sysctl_plugin/sysctl_collector/sysctldatamodel.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/fixtures/example.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/fixtures/example_config.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/fixtures/invalid.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/fixtures/log_dir/collector/biosdatamodel.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/fixtures/log_dir/collector/result.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/test_analyzerargs.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/test_cli.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/test_cli_helper.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/test_compare_runs.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/test_config_builder.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/test_config_registry.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/test_connection_manager_entrypoints.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/test_dataanalyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/test_file_artifact.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/test_regexanalyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/framework/test_type_utils.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/fixtures/package_commands.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/fixtures/rdma_link_example_data.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/fixtures/rdma_statistic_example_data.json +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_amdsmi_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_amdsmi_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_analyzer_args_build_from_model.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_bios_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_bios_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_cmdline_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_cmdline_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_device_enumeration_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_dimms_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_dkms_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_dkms_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_dmesg_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_dmesg_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_fabrics_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_journal_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_kernel_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_kernel_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_kernel_module_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_kernel_module_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_memory_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_memory_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_nvme_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_os_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_os_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_package_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_package_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_process_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_process_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_rdma_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_rdma_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_redfish_endpoint_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_redfish_endpoint_plugin.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_redfish_oem_diag_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_redfish_oem_diag_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_regex_search_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_rocm_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_storage_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_storage_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_sys_settings_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_sys_settings_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_sysctl_analyzer.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_sysctl_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_syslog_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/plugin/test_uptime_collector.py +0 -0
- {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/test/unit/test_version.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*@alexandraBara
|
|
@@ -14,12 +14,19 @@ jobs:
|
|
|
14
14
|
container: python:3.9
|
|
15
15
|
|
|
16
16
|
steps:
|
|
17
|
-
- uses: actions/checkout@
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
18
|
with:
|
|
19
19
|
fetch-depth: 0 # Fetch all history for pre-commit to work
|
|
20
|
+
|
|
21
|
+
# python:3.9 image has no git; pre-commit requires it.
|
|
22
|
+
- name: Install git
|
|
23
|
+
run: |
|
|
24
|
+
apt-get update
|
|
25
|
+
apt-get install -y --no-install-recommends git
|
|
26
|
+
|
|
20
27
|
- name: Configure git for container
|
|
21
28
|
run: |
|
|
22
|
-
git config --global --add safe.directory
|
|
29
|
+
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
|
23
30
|
git config --global user.email "ci@github.com"
|
|
24
31
|
git config --global user.name "CI Bot"
|
|
25
32
|
- name: setup environment and run pre-commit hooks
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: amd-node-scraper
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.5
|
|
4
4
|
Summary: A framework for automated error detection and data collection
|
|
5
5
|
Project-URL: homepage, https://github.com/amd/node-scraper
|
|
6
6
|
Project-URL: documentation, https://github.com/amd/node-scraper
|
|
@@ -33,7 +33,7 @@ system debug.
|
|
|
33
33
|
## Table of Contents
|
|
34
34
|
- [Installation](#installation)
|
|
35
35
|
- [Install from PyPI](#install-from-pypi)
|
|
36
|
-
- [Install
|
|
36
|
+
- [Install from Source](#install-from-source)
|
|
37
37
|
- [CLI Usage](#cli-usage)
|
|
38
38
|
- [Execution Methods](#execution-methods)
|
|
39
39
|
- [Example: Remote Execution](#example-remote-execution)
|
|
@@ -66,7 +66,7 @@ Use a virtual environment if you prefer. After installation, confirm the CLI is
|
|
|
66
66
|
node-scraper --help
|
|
67
67
|
```
|
|
68
68
|
|
|
69
|
-
### Install
|
|
69
|
+
### Install from Source
|
|
70
70
|
Node Scraper requires Python 3.9+ for installation. After cloning this repository,
|
|
71
71
|
call dev-setup.sh script with 'source'. This script creates an editable install of Node Scraper in
|
|
72
72
|
a python virtual environment and also configures the pre-commit hooks for the project.
|
|
@@ -519,7 +519,12 @@ The RedfishEndpointPlugin collects Redfish URIs (GET responses) and optionally r
|
|
|
519
519
|
}
|
|
520
520
|
```
|
|
521
521
|
|
|
522
|
+
**`collection_args`**
|
|
522
523
|
- **`uris`**: List of Redfish paths (e.g. `/redfish/v1/`, `/redfish/v1/Systems/1`) to GET and store.
|
|
524
|
+
- **`follow_next_link`**: Optional (default `false`). When `true`, the collector follows `Members@odata.nextLink` pagination for each URI and merges all pages into a single response.
|
|
525
|
+
- **`max_pages`**: Optional (default `200`). Safety cap on the number of pages to follow per URI when `follow_next_link` is enabled.
|
|
526
|
+
|
|
527
|
+
**`analysis_args`**
|
|
523
528
|
- **`checks`**: Optional. Map of URI to expected values or constraints for analysis. Supports exact match (e.g. `"PowerState": "On"`), `anyOf`, `min`/`max`, etc.
|
|
524
529
|
|
|
525
530
|
#### **'summary' sub command**
|
|
@@ -5,7 +5,7 @@ system debug.
|
|
|
5
5
|
## Table of Contents
|
|
6
6
|
- [Installation](#installation)
|
|
7
7
|
- [Install from PyPI](#install-from-pypi)
|
|
8
|
-
- [Install
|
|
8
|
+
- [Install from Source](#install-from-source)
|
|
9
9
|
- [CLI Usage](#cli-usage)
|
|
10
10
|
- [Execution Methods](#execution-methods)
|
|
11
11
|
- [Example: Remote Execution](#example-remote-execution)
|
|
@@ -38,7 +38,7 @@ Use a virtual environment if you prefer. After installation, confirm the CLI is
|
|
|
38
38
|
node-scraper --help
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
### Install
|
|
41
|
+
### Install from Source
|
|
42
42
|
Node Scraper requires Python 3.9+ for installation. After cloning this repository,
|
|
43
43
|
call dev-setup.sh script with 'source'. This script creates an editable install of Node Scraper in
|
|
44
44
|
a python virtual environment and also configures the pre-commit hooks for the project.
|
|
@@ -491,7 +491,12 @@ The RedfishEndpointPlugin collects Redfish URIs (GET responses) and optionally r
|
|
|
491
491
|
}
|
|
492
492
|
```
|
|
493
493
|
|
|
494
|
+
**`collection_args`**
|
|
494
495
|
- **`uris`**: List of Redfish paths (e.g. `/redfish/v1/`, `/redfish/v1/Systems/1`) to GET and store.
|
|
496
|
+
- **`follow_next_link`**: Optional (default `false`). When `true`, the collector follows `Members@odata.nextLink` pagination for each URI and merges all pages into a single response.
|
|
497
|
+
- **`max_pages`**: Optional (default `200`). Safety cap on the number of pages to follow per URI when `follow_next_link` is enabled.
|
|
498
|
+
|
|
499
|
+
**`analysis_args`**
|
|
495
500
|
- **`checks`**: Optional. Map of URI to expected values or constraints for analysis. Supports exact match (e.g. `"PowerState": "On"`), `anyOf`, `min`/`max`, etc.
|
|
496
501
|
|
|
497
502
|
#### **'summary' sub command**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: amd-node-scraper
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.5
|
|
4
4
|
Summary: A framework for automated error detection and data collection
|
|
5
5
|
Project-URL: homepage, https://github.com/amd/node-scraper
|
|
6
6
|
Project-URL: documentation, https://github.com/amd/node-scraper
|
|
@@ -33,7 +33,7 @@ system debug.
|
|
|
33
33
|
## Table of Contents
|
|
34
34
|
- [Installation](#installation)
|
|
35
35
|
- [Install from PyPI](#install-from-pypi)
|
|
36
|
-
- [Install
|
|
36
|
+
- [Install from Source](#install-from-source)
|
|
37
37
|
- [CLI Usage](#cli-usage)
|
|
38
38
|
- [Execution Methods](#execution-methods)
|
|
39
39
|
- [Example: Remote Execution](#example-remote-execution)
|
|
@@ -66,7 +66,7 @@ Use a virtual environment if you prefer. After installation, confirm the CLI is
|
|
|
66
66
|
node-scraper --help
|
|
67
67
|
```
|
|
68
68
|
|
|
69
|
-
### Install
|
|
69
|
+
### Install from Source
|
|
70
70
|
Node Scraper requires Python 3.9+ for installation. After cloning this repository,
|
|
71
71
|
call dev-setup.sh script with 'source'. This script creates an editable install of Node Scraper in
|
|
72
72
|
a python virtual environment and also configures the pre-commit hooks for the project.
|
|
@@ -519,7 +519,12 @@ The RedfishEndpointPlugin collects Redfish URIs (GET responses) and optionally r
|
|
|
519
519
|
}
|
|
520
520
|
```
|
|
521
521
|
|
|
522
|
+
**`collection_args`**
|
|
522
523
|
- **`uris`**: List of Redfish paths (e.g. `/redfish/v1/`, `/redfish/v1/Systems/1`) to GET and store.
|
|
524
|
+
- **`follow_next_link`**: Optional (default `false`). When `true`, the collector follows `Members@odata.nextLink` pagination for each URI and merges all pages into a single response.
|
|
525
|
+
- **`max_pages`**: Optional (default `200`). Safety cap on the number of pages to follow per URI when `follow_next_link` is enabled.
|
|
526
|
+
|
|
527
|
+
**`analysis_args`**
|
|
523
528
|
- **`checks`**: Optional. Map of URI to expected values or constraints for analysis. Supports exact match (e.g. `"PowerState": "On"`), `anyOf`, `min`/`max`, etc.
|
|
524
529
|
|
|
525
530
|
#### **'summary' sub command**
|
|
@@ -43,6 +43,7 @@ nodescraper/constants.py
|
|
|
43
43
|
nodescraper/generictypes.py
|
|
44
44
|
nodescraper/pluginexecutor.py
|
|
45
45
|
nodescraper/pluginregistry.py
|
|
46
|
+
nodescraper/serialization.py
|
|
46
47
|
nodescraper/typeutils.py
|
|
47
48
|
nodescraper/utils.py
|
|
48
49
|
nodescraper/base/__init__.py
|
|
@@ -71,6 +72,7 @@ nodescraper/connection/inband/inbandremote.py
|
|
|
71
72
|
nodescraper/connection/inband/sshparams.py
|
|
72
73
|
nodescraper/connection/redfish/__init__.py
|
|
73
74
|
nodescraper/connection/redfish/redfish_connection.py
|
|
75
|
+
nodescraper/connection/redfish/redfish_constants.py
|
|
74
76
|
nodescraper/connection/redfish/redfish_manager.py
|
|
75
77
|
nodescraper/connection/redfish/redfish_oem_diag.py
|
|
76
78
|
nodescraper/connection/redfish/redfish_params.py
|
|
@@ -102,6 +104,7 @@ nodescraper/models/datapluginresult.py
|
|
|
102
104
|
nodescraper/models/event.py
|
|
103
105
|
nodescraper/models/pluginconfig.py
|
|
104
106
|
nodescraper/models/pluginresult.py
|
|
107
|
+
nodescraper/models/priority_override.py
|
|
105
108
|
nodescraper/models/systeminfo.py
|
|
106
109
|
nodescraper/models/taskresult.py
|
|
107
110
|
nodescraper/models/timerangeargs.py
|
|
@@ -185,6 +188,7 @@ nodescraper/plugins/inband/memory/memorydata.py
|
|
|
185
188
|
nodescraper/plugins/inband/network/__init__.py
|
|
186
189
|
nodescraper/plugins/inband/network/analyzer_args.py
|
|
187
190
|
nodescraper/plugins/inband/network/collector_args.py
|
|
191
|
+
nodescraper/plugins/inband/network/ethtool_vendor.py
|
|
188
192
|
nodescraper/plugins/inband/network/network_analyzer.py
|
|
189
193
|
nodescraper/plugins/inband/network/network_collector.py
|
|
190
194
|
nodescraper/plugins/inband/network/network_plugin.py
|
|
@@ -343,12 +347,14 @@ test/functional/fixtures/regex_search_multi_logs/app_error.log
|
|
|
343
347
|
test/functional/fixtures/regex_search_multi_logs/no_errors.log
|
|
344
348
|
test/functional/fixtures/regex_search_multi_logs/storage_warn.log
|
|
345
349
|
test/unit/conftest.py
|
|
350
|
+
test/unit/test_serialization.py
|
|
346
351
|
test/unit/test_version.py
|
|
347
352
|
test/unit/cli/test_build_global_argument_parser.py
|
|
348
353
|
test/unit/cli/test_cli_embed_api.py
|
|
349
354
|
test/unit/cli/test_cli_no_console_stdout.py
|
|
350
355
|
test/unit/cli/test_host_cli_embed.py
|
|
351
356
|
test/unit/cli/test_plugin_configs_cli.py
|
|
357
|
+
test/unit/connection/redfish/test_redfish_connection_paging.py
|
|
352
358
|
test/unit/connection/redfish/test_redfish_oem_diag.py
|
|
353
359
|
test/unit/framework/test_analyzerargs.py
|
|
354
360
|
test/unit/framework/test_cli.py
|
|
@@ -7,7 +7,7 @@
|
|
|
7
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) |
|
|
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
|
-
| DeviceEnumerationPlugin | powershell -Command "(Get-WmiObject -Class Win32_Processor | Measure-Object).Count"<br>lspci -d {vendorid_ep}: | grep -
|
|
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
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.*(?:\n.*){0,5}`<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) |
|
|
@@ -16,15 +16,15 @@
|
|
|
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) |
|
|
17
17
|
| KernelModulePlugin | cat /proc/modules<br>modinfo amdgpu<br>wmic os get Version /Value | **Analyzer Args:**<br>- `kernel_modules`: dict[str, dict] — Expected kernel module name -> {version, etc.}. Analyzer checks collected modules match.<br>- `regex_filter`: list[str] — List of regex patterns to filter which collected modules are checked (default: amd). | - | [KernelModuleDataModel](#KernelModuleDataModel-Model) | [KernelModuleCollector](#Collector-Class-KernelModuleCollector) | [KernelModuleAnalyzer](#Data-Analyzer-Class-KernelModuleAnalyzer) |
|
|
18
18
|
| MemoryPlugin | free -b<br>lsmem<br>numactl -H<br>wmic OS get FreePhysicalMemory /Value; wmic ComputerSystem get TotalPhysicalMemory /Value | **Analyzer Args:**<br>- `ratio`: float — Required free-memory ratio (0-1). Analysis fails if free/total < ratio.<br>- `memory_threshold`: str — Minimum free memory required (e.g. '30Gi', '1T'). Used when ratio is not sufficient. | - | [MemoryDataModel](#MemoryDataModel-Model) | [MemoryCollector](#Collector-Class-MemoryCollector) | [MemoryAnalyzer](#Data-Analyzer-Class-MemoryAnalyzer) |
|
|
19
|
-
| NetworkPlugin | ip addr show<br>curl<br>ethtool -S {interface}<br>ethtool {interface}<br>lldpcli show neighbor<br>lldpctl<br>ip neighbor show<br>ping<br>ip route show<br>ip rule show<br>wget | **Built-in Regexes:**<br>- tx_pfc_frames is non-zero: `^tx_pfc_frames$`<br>- tx_pfc_ena_frames_pri* is non-zero: `^tx_pfc_ena_frames_pri\d+$`<br>- pfc_pri*_tx_transitions is non-zero: `^pfc_pri\d+_tx_transitions$`<br>**Analyzer Args:**<br>- `error_regex`: Union[list[nodescraper.base.regexanalyzer.ErrorRegex], list[dict], NoneType] — Custom error regex patterns; each item can be ErrorRegex or dict with category/pattern. | **Collection Args:**<br>- `url`: Optional[str] — Optional URL to probe for network connectivity (used with netprobe).<br>- `netprobe`: Optional[Literal['ping', 'wget', 'curl']] — Tool to use for network connectivity probe: ping, wget, or curl. | [NetworkDataModel](#NetworkDataModel-Model) | [NetworkCollector](#Collector-Class-NetworkCollector) | [NetworkAnalyzer](#Data-Analyzer-Class-NetworkAnalyzer) |
|
|
20
|
-
| NicPlugin | niccli --listdev<br>niccli --list<br>niccli --list_devices<br>niccli -dev {device_num} nvm -getoption pcie_relaxed_ordering<br>niccli --dev {device_num} nvm --getoption pcie_relaxed_ordering<br>niccli -dev {device_num} nvm -getoption performance_profile<br>niccli --dev {device_num} nvm --getoption performance_profile<br>niccli -dev {device_num} nvm -getoption support_rdma -scope 0<br>niccli -dev {device_num} getqos<br>niccli --dev {device_num} nvm --getoption support_rdma<br>niccli --dev {device_num} qos --ets --show<br>niccli --version<br>nicctl show card<br>nicctl --version<br>nicctl show card flash partition --json<br>nicctl show card interrupts --json<br>nicctl show card logs --non-persistent<br>nicctl show card logs --boot-fault<br>nicctl show card logs --persistent<br>nicctl show card profile --json<br>nicctl show card time --json<br>nicctl show card statistics packet-buffer summary --json<br>nicctl show lif statistics --json<br>nicctl show lif internal queue-to-ud-pinning<br>nicctl show pipeline internal anomalies<br>nicctl show pipeline internal rsq-ring<br>nicctl show pipeline internal statistics memory<br>nicctl show port fsm<br>nicctl show port transceiver --json<br>nicctl show port statistics --json<br>nicctl show port internal mac<br>nicctl show qos headroom --json<br>nicctl show rdma queue --json<br>nicctl show rdma queue-pair --detail --json<br>nicctl show version firmware<br>nicctl show dcqcn<br>nicctl show environment<br>nicctl show lif<br>nicctl show pcie ats<br>nicctl show port<br>nicctl show qos<br>nicctl show rdma statistics<br>nicctl show version host-software<br>nicctl show dcqcn --card {card_id} --json<br>nicctl show card hardware-config --card {card_id} | **Analyzer Args:**<br>- `expected_values`: Optional[Dict[str, Dict[str, Any]]] — Per-command expected checks keyed by canonical key (see command_to_canonical_key).<br>- `performance_profile_expected`: str — Expected Broadcom performance_profile value (case-insensitive). Default RoCE.<br>- `support_rdma_disabled_values`: List[str] — Values that indicate RDMA is not supported (case-insensitive).<br>- `pcie_relaxed_ordering_expected`: str — Expected Broadcom pcie_relaxed_ordering value (e.g. 'Relaxed ordering = enabled'); checked case-insensitively. Defaul...<br>- `expected_qos_prio_map`: Optional[Dict[Any, Any]] — Expected priority-to-TC map (e.g. {0: 0, 1: 1}; keys may be int or str in config). Checked per device when set.<br>- `expected_qos_pfc_enabled`: Optional[int] — Expected PFC enabled value (0/1 or bitmask). Checked per device when set.<br>- `expected_qos_tsa_map`: Optional[Dict[Any, Any]] — Expected TSA map for ETS (e.g. {0: 'ets', 1: 'strict'}; keys may be int or str in config). Checked per device when set.<br>- `expected_qos_tc_bandwidth`: Optional[List[int]] — Expected TC bandwidth percentages. Checked per device when set.<br>- `require_qos_consistent_across_adapters`: bool — When True and no expected_qos_* are set, require all adapters to have the same prio_map, pfc_enabled, and tsa_map.<br>- `nicctl_log_error_regex`: Optional[List[Dict[str, Any]]] — Optional list of error patterns for nicctl show card logs. | **Collection Args:**<br>- `commands`: Optional[List[str]] — Optional list of niccli/nicctl commands to run. When None, default command set is used.<br>- `use_sudo_niccli`: bool — If True, run niccli commands with sudo when required.<br>- `use_sudo_nicctl`: bool — If True, run nicctl commands with sudo when required. | [NicDataModel](#NicDataModel-Model) | [NicCollector](#Collector-Class-NicCollector) | [NicAnalyzer](#Data-Analyzer-Class-NicAnalyzer) |
|
|
19
|
+
| NetworkPlugin | ip addr show<br>curl<br>ethtool -S {interface}<br>ethtool {interface}<br>lldpcli show neighbor<br>lldpctl<br>ip neighbor show<br>ping<br>rdma link -j<br>ip route show<br>ip rule show<br>wget | **Built-in Regexes:**<br>- tx_pfc_frames is non-zero: `^tx_pfc_frames$`<br>- tx_pfc_ena_frames_pri* is non-zero: `^tx_pfc_ena_frames_pri\d+$`<br>- pfc_pri*_tx_transitions is non-zero: `^pfc_pri\d+_tx_transitions$`<br>**Analyzer Args:**<br>- `error_regex`: Union[list[nodescraper.base.regexanalyzer.ErrorRegex], list[dict], NoneType] — Custom error regex patterns; each item can be ErrorRegex or dict with category/pattern. | **Collection Args:**<br>- `url`: Optional[str] — Optional URL to probe for network connectivity (used with netprobe).<br>- `netprobe`: Optional[Literal['ping', 'wget', 'curl']] — Tool to use for network connectivity probe: ping, wget, or curl. | [NetworkDataModel](#NetworkDataModel-Model) | [NetworkCollector](#Collector-Class-NetworkCollector) | [NetworkAnalyzer](#Data-Analyzer-Class-NetworkAnalyzer) |
|
|
20
|
+
| NicPlugin | niccli --listdev<br>niccli --list<br>niccli --list_devices<br>niccli -dev {device_num} nvm -getoption pcie_relaxed_ordering<br>niccli --dev {device_num} nvm --getoption pcie_relaxed_ordering<br>niccli -dev {device_num} nvm -getoption performance_profile<br>niccli --dev {device_num} nvm --getoption performance_profile<br>niccli -dev {device_num} nvm -getoption support_rdma -scope 0<br>niccli -dev {device_num} getqos<br>niccli --dev {device_num} nvm --getoption support_rdma --scope 0<br>niccli --dev {device_num} qos --ets --show<br>niccli --version<br>nicctl show card<br>nicctl --version<br>nicctl show card flash partition --json<br>nicctl show card interrupts --json<br>nicctl show card logs --non-persistent<br>nicctl show card logs --boot-fault<br>nicctl show card logs --persistent<br>nicctl show card profile --json<br>nicctl show card time --json<br>nicctl show card statistics packet-buffer summary --json<br>nicctl show lif statistics --json<br>nicctl show lif internal queue-to-ud-pinning<br>nicctl show pipeline internal anomalies<br>nicctl show pipeline internal rsq-ring<br>nicctl show pipeline internal statistics memory<br>nicctl show port fsm<br>nicctl show port transceiver --json<br>nicctl show port statistics --json<br>nicctl show port internal mac<br>nicctl show qos headroom --json<br>nicctl show rdma queue --json<br>nicctl show rdma queue-pair --detail --json<br>nicctl show version firmware<br>nicctl show dcqcn<br>nicctl show environment<br>nicctl show lif<br>nicctl show pcie ats<br>nicctl show port<br>nicctl show qos<br>nicctl show rdma statistics<br>nicctl show version host-software<br>nicctl show dcqcn --card {card_id} --json<br>nicctl show card hardware-config --card {card_id} | **Analyzer Args:**<br>- `expected_values`: Optional[Dict[str, Dict[str, Any]]] — Per-command expected checks keyed by canonical key (see command_to_canonical_key).<br>- `performance_profile_expected`: str — Expected Broadcom performance_profile value (case-insensitive). Default RoCE.<br>- `support_rdma_disabled_values`: List[str] — Values that indicate RDMA is not supported (case-insensitive).<br>- `pcie_relaxed_ordering_expected`: str — Expected Broadcom pcie_relaxed_ordering value (e.g. 'Relaxed ordering = enabled'); checked case-insensitively. Defaul...<br>- `expected_qos_prio_map`: Optional[Dict[Any, Any]] — Expected priority-to-TC map (e.g. {0: 0, 1: 1}; keys may be int or str in config). Checked per device when set.<br>- `expected_qos_pfc_enabled`: Optional[int] — Expected PFC enabled value (0/1 or bitmask). Checked per device when set.<br>- `expected_qos_tsa_map`: Optional[Dict[Any, Any]] — Expected TSA map for ETS (e.g. {0: 'ets', 1: 'strict'}; keys may be int or str in config). Checked per device when set.<br>- `expected_qos_tc_bandwidth`: Optional[List[int]] — Expected TC bandwidth percentages. Checked per device when set.<br>- `require_qos_consistent_across_adapters`: bool — When True and no expected_qos_* are set, require all adapters to have the same prio_map, pfc_enabled, and tsa_map.<br>- `nicctl_log_error_regex`: Optional[List[Dict[str, Any]]] — Optional list of error patterns for nicctl show card logs. | **Collection Args:**<br>- `commands`: Optional[List[str]] — Optional list of niccli/nicctl commands to run. When None, default command set is used.<br>- `use_sudo_niccli`: bool — If True, run niccli commands with sudo when required.<br>- `use_sudo_nicctl`: bool — If True, run nicctl commands with sudo when required. | [NicDataModel](#NicDataModel-Model) | [NicCollector](#Collector-Class-NicCollector) | [NicAnalyzer](#Data-Analyzer-Class-NicAnalyzer) |
|
|
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
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) |
|
|
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
|
-
| 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 . -r {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) |
|
|
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) |
|
|
@@ -142,7 +142,7 @@ Collect CPU and GPU count
|
|
|
142
142
|
|
|
143
143
|
### Class Variables
|
|
144
144
|
|
|
145
|
-
- **CMD_GPU_COUNT_LINUX**: `lspci -d {vendorid_ep}: | grep -
|
|
145
|
+
- **CMD_GPU_COUNT_LINUX**: `lspci -d {vendorid_ep}: | grep -iE 'VGA|Display|3D|Processing accelerators|Co-processor|Accelerator' | grep -vi 'Virtual Function' | wc -l`
|
|
146
146
|
- **CMD_VF_COUNT_LINUX**: `lspci -d {vendorid_ep}: | grep -i 'Virtual Function' | wc -l`
|
|
147
147
|
- **CMD_LSCPU_LINUX**: `lscpu`
|
|
148
148
|
- **CMD_LSHW_LINUX**: `lshw`
|
|
@@ -157,7 +157,7 @@ DeviceEnumerationDataModel
|
|
|
157
157
|
### Commands
|
|
158
158
|
|
|
159
159
|
- powershell -Command "(Get-WmiObject -Class Win32_Processor | Measure-Object).Count"
|
|
160
|
-
- lspci -d {vendorid_ep}: | grep -
|
|
160
|
+
- lspci -d {vendorid_ep}: | grep -iE 'VGA|Display|3D|Processing accelerators|Co-processor|Accelerator' | grep -vi 'Virtual Function' | wc -l
|
|
161
161
|
- powershell -Command "(wmic path win32_VideoController get name | findstr AMD | Measure-Object).Count"
|
|
162
162
|
- lscpu
|
|
163
163
|
- lshw
|
|
@@ -405,6 +405,7 @@ Collect network configuration details using ip command
|
|
|
405
405
|
- **CMD_NEIGHBOR**: `ip neighbor show`
|
|
406
406
|
- **CMD_ETHTOOL_TEMPLATE**: `ethtool {interface}`
|
|
407
407
|
- **CMD_ETHTOOL_S_TEMPLATE**: `ethtool -S {interface}`
|
|
408
|
+
- **CMD_RDMA_LINK_JSON**: `rdma link -j`
|
|
408
409
|
- **CMD_PING**: `ping`
|
|
409
410
|
- **CMD_WGET**: `wget`
|
|
410
411
|
- **CMD_CURL**: `curl`
|
|
@@ -425,6 +426,7 @@ NetworkDataModel
|
|
|
425
426
|
- lldpctl
|
|
426
427
|
- ip neighbor show
|
|
427
428
|
- ping
|
|
429
|
+
- rdma link -j
|
|
428
430
|
- ip route show
|
|
429
431
|
- ip rule show
|
|
430
432
|
- wget
|
|
@@ -459,12 +461,12 @@ Collect raw output from niccli (Broadcom) and nicctl (Pensando) commands.
|
|
|
459
461
|
niccli -dev {device_num} nvm -getoption pcie_relaxed_ordering,
|
|
460
462
|
niccli -dev {device_num} getqos
|
|
461
463
|
]`
|
|
462
|
-
- **CMD_NICCLI_SUPPORT_RDMA_TEMPLATE_NEW**: `niccli --dev {device_num} nvm --getoption support_rdma`
|
|
464
|
+
- **CMD_NICCLI_SUPPORT_RDMA_TEMPLATE_NEW**: `niccli --dev {device_num} nvm --getoption support_rdma --scope 0`
|
|
463
465
|
- **CMD_NICCLI_PERFORMANCE_PROFILE_TEMPLATE_NEW**: `niccli --dev {device_num} nvm --getoption performance_profile`
|
|
464
466
|
- **CMD_NICCLI_PCIE_RELAXED_ORDERING_TEMPLATE_NEW**: `niccli --dev {device_num} nvm --getoption pcie_relaxed_ordering`
|
|
465
467
|
- **CMD_NICCLI_QOS_TEMPLATE_NEW**: `niccli --dev {device_num} qos --ets --show`
|
|
466
468
|
- **CMD_NICCLI_PER_DEVICE_NEW**: `[
|
|
467
|
-
niccli --dev {device_num} nvm --getoption support_rdma,
|
|
469
|
+
niccli --dev {device_num} nvm --getoption support_rdma --scope 0,
|
|
468
470
|
niccli --dev {device_num} nvm --getoption performance_profile,
|
|
469
471
|
niccli --dev {device_num} nvm --getoption pcie_relaxed_ordering,
|
|
470
472
|
niccli --dev {device_num} qos --ets --show
|
|
@@ -531,7 +533,7 @@ NicDataModel
|
|
|
531
533
|
- niccli --dev {device_num} nvm --getoption performance_profile
|
|
532
534
|
- niccli -dev {device_num} nvm -getoption support_rdma -scope 0
|
|
533
535
|
- niccli -dev {device_num} getqos
|
|
534
|
-
- niccli --dev {device_num} nvm --getoption support_rdma
|
|
536
|
+
- niccli --dev {device_num} nvm --getoption support_rdma --scope 0
|
|
535
537
|
- niccli --dev {device_num} qos --ets --show
|
|
536
538
|
- niccli --version
|
|
537
539
|
- nicctl show card
|
|
@@ -792,7 +794,7 @@ Collect ROCm version data
|
|
|
792
794
|
### Class Variables
|
|
793
795
|
|
|
794
796
|
- **SUPPORTED_OS_FAMILY**: `{<OSFamily.LINUX: 3>}`
|
|
795
|
-
- **CMD_ROCM_SUB_VERSIONS_TMPL**: `grep . -r {rocm_path}/.info/*`
|
|
797
|
+
- **CMD_ROCM_SUB_VERSIONS_TMPL**: `grep . -H -r -i {rocm_path}/.info/*`
|
|
796
798
|
- **CMD_ROCMINFO_TMPL**: `{rocm_path}/bin/rocminfo`
|
|
797
799
|
- **CMD_ROCM_LATEST_TMPL**: `ls -v -d {rocm_path}-[3-7]* | tail -1`
|
|
798
800
|
- **CMD_ROCM_DIRS_TMPL**: `ls -v -d {rocm_path}*`
|
|
@@ -816,7 +818,7 @@ RocmDataModel
|
|
|
816
818
|
- ls -v -d {rocm_path}*
|
|
817
819
|
- ls -v -d {rocm_path}-[3-7]* | tail -1
|
|
818
820
|
- ldconfig -p | grep -i -E 'rocm'
|
|
819
|
-
- grep . -r {rocm_path}/.info/*
|
|
821
|
+
- grep . -H -r -i {rocm_path}/.info/*
|
|
820
822
|
|
|
821
823
|
## Collector Class StorageCollector
|
|
822
824
|
|
|
@@ -1134,6 +1136,8 @@ Complete network configuration data
|
|
|
1134
1136
|
- **rules**: `List[nodescraper.plugins.inband.network.networkdata.RoutingRule]`
|
|
1135
1137
|
- **neighbors**: `List[nodescraper.plugins.inband.network.networkdata.Neighbor]`
|
|
1136
1138
|
- **ethtool_info**: `Dict[str, nodescraper.plugins.inband.network.networkdata.EthtoolInfo]`
|
|
1139
|
+
- **rdma_ethtool_netdevs**: `List[str]`
|
|
1140
|
+
- **rdma_ethtool_statistics**: `List[nodescraper.plugins.inband.network.ethtool_vendor.EthtoolStatistics]`
|
|
1137
1141
|
- **accessible**: `Optional[bool]`
|
|
1138
1142
|
|
|
1139
1143
|
## NicDataModel Model
|
|
@@ -1281,6 +1285,7 @@ Data model for RDMA (Remote Direct Memory Access) statistics and link informatio
|
|
|
1281
1285
|
|
|
1282
1286
|
### Model annotations and fields
|
|
1283
1287
|
|
|
1288
|
+
- **ROCM_VERSION_FILENAME**: `ClassVar[str]`
|
|
1284
1289
|
- **rocm_version**: `str`
|
|
1285
1290
|
- **rocm_sub_versions**: `dict[str, str]`
|
|
1286
1291
|
- **rocminfo**: `List[str]`
|
|
@@ -28,6 +28,7 @@ from typing import Generic, Optional, Union
|
|
|
28
28
|
|
|
29
29
|
from nodescraper.connection.inband import InBandConnection
|
|
30
30
|
from nodescraper.connection.inband.inband import BaseFileArtifact, CommandArtifact
|
|
31
|
+
from nodescraper.constants import DEFAULT_EVENT_REPORTER
|
|
31
32
|
from nodescraper.enums import EventPriority, OSFamily, SystemInteractionLevel
|
|
32
33
|
from nodescraper.generictypes import TCollectArg, TDataModel
|
|
33
34
|
from nodescraper.interfaces import DataCollector, TaskResultHook
|
|
@@ -52,6 +53,8 @@ class InBandDataCollector(
|
|
|
52
53
|
max_event_priority_level: Union[EventPriority, str] = EventPriority.CRITICAL,
|
|
53
54
|
parent: Optional[str] = None,
|
|
54
55
|
task_result_hooks: Optional[list[TaskResultHook]] = None,
|
|
56
|
+
event_reporter: str = DEFAULT_EVENT_REPORTER,
|
|
57
|
+
session_id: Optional[str] = None,
|
|
55
58
|
**kwargs,
|
|
56
59
|
):
|
|
57
60
|
super().__init__(
|
|
@@ -62,6 +65,8 @@ class InBandDataCollector(
|
|
|
62
65
|
connection=connection,
|
|
63
66
|
parent=parent,
|
|
64
67
|
task_result_hooks=task_result_hooks,
|
|
68
|
+
event_reporter=event_reporter,
|
|
69
|
+
session_id=session_id,
|
|
65
70
|
)
|
|
66
71
|
if self.system_info.os_family not in self.SUPPORTED_OS_FAMILY:
|
|
67
72
|
raise SystemCompatibilityError(
|
|
@@ -27,6 +27,7 @@ import logging
|
|
|
27
27
|
from typing import Generic, Optional, Union
|
|
28
28
|
|
|
29
29
|
from nodescraper.connection.redfish import RedfishConnection, RedfishGetResult
|
|
30
|
+
from nodescraper.constants import DEFAULT_EVENT_REPORTER
|
|
30
31
|
from nodescraper.enums import EventPriority
|
|
31
32
|
from nodescraper.generictypes import TCollectArg, TDataModel
|
|
32
33
|
from nodescraper.interfaces import DataCollector, TaskResultHook
|
|
@@ -47,6 +48,8 @@ class RedfishDataCollector(
|
|
|
47
48
|
max_event_priority_level: Union[EventPriority, str] = EventPriority.CRITICAL,
|
|
48
49
|
parent: Optional[str] = None,
|
|
49
50
|
task_result_hooks: Optional[list[TaskResultHook]] = None,
|
|
51
|
+
event_reporter: str = DEFAULT_EVENT_REPORTER,
|
|
52
|
+
session_id: Optional[str] = None,
|
|
50
53
|
**kwargs,
|
|
51
54
|
):
|
|
52
55
|
super().__init__(
|
|
@@ -56,6 +59,8 @@ class RedfishDataCollector(
|
|
|
56
59
|
max_event_priority_level=max_event_priority_level,
|
|
57
60
|
parent=parent,
|
|
58
61
|
task_result_hooks=task_result_hooks,
|
|
62
|
+
event_reporter=event_reporter,
|
|
63
|
+
session_id=session_id,
|
|
59
64
|
**kwargs,
|
|
60
65
|
)
|
|
61
66
|
|
|
@@ -77,3 +82,25 @@ class RedfishDataCollector(
|
|
|
77
82
|
if log_artifact:
|
|
78
83
|
self.result.artifacts.append(res)
|
|
79
84
|
return res
|
|
85
|
+
|
|
86
|
+
def _run_redfish_get_paged(
|
|
87
|
+
self,
|
|
88
|
+
path: str,
|
|
89
|
+
max_pages: int = 200,
|
|
90
|
+
log_artifact: bool = True,
|
|
91
|
+
) -> RedfishGetResult:
|
|
92
|
+
"""
|
|
93
|
+
Run a Redfish GET and follow Members@odata.nextLink pagination, merging all pages into a single response.
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
path (str): Redfish URI path.
|
|
97
|
+
max_pages (int, optional): safety cap on the number of pages to follow. Defaults to 200.
|
|
98
|
+
log_artifact (bool, optional): whether we should log the merged result. Defaults to True.
|
|
99
|
+
|
|
100
|
+
Returns:
|
|
101
|
+
RedfishGetResult: path, success, merged data (or error), status_code.
|
|
102
|
+
"""
|
|
103
|
+
res = self.connection.run_get_paged(path, max_pages=max_pages)
|
|
104
|
+
if log_artifact:
|
|
105
|
+
self.result.artifacts.append(res)
|
|
106
|
+
return res
|
|
@@ -31,6 +31,7 @@ import logging
|
|
|
31
31
|
import os
|
|
32
32
|
import platform
|
|
33
33
|
import sys
|
|
34
|
+
import uuid
|
|
34
35
|
from typing import Optional
|
|
35
36
|
|
|
36
37
|
import nodescraper
|
|
@@ -200,7 +201,7 @@ def _add_cli_root_globals(
|
|
|
200
201
|
|
|
201
202
|
|
|
202
203
|
def build_global_argument_parser(*, add_help: bool = True) -> argparse.ArgumentParser:
|
|
203
|
-
"""Globals only (no subcommands), for host CLIs
|
|
204
|
+
"""Globals only (no subcommands), for host CLIs."""
|
|
204
205
|
plugin_reg = PluginRegistry()
|
|
205
206
|
config_reg = _config_registry_with_all_plugins(plugin_reg)
|
|
206
207
|
parser = argparse.ArgumentParser(
|
|
@@ -642,6 +643,7 @@ def main(
|
|
|
642
643
|
timestamp=timestamp,
|
|
643
644
|
sname=sname,
|
|
644
645
|
host_cli_args=host_cli_args,
|
|
646
|
+
session_id=str(uuid.uuid4()),
|
|
645
647
|
)
|
|
646
648
|
|
|
647
649
|
log_system_info(log_path, system_info, logger)
|
|
@@ -39,12 +39,7 @@ def apply_host_cli_args_to_parsed_args(
|
|
|
39
39
|
parsed_args: argparse.Namespace,
|
|
40
40
|
host_ns: Optional[argparse.Namespace],
|
|
41
41
|
) -> None:
|
|
42
|
-
"""Copy host profile fields from an embedding host onto parsed top-level args.
|
|
43
|
-
|
|
44
|
-
Used when ``main(..., host_cli_args=...)`` is invoked (e.g. from the
|
|
45
|
-
error-scraper wrapper) so ``--connection-config`` profile data loaded by the
|
|
46
|
-
host is visible to :func:`get_system_info` and the rest of the CLI.
|
|
47
|
-
"""
|
|
42
|
+
"""Copy host profile fields from an embedding host onto parsed top-level args."""
|
|
48
43
|
if host_ns is None:
|
|
49
44
|
return
|
|
50
45
|
for attr in (
|
|
@@ -71,6 +71,7 @@ class PluginRunInvocation:
|
|
|
71
71
|
timestamp: str
|
|
72
72
|
sname: str
|
|
73
73
|
host_cli_args: Optional[argparse.Namespace] = None
|
|
74
|
+
session_id: Optional[str] = None
|
|
74
75
|
|
|
75
76
|
|
|
76
77
|
def run_plugin_queue_with_invocation(
|
|
@@ -84,6 +85,7 @@ def run_plugin_queue_with_invocation(
|
|
|
84
85
|
timestamp: str,
|
|
85
86
|
sname: str,
|
|
86
87
|
host_cli_args: Optional[argparse.Namespace] = None,
|
|
88
|
+
session_id: Optional[str] = None,
|
|
87
89
|
) -> list[PluginResult]:
|
|
88
90
|
"""Constructs the plugin executor, binds invocation context, and runs the plugin queue."""
|
|
89
91
|
inv = PluginRunInvocation(
|
|
@@ -96,6 +98,7 @@ def run_plugin_queue_with_invocation(
|
|
|
96
98
|
timestamp=timestamp,
|
|
97
99
|
sname=sname,
|
|
98
100
|
host_cli_args=host_cli_args,
|
|
101
|
+
session_id=session_id,
|
|
99
102
|
)
|
|
100
103
|
plugin_executor = PluginExecutor(
|
|
101
104
|
logger=logger,
|
|
@@ -104,6 +107,7 @@ def run_plugin_queue_with_invocation(
|
|
|
104
107
|
system_info=system_info,
|
|
105
108
|
log_path=log_path,
|
|
106
109
|
plugin_registry=plugin_reg,
|
|
110
|
+
session_id=session_id,
|
|
107
111
|
)
|
|
108
112
|
with plugin_run_invocation_scope(inv):
|
|
109
113
|
return plugin_executor.run_queue()
|
{amd_node_scraper-1.1.4 → amd_node_scraper-1.1.5}/nodescraper/connection/redfish/__init__.py
RENAMED
|
@@ -28,6 +28,12 @@ from .redfish_connection import (
|
|
|
28
28
|
RedfishConnectionError,
|
|
29
29
|
RedfishGetResult,
|
|
30
30
|
)
|
|
31
|
+
from .redfish_constants import (
|
|
32
|
+
RF_MEMBERS,
|
|
33
|
+
RF_MEMBERS_COUNT,
|
|
34
|
+
RF_MEMBERS_NEXT_LINK,
|
|
35
|
+
RF_ODATA_ID,
|
|
36
|
+
)
|
|
31
37
|
from .redfish_manager import RedfishConnectionManager
|
|
32
38
|
from .redfish_oem_diag import (
|
|
33
39
|
collect_oem_diagnostic_data,
|
|
@@ -45,4 +51,8 @@ __all__ = [
|
|
|
45
51
|
"RedfishPath",
|
|
46
52
|
"collect_oem_diagnostic_data",
|
|
47
53
|
"get_oem_diagnostic_allowable_values",
|
|
54
|
+
"RF_MEMBERS",
|
|
55
|
+
"RF_MEMBERS_COUNT",
|
|
56
|
+
"RF_MEMBERS_NEXT_LINK",
|
|
57
|
+
"RF_ODATA_ID",
|
|
48
58
|
]
|
|
@@ -34,6 +34,7 @@ from pydantic import BaseModel
|
|
|
34
34
|
from requests import Response
|
|
35
35
|
from requests.auth import HTTPBasicAuth
|
|
36
36
|
|
|
37
|
+
from .redfish_constants import RF_MEMBERS, RF_MEMBERS_COUNT, RF_MEMBERS_NEXT_LINK
|
|
37
38
|
from .redfish_path import RedfishPath
|
|
38
39
|
|
|
39
40
|
DEFAULT_REDFISH_API_ROOT = "redfish/v1"
|
|
@@ -183,6 +184,53 @@ class RedfishConnection:
|
|
|
183
184
|
status_code=None,
|
|
184
185
|
)
|
|
185
186
|
|
|
187
|
+
def run_get_paged(
|
|
188
|
+
self,
|
|
189
|
+
path: Union[str, RedfishPath],
|
|
190
|
+
max_pages: int = 200,
|
|
191
|
+
) -> RedfishGetResult:
|
|
192
|
+
"""Run a Redfish GET and transparently follow Members@odata.nextLink pagination.
|
|
193
|
+
|
|
194
|
+
Each subsequent page's Members list is appended to the first page's Members list
|
|
195
|
+
so the caller receives a single merged response body. The Members@odata.nextLink key
|
|
196
|
+
and Members@odata.count are updated to reflect the merged result. If there is no
|
|
197
|
+
Members@odata.nextLink in the first response this behaves identically to run_get.
|
|
198
|
+
max_pages is a safety cap on the number of pages to fetch (default 200).
|
|
199
|
+
"""
|
|
200
|
+
first = self.run_get(path)
|
|
201
|
+
if not first.success or first.data is None:
|
|
202
|
+
return first
|
|
203
|
+
|
|
204
|
+
# Short-circuit when there is nothing to page through.
|
|
205
|
+
if RF_MEMBERS_NEXT_LINK not in first.data:
|
|
206
|
+
return first
|
|
207
|
+
|
|
208
|
+
merged_members: list = list(first.data.get(RF_MEMBERS) or [])
|
|
209
|
+
merged_data: dict = dict(first.data)
|
|
210
|
+
pages_fetched = 1
|
|
211
|
+
next_link: Optional[str] = first.data.get(RF_MEMBERS_NEXT_LINK)
|
|
212
|
+
last_status_code = first.status_code
|
|
213
|
+
|
|
214
|
+
while next_link and pages_fetched < max_pages:
|
|
215
|
+
page_result = self.run_get(next_link)
|
|
216
|
+
last_status_code = page_result.status_code
|
|
217
|
+
if not page_result.success or page_result.data is None:
|
|
218
|
+
break
|
|
219
|
+
merged_members.extend(page_result.data.get(RF_MEMBERS) or [])
|
|
220
|
+
next_link = page_result.data.get(RF_MEMBERS_NEXT_LINK)
|
|
221
|
+
pages_fetched += 1
|
|
222
|
+
|
|
223
|
+
merged_data[RF_MEMBERS] = merged_members
|
|
224
|
+
merged_data[RF_MEMBERS_COUNT] = len(merged_members)
|
|
225
|
+
merged_data.pop(RF_MEMBERS_NEXT_LINK, None)
|
|
226
|
+
|
|
227
|
+
return RedfishGetResult(
|
|
228
|
+
path=first.path,
|
|
229
|
+
success=True,
|
|
230
|
+
data=merged_data,
|
|
231
|
+
status_code=last_status_code,
|
|
232
|
+
)
|
|
233
|
+
|
|
186
234
|
def copy(self) -> "RedfishConnection":
|
|
187
235
|
"""Return a new connection with the same config and its own session (for concurrent use)."""
|
|
188
236
|
return RedfishConnection(
|