From 5433e1308fce7c99917f2a00c15f2e0f6f620a1e Mon Sep 17 00:00:00 2001 From: Adrien Poupa Date: Thu, 6 Dec 2018 22:53:33 -0500 Subject: [PATCH] Improve database performance by removing duplicated queries --- app/Composers/DashboardComposer.php | 45 ++++++++++++++++--- .../Providers/ComposerServiceProvider.php | 2 +- app/Presenters/UserPresenter.php | 3 +- 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/app/Composers/DashboardComposer.php b/app/Composers/DashboardComposer.php index 1bbdf3ea..06c4609f 100644 --- a/app/Composers/DashboardComposer.php +++ b/app/Composers/DashboardComposer.php @@ -26,6 +26,41 @@ use Illuminate\Contracts\View\View; */ class DashboardComposer { + private $componentCount; + + private $incidentCount; + + private $incidentTemplateCount; + + private $scheduleCount; + + private $subscriberCount; + + /** + * DashboardComposer constructor + */ + public function __construct() { + if (is_null($this->componentCount)) { + $this->componentCount = Component::count(); + } + + if (is_null($this->incidentCount)) { + $this->incidentCount = Incident::count(); + } + + if (is_null($this->incidentTemplateCount)) { + $this->incidentTemplateCount = IncidentTemplate::count(); + } + + if (is_null($this->scheduleCount)) { + $this->scheduleCount = Schedule::count(); + } + + if (is_null($this->subscriberCount)) { + $this->subscriberCount = Subscriber::isVerified()->count(); + } + } + /** * Bind data to the view. * @@ -35,11 +70,11 @@ class DashboardComposer */ public function compose(View $view) { - $view->withComponentCount(Component::count()); - $view->withIncidentCount(Incident::count()); - $view->withIncidentTemplateCount(IncidentTemplate::count()); - $view->withScheduleCount(Schedule::count()); - $view->withSubscriberCount(Subscriber::isVerified()->count()); + $view->withComponentCount($this->componentCount); + $view->withIncidentCount($this->incidentCount); + $view->withIncidentTemplateCount($this->incidentTemplateCount); + $view->withScheduleCount($this->scheduleCount); + $view->withSubscriberCount($this->subscriberCount); $view->withIsWriteable(is_writable(app()->bootstrapPath().'/cachet')); } } diff --git a/app/Foundation/Providers/ComposerServiceProvider.php b/app/Foundation/Providers/ComposerServiceProvider.php index bd762dd4..51f241fc 100644 --- a/app/Foundation/Providers/ComposerServiceProvider.php +++ b/app/Foundation/Providers/ComposerServiceProvider.php @@ -57,6 +57,6 @@ class ComposerServiceProvider extends ServiceProvider */ public function register() { - // + $this->app->singleton(DashboardComposer::class); } } diff --git a/app/Presenters/UserPresenter.php b/app/Presenters/UserPresenter.php index 00aa9b10..b14022d7 100644 --- a/app/Presenters/UserPresenter.php +++ b/app/Presenters/UserPresenter.php @@ -12,6 +12,7 @@ namespace CachetHQ\Cachet\Presenters; use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Support\Facades\Config; use Laravolt\Avatar\Facade as Avatar; use McCool\LaravelAutoPresenter\BasePresenter; @@ -29,7 +30,7 @@ class UserPresenter extends BasePresenter implements Arrayable */ public function avatar() { - if (setting('enable_external_dependencies')) { + if (Config::get('setting.enable_external_dependencies')) { return sprintf('https://www.gravatar.com/avatar/%s?size=%d', md5(strtolower($this->email)), 200); }