PHP Custom Segments


Custom segments

What are segments?

Segments represents the tasks performed during the current execution cycle.

Thanks to Palzin Monitor you are able to put everything you want in your transaction's timeline getting a real-time feedback about the execution of a custom code block inside your app:

  • Http call to external services (webhooks, integration, etc.)
  • Functions that deal with files (pdf, excel, images)
  • Data manipulation processes (import/export, data aggregation, etc.)

and anything else you think is relevant to monitor how your application is behaving.

Add Segments (short form)

This is the most easy way to wrap a code block into a segment:

$palzin->addSegment(function () {
    
    // Code block that you want add to the transaction timeline.
    // DB queries, http calls, etc.
    
}, 'type', 'label');

The code block inside the callback will be transparently executed, and your script will continue its execution normally. Palzin Monitor will works under the hood to profile execution performance.

Here is an example of how the segment will appear in the timeline:

Timeline

As showed in the example above a new segment is built with two input parameters:

Parameter Required Description
type YES This is the master category of your segments
label NO Human readable label or specific task's name that will be used as label inside the timeline. Otherwise type is used.

Think about how database queries is reported. There is one master category like mysql but each query has its own custom label that simply is an extract of the sql code.

  • mysql: master type
  • select * from table: task name

In this way you can mark toghether the statements related to the same topic or service, using something like mysql as type parameter and use the specific query string or task name as label for each statements of this type.

Add Segments (extended code)

You can use startSegment() method on the Palzin Monitor instance to manually control the monitoring of a code block:

/* 
 * Create a new "segment" that will be automatically attached 
 * to the current transaction.
 */
$segment = $palzin->startSegment('type', 'label');

try {

    /*
     * Here is your code
     */

} catch(UnauthorizedException $exception) {

    /*
     * Report the exception to Palzin Monitor for diagnosis purpose.
     */
    $palzin->reportException($exception);
    
} finally {
    /*
     * Close the code block with end() method to stop monitoring.
     */
    $segment->end();
}

As you can see in the example above we use try/catch/finally to be sure that your code block is monitored in a consistent way.

Or you can use addSegment() that implements this strategy for you as seen above:

$palzin->addSegment(function () {
    
    /*
     * Write here your code block
     */
     
}, 'type', 'label');

Custom Segment

Segments tips and tricks

It may happen that you aren't able to wrap directly the statement to trace performance, so it might be useful to add a segment after the task has been executed.

In this case you can create the segment manually passing the start time in the start() method, and the duration in the end() method, as shown in the example below:

/*
 * Http call to an external url could be perfromed with following result.
 */
$url = 'https://www.ultimate.dev';
$duration_ms = 10; // Duration in milliseconds

/** 
 * -----------------------------------------
 * Create the segment manually setting timing information.
 * -----------------------------------------
 */

// convert duration in seconds
$timespamp_start = microtime(true) - ($duration_ms/1000) 

$palzin->startSegment('api', $url)
    ->start($timespamp_start)
    ->end($duration_ms);

Access the Palzin Monitor instance

If you are using a framework specific library (Laravel, Symfony) you have several options to access the current Palzin Monitor instance to call addSegment() method. Check it out on their specific documetation:

Last updated: 1 year ago

Want to get started with Palzin Monitor? We offer a no-strings-attached
15 days trial. No credit card required.

It takes less than a minutes to setup your first monitoring.