Availability module fixes (#15369)

* Refactor poller to allow modules to run even if the device is down
Include core in config (but not webui) to avoid silly shenanigans
Inject datastore into polling

* Needed to split datastore interface

* Cleanup some data_udpate() references

* Apply fixes from StyleCI

* Fix legacy poller :D

* Output to the correct stream

* Fix lint issues

* Apply fixes from StyleCI

* Fix discovery not including core and submodule handling

* Use whereRaw

---------

Co-authored-by: StyleCI Bot <bot@styleci.io>
This commit is contained in:
Tony Murray
2023-10-04 10:32:59 -05:00
committed by GitHub
parent 4211b1c46f
commit c1258320f8
78 changed files with 845 additions and 433 deletions

View File

@@ -29,8 +29,10 @@ use App\Models\Device;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use LibreNMS\Component;
use LibreNMS\Interfaces\Data\DataStorageInterface;
use LibreNMS\Interfaces\Module;
use LibreNMS\OS;
use LibreNMS\Polling\ModuleStatus;
use LibreNMS\Util\Debug;
use Symfony\Component\Yaml\Yaml;
@@ -64,12 +66,45 @@ class LegacyModule implements Module
$this->name = $name;
}
public function discover(OS $os): void
public function shouldDiscover(OS $os, ModuleStatus $status): bool
{
// TODO: Implement discover() method.
return $this->shouldPoll($os, $status);
}
public function poll(OS $os): void
public function discover(OS $os): void
{
if (! is_file(base_path("includes/discovery/$this->name.inc.php"))) {
echo "Module $this->name does not exist, please remove it from your configuration";
return;
}
$device = &$os->getDeviceArray();
$device['attribs'] = $os->getDevice()->attribs->toArray();
Debug::disableErrorReporting(); // ignore errors in legacy code
include_once base_path('includes/datastore.inc.php');
include_once base_path('includes/dbFacile.php');
include base_path("includes/discovery/$this->name.inc.php");
Debug::enableErrorReporting(); // and back to normal
}
public function shouldPoll(OS $os, ModuleStatus $status): bool
{
if (! $status->isEnabled()) {
return false;
}
if (! $os->getDevice()->status) {
return false;
}
// all legacy modules require snmp except ipmi and unix-agent
return ! $os->getDevice()->snmp_disable || in_array($this->name, ['ipmi', 'unix-agent']);
}
public function poll(OS $os, DataStorageInterface $datastore): void
{
if (! is_file(base_path("includes/polling/$this->name.inc.php"))) {
echo "Module $this->name does not exist, please remove it from your configuration";
@@ -81,6 +116,7 @@ class LegacyModule implements Module
$device['attribs'] = $os->getDevice()->attribs->toArray();
Debug::disableErrorReporting(); // ignore errors in legacy code
include_once base_path('includes/datastore.inc.php');
include_once base_path('includes/dbFacile.php');
include base_path("includes/polling/$this->name.inc.php");