1. Go to this page and download the library: Download makinacorpus/profiling library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
makinacorpus / profiling example snippets
return [
// ... Your other bundles.
MakinaCorpus\Profiling\Bridge\Symfony\ProfilingBundle::class => ['all' => true],
];
use MakinaCorpus\Profiling\Profiler\DefaultProfiler;
// First, create a profiler. If you are using a framework, you should
// inject in your dependency injection container a global instance.
$profiler = DefaultProfiler();
// Start a new top-level timer, which has no parent.
// Please note that name is optional, it's purely informational.
// A unique identifier will be generated if you don't pass one.
// You need a name later if you wish to stop one timer without
// stopping all the others.
$timer = $profiler->start('doing-something');
// Each time you start a new top-level profiler, it is decoupled from
// the other one, they won't interact with each-ohter.
$otherTimer = $profiler->start('unrelated-other-something');
// From your first timer, you can start children.
$timer1 = $timer->start('1');
$timer2 = $timer->start('2');
// Then subchildren.
$timer21 = $timer2->start('2.1');
$timer22 = $timer2->start('2.2');
// From a parent timer, you can choose stopping only one child.
// You can stop the child directly as well.
// The following two lines are equivalent gives a strictly identical result.
$timer2 = $timer2->stop('2.2');
$timer22->stop();
echo $timer2->isRunning(); // true
echo $timer21->isRunning(); // true
echo $timer22->isRunning(); // false
// When you close a timer, all the children will be stopped as well.
$timer2 = $timer->stop();
echo $timer2->isRunning(); // false
echo $timer21->isRunning(); // false
echo $timer22->isRunning(); // false
// You can fetch timings.
// All given numbers are float, reprensenting a number of milliseconds.
echo $timer2->getElapsedTime(); // 2.2124548
echo $timer21->getElapsedTime(); // 1.88878889
echo $timer22->getElapsedTime(); // 0.98897574
// You can fully reset the global state, which will also free the
// memory it took.
// This is precious for long running deamons, such as message bus
// consumers which will remain alive for hours.
$profiler->flush();
\assert($profiler instanceof \MakinaCorpus\Profiling\Profiler);
$timer = $profiler->gauge(
// Name in your schema.
'some_gauge',
// Label values, considering you kept "action" and "method"
// in the (action, method, foo, bar) list:
[
$profiler->getContext()->route,
$profiler->getContext()->method,
'some_value',
'some_other_value',
],
// Arbitrary value you actually measure.
123.456
);
\assert($profiler instanceof \MakinaCorpus\Profiling\Profiler);
$timer = $profiler->counter(
// Name in your schema.
'some_counter',
// Label values, considering you kept "action" and "method"
// in the (action, method, foo) list:
[
$profiler->getContext()->route,
$profiler->getContext()->method,
'some_value',
],
// Arbitrary increment value you actually measure.
// You can omit this parameter and increment will be 1.
3,
);
\assert($profiler instanceof \MakinaCorpus\Profiling\Profiler);
try {
$timer = $profiler->timer();
// Something happens, then...
} finally {
if ($timer) {
$duration = $timer->getElapsedTime();
$profiler->summary(
'something_duration_msec',
// Label values, considering you kept "action" and "method"
// in the (action, method, foo) list:
[
$profiler->getContext()->route,
$profiler->getContext()->method,
'some_value',
],
// Arbitrary value you actually measure.
$duration,
);
}
}
\assert($profiler instanceof \MakinaCorpus\Profiling\Profiler);
try {
$timer = $profiler->timer();
// Something happens, then...
} finally {
if ($timer) {
$duration = $timer->getElapsedTime();
$profiler->histogram(
'something_duration_msec',
// Label values, considering you kept "action" and "method"
// in the (action, method, foo) list:
[
$profiler->getContext()->route,
$profiler->getContext()->method,
'some_value',
],
// Arbitrary value you actually measure.
$duration,
);
}
}
namespace MyVendor\MyApp\SomeNamespace;
use MakinaCorpus\Profiling\ProfilerAware;
use MakinaCorpus\Profiling\ProfilerAwareTrait;
/**
* Implementing the interface allow autoconfiguration.
*/
class SomeService implements ProfilerAware
{
use ProfilerAwareTrait;
}
namespace MyVendor\MyApp\SomeNamespace;
use MakinaCorpus\Profiling\ProfilerAware;
use MakinaCorpus\Profiling\ProfilerAwareTrait;
/**
* Implementing the interface allows autoconfiguration.
*/
class SomeService implements ProfilerAware
{
/**
* Using the trait provides a default working implementation.
*/
use ProfilerAwareTrait;
public function doSomething()
{
$timer = $this->getProfiler()->start('something');
try {
$timer->start('something-else');
$this->doSomethingElse();
$timer->stop('something-else');
$timer->start('something-other');
$this->doSomethingElse();
$timer->stop('something-other');
$timer->start('something-that-fails');
throw new \Exception("Oups, something bad happened.");
$timer->stop('something-that-fails');
} finally {
// We do heavily recommend that use the try/finally
// pattern to ensure that exceptions will not betry
// your timers.
// The last stop() call within the try block will never
// be called, by stopping the parent timer here, it
// stops the child as well.
$timer->stop();
}
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.