mirror of
https://github.com/flarum/core.git
synced 2025-08-09 09:57:06 +02:00
wip
This commit is contained in:
committed by
David Wheatley
parent
2dd9e17568
commit
06e5922be5
@@ -75,6 +75,15 @@ export default class AdminNav extends Component {
|
|||||||
</LinkButton>
|
</LinkButton>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (app.data.settings['advanced_settings_pane_enabled']) {
|
||||||
|
items.add(
|
||||||
|
'advanced',
|
||||||
|
<LinkButton href={app.route('advanced')} icon="fas fa-rocket" title={app.translator.trans('core.admin.nav.advanced_title')}>
|
||||||
|
{app.translator.trans('core.admin.nav.advanced_button')}
|
||||||
|
</LinkButton>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
items.add(
|
items.add(
|
||||||
'mail',
|
'mail',
|
||||||
<LinkButton href={app.route('mail')} icon="fas fa-envelope" title={app.translator.trans('core.admin.nav.email_title')}>
|
<LinkButton href={app.route('mail')} icon="fas fa-envelope" title={app.translator.trans('core.admin.nav.email_title')}>
|
||||||
|
41
js/src/admin/components/AdvancedPage.js
Normal file
41
js/src/admin/components/AdvancedPage.js
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
import FieldSet from '../../common/components/FieldSet';
|
||||||
|
import ItemList from '../../common/utils/ItemList';
|
||||||
|
import AdminPage from './AdminPage';
|
||||||
|
|
||||||
|
export default class AdvancedPage extends AdminPage {
|
||||||
|
oninit(vnode) {
|
||||||
|
super.oninit(vnode);
|
||||||
|
|
||||||
|
this.queueOptions = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
headerInfo() {
|
||||||
|
return {
|
||||||
|
className: 'AdvancedPage',
|
||||||
|
icon: 'fas fa-rocket',
|
||||||
|
title: app.translator.trans('core.admin.advanced.title'),
|
||||||
|
description: app.translator.trans('core.admin.advanced.description'),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
content() {
|
||||||
|
return [
|
||||||
|
<div className="Form">
|
||||||
|
|
||||||
|
{Object.keys(this.queueOptions).length > 1
|
||||||
|
? [
|
||||||
|
this.buildSettingComponent({
|
||||||
|
type: 'select',
|
||||||
|
setting: 'default_locale',
|
||||||
|
options: this.localeOptions,
|
||||||
|
label: app.translator.trans('core.admin.advanced.queue_driver_heading'),
|
||||||
|
})
|
||||||
|
]
|
||||||
|
: ''}
|
||||||
|
|
||||||
|
{this.submitButton()}
|
||||||
|
</div>,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -1,4 +1,5 @@
|
|||||||
import DashboardPage from './components/DashboardPage';
|
import DashboardPage from './components/DashboardPage';
|
||||||
|
import AdvancedPage from './components/AdvancedPage';
|
||||||
import BasicsPage from './components/BasicsPage';
|
import BasicsPage from './components/BasicsPage';
|
||||||
import PermissionsPage from './components/PermissionsPage';
|
import PermissionsPage from './components/PermissionsPage';
|
||||||
import AppearancePage from './components/AppearancePage';
|
import AppearancePage from './components/AppearancePage';
|
||||||
@@ -16,6 +17,7 @@ export default function (app) {
|
|||||||
app.routes = {
|
app.routes = {
|
||||||
dashboard: { path: '/', component: DashboardPage },
|
dashboard: { path: '/', component: DashboardPage },
|
||||||
basics: { path: '/basics', component: BasicsPage },
|
basics: { path: '/basics', component: BasicsPage },
|
||||||
|
advanced: { path: '/advanced', component: AdvancedPage },
|
||||||
permissions: { path: '/permissions', component: PermissionsPage },
|
permissions: { path: '/permissions', component: PermissionsPage },
|
||||||
appearance: { path: '/appearance', component: AppearancePage },
|
appearance: { path: '/appearance', component: AppearancePage },
|
||||||
mail: { path: '/mail', component: MailPage },
|
mail: { path: '/mail', component: MailPage },
|
||||||
|
@@ -112,7 +112,7 @@ class ApiServiceProvider extends AbstractServiceProvider
|
|||||||
HttpMiddleware\AuthenticateWithSession::class,
|
HttpMiddleware\AuthenticateWithSession::class,
|
||||||
HttpMiddleware\AuthenticateWithHeader::class,
|
HttpMiddleware\AuthenticateWithHeader::class,
|
||||||
HttpMiddleware\CheckCsrfToken::class,
|
HttpMiddleware\CheckCsrfToken::class,
|
||||||
HttpMiddleware\RememberFromCookie::class,
|
// HttpMiddleware\RememberFromCookie::class,
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -131,6 +131,7 @@ class InstalledSite implements SiteInterface
|
|||||||
$laravel->register(NotificationServiceProvider::class);
|
$laravel->register(NotificationServiceProvider::class);
|
||||||
$laravel->register(PostServiceProvider::class);
|
$laravel->register(PostServiceProvider::class);
|
||||||
$laravel->register(QueueServiceProvider::class);
|
$laravel->register(QueueServiceProvider::class);
|
||||||
|
$laravel->register(ScalabilityServiceProvider::class);
|
||||||
$laravel->register(SearchServiceProvider::class);
|
$laravel->register(SearchServiceProvider::class);
|
||||||
$laravel->register(SessionServiceProvider::class);
|
$laravel->register(SessionServiceProvider::class);
|
||||||
$laravel->register(SettingsServiceProvider::class);
|
$laravel->register(SettingsServiceProvider::class);
|
||||||
|
55
src/Foundation/ScalabilityServiceProvider.php
Normal file
55
src/Foundation/ScalabilityServiceProvider.php
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Flarum\Foundation;
|
||||||
|
|
||||||
|
use Flarum\Settings\Event\Deserializing;
|
||||||
|
use Flarum\Settings\SettingsRepositoryInterface;
|
||||||
|
use Illuminate\Contracts\Cache\Repository;
|
||||||
|
use Illuminate\Contracts\Events\Dispatcher;
|
||||||
|
use Illuminate\Contracts\Queue\Queue;
|
||||||
|
use Illuminate\Queue\Events\JobProcessing;
|
||||||
|
use Illuminate\Queue\SyncQueue;
|
||||||
|
|
||||||
|
class ScalabilityServiceProvider extends AbstractServiceProvider
|
||||||
|
{
|
||||||
|
public function boot(Dispatcher $events, Queue $queue)
|
||||||
|
{
|
||||||
|
if ($queue instanceof SyncQueue) {
|
||||||
|
$events->listen(JobProcessing::class, [$this, 'trackQueueLoad']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$events->listen(Deserializing::class, [$this, 'recommendations']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function trackQueueLoad(JobProcessing $event)
|
||||||
|
{
|
||||||
|
/** @var Repository $cache */
|
||||||
|
$cache = resolve('cache.store');
|
||||||
|
|
||||||
|
// Retrieve existing queue load.
|
||||||
|
$count = (int) $cache->get('flarum.scalability.queue-load', 0);
|
||||||
|
|
||||||
|
$count++;
|
||||||
|
|
||||||
|
// Store the queue load, but only for one minute.
|
||||||
|
$cache->set('flarum.scalability.queue-load', $count, 60);
|
||||||
|
|
||||||
|
// If within that minute 10 queue tasks were fired, we need to suggest an alternative driver.
|
||||||
|
if ($count > 10) {
|
||||||
|
/** @var SettingsRepositoryInterface $settings */
|
||||||
|
$settings = resolve(SettingsRepositoryInterface::class);
|
||||||
|
$settings->set('flarum.scalability.queue-recommended', true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function recommendations(Deserializing $event)
|
||||||
|
{
|
||||||
|
/** @var Config $config */
|
||||||
|
$config = resolve(Config::class);
|
||||||
|
|
||||||
|
// Toggles the advanced pane for admins.
|
||||||
|
$event->settings['advanced_settings_pane_enabled'] = $event->settings['flarum.scalability.queue-recommended']
|
||||||
|
?? $config->offsetGet('advanced-settings')
|
||||||
|
?? false;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user