Skip to content

A PHP library to parse and analyze XML output from the lshw command, providing an easy way to extract and query detailed hardware information on Linux systems.

License

Notifications You must be signed in to change notification settings

ScarlettSamantha/lshw-parser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LSHW XML Parser

This PHP library parses XML output from the lshw command to extract hardware information on Linux systems.

Features

  • Parse lshw XML output.
  • Retrieve system memory, CPU, storage device, and network interface information.
  • Dynamic filtering of nodes based on properties.
  • Customizable filtering logic with callable functions.
  • Skiphubs can be enabled to skip hub/bridge objects.
  • >85% code coverage.

Installation

Install the library using Composer:

sh composer require scarlett/lshw-parser

Usage

Parsing the XML Output

use Scarlett\LshwParser\Parser;

$xmlContent = file_get_contents('path/to/lshw-output.xml');
$parser = new Parser($xmlContent);

// Get system memory information
$memory = $parser->getSystemMemory();
echo $memory->getProperty('description')->getFirstValue();

// Get CPU information
$cpuInfo = $parser->getCpuInfo();
echo $cpuInfo->getProperty('vendor')->getFirstValue();

Filtering Nodes by Properties

use Scarlett\LshwParser\Parser;

$xmlContent = file_get_contents('path/to/lshw-output.xml');
$parser = new Parser($xmlContent);

// Filter nodes with AND logic
$results = $parser->parseByProperties(['class' => 'processor', 'vendor' => 'Intel Corp.'], 'and');
foreach ($results as $result) {
    echo $result->getProperty('description')->getFirstValue();
}

// Filter nodes with OR logic
$results = $parser->parseByProperties(['class' => 'processor', 'vendor' => 'AMD'], 'or');
foreach ($results as $result) {
    echo $result->getProperty('description')->getFirstValue();
}

Custom Filtering with Callables

use Scarlett\LshwParser\Parser;

$xmlContent = file_get_contents('path/to/lshw-output.xml');
$parser = new Parser($xmlContent);

$results = $parser->searchNodesByFilter(function($properties) {
    return isset($properties['vendor']) && $properties['vendor'] === 'Intel Corp.';
});

foreach ($results as $result) {
    echo $result->getProperty('description')->getFirstValue();
}

Skiphubs

The skipHubs feature(default:OFF) in the Parser class allows for the skipping of nodes identified as hubs during parsing. The following regex patterns are used to match node descriptions:

  • /usb\s*(hub|2(\.0)?\s*hub|3(\.0)?\s*hub)/i: Matches "usb hub", "usb2 hub", "usb2.0 hub", "usb3 hub", "usb3.0 hub".
  • /(pci(e)?\s*bridge)/i: Matches "pci bridge", "pcie bridge".
  • /(isa\s*bridge)/i: Matches "isa bridge".
  • /hub/i: Matches "hub".

Setting the skipHubs flag to true enables this functionality, ensuring that such nodes are excluded from the results. To enable public function __construct(string $xmlContent, bool $skipHubs = true) or when instanced setSkipHubs(bool) -> void.

Running Tests

The project uses PHPUnit for unit testing. To run the tests, use the following command:

./vendor/bin/phpunit .

Contributing

Contributions are welcome! Please open an issue or submit a pull request for any changes.

License

This project is licensed under the MIT License.

About

A PHP library to parse and analyze XML output from the lshw command, providing an easy way to extract and query detailed hardware information on Linux systems.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages