diff --git a/CHANGELOG.md b/CHANGELOG.md index b9ec8713e..7a03cfc5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,10 @@ # Changelog All notable changes to this project will be documented in this file. -## [Unreleased] +## [3.8.6] - 2024-05-03 + +### Added +- Report driver version in handshake [#2929](https://github.com/mongodb/laravel-mongodb/pull/2929) by [@alcaeus](https://github.com/alcaeus) ## [3.8.5] - 2022-07-14 diff --git a/src/Connection.php b/src/Connection.php index c8e7b6bad..36eb2eae1 100644 --- a/src/Connection.php +++ b/src/Connection.php @@ -2,13 +2,20 @@ namespace Jenssegers\Mongodb; +use function class_exists; +use Composer\InstalledVersions; use Illuminate\Database\Connection as BaseConnection; use Illuminate\Support\Arr; use InvalidArgumentException; use MongoDB\Client; +use OutOfBoundsException; +use Throwable; class Connection extends BaseConnection { + /** @var string|null */ + private static $version = null; + /** * The MongoDB database handler. * @var \MongoDB\Database @@ -154,6 +161,11 @@ protected function createConnection($dsn, array $config, array $options) $driverOptions = $config['driver_options']; } + $driverOptions['driver'] = [ + 'name' => 'laravel-mongodb', + 'version' => self::getVersion(), + ]; + // Check if the credentials are not already set in the options if (! isset($options['username']) && ! empty($config['username'])) { $options['username'] = $config['username']; @@ -287,4 +299,28 @@ public function __call($method, $parameters) { return call_user_func_array([$this->db, $method], $parameters); } + + private static function getVersion(): string + { + return self::$version ?? self::lookupVersion(); + } + + private static function lookupVersion(): string + { + self::$version = 'unknown'; + + if (class_exists(InstalledVersions::class)) { + try { + try { + self::$version = InstalledVersions::getPrettyVersion('mongodb/laravel-mongodb') ?? 'unknown'; + } catch (OutOfBoundsException $e) { + self::$version = InstalledVersions::getPrettyVersion('jenssegers/mongodb') ?? 'unknown'; + } + } catch (Throwable $e) { + self::$version = 'error'; + } + } + + return self::$version; + } }