MySQL Report API

Since mysqlreport 2.0.0 there is a completely rewritten API to add your own panels/infoboxes to the backend module.

The infoboxes will be realized with the f:be.infobox ViewHelper of TYPO3.

Infobox Registry

If you want to extend pages of mysqlreport with further infoboxes you have to add some lines to the Service.yaml of your extension.

Example content of the Service.yaml:

services:
  ...
  YourVendor\YourExtKey\InfoBox\Information\ConnectionInfoBox:
    tags:
      - name: 'mysqlreport.infobox.[pageIdentifier]'
        priority: 60
Copied!

As you see, each infobox in the backend module has its own PHP class. Please attach the tag name for the page you want to modify, to each of your infobox classes. With priority you can change the loading order of the infoboxes on a specific page.

Currently, following tags are available:

  • mysqlreport.infobox.information
  • mysqlreport.infobox.innodb
  • mysqlreport.infobox.misc
  • mysqlreport.infobox.query_cache
  • mysqlreport.infobox.table_cache
  • mysqlreport.infobox.thread_cache

Your own Infobox

Create a new PHP class which extends the AbstractInfoBox class of mysqlreport:

<?php

declare(strict_types=1);

namespace StefanFroemken\Mysqlreport\InfoBox\Overview;

use StefanFroemken\Mysqlreport\InfoBox\AbstractInfoBox;
use StefanFroemken\Mysqlreport\Menu\Page;

class AbortedConnectsInfoBox extends AbstractInfoBox
{
    protected $pageIdentifier = 'overview';

    protected $title = 'Aborted Connects';

    public function renderBody(Page $page): string
    {
        if (!isset($page->getStatusValues()['Aborted_connects'])) {
            $this->shouldBeRendered = false;
            return '';
        }

        $content = [];
        $content[] = 'You have %d aborted connects.';

        return sprintf(
            implode(' ', $content),
            $page->getStatusValues()['Aborted_connects']
        );
    }
}
Copied!

You have to set the pageIdentifier to show your infobox on the right view in backend module.

Set a title. It will be used as the title in the infobox.

The content of the infobox has to be rendered in the renderBody method. Over the $page argument you have access to all the status and variable values of your MySQL/MariaDB server.

Highlight Infobox

The AbstractInfoBox class comes with a setState method which allows values from StateEnumeration.

  • -2 or StateEnumeration::STATE_NOTICE
  • -1 or StateEnumeration::STATE_INFO
  • 0 or StateEnumeration::STATE_OK
  • 1 or StateEnumeration::STATE_WARNING
  • 2 or StateEnumeration::STATE_ERROR

Unordered List

Sometimes it is useful to show some values of your server as list. The list will be shown at the bottom of the infobox.

// Results in <ul><li>Value is OK</li></ul>
$this->addUnorderedListEntry('Value is OK');

// Results in <ul><li><strong>Aborted connects:</strong> 25</li></ul>
$this->addUnorderedListEntry(
    $page->getStatusValues()['Aborted_connects'],
    'Aborted connects'
);
Copied!

Disable Infobox

If a server variable is not available for a server, it may help to hide the infobox in backend module.

Use $this->shouldBeRendered = false; in renderBody of your class.

Use own Template

By default mysqlreport uses the template from:

EXT:mysqlreport/Resources/Private/Templates/InfoBox/Default.html

Use template property to define your own template for rendering of your infobox:

protected $template = 'EXT:[your_ext_key]/Resources/Private/Templates/InfoBox/MyBetterTemplate.html'
Copied!