Skip to content

Repository files navigation

Tracy Flight Panel Extensions

This is a set of extensions to make working with Flight a little richer.

  • Flight - Analyze all Flight variables.
  • Database - Analyze all queries that have run on the page (if you correctly initiate the database connection)
  • Request - Analyze all $_SERVER variables and examine all global payloads ($_GET, $_POST, $_FILES)
  • Session - Analyze all $_SESSION variables if sessions are active.
  • Twig - Analyze Twig template render time, memory, and which templates/blocks/macros ran (optional; requires twig/twig)

This is the Panel

Flight Bar

And each panel displays very helpful information about your application!

Flight Data Flight Database Flight Request

Installation

Run composer require flightphp/tracy-extensions --dev and you're on your way!

Configuration

There is very little configuration you need to do to get this started. You will need to initiate the Tracy debugger prior to using this https://tracy.nette.org/en/guide:

<?php

use Tracy\Debugger;
use flight\debug\tracy\TracyExtensionLoader;

// bootstrap code
require __DIR__ . '/vendor/autoload.php';

Debugger::enable();
// You may need to specify your environment with Debugger::enable(Debugger::DEVELOPMENT)

// if you use database connections in your app, there is a 
// required PDO wrapper to use ONLY IN DEVELOPMENT (not production please!)
// PdoQueryCapture extends Flight's SimplePdo (recommended) so you get all the
// helper methods (fetchAll, insert, update, etc) + automatic query capture for Tracy.
// It has a constructor compatible with PDO/SimplePdo.
$pdo = new PdoQueryCapture('sqlite:test.db', 'user', 'pass');
// or if you attach this to the Flight framework
Flight::register('db', PdoQueryCapture::class, ['sqlite:test.db', 'user', 'pass']);
// now whenever you make a query (via any method) it will capture the time, query, and parameters

// For full APM query tracking (beyond Tracy), install flightphp/apm and use:
// $db->logQueries() or enable via options; it fires the 'flight.db.queries' event.

// This connects the dots
if(Debugger::$showBar === true) {
	new TracyExtensionLoader(Flight::app());
}

// more code

Flight::start();

Twig panel (optional)

If your app uses Twig, you can show template metrics on the Tracy bar. Create a Twig Profile, attach ProfilerExtension to your environment, then pass that profile into the loader. Attach profiling only in development.

<?php

use flight\debug\tracy\TracyExtensionLoader;
use flight\debug\tracy\TwigTracyExtension;
use Tracy\Debugger;
use Twig\Environment;
use Twig\Extension\ProfilerExtension;
use Twig\Loader\FilesystemLoader;
use Twig\Profiler\Profile;

$loader = new FilesystemLoader(__DIR__ . '/views');
$twig = new Environment($loader, [
	'debug' => true,
	'cache' => false,
]);

// Optional: expose Tracy dump helpers in templates ({{ dump(var) }}, {{ bdump(var) }}, {{ dumpe(var) }})
$twig->addExtension(new TwigTracyExtension());

$tracyConfig = [];
if (Debugger::$showBar === true) {
	$profile = new Profile();
	$twig->addExtension(new ProfilerExtension($profile));
	$tracyConfig['twig_profile'] = $profile;
}

if (Debugger::$showBar === true) {
	new TracyExtensionLoader(Flight::app(), $tracyConfig);
}

// Map Flight::render() to Twig (example)
Flight::map('render', function (string $template, array $data = []) use ($twig) {
	if (substr($template, -5) !== '.twig') {
		$template .= '.twig';
	}
	echo $twig->render($template, $data);
});

The panel lists total render time/memory, template/block/macro call counts, and each template that rendered with its own time and memory. The Twig tab is hidden when no templates were rendered for the request.

About

A set of panels in Tracy's debug tool specifically for Flight

Topics

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages