]> source.dussan.org Git - nextcloud-server.git/commitdiff
Show info in admin settings about PHP opcache if disabled 3489/head
authorMorris Jobke <hey@morrisjobke.de>
Wed, 15 Feb 2017 06:40:36 +0000 (00:40 -0600)
committerMorris Jobke <hey@morrisjobke.de>
Thu, 23 Feb 2017 05:45:48 +0000 (23:45 -0600)
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
core/js/setupchecks.js
core/js/tests/specs/setupchecksSpec.js
settings/Controller/CheckSetupController.php
tests/Settings/Controller/CheckSetupControllerTest.php

index 4d2097a5b5d282d6760d5546cfc613ff61c73bfc..fcbbba6af6215a8a43dc62e04a435a4870943cca 100644 (file)
                                                        type: OC.SetupChecks.MESSAGE_TYPE_ERROR
                                                });
                                        }
+                                       if(!data.isOpcacheProperlySetup) {
+                                               messages.push({
+                                                       msg: t(
+                                                               'core',
+                                                               'The PHP Opcache is not properly configured. <a target="_blank" rel="noreferrer" href="{docLink}">For better performance we recommend ↗</a> to use following settings in the <code>php.ini</code>:',
+                                                               {
+                                                                       docLink: data.phpOpcacheDocumentation,
+                                                               }
+                                                       ) + "<pre><code>opcache.enable=On\nopcache.enable_cli=1\nopcache.interned_strings_buffer=8\nopcache.max_accelerated_files=10000\nopcache.memory_consumption=128\nopcache.save_comments=1\nopcache.revalidate_freq=1</code></pre>",
+                                                       type: OC.SetupChecks.MESSAGE_TYPE_INFO
+                                               });
+                                       }
                                } else {
                                        messages.push({
                                                msg: t('core', 'Error occurred while checking server setup'),
index faa8a2bf27798da40961b555c7123c7c9636e2fa..1ee16a7af8166cfdbca90a71c5ea795165a2cba6 100644 (file)
@@ -155,6 +155,7 @@ describe('OC.SetupChecks tests', function() {
                                        forwardedForHeadersWorking: true,
                                        isCorrectMemcachedPHPModuleInstalled: true,
                                        hasPassedCodeIntegrityCheck: true,
+                                       isOpcacheProperlySetup: true,
                                })
                        );
 
@@ -186,6 +187,7 @@ describe('OC.SetupChecks tests', function() {
                                        forwardedForHeadersWorking: true,
                                        isCorrectMemcachedPHPModuleInstalled: true,
                                        hasPassedCodeIntegrityCheck: true,
+                                       isOpcacheProperlySetup: true,
                                })
                        );
 
@@ -218,6 +220,7 @@ describe('OC.SetupChecks tests', function() {
                                        forwardedForHeadersWorking: true,
                                        isCorrectMemcachedPHPModuleInstalled: true,
                                        hasPassedCodeIntegrityCheck: true,
+                                       isOpcacheProperlySetup: true,
                                })
                        );
 
@@ -248,6 +251,7 @@ describe('OC.SetupChecks tests', function() {
                                        forwardedForHeadersWorking: true,
                                        isCorrectMemcachedPHPModuleInstalled: true,
                                        hasPassedCodeIntegrityCheck: true,
+                                       isOpcacheProperlySetup: true,
                                })
                        );
 
@@ -276,6 +280,7 @@ describe('OC.SetupChecks tests', function() {
                                        forwardedForHeadersWorking: true,
                                        isCorrectMemcachedPHPModuleInstalled: false,
                                        hasPassedCodeIntegrityCheck: true,
+                                       isOpcacheProperlySetup: true,
                                })
                        );
 
@@ -304,6 +309,7 @@ describe('OC.SetupChecks tests', function() {
                                        reverseProxyDocs: 'https://docs.owncloud.org/foo/bar.html',
                                        isCorrectMemcachedPHPModuleInstalled: true,
                                        hasPassedCodeIntegrityCheck: true,
+                                       isOpcacheProperlySetup: true,
                                })
                        );
 
@@ -353,6 +359,7 @@ describe('OC.SetupChecks tests', function() {
                                        phpSupported: {eol: true, version: '5.4.0'},
                                        isCorrectMemcachedPHPModuleInstalled: true,
                                        hasPassedCodeIntegrityCheck: true,
+                                       isOpcacheProperlySetup: true,
                                })
                        );
 
@@ -364,6 +371,36 @@ describe('OC.SetupChecks tests', function() {
                                done();
                        });
                });
+
+               it('should return an info if server has no proper opcache', function(done) {
+                       var async = OC.SetupChecks.checkSetup();
+
+                       suite.server.requests[0].respond(
+                               200,
+                               {
+                                       'Content-Type': 'application/json'
+                               },
+                               JSON.stringify({
+                                       isUrandomAvailable: true,
+                                       securityDocs: 'https://docs.owncloud.org/myDocs.html',
+                                       serverHasInternetConnection: true,
+                                       isMemcacheConfigured: true,
+                                       forwardedForHeadersWorking: true,
+                                       isCorrectMemcachedPHPModuleInstalled: true,
+                                       hasPassedCodeIntegrityCheck: true,
+                                       isOpcacheProperlySetup: false,
+                                       phpOpcacheDocumentation: 'https://example.org/link/to/doc',
+                               })
+                       );
+
+                       async.done(function( data, s, x ){
+                               expect(data).toEqual([{
+                                               msg: 'The PHP Opcache is not properly configured. <a target="_blank" rel="noreferrer" href="https://example.org/link/to/doc">For better performance we recommend ↗</a> to use following settings in the <code>php.ini</code>:' + "<pre><code>opcache.enable=On\nopcache.enable_cli=1\nopcache.interned_strings_buffer=8\nopcache.max_accelerated_files=10000\nopcache.memory_consumption=128\nopcache.save_comments=1\nopcache.revalidate_freq=1</code></pre>",
+                                               type: OC.SetupChecks.MESSAGE_TYPE_INFO
+                                       }]);
+                               done();
+                       });
+               });
        });
 
        describe('checkGeneric', function() {
index d9e4846672c542b01e21fc5f8f0fecda2d4509a3..016f6a1dab275bf155124ecad28fd54a1ae2467a 100644 (file)
@@ -26,6 +26,7 @@
 
 namespace OC\Settings\Controller;
 
+use bantu\IniGetWrapper\IniGetWrapper;
 use GuzzleHttp\Exception\ClientException;
 use OC\AppFramework\Http;
 use OC\IntegrityCheck\Checker;
@@ -354,6 +355,42 @@ Raw output
                return $response;
        }
 
+       /**
+        * Checks whether a PHP opcache is properly set up
+        * @return bool
+        */
+       private function isOpcacheProperlySetup() {
+               $iniWrapper = new IniGetWrapper();
+
+               $isOpcacheProperlySetUp = true;
+
+               if(!$iniWrapper->getBool('opcache.enable')) {
+                       $isOpcacheProperlySetUp = false;
+               }
+
+               if(!$iniWrapper->getBool('opcache.save_comments')) {
+                       $isOpcacheProperlySetUp = false;
+               }
+
+               if(!$iniWrapper->getBool('opcache.enable_cli')) {
+                       $isOpcacheProperlySetUp = false;
+               }
+
+               if($iniWrapper->getNumeric('opcache.max_accelerated_files') < 10000) {
+                       $isOpcacheProperlySetUp = false;
+               }
+
+               if($iniWrapper->getNumeric('opcache.memory_consumption') < 128) {
+                       $isOpcacheProperlySetUp = false;
+               }
+
+               if($iniWrapper->getNumeric('opcache.interned_strings_buffer') < 8) {
+                       $isOpcacheProperlySetUp = false;
+               }
+
+               return $isOpcacheProperlySetUp;
+       }
+
        /**
         * @return DataResponse
         */
@@ -372,6 +409,8 @@ Raw output
                                'isCorrectMemcachedPHPModuleInstalled' => $this->isCorrectMemcachedPHPModuleInstalled(),
                                'hasPassedCodeIntegrityCheck' => $this->checker->hasPassedCheck(),
                                'codeIntegrityCheckerDocumentation' => $this->urlGenerator->linkToDocs('admin-code-integrity'),
+                               'isOpcacheProperlySetup' => $this->isOpcacheProperlySetup(),
+                               'phpOpcacheDocumentation' => $this->urlGenerator->linkToDocs('admin-php-opcache'),
                        ]
                );
        }
index f087fec2105107a92a68a7b63321ea095fa3db87..e600f7e5e9cd4964fb7afc8fb0bf9d2e6e8ae307 100644 (file)
@@ -311,6 +311,14 @@ class CheckSetupControllerTest extends TestCase {
                        ->method('linkToDocs')
                        ->with('admin-reverse-proxy')
                        ->willReturn('reverse-proxy-doc-link');
+               $this->urlGenerator->expects($this->at(3))
+                       ->method('linkToDocs')
+                       ->with('admin-code-integrity')
+                       ->willReturn('http://doc.owncloud.org/server/go.php?to=admin-code-integrity');
+               $this->urlGenerator->expects($this->at(4))
+                       ->method('linkToDocs')
+                       ->with('admin-php-opcache')
+                       ->willReturn('http://doc.owncloud.org/server/go.php?to=admin-php-opcache');
 
                $expected = new DataResponse(
                        [
@@ -328,7 +336,9 @@ class CheckSetupControllerTest extends TestCase {
                                'reverseProxyDocs' => 'reverse-proxy-doc-link',
                                'isCorrectMemcachedPHPModuleInstalled' => true,
                                'hasPassedCodeIntegrityCheck' => null,
-                               'codeIntegrityCheckerDocumentation' => null,
+                               'codeIntegrityCheckerDocumentation' => 'http://doc.owncloud.org/server/go.php?to=admin-code-integrity',
+                               'isOpcacheProperlySetup' => false,
+                               'phpOpcacheDocumentation' => 'http://doc.owncloud.org/server/go.php?to=admin-php-opcache',
                        ]
                );
                $this->assertEquals($expected, $this->checkSetupController->check());