Poll device job (#16306)

* Split out single device polling to a Laravel Job
Probably totally broken :)

* Add dispatch option to device:poll

* Fix up submodules

* Add missing logger parameter

* Apply fixes from StyleCI

* Update module format in test helper

* Apply fixes from StyleCI

* Use Log facade to match other code

---------

Co-authored-by: Tony Murray <[email protected]>
This commit is contained in:
Tony Murray
2024-08-25 19:56:50 -05:00
committed by GitHub
co-authored by Tony Murray
parent 2face4bc4a
commit db5fdf705d
5 changed files with 354 additions and 340 deletions
+15 -12
View File
@@ -26,6 +26,7 @@
namespace LibreNMS\Util;
use App\Actions\Device\ValidateDeviceAndCreate;
use App\Jobs\PollDevice;
use App\Models\Device;
use DeviceCache;
use Illuminate\Database\Eloquent\Model;
@@ -35,7 +36,6 @@ use LibreNMS\Config;
use LibreNMS\Data\Source\SnmpResponse;
use LibreNMS\Exceptions\FileNotFoundException;
use LibreNMS\Exceptions\InvalidModuleException;
use LibreNMS\Poller;
class ModuleTestHelper
{
@@ -178,8 +178,7 @@ class ModuleTestHelper
Debug::set();
Debug::setVerbose();
discover_device($device, $this->parseArgs('discovery'));
$poller = app(Poller::class, ['device_spec' => $device_id, 'module_override' => $this->modules]);
$poller->poll();
(new PollDevice($device_id, $this->modules))->handle();
Debug::set($save_debug);
Debug::setVerbose($save_vdebug);
$collection_output = ob_get_contents();
@@ -312,7 +311,7 @@ class ModuleTestHelper
* Probably needs to be more robust
*
* @param array $modules
* @return array
* @return array<string, bool|string[]>
*
* @throws InvalidModuleException
*/
@@ -320,17 +319,22 @@ class ModuleTestHelper
{
// generate a full list of modules
$full_list = [];
foreach ($modules as $module) {
foreach ($modules as $index => $module) {
$module = is_string($index) ? $index : $module;
// only allow valid modules
if (! (Config::has("poller_modules.$module") || Config::has("discovery_modules.$module"))) {
if (! Module::exists($module)) {
throw new InvalidModuleException("Invalid module name: $module");
}
$full_list = array_merge($full_list, Module::fromName($module)->dependencies());
$full_list[] = $module;
foreach (Module::fromName($module)->dependencies() as $dependency) {
$full_list[$dependency] = true;
}
$full_list[$module] = true;
}
return array_unique($full_list);
return $full_list;
}
private function parseArgs($type)
@@ -339,7 +343,7 @@ class ModuleTestHelper
return false;
}
return parse_modules($type, ['m' => implode(',', $this->modules)]);
return parse_modules($type, ['m' => implode(',', array_keys($this->modules))]);
}
private function qPrint($var)
@@ -627,8 +631,7 @@ class ModuleTestHelper
ob_start();
\Log::setDefaultDriver('console');
$poller = app(Poller::class, ['device_spec' => $device_id, 'module_override' => $this->modules]);
$poller->poll();
(new PollDevice($device_id, $this->modules))->handle();
$this->poller_output = ob_get_contents();
if ($this->quiet) {