mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
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 <murrant@users.noreply.github.com>
This commit is contained in:
@@ -34,7 +34,11 @@ class Module
|
||||
{
|
||||
public static function exists(string $module_name): bool
|
||||
{
|
||||
return class_exists(StringHelpers::toClass($module_name, '\\LibreNMS\\Modules\\'));
|
||||
if (class_exists(StringHelpers::toClass($module_name, '\\LibreNMS\\Modules\\'))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return Config::has('discovery_modules.' . $module_name) || Config::has('poller_modules.' . $module_name);
|
||||
}
|
||||
|
||||
public static function fromName(string $module_name): \LibreNMS\Interfaces\Module
|
||||
@@ -57,10 +61,27 @@ class Module
|
||||
public static function pollingStatus(string $module_name, Device $device, ?bool $manual = null): ModuleStatus
|
||||
{
|
||||
return new ModuleStatus(
|
||||
Config::get("poller_modules.$module_name"),
|
||||
Config::get("poller_modules.$module_name", false),
|
||||
Config::get("os.{$device->os}.poller_modules.$module_name"),
|
||||
$device->getAttrib("poll_$module_name"),
|
||||
$manual,
|
||||
);
|
||||
}
|
||||
|
||||
public static function parseUserOverrides(array $overrides): array
|
||||
{
|
||||
$modules = [];
|
||||
|
||||
foreach ($overrides as $index => $module) {
|
||||
// parse submodules (only supported by some modules)
|
||||
if (str_contains($module, '/')) {
|
||||
[$module, $submodule] = explode('/', $module, 2);
|
||||
$modules[$module][] = $submodule;
|
||||
} elseif (self::exists($module)) {
|
||||
$modules[$module] = true;
|
||||
}
|
||||
}
|
||||
|
||||
return $modules;
|
||||
}
|
||||
}
|
||||
|
@@ -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) {
|
||||
|
Reference in New Issue
Block a user