From 34e0798b00e8cd5871082924a5a5d345bdf7a827 Mon Sep 17 00:00:00 2001 From: Hugo Loza Date: Mon, 22 Apr 2013 18:08:13 -0400 Subject: [PATCH 1/2] NewRelic API applied to report methods and controllers instead of sysGeneric When NewRelic monitors ProcessMaker as application doesn't recognize the framework urlpath rules and therefore any script is being reported as sysGeneric I've included some lines in sysGeneric using NewRelic API in order to report the real script name as name of each transaction. At same time I've included custom parameters to have useful information for each trannsaction such as lang, workspace, skin Signed-off-by: Hugo Loza --- workflow/public_html/sysGeneric.php | 61 ++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/workflow/public_html/sysGeneric.php b/workflow/public_html/sysGeneric.php index 2233bef8b..bcf80e64a 100755 --- a/workflow/public_html/sysGeneric.php +++ b/workflow/public_html/sysGeneric.php @@ -27,6 +27,37 @@ * this file is used initialize main variables, redirect and dispatch all requests */ + +function transactionLog($transactionName){ + if (extension_loaded('newrelic')) { + $baseName="ProcessMaker"; + + //Application base name + newrelic_set_appname ($baseName); + + + //Custom parameters + if(defined("SYS_SYS")) newrelic_add_custom_parameter ("workspace", SYS_SYS); + if(defined("SYS_LANG")) newrelic_add_custom_parameter ("lang", SYS_LANG); + if(defined("SYS_SKIN")) newrelic_add_custom_parameter ("skin", SYS_SKIN); + if(defined("SYS_COLLECTION")) newrelic_add_custom_parameter ("collection", SYS_COLLECTION); + if(defined("SYS_TARGET")) newrelic_add_custom_parameter ("target", SYS_TARGET); + if(defined("SYS_URI")) newrelic_add_custom_parameter ("uri", SYS_URI); + if(defined("PATH_CORE")) newrelic_add_custom_parameter ("path_core", PATH_CORE); + if(defined("PATH_DATA_SITE")) newrelic_add_custom_parameter ("path_site", PATH_DATA_SITE); + + //Show correct transaction name + if(defined("SYS_SYS")){ + newrelic_set_appname ("PM-".SYS_SYS.";$baseName"); + + } + if(defined("PATH_CORE")){ + $transactionName=str_replace(PATH_CORE,"",$transactionName); + } + + newrelic_name_transaction ($transactionName); + } +} // Defining the PATH_SEP constant, he we are defining if the the path separator symbol will be '\\' or '/' define( 'PATH_SEP', '/' ); @@ -238,6 +269,7 @@ ini_set('session.cookie_lifetime', $timelife); session_start(); + $e_all = defined( 'E_DEPRECATED' ) ? E_ALL & ~ E_DEPRECATED : E_ALL; $e_all = defined( 'E_STRICT' ) ? $e_all & ~ E_STRICT : $e_all; $e_all = $config['debug'] ? $e_all : $e_all & ~ E_NOTICE; @@ -325,6 +357,9 @@ if (Bootstrap::virtualURI( $_SERVER['REQUEST_URI'], $virtualURITable, $realPath $pluginFilename = PATH_PLUGINS . $pluginFolder . PATH_SEP . 'public_html' . PATH_SEP . $filePath; if (file_exists( $pluginFilename )) { + //NewRelic Snippet - By JHL + transactionLog($pluginFilename); + Bootstrap::streamFile( $pluginFilename ); } die(); @@ -347,6 +382,9 @@ if (Bootstrap::virtualURI( $_SERVER['REQUEST_URI'], $virtualURITable, $realPath $fileToBeStreamed = str_replace( "/skin/", PATH_CUSTOM_SKINS, $_SERVER['REQUEST_URI'] ); if (file_exists( $fileToBeStreamed )) { + //NewRelic Snippet - By JHL + transactionLog($fileToBeStreamed); + Bootstrap::streamFile( $fileToBeStreamed ); } die(); @@ -355,6 +393,8 @@ if (Bootstrap::virtualURI( $_SERVER['REQUEST_URI'], $virtualURITable, $realPath case 'jsMethod': Bootstrap::parseURI( getenv( "REQUEST_URI" ) ); $filename = PATH_METHODS . SYS_COLLECTION . '/' . SYS_TARGET . '.js'; + //NewRelic Snippet - By JHL + transactionLog($filename); Bootstrap::streamFile( $filename ); die(); break; @@ -370,6 +410,9 @@ if (Bootstrap::virtualURI( $_SERVER['REQUEST_URI'], $virtualURITable, $realPath } else { $realPath = explode( '?', $realPath ); $realPath[0] .= strpos( basename( $realPath[0] ), '.' ) === false ? '.php' : ''; + //NewRelic Snippet - By JHL + transactionLog($realPath[0]); + Bootstrap::streamFile( $realPath[0] ); die(); } @@ -451,6 +494,8 @@ $oHeadPublisher = & headPublisher::getSingleton(); if (! defined( 'PATH_DATA' ) || ! file_exists( PATH_DATA )) { // new installer, extjs based define( 'PATH_DATA', PATH_C ); + //NewRelic Snippet - By JHL + transactionLog(PATH_CONTROLLERS.'installer.php'); require_once (PATH_CONTROLLERS . 'installer.php'); $controller = 'Installer'; @@ -468,6 +513,9 @@ if (! defined( 'PATH_DATA' ) || ! file_exists( PATH_DATA )) { ) )) { $installer = new $controller(); $installer->setHttpRequestData( $_REQUEST ); + //NewRelic Snippet - By JHL + transactionLog($controllerAction); + $installer->call( $controllerAction ); } else { $_SESSION['phpFileNotFound'] = $_SERVER['REQUEST_URI']; @@ -508,6 +556,8 @@ if (defined( 'SYS_TEMP' ) && SYS_TEMP != '') { } else { //when we are in global pages, outside any valid workspace if (SYS_TARGET === 'newSite') { $phpFile = G::ExpandPath( 'methods' ) . SYS_COLLECTION . "/" . SYS_TARGET . '.php'; + //NewRelic Snippet - By JHL + transactionLog($phpFile); require_once ($phpFile); die(); } else { @@ -549,6 +599,8 @@ define( 'PATH_IMAGES_ENVIRONMENT_USERS', PATH_DATA_SITE . 'usersPhotographies' . define( 'SERVER_NAME', $_SERVER['SERVER_NAME'] ); define( 'SERVER_PORT', $_SERVER['SERVER_PORT'] ); + + // create memcached singleton Bootstrap::LoadClass( 'memcached' ); $memcache = & PMmemcached::getSingleton( SYS_SYS ); @@ -702,6 +754,8 @@ if (substr( SYS_COLLECTION, 0, 8 ) === 'gulliver') { $phpFile = $aAux[0]; if ($extension != 'php') { + //NewRelic Snippet - By JHL + transactionLog($phpFile); Bootstrap::streamFile( $phpFile ); die(); } @@ -858,11 +912,16 @@ if (! defined( 'EXECUTE_BY_CRON' )) { */ if ($isControllerCall) { //Instance the Controller object and call the request method $controller = new $controllerClass(); - $controller->setHttpRequestData( $_REQUEST ); + $controller->setHttpRequestData( $_REQUEST );//NewRelic Snippet - By JHL + transactionLog($controllerAction); $controller->call( $controllerAction ); } elseif ($isRestRequest) { + //NewRelic Snippet - By JHL + transactionLog($restConfig.$restApiClassPath.SYS_TARGET); Bootstrap::dispatchRestService( SYS_TARGET, $restConfig, $restApiClassPath ); } else { + //NewRelic Snippet - By JHL + transactionLog($phpFile); require_once $phpFile; } From a120529f42ed6328c8a14cc66c27ed39404333e6 Mon Sep 17 00:00:00 2001 From: Hugo Loza Date: Wed, 24 Apr 2013 11:29:08 -0400 Subject: [PATCH 2/2] Coding Style applied to NewRelic snippet Coding Style applied to NewRelic snippet to follow COLOSA standards. Great! --- workflow/public_html/sysGeneric.php | 36 ++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/workflow/public_html/sysGeneric.php b/workflow/public_html/sysGeneric.php index 897deb1f5..2500a01ee 100755 --- a/workflow/public_html/sysGeneric.php +++ b/workflow/public_html/sysGeneric.php @@ -37,24 +37,38 @@ function transactionLog($transactionName){ //Custom parameters - if(defined("SYS_SYS")) newrelic_add_custom_parameter ("workspace", SYS_SYS); - if(defined("SYS_LANG")) newrelic_add_custom_parameter ("lang", SYS_LANG); - if(defined("SYS_SKIN")) newrelic_add_custom_parameter ("skin", SYS_SKIN); - if(defined("SYS_COLLECTION")) newrelic_add_custom_parameter ("collection", SYS_COLLECTION); - if(defined("SYS_TARGET")) newrelic_add_custom_parameter ("target", SYS_TARGET); - if(defined("SYS_URI")) newrelic_add_custom_parameter ("uri", SYS_URI); - if(defined("PATH_CORE")) newrelic_add_custom_parameter ("path_core", PATH_CORE); - if(defined("PATH_DATA_SITE")) newrelic_add_custom_parameter ("path_site", PATH_DATA_SITE); + if(defined("SYS_SYS")){ + newrelic_add_custom_parameter ("workspace", SYS_SYS); + } + if(defined("SYS_LANG")){ + newrelic_add_custom_parameter ("lang", SYS_LANG); + } + if(defined("SYS_SKIN")){ + newrelic_add_custom_parameter ("skin", SYS_SKIN); + } + if(defined("SYS_COLLECTION")){ + newrelic_add_custom_parameter ("collection", SYS_COLLECTION); + } + if(defined("SYS_TARGET")){ + newrelic_add_custom_parameter ("target", SYS_TARGET); + } + if(defined("SYS_URI")){ + newrelic_add_custom_parameter ("uri", SYS_URI); + } + if(defined("PATH_CORE")){ + newrelic_add_custom_parameter ("path_core", PATH_CORE); + } + if(defined("PATH_DATA_SITE")){ + newrelic_add_custom_parameter ("path_site", PATH_DATA_SITE); + } //Show correct transaction name if(defined("SYS_SYS")){ - newrelic_set_appname ("PM-".SYS_SYS.";$baseName"); - + newrelic_set_appname ("PM-".SYS_SYS.";$baseName"); } if(defined("PATH_CORE")){ $transactionName=str_replace(PATH_CORE,"",$transactionName); } - newrelic_name_transaction ($transactionName); } }