Skip to content

Instantly share code, notes, and snippets.

@mastermatt
Created April 22, 2013 16:30
Show Gist options
  • Save mastermatt/5436504 to your computer and use it in GitHub Desktop.
Save mastermatt/5436504 to your computer and use it in GitHub Desktop.

Revisions

  1. Matt R. Wilson created this gist Apr 22, 2013.
    59 changes: 59 additions & 0 deletions gistfile1.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,59 @@
    <?php

    /**
    * A wrapper for the NewRelic API
    *
    * Method descriptions are partials. Check the site for more.
    * @link https://newrelic.com/docs/php/the-php-api
    *
    * Started out as a gist from devster {@link https://gist.github.com/devster/1885331}
    * I removed its static functionality and added the docblock method annotations
    *
    * @method bool setAppname(string $name, string $license = '', bool $xmit = false) Sets the name of the application to name
    * @method void noticeError(string $message, Exception $exception) Report an error at this line of code, with a complete stack trace
    * @method void nameTransaction(string $string) Sets the name of the transaction to the specified strin
    * @method void endOfTransaction() Stop recording the web transaction immediately
    * @method void endTransaction(bool $ignore = false ) Marks the end time of the transaction but takes no other action
    * @method void startTransaction(string $appname, string $license = '' ) This will perform the same operations that occur when the script was first started
    * @method void ignoreTransaction() Do not generate metrics for this transaction
    * @method void ignoreApdex() Do not generate Apdex metrics for this transaction
    * @method void backgroundJob(bool $flag = true) Mark the current transaction as a background job
    * @method void captureParams(string $enable = 'on') Enables the capturing of URL parameters for displaying in transaction traces
    * @method void customMetric(string $metric_name, Double $value) Adds a custom metric with the specified name and value
    * @method void addCustomParameter(string $key, string $value ) Add a custom parameter to the current web transaction with the specified value
    * @method void addCustomTracer(callable $function_name) Allows you to add user defined functions or methods to the list to be instrumented
    * @method String getBrowserTimingHeader(bool $in_script_tags = true) Returns the JavaScript string to inject as part of the header for browser timing (real user monitoring)
    * @method String getBrowserTimingFooter(bool $in_script_tags = true) Returns the JavaScript string to inject at the very end of the HTML output for browser timing (real user monitoring)
    * @method void disableAutorum() Prevents the output filter from attempting to insert RUM JavaScript for this current transaction, useful for AJAX calls
    * @method void setUserAttributes(String $user, String, $account, String $product) Adds the three parameter strings to collected browser traces
    */
    class NewRelic
    {
    protected $_useService;

    public function __construct( $allow = true )
    {
    $this->_useService = $allow && extension_loaded( 'newrelic' );
    }

    public function __call($method, $params)
    {
    if(!$this->_useService)
    return false;

    $function = $this->transformFunctionName($method);

    return call_user_func_array($function, $params);
    }

    protected function transformFunctionName($name)
    {
    $tab = preg_split('/(?=[A-Z])/', $name, -1, PREG_SPLIT_NO_EMPTY);

    if ($tab[0] == 'newrelic') array_shift ($tab);

    $loweredTab = array_map('strtolower', $tab);

    return 'newrelic_' . implode('_', $loweredTab);
    }
    }