mirror of
https://github.com/librenms/librenms.git
synced 2024-09-21 02:18:39 +00:00
Move Config loading to a service provider (#13927)
* Move Config loading to a service provider That way other service providers can depend on it Move various random listener registrations into the EventServiceProvider Various startup cleanup * Config::persist Set live variable before persisting incase db update fail * Disable strict mode for legacy code (init.php) * Disable debug after os test data is gathered * remove Eloquent::boot it is never used * remove Eloquent::version * lint fixes * style fixes * there is no c_echo here
This commit is contained in:
parent
d4479e12dd
commit
014213680f
@ -31,7 +31,6 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Str;
|
||||
use LibreNMS\Data\Store\Rrd;
|
||||
use LibreNMS\DB\Eloquent;
|
||||
use LibreNMS\Util\Debug;
|
||||
use LibreNMS\Util\Version;
|
||||
use Log;
|
||||
@ -254,11 +253,11 @@ class Config
|
||||
public static function persist($key, $value)
|
||||
{
|
||||
try {
|
||||
Arr::set(self::$config, $key, $value);
|
||||
\App\Models\Config::updateOrCreate(['config_name' => $key], [
|
||||
'config_name' => $key,
|
||||
'config_value' => $value,
|
||||
]);
|
||||
Arr::set(self::$config, $key, $value);
|
||||
|
||||
// delete any children (there should not be any unless it is legacy)
|
||||
\App\Models\Config::query()->where('config_name', 'like', "$key.%")->delete();
|
||||
@ -338,10 +337,6 @@ class Config
|
||||
*/
|
||||
private static function loadDB()
|
||||
{
|
||||
if (! Eloquent::isConnected()) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
\App\Models\Config::get(['config_name', 'config_value'])
|
||||
->each(function ($item) {
|
||||
@ -462,15 +457,10 @@ class Config
|
||||
self::persist('device_display_default', $display_value);
|
||||
}
|
||||
|
||||
$persist = Eloquent::isConnected();
|
||||
// make sure we have full path to binaries in case PATH isn't set
|
||||
foreach (['fping', 'fping6', 'snmpgetnext', 'rrdtool', 'traceroute', 'traceroute6'] as $bin) {
|
||||
if (! is_executable(self::get($bin))) {
|
||||
if ($persist) {
|
||||
self::persist($bin, self::locateBinary($bin));
|
||||
} else {
|
||||
self::set($bin, self::locateBinary($bin));
|
||||
}
|
||||
self::persist($bin, self::locateBinary($bin));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,59 +25,19 @@
|
||||
|
||||
namespace LibreNMS\DB;
|
||||
|
||||
use Dotenv\Dotenv;
|
||||
use Illuminate\Database\Capsule\Manager as Capsule;
|
||||
use Illuminate\Database\Events\StatementPrepared;
|
||||
use Illuminate\Events\Dispatcher;
|
||||
use Illuminate\Support\Arr;
|
||||
use DB;
|
||||
use Illuminate\Database\Connection;
|
||||
use LibreNMS\Util\Laravel;
|
||||
use PDOException;
|
||||
|
||||
class Eloquent
|
||||
{
|
||||
/** @var Capsule static reference to capsule */
|
||||
private static $capsule;
|
||||
|
||||
public static function boot()
|
||||
{
|
||||
// boot Eloquent outside of Laravel
|
||||
if (! Laravel::isBooted() && is_null(self::$capsule)) {
|
||||
$install_dir = realpath(__DIR__ . '/../../');
|
||||
|
||||
Dotenv::createMutable($install_dir)->load();
|
||||
|
||||
$db_config = include $install_dir . '/config/database.php';
|
||||
$settings = $db_config['connections'][$db_config['default']];
|
||||
|
||||
self::$capsule = new Capsule;
|
||||
self::$capsule->addConnection($settings);
|
||||
self::$capsule->setEventDispatcher(new Dispatcher());
|
||||
self::$capsule->setAsGlobal();
|
||||
self::$capsule->bootEloquent();
|
||||
}
|
||||
|
||||
self::initLegacyListeners();
|
||||
self::setStrictMode(false); // set non-strict mode if for legacy code
|
||||
}
|
||||
|
||||
public static function initLegacyListeners()
|
||||
{
|
||||
if (self::isConnected()) {
|
||||
// set FETCH_ASSOC for queries that required by setting the global variable $PDO_FETCH_ASSOC (for dbFacile)
|
||||
self::DB()->getEventDispatcher()->listen(StatementPrepared::class, function ($event) {
|
||||
global $PDO_FETCH_ASSOC;
|
||||
if ($PDO_FETCH_ASSOC) {
|
||||
$event->statement->setFetchMode(\PDO::FETCH_ASSOC);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the strict mode for the current connection (will not persist)
|
||||
*
|
||||
* @param bool $strict
|
||||
*/
|
||||
public static function setStrictMode($strict = true)
|
||||
public static function setStrictMode(bool $strict = true): void
|
||||
{
|
||||
if (self::isConnected() && self::getDriver() == 'mysql') {
|
||||
if ($strict) {
|
||||
@ -88,14 +48,16 @@ class Eloquent
|
||||
}
|
||||
}
|
||||
|
||||
public static function isConnected($name = null)
|
||||
public static function isConnected(?string $name = null): bool
|
||||
{
|
||||
try {
|
||||
$conn = self::DB($name);
|
||||
if ($conn) {
|
||||
return ! is_null($conn->getPdo());
|
||||
$conn->getPdo();
|
||||
|
||||
return true;
|
||||
}
|
||||
} catch (\PDOException $e) {
|
||||
} catch (PDOException $e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -105,31 +67,39 @@ class Eloquent
|
||||
/**
|
||||
* Access the Database Manager for Fluent style queries. Like the Laravel DB facade.
|
||||
*
|
||||
* @param string $name
|
||||
* @param string|null $name
|
||||
* @return \Illuminate\Database\Connection|null
|
||||
*/
|
||||
public static function DB($name = null)
|
||||
public static function DB(?string $name = null): ?Connection
|
||||
{
|
||||
// check if Laravel is booted
|
||||
if (Laravel::isBooted()) {
|
||||
return \DB::connection($name);
|
||||
return DB::connection($name);
|
||||
}
|
||||
|
||||
if (is_null(self::$capsule)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return self::$capsule->getDatabaseManager()->connection($name);
|
||||
return null;
|
||||
}
|
||||
|
||||
public static function getDriver()
|
||||
public static function getDriver(): ?string
|
||||
{
|
||||
$connection = config('database.default');
|
||||
|
||||
return config("database.connections.{$connection}.driver");
|
||||
}
|
||||
|
||||
public static function setConnection($name, $db_host = null, $db_user = '', $db_pass = '', $db_name = '', $db_port = null, $db_socket = null)
|
||||
/**
|
||||
* Set the active connection, used during install
|
||||
*
|
||||
* @param string $name
|
||||
* @param string $db_host
|
||||
* @param string $db_user
|
||||
* @param string $db_pass
|
||||
* @param string $db_name
|
||||
* @param int|string $db_port
|
||||
* @param string $db_socket
|
||||
* @return void
|
||||
*/
|
||||
public static function setConnection($name, $db_host = null, $db_user = '', $db_pass = '', $db_name = '', $db_port = null, $db_socket = null): void
|
||||
{
|
||||
\Config::set("database.connections.$name", [
|
||||
'driver' => 'mysql',
|
||||
@ -147,9 +117,4 @@ class Eloquent
|
||||
]);
|
||||
\Config::set('database.default', $name);
|
||||
}
|
||||
|
||||
public static function version($name = null)
|
||||
{
|
||||
return Arr::first(self::DB($name)->selectOne('select version()'));
|
||||
}
|
||||
}
|
||||
|
@ -602,7 +602,7 @@ class IRCBot
|
||||
{
|
||||
if (! Eloquent::isConnected()) {
|
||||
try {
|
||||
Eloquent::boot();
|
||||
Eloquent::DB()->statement('SELECT VERSION()');
|
||||
} catch (\PDOException $e) {
|
||||
$this->log('Cannot connect to MySQL: ' . $e->getMessage());
|
||||
|
||||
|
@ -43,6 +43,7 @@ use LibreNMS\Util\Debug;
|
||||
use LibreNMS\Util\Dns;
|
||||
use LibreNMS\Util\Git;
|
||||
use LibreNMS\Util\StringHelpers;
|
||||
use LibreNMS\Util\Version;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Throwable;
|
||||
|
||||
@ -371,7 +372,7 @@ EOH,
|
||||
Git::localDate(),
|
||||
vsprintf('%s (%s)', $version->database()),
|
||||
phpversion(),
|
||||
\LibreNMS\DB\Eloquent::isConnected() ? \LibreNMS\DB\Eloquent::version() : '?',
|
||||
Version::get()->databaseServer(),
|
||||
$version->rrdtool(),
|
||||
$version->netSnmp()
|
||||
));
|
||||
|
@ -26,20 +26,16 @@
|
||||
namespace LibreNMS\Util;
|
||||
|
||||
use App;
|
||||
use Illuminate\Database\Events\QueryExecuted;
|
||||
use LibreNMS\DB\Eloquent;
|
||||
use Log;
|
||||
|
||||
class Debug
|
||||
{
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
/** @var bool */
|
||||
private static $debug = false;
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
/** @var bool */
|
||||
private static $verbose = false;
|
||||
/** @var bool */
|
||||
private static $sql_debug_enabled = false;
|
||||
|
||||
/**
|
||||
* Enable/disable debug output
|
||||
@ -52,8 +48,6 @@ class Debug
|
||||
{
|
||||
self::$debug = (bool) $debug;
|
||||
|
||||
restore_error_handler(); // disable Laravel error handler
|
||||
|
||||
if (self::$debug) {
|
||||
self::enableErrorReporting();
|
||||
self::enableCliDebugOutput();
|
||||
@ -92,18 +86,15 @@ class Debug
|
||||
|
||||
public static function disableQueryDebug(): void
|
||||
{
|
||||
$db = Eloquent::DB();
|
||||
|
||||
if ($db) {
|
||||
// remove all query executed event handlers
|
||||
$db->getEventDispatcher()->flush('Illuminate\Database\Events\QueryExecuted');
|
||||
}
|
||||
self::$sql_debug_enabled = false;
|
||||
}
|
||||
|
||||
public static function enableCliDebugOutput(): void
|
||||
{
|
||||
if (Laravel::isBooted() && App::runningInConsole()) {
|
||||
Log::setDefaultDriver('console_debug');
|
||||
} else {
|
||||
putenv('LOG_CHANNEL=console_debug');
|
||||
}
|
||||
}
|
||||
|
||||
@ -116,28 +107,12 @@ class Debug
|
||||
|
||||
public static function enableQueryDebug(): void
|
||||
{
|
||||
static $sql_debug_enabled;
|
||||
$db = Eloquent::DB();
|
||||
self::$sql_debug_enabled = true;
|
||||
}
|
||||
|
||||
if ($db && ! $sql_debug_enabled) {
|
||||
$db->listen(function (QueryExecuted $query) {
|
||||
// collect bindings and make them a little more readable
|
||||
$bindings = collect($query->bindings)->map(function ($item) {
|
||||
if ($item instanceof \Carbon\Carbon) {
|
||||
return $item->toDateTimeString();
|
||||
}
|
||||
|
||||
return $item;
|
||||
})->toJson();
|
||||
|
||||
if (Laravel::isBooted()) {
|
||||
Log::debug("SQL[%Y{$query->sql} %y$bindings%n {$query->time}ms] \n", ['color' => true]);
|
||||
} else {
|
||||
c_echo("SQL[%Y{$query->sql} %y$bindings%n {$query->time}ms] \n");
|
||||
}
|
||||
});
|
||||
$sql_debug_enabled = true;
|
||||
}
|
||||
public static function queryDebugIsEnabled(): bool
|
||||
{
|
||||
return self::$sql_debug_enabled;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -25,7 +25,9 @@
|
||||
|
||||
namespace LibreNMS\Util;
|
||||
|
||||
use DB;
|
||||
use Illuminate\Http\Client\ConnectionException;
|
||||
use Illuminate\Support\Arr;
|
||||
use LibreNMS\Config;
|
||||
use LibreNMS\DB\Eloquent;
|
||||
use Symfony\Component\Process\Process;
|
||||
@ -100,7 +102,7 @@ class Version
|
||||
|
||||
public function databaseServer(): string
|
||||
{
|
||||
return \LibreNMS\DB\Eloquent::isConnected() ? \LibreNMS\DB\Eloquent::version() : 'Not Connected';
|
||||
return Eloquent::isConnected() ? Arr::first(DB::selectOne('select version()')) : 'Not Connected';
|
||||
}
|
||||
|
||||
public function database(): array
|
||||
|
@ -100,7 +100,7 @@ class Database extends BaseValidation
|
||||
|
||||
private function checkVersion(Validator $validator)
|
||||
{
|
||||
$version = Eloquent::version();
|
||||
$version = \LibreNMS\Util\Version::get()->databaseServer();
|
||||
$version = explode('-', $version);
|
||||
|
||||
if (isset($version[1]) && $version[1] == 'MariaDB') {
|
||||
|
@ -53,7 +53,6 @@ use App\Models\WirelessSensor;
|
||||
use Illuminate\Http\Request;
|
||||
use LibreNMS\Config;
|
||||
use LibreNMS\Data\Store\Rrd;
|
||||
use LibreNMS\DB\Eloquent;
|
||||
use LibreNMS\Util\Version;
|
||||
|
||||
class AboutController extends Controller
|
||||
@ -73,7 +72,7 @@ class AboutController extends Controller
|
||||
'project_name' => Config::get('project_name'),
|
||||
|
||||
'version_local' => $version->local(),
|
||||
'version_mysql' => Eloquent::version(),
|
||||
'version_mysql' => $version->databaseServer(),
|
||||
'version_php' => phpversion(),
|
||||
'version_laravel' => App::VERSION(),
|
||||
'version_python' => $version->python(),
|
||||
|
@ -28,12 +28,10 @@ use Config;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Laravel\Socialite\Contracts\User as SocialiteUser;
|
||||
use Laravel\Socialite\Facades\Socialite;
|
||||
use LibreNMS\Config as LibreNMSConfig;
|
||||
use LibreNMS\Exceptions\AuthenticationException;
|
||||
use Log;
|
||||
|
||||
class SocialiteController extends Controller
|
||||
{
|
||||
@ -45,23 +43,6 @@ class SocialiteController extends Controller
|
||||
$this->injectConfig();
|
||||
}
|
||||
|
||||
public static function registerEventListeners(): void
|
||||
{
|
||||
foreach (LibreNMSConfig::get('auth.socialite.configs', []) as $provider => $config) {
|
||||
// Treat not set as "disabled"
|
||||
if (! isset($config['listener'])) {
|
||||
continue;
|
||||
}
|
||||
$listener = $config['listener'];
|
||||
|
||||
if (class_exists($listener)) {
|
||||
Event::listen(\SocialiteProviders\Manager\SocialiteWasCalled::class, "$listener@handle");
|
||||
} else {
|
||||
Log::error("Wrong value for auth.socialite.configs.$provider.listener set, class: '$listener' does not exist!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return RedirectResponse|\Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
|
33
app/Listeners/LegacyQueryListener.php
Normal file
33
app/Listeners/LegacyQueryListener.php
Normal file
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use Illuminate\Database\Events\StatementPrepared;
|
||||
|
||||
class LegacyQueryListener
|
||||
{
|
||||
/**
|
||||
* Create the event listener.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* set FETCH_ASSOC for queries that required by setting the global variable $PDO_FETCH_ASSOC (for dbFacile)
|
||||
*
|
||||
* @param \Illuminate\Database\Events\StatementPrepared $event
|
||||
* @return void
|
||||
*/
|
||||
public function handle(StatementPrepared $event)
|
||||
{
|
||||
global $PDO_FETCH_ASSOC;
|
||||
|
||||
if ($PDO_FETCH_ASSOC) {
|
||||
$event->statement->setFetchMode(\PDO::FETCH_ASSOC);
|
||||
}
|
||||
}
|
||||
}
|
43
app/Listeners/QueryDebugListener.php
Normal file
43
app/Listeners/QueryDebugListener.php
Normal file
@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use Illuminate\Database\Events\QueryExecuted;
|
||||
use LibreNMS\Util\Debug;
|
||||
use Log;
|
||||
|
||||
class QueryDebugListener
|
||||
{
|
||||
/**
|
||||
* Create the event listener.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the event.
|
||||
*
|
||||
* @param \Illuminate\Database\Events\QueryExecuted $query
|
||||
* @return void
|
||||
*/
|
||||
public function handle(QueryExecuted $query)
|
||||
{
|
||||
if (Debug::queryDebugIsEnabled()) {
|
||||
|
||||
// collect bindings and make them a little more readable
|
||||
$bindings = collect($query->bindings)->map(function ($item) {
|
||||
if ($item instanceof \Carbon\Carbon) {
|
||||
return $item->toDateTimeString();
|
||||
}
|
||||
|
||||
return $item;
|
||||
})->toJson();
|
||||
|
||||
Log::debug("SQL[%Y{$query->sql} %y$bindings%n {$query->time}ms] \n", ['color' => true]);
|
||||
}
|
||||
}
|
||||
}
|
32
app/Listeners/QueryMetricListener.php
Normal file
32
app/Listeners/QueryMetricListener.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use App\Polling\Measure\Measurement;
|
||||
use App\Polling\Measure\MeasurementManager;
|
||||
use Illuminate\Database\Events\QueryExecuted;
|
||||
|
||||
class QueryMetricListener
|
||||
{
|
||||
/**
|
||||
* Create the event listener.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the event.
|
||||
*
|
||||
* @param \Illuminate\Database\Events\QueryExecuted $event
|
||||
* @return void
|
||||
*/
|
||||
public function handle(QueryExecuted $event)
|
||||
{
|
||||
$type = strtolower(substr($event->sql, 0, strpos($event->sql, ' ')));
|
||||
app(MeasurementManager::class)->recordDb(Measurement::make($type, $event->time ? $event->time / 100 : 0));
|
||||
}
|
||||
}
|
@ -25,8 +25,6 @@
|
||||
|
||||
namespace App\Polling\Measure;
|
||||
|
||||
use DB;
|
||||
use Illuminate\Database\Events\QueryExecuted;
|
||||
use Illuminate\Support\Collection;
|
||||
use Log;
|
||||
|
||||
@ -51,17 +49,6 @@ class MeasurementManager
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register DB listener to record sql query stats
|
||||
*/
|
||||
public function listenDb(): void
|
||||
{
|
||||
DB::listen(function (QueryExecuted $event) {
|
||||
$type = strtolower(substr($event->sql, 0, strpos($event->sql, ' ')));
|
||||
$this->recordDb(Measurement::make($type, $event->time ? $event->time / 100 : 0));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Update statistics for the given category
|
||||
*/
|
||||
|
@ -3,7 +3,6 @@
|
||||
namespace App\Providers;
|
||||
|
||||
use App\Models\Sensor;
|
||||
use App\Polling\Measure\MeasurementManager;
|
||||
use Illuminate\Database\Eloquent\Relations\Relation;
|
||||
use Illuminate\Support\Facades\Blade;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
@ -46,15 +45,10 @@ class AppServiceProvider extends ServiceProvider
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot(MeasurementManager $measure)
|
||||
public function boot()
|
||||
{
|
||||
$measure->listenDb();
|
||||
\Illuminate\Pagination\Paginator::useBootstrap();
|
||||
|
||||
$this->app->booted('\LibreNMS\DB\Eloquent::initLegacyListeners');
|
||||
$this->app->booted('\LibreNMS\Config::load');
|
||||
$this->app->booted('\App\Http\Controllers\Auth\SocialiteController::registerEventListeners');
|
||||
|
||||
$this->bootCustomBladeDirectives();
|
||||
$this->bootCustomValidators();
|
||||
$this->configureMorphAliases();
|
||||
|
29
app/Providers/ConfigServiceProvider.php
Normal file
29
app/Providers/ConfigServiceProvider.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use LibreNMS\Config;
|
||||
|
||||
class ConfigServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
Config::load();
|
||||
}
|
||||
}
|
@ -23,6 +23,13 @@ class EventServiceProvider extends ServiceProvider
|
||||
\App\Listeners\CheckAlerts::class,
|
||||
\App\Listeners\UpdateDeviceGroups::class,
|
||||
],
|
||||
\Illuminate\Database\Events\QueryExecuted::class => [
|
||||
\App\Listeners\QueryDebugListener::class,
|
||||
\App\Listeners\QueryMetricListener::class,
|
||||
],
|
||||
\Illuminate\Database\Events\StatementPrepared::class => [
|
||||
\App\Listeners\LegacyQueryListener::class,
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
|
41
app/Providers/SocialiteListenersServiceProvider.php
Normal file
41
app/Providers/SocialiteListenersServiceProvider.php
Normal file
@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use LibreNMS\Config;
|
||||
|
||||
class SocialiteListenersServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
foreach (Config::get('auth.socialite.configs', []) as $provider => $config) {
|
||||
// Treat not set as "disabled"
|
||||
if (! isset($config['listener'])) {
|
||||
continue;
|
||||
}
|
||||
$listener = $config['listener'];
|
||||
|
||||
if (class_exists($listener)) {
|
||||
$this->app['events']->listen(\SocialiteProviders\Manager\SocialiteWasCalled::class, "$listener@handle");
|
||||
} else {
|
||||
$this->app['log']->error("Wrong value for auth.socialite.configs.$provider.listener set, class: '$listener' does not exist!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -176,7 +176,7 @@ return [
|
||||
\SocialiteProviders\Manager\ServiceProvider::class,
|
||||
|
||||
/*
|
||||
* Application Service Providers...
|
||||
* LibreNMS Service Providers...
|
||||
*/
|
||||
App\Providers\AppServiceProvider::class,
|
||||
App\Providers\CliServiceProvider::class,
|
||||
@ -184,12 +184,12 @@ return [
|
||||
// App\Providers\BroadcastServiceProvider::class,
|
||||
App\Providers\EventServiceProvider::class,
|
||||
App\Providers\RouteServiceProvider::class,
|
||||
|
||||
App\Providers\ConfigServiceProvider::class,
|
||||
App\Providers\SocialiteListenersServiceProvider::class,
|
||||
|
||||
App\Providers\ComposerServiceProvider::class,
|
||||
App\Providers\DatastoreServiceProvider::class,
|
||||
|
||||
/*
|
||||
* LibreNMS Service Providers...
|
||||
*/
|
||||
App\Providers\SnmptrapProvider::class,
|
||||
App\Providers\PluginProvider::class,
|
||||
],
|
||||
|
@ -386,8 +386,6 @@ if ($options['f'] === 'recalculate_device_dependencies') {
|
||||
|
||||
$lock = Cache::lock('recalculate_device_dependencies', 86000);
|
||||
if ($lock->get()) {
|
||||
\LibreNMS\DB\Eloquent::boot();
|
||||
|
||||
// update all root nodes and recurse, chunk so we don't blow up
|
||||
Device::doesntHave('parents')->with('children')->chunk(100, function (Collection $devices) {
|
||||
// anonymous recursive function
|
||||
|
@ -22,73 +22,8 @@
|
||||
|
||||
use Illuminate\Database\QueryException;
|
||||
use LibreNMS\DB\Eloquent;
|
||||
use LibreNMS\Exceptions\DatabaseConnectException;
|
||||
use LibreNMS\Util\Laravel;
|
||||
|
||||
/**
|
||||
* @deprecated Please use Eloquent instead; https://laravel.com/docs/eloquent
|
||||
* @see https://laravel.com/docs/eloquent
|
||||
*/
|
||||
function dbIsConnected()
|
||||
{
|
||||
return Eloquent::isConnected();
|
||||
}
|
||||
|
||||
/**
|
||||
* Connect to the database.
|
||||
* Will use global config variables if they are not sent: db_host, db_user, db_pass, db_name, db_port, db_socket
|
||||
*
|
||||
* @param string $db_host
|
||||
* @param string $db_user
|
||||
* @param string $db_pass
|
||||
* @param string $db_name
|
||||
* @param string $db_port
|
||||
* @param string $db_socket
|
||||
* @return \Illuminate\Database\Connection
|
||||
*
|
||||
* @throws DatabaseConnectException
|
||||
*
|
||||
* @deprecated Please use Eloquent instead; https://laravel.com/docs/eloquent
|
||||
* @see https://laravel.com/docs/eloquent
|
||||
*/
|
||||
function dbConnect($db_host = null, $db_user = '', $db_pass = '', $db_name = '', $db_port = null, $db_socket = null)
|
||||
{
|
||||
if (Eloquent::isConnected()) {
|
||||
return Eloquent::DB();
|
||||
}
|
||||
|
||||
if (! extension_loaded('pdo_mysql')) {
|
||||
throw new DatabaseConnectException('PHP pdo_mysql extension not loaded!');
|
||||
}
|
||||
|
||||
try {
|
||||
if (! is_null($db_host) || ! empty($db_name)) {
|
||||
// legacy connection override
|
||||
\Config::set('database.connections.setup', [
|
||||
'driver' => 'mysql',
|
||||
'host' => $db_host,
|
||||
'port' => $db_port,
|
||||
'database' => $db_name,
|
||||
'username' => $db_user,
|
||||
'password' => $db_pass,
|
||||
'unix_socket' => $db_socket,
|
||||
'charset' => 'utf8mb4',
|
||||
'collation' => 'utf8mb4_unicode_ci',
|
||||
'prefix' => '',
|
||||
'strict' => true,
|
||||
'engine' => null,
|
||||
]);
|
||||
\Config::set('database.default', 'setup');
|
||||
}
|
||||
|
||||
Eloquent::boot();
|
||||
} catch (PDOException $e) {
|
||||
throw new DatabaseConnectException($e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
|
||||
return Eloquent::DB();
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a query using the given string.
|
||||
*
|
||||
|
@ -30,6 +30,7 @@
|
||||
use LibreNMS\Authentication\LegacyAuth;
|
||||
use LibreNMS\Config;
|
||||
use LibreNMS\Util\Debug;
|
||||
use LibreNMS\Util\Laravel;
|
||||
|
||||
global $vars, $console_color;
|
||||
|
||||
@ -77,22 +78,18 @@ if (module_selected('polling', $init_modules)) {
|
||||
require_once $install_dir . '/includes/polling/functions.inc.php';
|
||||
}
|
||||
|
||||
if (module_selected('alerts', $init_modules)) {
|
||||
require_once $install_dir . '/LibreNMS/Alert/RunAlerts.php';
|
||||
}
|
||||
Debug::set($debug ?? false); // disable debug initially
|
||||
|
||||
// Boot Laravel
|
||||
if (module_selected('web', $init_modules)) {
|
||||
\LibreNMS\Util\Laravel::bootWeb(module_selected('auth', $init_modules));
|
||||
Laravel::bootWeb(module_selected('auth', $init_modules));
|
||||
} else {
|
||||
\LibreNMS\Util\Laravel::bootCli();
|
||||
Laravel::bootCli();
|
||||
}
|
||||
|
||||
Debug::set(false); // disable debug initially (hides legacy errors too)
|
||||
Debug::set($debug ?? false); // override laravel configured settings (hides legacy errors too)
|
||||
restore_error_handler(); // disable Laravel error handler
|
||||
|
||||
if (! module_selected('nodb', $init_modules)) {
|
||||
\LibreNMS\DB\Eloquent::boot();
|
||||
|
||||
if (! \LibreNMS\DB\Eloquent::isConnected()) {
|
||||
echo "Could not connect to database, check logs/librenms.log.\n";
|
||||
|
||||
@ -104,18 +101,7 @@ if (! module_selected('nodb', $init_modules)) {
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
// Display config.php errors instead of http 500
|
||||
$display_bak = ini_get('display_errors');
|
||||
ini_set('display_errors', 1);
|
||||
|
||||
// Load config if not already loaded (which is the case if inside Laravel)
|
||||
if (! Config::has('install_dir')) {
|
||||
Config::load();
|
||||
}
|
||||
|
||||
// set display_errors back
|
||||
ini_set('display_errors', $display_bak);
|
||||
\LibreNMS\DB\Eloquent::setStrictMode(false); // disable strict mode for legacy code...
|
||||
|
||||
if (is_numeric(Config::get('php_memory_limit')) && Config::get('php_memory_limit') > 128) {
|
||||
ini_set('memory_limit', Config::get('php_memory_limit') . 'M');
|
||||
@ -129,15 +115,9 @@ try {
|
||||
exit();
|
||||
}
|
||||
|
||||
if (module_selected('discovery', $init_modules) && ! \LibreNMS\Util\OS::updateCache(false)) {
|
||||
// OS::loadAllDefinitions() is called by update_os_cache() if updated, no need to call twice
|
||||
\LibreNMS\Util\OS::loadAllDefinitions(false, true);
|
||||
} elseif (module_selected('web', $init_modules)) {
|
||||
if (module_selected('web', $init_modules)) {
|
||||
require $install_dir . '/includes/html/vars.inc.php';
|
||||
\LibreNMS\Util\OS::loadAllDefinitions(! module_selected('nodb', $init_modules), true);
|
||||
}
|
||||
|
||||
if (module_selected('web', $init_modules)) {
|
||||
require $install_dir . '/includes/html/vars.inc.php';
|
||||
}
|
||||
|
||||
$console_color = new Console_Color2();
|
||||
|
@ -1740,101 +1740,6 @@ parameters:
|
||||
count: 1
|
||||
path: LibreNMS/Config.php
|
||||
|
||||
-
|
||||
message: "#^Call to function is_null\\(\\) with Illuminate\\\\Database\\\\Capsule\\\\Manager will always evaluate to false\\.$#"
|
||||
count: 2
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Call to function is_null\\(\\) with PDO will always evaluate to false\\.$#"
|
||||
count: 1
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Method LibreNMS\\\\DB\\\\Eloquent\\:\\:boot\\(\\) has no return type specified\\.$#"
|
||||
count: 1
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Method LibreNMS\\\\DB\\\\Eloquent\\:\\:getDriver\\(\\) has no return type specified\\.$#"
|
||||
count: 1
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Method LibreNMS\\\\DB\\\\Eloquent\\:\\:initLegacyListeners\\(\\) has no return type specified\\.$#"
|
||||
count: 1
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Method LibreNMS\\\\DB\\\\Eloquent\\:\\:isConnected\\(\\) has no return type specified\\.$#"
|
||||
count: 1
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Method LibreNMS\\\\DB\\\\Eloquent\\:\\:isConnected\\(\\) has parameter \\$name with no type specified\\.$#"
|
||||
count: 1
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Method LibreNMS\\\\DB\\\\Eloquent\\:\\:setConnection\\(\\) has no return type specified\\.$#"
|
||||
count: 1
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Method LibreNMS\\\\DB\\\\Eloquent\\:\\:setConnection\\(\\) has parameter \\$db_host with no type specified\\.$#"
|
||||
count: 1
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Method LibreNMS\\\\DB\\\\Eloquent\\:\\:setConnection\\(\\) has parameter \\$db_name with no type specified\\.$#"
|
||||
count: 1
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Method LibreNMS\\\\DB\\\\Eloquent\\:\\:setConnection\\(\\) has parameter \\$db_pass with no type specified\\.$#"
|
||||
count: 1
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Method LibreNMS\\\\DB\\\\Eloquent\\:\\:setConnection\\(\\) has parameter \\$db_port with no type specified\\.$#"
|
||||
count: 1
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Method LibreNMS\\\\DB\\\\Eloquent\\:\\:setConnection\\(\\) has parameter \\$db_socket with no type specified\\.$#"
|
||||
count: 1
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Method LibreNMS\\\\DB\\\\Eloquent\\:\\:setConnection\\(\\) has parameter \\$db_user with no type specified\\.$#"
|
||||
count: 1
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Method LibreNMS\\\\DB\\\\Eloquent\\:\\:setConnection\\(\\) has parameter \\$name with no type specified\\.$#"
|
||||
count: 1
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Method LibreNMS\\\\DB\\\\Eloquent\\:\\:setStrictMode\\(\\) has no return type specified\\.$#"
|
||||
count: 1
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Method LibreNMS\\\\DB\\\\Eloquent\\:\\:version\\(\\) has no return type specified\\.$#"
|
||||
count: 1
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Method LibreNMS\\\\DB\\\\Eloquent\\:\\:version\\(\\) has parameter \\$name with no type specified\\.$#"
|
||||
count: 1
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Result of && is always false\\.$#"
|
||||
count: 1
|
||||
path: LibreNMS/DB/Eloquent.php
|
||||
|
||||
-
|
||||
message: "#^Method LibreNMS\\\\DB\\\\Schema\\:\\:columnExists\\(\\) has no return type specified\\.$#"
|
||||
count: 1
|
||||
|
@ -126,6 +126,8 @@ class OSDiscoveryTest extends TestCase
|
||||
$os = Core::detectOS($this->genDevice($community));
|
||||
$output = ob_get_contents();
|
||||
ob_end_clean();
|
||||
Debug::set(false);
|
||||
Debug::setVerbose(false);
|
||||
|
||||
$this->assertLessThan(5, microtime(true) - $start, "OS $expected_os took longer than 5s to detect");
|
||||
$this->assertEquals($expected_os, $os, "Test file: $community.snmprec\n$output");
|
||||
|
Loading…
Reference in New Issue
Block a user