mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
* Agent: Packages fixes Don't try to save invalid packages, probably due to script failure on device. Add pacman support * Apply fixes from StyleCI * Add version * cast to number * Update includes/polling/unix-agent/packages.inc.php Co-authored-by: Jellyfrog <Jellyfrog@users.noreply.github.com> --------- Co-authored-by: StyleCI Bot <bot@styleci.io> Co-authored-by: Jellyfrog <Jellyfrog@users.noreply.github.com>
99 lines
2.7 KiB
PHP
99 lines
2.7 KiB
PHP
<?php
|
|
|
|
use App\Models\Package;
|
|
|
|
$pkgs_id = [];
|
|
$pkgs_db_id = [];
|
|
|
|
$managers = [
|
|
'rpm' => [
|
|
'name' => 'RPM',
|
|
'process' => function ($line) {
|
|
[$name, $version, $build, $arch, $size] = explode(' ', $line);
|
|
|
|
return new Package([
|
|
'manager' => 'rpm',
|
|
'name' => $name,
|
|
'arch' => $arch,
|
|
'version' => $version,
|
|
'build' => $build,
|
|
'size' => $size,
|
|
'status' => 1,
|
|
]);
|
|
},
|
|
],
|
|
'dpkg' => [
|
|
'name' => 'DEB',
|
|
'process' => function ($line) {
|
|
[$name, $version, $arch, $size] = explode(' ', $line);
|
|
|
|
return new Package([
|
|
'manager' => 'deb',
|
|
'name' => $name,
|
|
'arch' => $arch,
|
|
'version' => $version,
|
|
'build' => '',
|
|
'size' => cast_number($size) * 1024,
|
|
'status' => 1,
|
|
]);
|
|
},
|
|
],
|
|
'pacman' => [
|
|
'name' => 'Pacman',
|
|
'process' => function ($line) {
|
|
[$name, $version, $arch, $size] = explode(' ', $line);
|
|
|
|
return new Package([
|
|
'manager' => 'pacman',
|
|
'name' => $name,
|
|
'arch' => $arch,
|
|
'version' => $version,
|
|
'build' => '',
|
|
'size' => (int) \LibreNMS\Util\Number::toBytes($size),
|
|
'status' => 1,
|
|
]);
|
|
},
|
|
],
|
|
];
|
|
|
|
foreach ($managers as $key => $manager) {
|
|
if (! empty($agent_data[$key])) {
|
|
echo "\n{$manager['name']} Packages: \n";
|
|
|
|
/** @var \Illuminate\Support\Collection $packages */
|
|
$packages = DeviceCache::getPrimary()->packages->map(function (Package $package) {
|
|
$package->status = 0;
|
|
|
|
return $package;
|
|
})->keyBy->getCompositeKey();
|
|
|
|
foreach (explode("\n", trim($agent_data[$key])) as $line) {
|
|
/** @var \App\Models\Package $package */
|
|
$package = $manager['process']($line);
|
|
|
|
if (! $package->isValid()) {
|
|
continue; // failed to parse
|
|
}
|
|
|
|
$package_key = $package->getCompositeKey();
|
|
if ($existing_package = $packages->get($package_key)) {
|
|
$existing_package->fill($package->attributesToArray());
|
|
} else {
|
|
$packages->put($package_key, $package);
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
// update the database
|
|
if (isset($packages)) {
|
|
DeviceCache::getPrimary()->packages()->saveMany($packages->where('status', 1));
|
|
$packages->where('status', 0)->each->delete();
|
|
}
|
|
|
|
echo "\n";
|
|
|
|
unset($packages, $existing_package, $package, $managers);
|