Skip to content

Commit 586677b

Browse files
Merge pull request #103 from amd/development
dev -> main
2 parents f30ee49 + 1406a40 commit 586677b

21 files changed

Lines changed: 4696 additions & 68 deletions

.github/workflows/update-plugin-docs.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,16 @@ jobs:
4040
--package nodescraper.plugins.inband \
4141
--output docs/PLUGIN_DOC.md
4242
43+
- name: Clean pre-commit cache
44+
run: |
45+
rm -rf /tmp/github-actions-home/.cache/pre-commit
46+
source venv/bin/activate
47+
pre-commit clean || true
48+
4349
- name: Format documentation with pre-commit
4450
run: |
4551
source venv/bin/activate
52+
pre-commit install-hooks || true
4653
pre-commit run --files docs/PLUGIN_DOC.md || true
4754
4855
- name: Create Pull Request

docs/PLUGIN_DOC.md

Lines changed: 97 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@
1111
| 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 | - | [DimmDataModel](#DimmDataModel-Model) | [DimmCollector](#Collector-Class-DimmCollector) | - |
1212
| DkmsPlugin | dkms status<br>dkms --version | **Analyzer Args:**<br>- `dkms_status`: Union[str, list]<br>- `dkms_version`: Union[str, list]<br>- `regex_match`: bool | [DkmsDataModel](#DkmsDataModel-Model) | [DkmsCollector](#Collector-Class-DkmsCollector) | [DkmsAnalyzer](#Data-Analyzer-Class-DkmsAnalyzer) |
1313
| 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: `(?:pcieport )(.*AER: aer_status.*)\|(aer_status.*)`<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>- GPU Throttled: `amdgpu \w{4}:\w{2}:\w{2}.\w: amdgpu: WARN: GPU ...`<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 ...` | [DmesgData](#DmesgData-Model) | [DmesgCollector](#Collector-Class-DmesgCollector) | [DmesgAnalyzer](#Data-Analyzer-Class-DmesgAnalyzer) |
14+
| FabricsPlugin | ibstat<br>ibv_devinfo<br>ls -l /sys/class/infiniband/*/device/net<br>mst start<br>mst status -v<br>ofed_info -s<br>rdma dev<br>rdma link | - | [FabricsDataModel](#FabricsDataModel-Model) | [FabricsCollector](#Collector-Class-FabricsCollector) | - |
1415
| JournalPlugin | journalctl --no-pager --system --output=short-iso | - | [JournalData](#JournalData-Model) | [JournalCollector](#Collector-Class-JournalCollector) | - |
1516
| KernelPlugin | sh -c 'uname -a'<br>wmic os get Version /Value | **Analyzer Args:**<br>- `exp_kernel`: Union[str, list]<br>- `regex_match`: bool | [KernelDataModel](#KernelDataModel-Model) | [KernelCollector](#Collector-Class-KernelCollector) | [KernelAnalyzer](#Data-Analyzer-Class-KernelAnalyzer) |
1617
| KernelModulePlugin | cat /proc/modules<br>modinfo amdgpu<br>wmic os get Version /Value | **Analyzer Args:**<br>- `kernel_modules`: dict[str, dict]<br>- `regex_filter`: list[str] | [KernelModuleDataModel](#KernelModuleDataModel-Model) | [KernelModuleCollector](#Collector-Class-KernelModuleCollector) | [KernelModuleAnalyzer](#Data-Analyzer-Class-KernelModuleAnalyzer) |
1718
| MemoryPlugin | free -b<br>lsmem<br>numactl -H<br>wmic OS get FreePhysicalMemory /Value; wmic ComputerSystem get TotalPhysicalMemory /Value | **Analyzer Args:**<br>- `ratio`: float<br>- `memory_threshold`: str | [MemoryDataModel](#MemoryDataModel-Model) | [MemoryCollector](#Collector-Class-MemoryCollector) | [MemoryAnalyzer](#Data-Analyzer-Class-MemoryAnalyzer) |
18-
| NetworkPlugin | ip addr show<br>sudo ethtool {interface}<br>ip neighbor show<br>ip route show<br>ip rule show | - | [NetworkDataModel](#NetworkDataModel-Model) | [NetworkCollector](#Collector-Class-NetworkCollector) | - |
19+
| NetworkPlugin | ip addr show<br>ethtool {interface}<br>lldpcli show neighbor<br>lldpctl<br>ip neighbor show<br>niccli --dev {device_num} qos --ets --show<br>niccli --list_devices<br>nicctl show card<br>nicctl show dcqcn<br>nicctl show environment<br>nicctl show pcie ats<br>nicctl show port<br>nicctl show qos<br>nicctl show rdma statistics<br>nicctl show version firmware<br>nicctl show version host-software<br>ip route show<br>ip rule show | - | [NetworkDataModel](#NetworkDataModel-Model) | [NetworkCollector](#Collector-Class-NetworkCollector) | - |
1920
| 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} | - | [NvmeDataModel](#NvmeDataModel-Model) | [NvmeCollector](#Collector-Class-NvmeCollector) | - |
2021
| 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]<br>- `exact_match`: bool | [OsDataModel](#OsDataModel-Model) | [OsCollector](#Collector-Class-OsCollector) | [OsAnalyzer](#Data-Analyzer-Class-OsAnalyzer) |
2122
| 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]]<br>- `regex_match`: bool<br>- `rocm_regex`: Optional[str]<br>- `enable_rocm_regex`: bool | [PackageDataModel](#PackageDataModel-Model) | [PackageCollector](#Collector-Class-PackageCollector) | [PackageAnalyzer](#Data-Analyzer-Class-PackageAnalyzer) |
@@ -224,6 +225,42 @@ DmesgData
224225
- dmesg --time-format iso -x
225226
- ls -1 /var/log/dmesg* 2>/dev/null | grep -E '^/var/log/dmesg(\.[0-9]+(\.gz)?)?$' || true
226227

228+
## Collector Class FabricsCollector
229+
230+
### Description
231+
232+
Collect InfiniBand/RDMA fabrics configuration details
233+
234+
**Bases**: ['InBandDataCollector']
235+
236+
**Link to code**: [fabrics_collector.py](https://github.com/amd/node-scraper/blob/HEAD/nodescraper/plugins/inband/fabrics/fabrics_collector.py)
237+
238+
### Class Variables
239+
240+
- **CMD_IBSTAT**: `ibstat`
241+
- **CMD_IBV_DEVINFO**: `ibv_devinfo`
242+
- **CMD_IB_DEV_NETDEVS**: `ls -l /sys/class/infiniband/*/device/net`
243+
- **CMD_OFED_INFO**: `ofed_info -s`
244+
- **CMD_MST_START**: `mst start`
245+
- **CMD_MST_STATUS**: `mst status -v`
246+
- **CMD_RDMA_DEV**: `rdma dev`
247+
- **CMD_RDMA_LINK**: `rdma link`
248+
249+
### Provides Data
250+
251+
FabricsDataModel
252+
253+
### Commands
254+
255+
- ibstat
256+
- ibv_devinfo
257+
- ls -l /sys/class/infiniband/*/device/net
258+
- mst start
259+
- mst status -v
260+
- ofed_info -s
261+
- rdma dev
262+
- rdma link
263+
227264
## Collector Class JournalCollector
228265

229266
### Description
@@ -341,7 +378,20 @@ Collect network configuration details using ip command
341378
- **CMD_ROUTE**: `ip route show`
342379
- **CMD_RULE**: `ip rule show`
343380
- **CMD_NEIGHBOR**: `ip neighbor show`
344-
- **CMD_ETHTOOL_TEMPLATE**: `sudo ethtool {interface}`
381+
- **CMD_ETHTOOL_TEMPLATE**: `ethtool {interface}`
382+
- **CMD_LLDPCLI_NEIGHBOR**: `lldpcli show neighbor`
383+
- **CMD_LLDPCTL**: `lldpctl`
384+
- **CMD_NICCLI_LISTDEV**: `niccli --list_devices`
385+
- **CMD_NICCLI_GETQOS_TEMPLATE**: `niccli --dev {device_num} qos --ets --show`
386+
- **CMD_NICCTL_CARD**: `nicctl show card`
387+
- **CMD_NICCTL_DCQCN**: `nicctl show dcqcn`
388+
- **CMD_NICCTL_ENVIRONMENT**: `nicctl show environment`
389+
- **CMD_NICCTL_PCIE_ATS**: `nicctl show pcie ats`
390+
- **CMD_NICCTL_PORT**: `nicctl show port`
391+
- **CMD_NICCTL_QOS**: `nicctl show qos`
392+
- **CMD_NICCTL_RDMA_STATISTICS**: `nicctl show rdma statistics`
393+
- **CMD_NICCTL_VERSION_HOST_SOFTWARE**: `nicctl show version host-software`
394+
- **CMD_NICCTL_VERSION_FIRMWARE**: `nicctl show version firmware`
345395

346396
### Provides Data
347397

@@ -350,8 +400,21 @@ NetworkDataModel
350400
### Commands
351401

352402
- ip addr show
353-
- sudo ethtool {interface}
403+
- ethtool {interface}
404+
- lldpcli show neighbor
405+
- lldpctl
354406
- ip neighbor show
407+
- niccli --dev {device_num} qos --ets --show
408+
- niccli --list_devices
409+
- nicctl show card
410+
- nicctl show dcqcn
411+
- nicctl show environment
412+
- nicctl show pcie ats
413+
- nicctl show port
414+
- nicctl show qos
415+
- nicctl show rdma statistics
416+
- nicctl show version firmware
417+
- nicctl show version host-software
355418
- ip route show
356419
- ip rule show
357420

@@ -769,6 +832,26 @@ Data model for in band dmesg log
769832
### Model annotations and fields
770833

771834
- **dmesg_content**: `str`
835+
- **skip_log_file**: `bool`
836+
837+
## FabricsDataModel Model
838+
839+
### Description
840+
841+
Complete InfiniBand/RDMA fabrics configuration data
842+
843+
**Link to code**: [fabricsdata.py](https://github.com/amd/node-scraper/blob/HEAD/nodescraper/plugins/inband/fabrics/fabricsdata.py)
844+
845+
**Bases**: ['DataModel']
846+
847+
### Model annotations and fields
848+
849+
- **ibstat_devices**: `List[nodescraper.plugins.inband.fabrics.fabricsdata.IbstatDevice]`
850+
- **ibv_devices**: `List[nodescraper.plugins.inband.fabrics.fabricsdata.IbvDeviceInfo]`
851+
- **ibdev_netdev_mappings**: `List[nodescraper.plugins.inband.fabrics.fabricsdata.IbdevNetdevMapping]`
852+
- **ofed_info**: `Optional[nodescraper.plugins.inband.fabrics.fabricsdata.OfedInfo]`
853+
- **mst_status**: `Optional[nodescraper.plugins.inband.fabrics.fabricsdata.MstStatus]`
854+
- **rdma_info**: `Optional[nodescraper.plugins.inband.fabrics.fabricsdata.RdmaInfo]`
772855

773856
## JournalData Model
774857

@@ -840,6 +923,17 @@ Complete network configuration data
840923
- **rules**: `List[nodescraper.plugins.inband.network.networkdata.RoutingRule]`
841924
- **neighbors**: `List[nodescraper.plugins.inband.network.networkdata.Neighbor]`
842925
- **ethtool_info**: `Dict[str, nodescraper.plugins.inband.network.networkdata.EthtoolInfo]`
926+
- **broadcom_nic_devices**: `List[nodescraper.plugins.inband.network.networkdata.BroadcomNicDevice]`
927+
- **broadcom_nic_qos**: `Dict[int, nodescraper.plugins.inband.network.networkdata.BroadcomNicQos]`
928+
- **pensando_nic_cards**: `List[nodescraper.plugins.inband.network.networkdata.PensandoNicCard]`
929+
- **pensando_nic_dcqcn**: `List[nodescraper.plugins.inband.network.networkdata.PensandoNicDcqcn]`
930+
- **pensando_nic_environment**: `List[nodescraper.plugins.inband.network.networkdata.PensandoNicEnvironment]`
931+
- **pensando_nic_pcie_ats**: `List[nodescraper.plugins.inband.network.networkdata.PensandoNicPcieAts]`
932+
- **pensando_nic_ports**: `List[nodescraper.plugins.inband.network.networkdata.PensandoNicPort]`
933+
- **pensando_nic_qos**: `List[nodescraper.plugins.inband.network.networkdata.PensandoNicQos]`
934+
- **pensando_nic_rdma_statistics**: `List[nodescraper.plugins.inband.network.networkdata.PensandoNicRdmaStatistics]`
935+
- **pensando_nic_version_host_software**: `Optional[nodescraper.plugins.inband.network.networkdata.PensandoNicVersionHostSoftware]`
936+
- **pensando_nic_version_firmware**: `List[nodescraper.plugins.inband.network.networkdata.PensandoNicVersionFirmware]`
843937

844938
## NvmeDataModel Model
845939

Lines changed: 105 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
# node-scraper external plugins (example)
22

33
This directory lives at **`/docs/node-scraper-external`** in the `node-scraper` repo and contains
4-
an example external plugin package you can install in editable mode.
4+
an example external plugin package that demonstrates how to create plugins for node-scraper.
5+
6+
## Overview
7+
8+
External plugins are discovered by node-scraper via **Python entry points**. This allows plugins
9+
to be distributed as separate packages and automatically discovered when installed.
510

611
## Installation
712

@@ -12,44 +17,126 @@ cd ~/node-scraper
1217
source venv/bin/activate
1318
pip install -e ./docs/node-scraper-external
1419
```
15-
You should see `ext-nodescraper-plugins` installed in editable mode.
1620

21+
This installs `ext-nodescraper-plugins` in editable mode and registers the plugin entry points.
1722

18-
## Verify the external package is importable
23+
## Verify Plugin Discovery
24+
25+
Check that node-scraper discovered the external plugin:
1926

2027
```bash
21-
python - <<'PY'
22-
import ext_nodescraper_plugins
23-
print("ext_nodescraper_plugins loaded from:", ext_nodescraper_plugins.__file__)
24-
PY
28+
node-scraper run-plugins -h
2529
```
2630

27-
## Run external plugins
31+
You should see `SamplePlugin` listed alongside built-in plugins.
2832

29-
Confirm the CLI sees your external plugin(s):
33+
## Run the Example Plugin
3034

3135
```bash
32-
node-scraper run-plugins -h
3336
node-scraper run-plugins SamplePlugin
3437
```
3538

36-
## Add your own plugins
39+
## How It Works
40+
41+
### Entry Points
3742

38-
Add new modules under the **`ext_nodescraper_plugins/`** package. Example layout:
43+
Plugins are registered in `pyproject.toml` using entry points:
44+
45+
```toml
46+
[project.entry-points."nodescraper.plugins"]
47+
SamplePlugin = "ext_nodescraper_plugins.sample.sample_plugin:SamplePlugin"
48+
```
49+
50+
When you install the package, Python registers these entry points in the package metadata.
51+
Node-scraper automatically discovers and loads plugins from the `nodescraper.plugins` entry point group.
52+
53+
### Plugin Structure
3954

4055
```
4156
/docs/node-scraper-external
42-
├─ pyproject.toml
43-
└─ ext_nodescraper_plugins/
44-
└─ sample/
57+
├─ pyproject.toml # Package metadata + entry points
58+
└─ ext_nodescraper_plugins/ # Plugin package
59+
└─ sample/ # Plugin module
4560
├─ __init__.py
46-
└─ sample_plugin.py
61+
├─ sample_plugin.py # Plugin class
62+
├─ sample_collector.py # Data collector
63+
├─ sample_analyzer.py # Data analyzer
64+
└─ sample_data.py # Data model
65+
```
66+
67+
## Creating Your Own External Plugins
68+
69+
### Step 1: Create Package Structure
70+
71+
```bash
72+
mkdir my-plugin-package
73+
cd my-plugin-package
74+
mkdir -p ext_nodescraper_plugins/my_plugin
4775
```
4876

77+
### Step 2: Create pyproject.toml
78+
79+
```toml
80+
[project]
81+
name = "my-plugin-package"
82+
version = "0.1.0"
83+
requires-python = ">=3.10"
84+
dependencies = ["amd-node-scraper"]
85+
86+
[project.entry-points."nodescraper.plugins"]
87+
MyPlugin = "ext_nodescraper_plugins.my_plugin:MyPlugin"
88+
89+
[build-system]
90+
requires = ["setuptools", "wheel"]
91+
build-backend = "setuptools.build_meta"
4992
```
5093

51-
Re-install (editable mode picks up code changes automatically, but if you add new files you may
52-
need to re-run):
94+
### Step 3: Implement Your Plugin
95+
96+
Create `ext_nodescraper_plugins/my_plugin/__init__.py`:
97+
98+
```python
99+
from nodescraper.base import InBandDataPlugin, InBandDataCollector
100+
from pydantic import BaseModel
101+
102+
class MyDataModel(BaseModel):
103+
"""Your data model"""
104+
data: dict
105+
106+
class MyCollector(InBandDataCollector[MyDataModel, None]):
107+
"""Your data collector"""
108+
DATA_MODEL = MyDataModel
109+
110+
def collect_data(self, args=None):
111+
# Collection logic
112+
return MyDataModel(data={})
113+
114+
class MyPlugin(InBandDataPlugin[MyDataModel, None, None]):
115+
"""Your plugin"""
116+
DATA_MODEL = MyDataModel
117+
COLLECTOR = MyCollector
118+
```
119+
120+
### Step 4: Install and Test
121+
53122
```bash
54123
pip install -e .
124+
node-scraper run-plugins -h # Should show MyPlugin
125+
node-scraper run-plugins MyPlugin
55126
```
127+
128+
## Adding More Plugins to This Package
129+
130+
To add additional plugins to this example package:
131+
132+
1. **Create a new module** under `ext_nodescraper_plugins/`
133+
2. **Register the entry point** in `pyproject.toml`:
134+
```toml
135+
[project.entry-points."nodescraper.plugins"]
136+
SamplePlugin = "ext_nodescraper_plugins.sample.sample_plugin:SamplePlugin"
137+
AnotherPlugin = "ext_nodescraper_plugins.another:AnotherPlugin"
138+
```
139+
3. **Reinstall** to register the new entry point:
140+
```bash
141+
pip install -e . --force-reinstall --no-deps
142+
```

docs/node-scraper-external/pyproject.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ version = "0.1.0"
44
requires-python = ">=3.10"
55
dependencies = ["node-scraper"]
66

7+
[project.entry-points."nodescraper.plugins"]
8+
SamplePlugin = "ext_nodescraper_plugins.sample.sample_plugin:SamplePlugin"
9+
710
[build-system]
811
requires = ["setuptools", "wheel"]
912
build-backend = "setuptools.build_meta"

nodescraper/cli/cli.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,6 @@
5454
from nodescraper.pluginexecutor import PluginExecutor
5555
from nodescraper.pluginregistry import PluginRegistry
5656

57-
try:
58-
import ext_nodescraper_plugins as ext_pkg
59-
60-
extra_pkgs = [ext_pkg]
61-
except ImportError:
62-
extra_pkgs = []
63-
6457

6558
def build_parser(
6659
plugin_reg: PluginRegistry,
@@ -376,7 +369,7 @@ def main(arg_input: Optional[list[str]] = None):
376369
if arg_input is None:
377370
arg_input = sys.argv[1:]
378371

379-
plugin_reg = PluginRegistry(plugin_pkg=extra_pkgs)
372+
plugin_reg = PluginRegistry()
380373

381374
config_reg = ConfigRegistry()
382375
parser, plugin_subparser_map = build_parser(plugin_reg, config_reg)

nodescraper/interfaces/dataplugin.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,9 @@ def analyze(
252252
)
253253
return self.analysis_result
254254

255+
if data:
256+
self.data = data
257+
255258
if self.data is None:
256259
self.analysis_result = TaskResult(
257260
task=self.ANALYZER.__name__,
@@ -261,9 +264,6 @@ def analyze(
261264
)
262265
return self.analysis_result
263266

264-
if data:
265-
self.data = data
266-
267267
analyzer_task = self.ANALYZER(
268268
self.system_info,
269269
logger=self.logger,

0 commit comments

Comments
 (0)