Version Notes
No notes
Download this release
Release Info
Developer | Yireo |
Extension | Yireo_NewRelic |
Version | 1.2.0 |
Comparing to | |
See all releases |
Code changes from version 1.1.0 to 1.2.0
- app/code/community/Varien/Profiler.php +19 -0
- app/code/community/Yireo/NewRelic/Block/Rum/Timing/Abstract.php +41 -0
- app/code/community/Yireo/NewRelic/Block/Rum/Timing/Footer.php +22 -0
- app/code/community/Yireo/NewRelic/Block/Rum/Timing/Header.php +22 -0
- app/code/community/Yireo/NewRelic/Helper/Data.php +95 -8
- app/code/community/Yireo/NewRelic/Model/Observer.php +114 -64
- app/code/community/Yireo/NewRelic/Model/Profiler.php +42 -25
- app/code/community/Yireo/NewRelic/etc/config.xml +35 -10
- app/code/community/Yireo/NewRelic/etc/system.xml +34 -4
- app/design/frontend/base/default/layout/newrelic.xml +11 -0
- app/design/frontend/base/default/template/newrelic/rum/timing/content.phtml +3 -0
- app/etc/modules/Yireo_NewRelic.xml +1 -1
- package.xml +1 -1
app/code/community/Varien/Profiler.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* NewRelic plugin for Magento
|
4 |
+
*
|
5 |
+
* @package Yireo_NewRelic
|
6 |
+
* @author Yireo
|
7 |
+
* @copyright Copyright (c) 2013 Yireo (http://www.yireo.com/)
|
8 |
+
* @license Open Software License
|
9 |
+
*/
|
10 |
+
|
11 |
+
if(class_exists('Yireo_NewRelic_Model_Profiler')) {
|
12 |
+
class Varien_Profiler extends Yireo_NewRelic_Model_Profiler
|
13 |
+
{
|
14 |
+
/*
|
15 |
+
* this is just to have the extended profiler class
|
16 |
+
* everything else is in the yireo profiler
|
17 |
+
*/
|
18 |
+
}
|
19 |
+
}
|
app/code/community/Yireo/NewRelic/Block/Rum/Timing/Abstract.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* NewRelic plugin for Magento
|
4 |
+
*
|
5 |
+
* @package Yireo_NewRelic
|
6 |
+
* @author Yireo (http://www.yireo.com/)
|
7 |
+
* @copyright Copyright (c) 2013 Yireo (http://www.yireo.com/)
|
8 |
+
* @license Open Source License
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Abstract block for RUM timing blocks
|
13 |
+
*
|
14 |
+
*/
|
15 |
+
abstract class Yireo_NewRelic_Block_Rum_Timing_Abstract extends Mage_Core_Block_Template {
|
16 |
+
|
17 |
+
public abstract function getContentHtml();
|
18 |
+
|
19 |
+
/**
|
20 |
+
* @return Yireo_NewRelic_Helper_Data
|
21 |
+
*/
|
22 |
+
protected function _getHelper()
|
23 |
+
{
|
24 |
+
return Mage::helper('newrelic');
|
25 |
+
}
|
26 |
+
|
27 |
+
protected function _canShow()
|
28 |
+
{
|
29 |
+
return $this->_getHelper()->isEnabled()
|
30 |
+
&& $this->_getHelper()->isUseRUM();
|
31 |
+
}
|
32 |
+
|
33 |
+
protected function _toHtml()
|
34 |
+
{
|
35 |
+
if (!$this->_canShow()) {
|
36 |
+
return '';
|
37 |
+
}
|
38 |
+
|
39 |
+
return parent::_toHtml();
|
40 |
+
}
|
41 |
+
}
|
app/code/community/Yireo/NewRelic/Block/Rum/Timing/Footer.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* NewRelic plugin for Magento
|
4 |
+
*
|
5 |
+
* @package Yireo_NewRelic
|
6 |
+
* @author Yireo (http://www.yireo.com/)
|
7 |
+
* @copyright Copyright (c) 2013 Yireo (http://www.yireo.com/)
|
8 |
+
* @license Open Source License
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Timing head block adding the rum track html
|
13 |
+
*/
|
14 |
+
class Yireo_NewRelic_Block_Rum_Timing_Footer extends Yireo_NewRelic_Block_Rum_Timing_Abstract
|
15 |
+
{
|
16 |
+
public function getContentHtml()
|
17 |
+
{
|
18 |
+
return (function_exists('newrelic_get_browser_timing_footer'))
|
19 |
+
? newrelic_get_browser_timing_footer(true)
|
20 |
+
: '';
|
21 |
+
}
|
22 |
+
}
|
app/code/community/Yireo/NewRelic/Block/Rum/Timing/Header.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* NewRelic plugin for Magento
|
4 |
+
*
|
5 |
+
* @package Yireo_NewRelic
|
6 |
+
* @author Yireo (http://www.yireo.com/)
|
7 |
+
* @copyright Copyright (c) 2013 Yireo (http://www.yireo.com/)
|
8 |
+
* @license Open Source License
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Timing head block adding the rum init html
|
13 |
+
*/
|
14 |
+
class Yireo_NewRelic_Block_Rum_Timing_Header extends Yireo_NewRelic_Block_Rum_Timing_Abstract
|
15 |
+
{
|
16 |
+
public function getContentHtml()
|
17 |
+
{
|
18 |
+
return (function_exists('newrelic_get_browser_timing_header'))
|
19 |
+
? newrelic_get_browser_timing_header(true)
|
20 |
+
: '';
|
21 |
+
}
|
22 |
+
}
|
app/code/community/Yireo/NewRelic/Helper/Data.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
-
* NewRelic plugin for Magento
|
4 |
*
|
5 |
* @package Yireo_NewRelic
|
6 |
* @author Yireo (http://www.yireo.com/)
|
@@ -8,7 +8,7 @@
|
|
8 |
* @license Open Source License
|
9 |
*/
|
10 |
|
11 |
-
class Yireo_NewRelic_Helper_Data extends Mage_Core_Helper_Abstract
|
12 |
{
|
13 |
/*
|
14 |
* Check whether this module can be used
|
@@ -17,19 +17,106 @@ class Yireo_NewRelic_Helper_Data extends Mage_Core_Helper_Abstract
|
|
17 |
* @param null
|
18 |
* @return bool
|
19 |
*/
|
20 |
-
public function isEnabled()
|
21 |
{
|
22 |
-
if(!extension_loaded('newrelic')) {
|
23 |
return false;
|
24 |
}
|
25 |
|
26 |
-
return
|
27 |
}
|
28 |
|
29 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
{
|
31 |
-
$
|
32 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
return $value;
|
34 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
}
|
1 |
<?php
|
2 |
/**
|
3 |
+
* NewRelic plugin for Magento
|
4 |
*
|
5 |
* @package Yireo_NewRelic
|
6 |
* @author Yireo (http://www.yireo.com/)
|
8 |
* @license Open Source License
|
9 |
*/
|
10 |
|
11 |
+
class Yireo_NewRelic_Helper_Data extends Mage_Core_Helper_Abstract
|
12 |
{
|
13 |
/*
|
14 |
* Check whether this module can be used
|
17 |
* @param null
|
18 |
* @return bool
|
19 |
*/
|
20 |
+
public function isEnabled()
|
21 |
{
|
22 |
+
if (!extension_loaded('newrelic')) {
|
23 |
return false;
|
24 |
}
|
25 |
|
26 |
+
return $this->getConfigFlag('enabled');
|
27 |
}
|
28 |
|
29 |
+
/*
|
30 |
+
* Return the appname
|
31 |
+
*
|
32 |
+
* @access public
|
33 |
+
* @param null
|
34 |
+
* @return string
|
35 |
+
*/
|
36 |
+
public function getAppName()
|
37 |
+
{
|
38 |
+
return $this->getConfigValue('appname');
|
39 |
+
}
|
40 |
+
|
41 |
+
/*
|
42 |
+
* Return the New Relic license
|
43 |
+
*
|
44 |
+
* @access public
|
45 |
+
* @param null
|
46 |
+
* @return string
|
47 |
+
*/
|
48 |
+
public function getLicense()
|
49 |
+
{
|
50 |
+
return $this->getConfigValue('license');
|
51 |
+
}
|
52 |
+
|
53 |
+
/*
|
54 |
+
* Return whether to use the xmit flag
|
55 |
+
*
|
56 |
+
* @access public
|
57 |
+
* @param null
|
58 |
+
* @return bool
|
59 |
+
*/
|
60 |
+
public function isUseXmit()
|
61 |
+
{
|
62 |
+
return $this->getConfigFlag('xmit');
|
63 |
+
}
|
64 |
+
|
65 |
+
/*
|
66 |
+
* Return whether to track the controller
|
67 |
+
*
|
68 |
+
* @access public
|
69 |
+
* @param null
|
70 |
+
* @return bool
|
71 |
+
*/
|
72 |
+
public function isTrackController()
|
73 |
{
|
74 |
+
return $this->getConfigFlag('track_controller');
|
75 |
+
}
|
76 |
+
|
77 |
+
/*
|
78 |
+
* Return whether to use Real User Monitoring
|
79 |
+
*
|
80 |
+
* @access public
|
81 |
+
* @param null
|
82 |
+
* @return bool
|
83 |
+
*/
|
84 |
+
public function isUseRUM()
|
85 |
+
{
|
86 |
+
return $this->getConfigFlag('real_user_monitoring');
|
87 |
+
}
|
88 |
+
|
89 |
+
/*
|
90 |
+
* Return a value from the configuration
|
91 |
+
*
|
92 |
+
* @access public
|
93 |
+
* @param null
|
94 |
+
* @return bool
|
95 |
+
*/
|
96 |
+
public function getConfigValue($key = null, $default_value = null)
|
97 |
+
{
|
98 |
+
$value = Mage::getStoreConfig('newrelic/settings/' . $key);
|
99 |
+
if (empty($value)) {
|
100 |
+
$value = $default_value;
|
101 |
+
}
|
102 |
return $value;
|
103 |
}
|
104 |
+
|
105 |
+
/*
|
106 |
+
* Return a boolean flag for the configuration
|
107 |
+
*
|
108 |
+
* @access public
|
109 |
+
* @param null
|
110 |
+
* @return bool
|
111 |
+
*/
|
112 |
+
public function getConfigFlag($key = null, $defaultValue = false)
|
113 |
+
{
|
114 |
+
$result = Mage::getStoreConfigFlag('newrelic/settings/' . $key);
|
115 |
+
if (empty($result)) {
|
116 |
+
$result = $defaultValue;
|
117 |
+
}
|
118 |
+
|
119 |
+
return $result;
|
120 |
+
}
|
121 |
+
|
122 |
}
|
app/code/community/Yireo/NewRelic/Model/Observer.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
-
* NewRelic plugin for Magento
|
4 |
*
|
5 |
* @package Yireo_NewRelic
|
6 |
* @author Yireo (http://www.yireo.com/)
|
@@ -8,54 +8,83 @@
|
|
8 |
* @license Open Source License
|
9 |
*/
|
10 |
|
11 |
-
class Yireo_NewRelic_Model_Observer
|
12 |
{
|
13 |
-
|
14 |
* Listen to the event controller_action_predispatch
|
15 |
-
*
|
16 |
* @access public
|
17 |
-
* @
|
18 |
* @return $this
|
19 |
*/
|
20 |
-
public function controllerActionPredispatch($observer)
|
21 |
{
|
22 |
-
|
23 |
-
|
|
|
|
|
|
|
|
|
24 |
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
|
31 |
-
|
32 |
-
|
33 |
}
|
34 |
-
|
35 |
return $this;
|
36 |
}
|
37 |
|
38 |
-
|
39 |
-
*
|
40 |
-
*
|
41 |
* @access public
|
42 |
-
* @
|
43 |
* @return $this
|
44 |
*/
|
45 |
-
|
46 |
{
|
47 |
-
|
48 |
-
if(Mage::app()->getStore()->isAdmin() == true) {
|
49 |
return $this;
|
50 |
}
|
51 |
|
52 |
-
|
53 |
-
if(
|
54 |
-
|
55 |
}
|
56 |
|
57 |
-
|
58 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
return $this;
|
60 |
}
|
61 |
|
@@ -64,18 +93,22 @@ class Yireo_NewRelic_Model_Observer
|
|
64 |
newrelic_add_custom_parameter('magento_request', Mage::getModel('core/url')->getRequest()->getRequestUri());
|
65 |
newrelic_add_custom_parameter('magento_store_id', Mage::app()->getStore()->getId());
|
66 |
|
67 |
-
// Get
|
68 |
$customer = Mage::getSingleton('customer/session')->getCustomer();
|
69 |
$customerName = trim($customer->getName());
|
70 |
-
if(empty($customerName)) $customerName = 'guest';
|
71 |
$customerEmail = trim($customer->getEmail());
|
72 |
-
|
|
|
|
|
|
|
|
|
|
|
73 |
newrelic_add_custom_parameter('magento_customer_email', $customerEmail);
|
74 |
newrelic_add_custom_parameter('magento_customer_name', $customerName);
|
75 |
|
76 |
// Get and set product-data
|
77 |
$product = Mage::registry('current_product');
|
78 |
-
if(!empty($product)) {
|
79 |
$productSku = $product->getSku();
|
80 |
newrelic_add_custom_parameter('magento_product_name', $product->getName());
|
81 |
newrelic_add_custom_parameter('magento_product_sku', $product->getSku());
|
@@ -84,67 +117,84 @@ class Yireo_NewRelic_Model_Observer
|
|
84 |
$productSku = null;
|
85 |
}
|
86 |
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
$transport = $observer->getEvent()->getTransport();
|
92 |
-
$block = $observer->getEvent()->getBlock();
|
93 |
-
|
94 |
-
// Add JavaScript to the header
|
95 |
-
if($block->getNameInLayout() == 'head') {
|
96 |
-
$extraHtml = newrelic_get_browser_timing_header();
|
97 |
-
$html = $transport->getHtml()."\n".$extraHtml;
|
98 |
-
$transport->setHtml($html);
|
99 |
}
|
100 |
|
101 |
-
//
|
102 |
-
|
103 |
-
$extraHtml = newrelic_get_browser_timing_footer();
|
104 |
-
$html = str_replace('</body>', $extraHtml."\n".'</body>', $transport->getHtml());
|
105 |
-
$transport->setHtml($html);
|
106 |
-
}
|
107 |
|
108 |
return $this;
|
109 |
}
|
110 |
|
111 |
-
|
112 |
* Listen to the event model_save_after
|
113 |
-
*
|
114 |
* @access public
|
115 |
-
* @
|
116 |
* @return $this
|
117 |
*/
|
118 |
-
public function modelSaveAfter($observer)
|
119 |
{
|
120 |
-
|
121 |
-
if(Mage::helper('newrelic')->isEnabled() == false) {
|
122 |
return $this;
|
123 |
}
|
124 |
|
|
|
|
|
|
|
125 |
$object = $observer->getEvent()->getObject();
|
126 |
-
newrelic_custom_metric('Magento/'.get_class($object).'_Save', 1);
|
127 |
|
128 |
return $this;
|
129 |
}
|
130 |
|
131 |
-
|
132 |
* Listen to the event model_delete_after
|
133 |
-
*
|
134 |
* @access public
|
135 |
-
* @
|
136 |
* @return $this
|
137 |
*/
|
138 |
-
public function modelDeleteAfter($observer)
|
139 |
{
|
140 |
-
|
141 |
-
|
|
|
|
|
|
|
142 |
return $this;
|
143 |
}
|
144 |
|
145 |
$object = $observer->getEvent()->getObject();
|
146 |
-
newrelic_custom_metric('Magento/'.get_class($object).'_Delete', 1);
|
147 |
|
148 |
return $this;
|
149 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
150 |
}
|
1 |
<?php
|
2 |
/**
|
3 |
+
* NewRelic plugin for Magento
|
4 |
*
|
5 |
* @package Yireo_NewRelic
|
6 |
* @author Yireo (http://www.yireo.com/)
|
8 |
* @license Open Source License
|
9 |
*/
|
10 |
|
11 |
+
class Yireo_NewRelic_Model_Observer
|
12 |
{
|
13 |
+
/**
|
14 |
* Listen to the event controller_action_predispatch
|
15 |
+
*
|
16 |
* @access public
|
17 |
+
* @param Varien_Event_Observer $observer
|
18 |
* @return $this
|
19 |
*/
|
20 |
+
public function controllerActionPredispatch($observer)
|
21 |
{
|
22 |
+
if (!$this->_isEnabled()) {
|
23 |
+
return $this;
|
24 |
+
}
|
25 |
+
|
26 |
+
$this->_setupAppName();
|
27 |
+
$this->_trackControllerAction($observer->getEvent()->getControllerAction());
|
28 |
|
29 |
+
// Common settings
|
30 |
+
newrelic_capture_params(true);
|
31 |
+
|
32 |
+
return $this;
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Method to setup the app-name
|
37 |
+
*
|
38 |
+
* @access public
|
39 |
+
* @param null
|
40 |
+
* @return $this
|
41 |
+
*/
|
42 |
+
protected function _setupAppName()
|
43 |
+
{
|
44 |
+
$helper = $this->_getHelper();
|
45 |
+
$appname = trim($helper->getAppName());
|
46 |
+
$license = trim($helper->getLicense());
|
47 |
+
$xmit = $helper->isUseXmit();
|
48 |
|
49 |
+
if (!empty($appname) && function_exists('newrelic_set_appname')) {
|
50 |
+
newrelic_set_appname($appname, $license, $xmit);
|
51 |
}
|
52 |
+
|
53 |
return $this;
|
54 |
}
|
55 |
|
56 |
+
/**
|
57 |
+
* Method to track the controller-action
|
58 |
+
*
|
59 |
* @access public
|
60 |
+
* @param Mage_Core_Controller_Front_Action $action
|
61 |
* @return $this
|
62 |
*/
|
63 |
+
protected function _trackControllerAction($action)
|
64 |
{
|
65 |
+
if (!$this->_getHelper()->isTrackController()) {
|
|
|
66 |
return $this;
|
67 |
}
|
68 |
|
69 |
+
$actionName = $action->getFullActionName('/');
|
70 |
+
if (function_exists('newrelic_name_transaction')) {
|
71 |
+
newrelic_name_transaction($actionName);
|
72 |
}
|
73 |
|
74 |
+
return $this;
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Post dispatch observer for user tracking
|
79 |
+
*
|
80 |
+
* @access public
|
81 |
+
* @param Varien_Event_Observer $observer
|
82 |
+
* @return $this
|
83 |
+
*/
|
84 |
+
public function controllerActionPostdispatch($observer)
|
85 |
+
{
|
86 |
+
if (!$this->_isEnabled()
|
87 |
+
|| !$this->_getHelper()->isUseRUM()){
|
88 |
return $this;
|
89 |
}
|
90 |
|
93 |
newrelic_add_custom_parameter('magento_request', Mage::getModel('core/url')->getRequest()->getRequestUri());
|
94 |
newrelic_add_custom_parameter('magento_store_id', Mage::app()->getStore()->getId());
|
95 |
|
96 |
+
// Get customer-data
|
97 |
$customer = Mage::getSingleton('customer/session')->getCustomer();
|
98 |
$customerName = trim($customer->getName());
|
|
|
99 |
$customerEmail = trim($customer->getEmail());
|
100 |
+
|
101 |
+
// Correct empty values
|
102 |
+
if (empty($customerName)) $customerName = 'guest';
|
103 |
+
if (empty($customerEmail)) $customerEmail = 'guest';
|
104 |
+
|
105 |
+
// Set customer-data
|
106 |
newrelic_add_custom_parameter('magento_customer_email', $customerEmail);
|
107 |
newrelic_add_custom_parameter('magento_customer_name', $customerName);
|
108 |
|
109 |
// Get and set product-data
|
110 |
$product = Mage::registry('current_product');
|
111 |
+
if (!empty($product)) {
|
112 |
$productSku = $product->getSku();
|
113 |
newrelic_add_custom_parameter('magento_product_name', $product->getName());
|
114 |
newrelic_add_custom_parameter('magento_product_sku', $product->getSku());
|
117 |
$productSku = null;
|
118 |
}
|
119 |
|
120 |
+
$category = Mage::registry('current_category');
|
121 |
+
if ($category) {
|
122 |
+
newrelic_add_custom_parameter('magento_category_name', $category->getName());
|
123 |
+
newrelic_add_custom_parameter('magento_category_id', $category->getId());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
124 |
}
|
125 |
|
126 |
+
// Set user attributes
|
127 |
+
newrelic_set_user_attributes($customerEmail, $customerName, $productSku);
|
|
|
|
|
|
|
|
|
128 |
|
129 |
return $this;
|
130 |
}
|
131 |
|
132 |
+
/**
|
133 |
* Listen to the event model_save_after
|
134 |
+
*
|
135 |
* @access public
|
136 |
+
* @param Varien_Event_Observer $observer
|
137 |
* @return $this
|
138 |
*/
|
139 |
+
public function modelSaveAfter($observer)
|
140 |
{
|
141 |
+
if ($this->_isEnabled()) {
|
|
|
142 |
return $this;
|
143 |
}
|
144 |
|
145 |
+
if (!function_exists('newrelic_custom_metric')) {
|
146 |
+
return $this;
|
147 |
+
}
|
148 |
$object = $observer->getEvent()->getObject();
|
149 |
+
newrelic_custom_metric('Magento/' . get_class($object) . '_Save', 1);
|
150 |
|
151 |
return $this;
|
152 |
}
|
153 |
|
154 |
+
/**
|
155 |
* Listen to the event model_delete_after
|
156 |
+
*
|
157 |
* @access public
|
158 |
+
* @param Varien_Event_Observer $observer
|
159 |
* @return $this
|
160 |
*/
|
161 |
+
public function modelDeleteAfter($observer)
|
162 |
{
|
163 |
+
if (!$this->_isEnabled()) {
|
164 |
+
return $this;
|
165 |
+
}
|
166 |
+
|
167 |
+
if (!function_exists('newrelic_custom_metric')) {
|
168 |
return $this;
|
169 |
}
|
170 |
|
171 |
$object = $observer->getEvent()->getObject();
|
172 |
+
newrelic_custom_metric('Magento/' . get_class($object) . '_Delete', 1);
|
173 |
|
174 |
return $this;
|
175 |
}
|
176 |
+
|
177 |
+
/**
|
178 |
+
* Method to check wether this module can be used or not
|
179 |
+
*
|
180 |
+
* @access public
|
181 |
+
* @param null
|
182 |
+
* @return bool
|
183 |
+
*/
|
184 |
+
protected function _isEnabled()
|
185 |
+
{
|
186 |
+
return $this->_getHelper()->isEnabled();
|
187 |
+
}
|
188 |
+
|
189 |
+
/**
|
190 |
+
* Method to return the helper
|
191 |
+
*
|
192 |
+
* @access public
|
193 |
+
* @param null
|
194 |
+
* @return Yireo_NewRelic_Helper_Data
|
195 |
+
*/
|
196 |
+
protected function _getHelper()
|
197 |
+
{
|
198 |
+
return Mage::helper('newrelic');
|
199 |
+
}
|
200 |
}
|
app/code/community/Yireo/NewRelic/Model/Profiler.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* NewRelic plugin for Magento
|
4 |
*
|
5 |
-
* @category design_default
|
6 |
* @package Yireo_NewRelic
|
7 |
* @author Yireo (http://www.yireo.com/)
|
8 |
* @copyright Copyright (c) 2013 Yireo (http://www.yireo.com/)
|
@@ -11,13 +10,25 @@
|
|
11 |
|
12 |
class Yireo_NewRelic_Model_Profiler
|
13 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
public static function init()
|
15 |
{
|
16 |
-
//
|
17 |
if(!extension_loaded('newrelic')) {
|
18 |
return;
|
19 |
}
|
20 |
|
|
|
|
|
|
|
|
|
|
|
21 |
// Add generic NewRelic calls that don't have dependancies on Magento
|
22 |
static $initialized = false;
|
23 |
if($initialized == false) {
|
@@ -38,10 +49,12 @@ class Yireo_NewRelic_Model_Profiler
|
|
38 |
// Register the Magento request (once it is loaded in Magento) with NewRelic
|
39 |
static $request_logged = false;
|
40 |
if($request_logged == false) {
|
41 |
-
$request_logged = true;
|
42 |
$request = Mage::app()->getRequest();
|
43 |
-
if(!empty($request)
|
44 |
-
|
|
|
|
|
|
|
45 |
}
|
46 |
}
|
47 |
}
|
@@ -64,7 +77,6 @@ class Yireo_NewRelic_Model_Profiler
|
|
64 |
{
|
65 |
self::$_enabled = true;
|
66 |
self::$_memory_get_usage = function_exists('memory_get_usage');
|
67 |
-
self::init();
|
68 |
}
|
69 |
|
70 |
public static function disable()
|
@@ -75,11 +87,11 @@ class Yireo_NewRelic_Model_Profiler
|
|
75 |
public static function reset($timerName)
|
76 |
{
|
77 |
self::$_timers[$timerName] = array(
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
);
|
84 |
}
|
85 |
|
@@ -89,12 +101,14 @@ class Yireo_NewRelic_Model_Profiler
|
|
89 |
return;
|
90 |
}
|
91 |
|
|
|
|
|
92 |
if (empty(self::$_timers[$timerName])) {
|
93 |
self::reset($timerName);
|
94 |
}
|
95 |
if (self::$_memory_get_usage) {
|
96 |
-
|
97 |
-
|
98 |
}
|
99 |
self::$_timers[$timerName]['start'] = microtime(true);
|
100 |
self::$_timers[$timerName]['count'] ++;
|
@@ -110,7 +124,9 @@ class Yireo_NewRelic_Model_Profiler
|
|
110 |
if (!self::$_enabled) {
|
111 |
return;
|
112 |
}
|
113 |
-
|
|
|
|
|
114 |
$time = microtime(true); // Get current time as quick as possible to make more accurate calculations
|
115 |
|
116 |
if (empty(self::$_timers[$timerName])) {
|
@@ -120,8 +136,8 @@ class Yireo_NewRelic_Model_Profiler
|
|
120 |
self::$_timers[$timerName]['sum'] += $time-self::$_timers[$timerName]['start'];
|
121 |
self::$_timers[$timerName]['start'] = false;
|
122 |
if (self::$_memory_get_usage) {
|
123 |
-
|
124 |
-
|
125 |
}
|
126 |
}
|
127 |
}
|
@@ -151,16 +167,16 @@ class Yireo_NewRelic_Model_Profiler
|
|
151 |
return $count;
|
152 |
|
153 |
case 'realmem':
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
|
159 |
case 'emalloc':
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
|
165 |
default:
|
166 |
if (!empty(self::$_timers[$timerName][$key])) {
|
@@ -179,7 +195,8 @@ class Yireo_NewRelic_Model_Profiler
|
|
179 |
* Output SQl Zend_Db_Profiler
|
180 |
*
|
181 |
*/
|
182 |
-
public static function getSqlProfiler($res)
|
|
|
183 |
if(!$res){
|
184 |
return '';
|
185 |
}
|
2 |
/**
|
3 |
* NewRelic plugin for Magento
|
4 |
*
|
|
|
5 |
* @package Yireo_NewRelic
|
6 |
* @author Yireo (http://www.yireo.com/)
|
7 |
* @copyright Copyright (c) 2013 Yireo (http://www.yireo.com/)
|
10 |
|
11 |
class Yireo_NewRelic_Model_Profiler
|
12 |
{
|
13 |
+
/**
|
14 |
+
* Method to initialize the profiler
|
15 |
+
*
|
16 |
+
* @access public
|
17 |
+
* @param null
|
18 |
+
* @return null
|
19 |
+
*/
|
20 |
public static function init()
|
21 |
{
|
22 |
+
// Do not continue when the PHP-extension "newrelic" is not found
|
23 |
if(!extension_loaded('newrelic')) {
|
24 |
return;
|
25 |
}
|
26 |
|
27 |
+
// Do not continue when the proper functions are not loaded
|
28 |
+
if(!function_exists('newrelic_add_custom_tracer')) {
|
29 |
+
return;
|
30 |
+
}
|
31 |
+
|
32 |
// Add generic NewRelic calls that don't have dependancies on Magento
|
33 |
static $initialized = false;
|
34 |
if($initialized == false) {
|
49 |
// Register the Magento request (once it is loaded in Magento) with NewRelic
|
50 |
static $request_logged = false;
|
51 |
if($request_logged == false) {
|
|
|
52 |
$request = Mage::app()->getRequest();
|
53 |
+
if (!empty($request)) {
|
54 |
+
$request_logged = true;
|
55 |
+
if (function_exists('newrelic_name_transaction')) {
|
56 |
+
newrelic_name_transaction($request->getRequestUri());
|
57 |
+
}
|
58 |
}
|
59 |
}
|
60 |
}
|
77 |
{
|
78 |
self::$_enabled = true;
|
79 |
self::$_memory_get_usage = function_exists('memory_get_usage');
|
|
|
80 |
}
|
81 |
|
82 |
public static function disable()
|
87 |
public static function reset($timerName)
|
88 |
{
|
89 |
self::$_timers[$timerName] = array(
|
90 |
+
'start'=>false,
|
91 |
+
'count'=>0,
|
92 |
+
'sum'=>0,
|
93 |
+
'realmem'=>0,
|
94 |
+
'emalloc'=>0,
|
95 |
);
|
96 |
}
|
97 |
|
101 |
return;
|
102 |
}
|
103 |
|
104 |
+
self::init();
|
105 |
+
|
106 |
if (empty(self::$_timers[$timerName])) {
|
107 |
self::reset($timerName);
|
108 |
}
|
109 |
if (self::$_memory_get_usage) {
|
110 |
+
self::$_timers[$timerName]['realmem_start'] = memory_get_usage(true);
|
111 |
+
self::$_timers[$timerName]['emalloc_start'] = memory_get_usage();
|
112 |
}
|
113 |
self::$_timers[$timerName]['start'] = microtime(true);
|
114 |
self::$_timers[$timerName]['count'] ++;
|
124 |
if (!self::$_enabled) {
|
125 |
return;
|
126 |
}
|
127 |
+
|
128 |
+
self::init();
|
129 |
+
|
130 |
$time = microtime(true); // Get current time as quick as possible to make more accurate calculations
|
131 |
|
132 |
if (empty(self::$_timers[$timerName])) {
|
136 |
self::$_timers[$timerName]['sum'] += $time-self::$_timers[$timerName]['start'];
|
137 |
self::$_timers[$timerName]['start'] = false;
|
138 |
if (self::$_memory_get_usage) {
|
139 |
+
self::$_timers[$timerName]['realmem'] += memory_get_usage(true)-self::$_timers[$timerName]['realmem_start'];
|
140 |
+
self::$_timers[$timerName]['emalloc'] += memory_get_usage()-self::$_timers[$timerName]['emalloc_start'];
|
141 |
}
|
142 |
}
|
143 |
}
|
167 |
return $count;
|
168 |
|
169 |
case 'realmem':
|
170 |
+
if (!isset(self::$_timers[$timerName]['realmem'])) {
|
171 |
+
self::$_timers[$timerName]['realmem'] = -1;
|
172 |
+
}
|
173 |
+
return self::$_timers[$timerName]['realmem'];
|
174 |
|
175 |
case 'emalloc':
|
176 |
+
if (!isset(self::$_timers[$timerName]['emalloc'])) {
|
177 |
+
self::$_timers[$timerName]['emalloc'] = -1;
|
178 |
+
}
|
179 |
+
return self::$_timers[$timerName]['emalloc'];
|
180 |
|
181 |
default:
|
182 |
if (!empty(self::$_timers[$timerName][$key])) {
|
195 |
* Output SQl Zend_Db_Profiler
|
196 |
*
|
197 |
*/
|
198 |
+
public static function getSqlProfiler($res)
|
199 |
+
{
|
200 |
if(!$res){
|
201 |
return '';
|
202 |
}
|
app/code/community/Yireo/NewRelic/etc/config.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<!--
|
3 |
/**
|
4 |
-
* NewRelic plugin for Magento
|
5 |
*
|
6 |
* @package Yireo_NewRelic
|
7 |
* @author Yireo
|
@@ -12,7 +12,7 @@
|
|
12 |
<config>
|
13 |
<modules>
|
14 |
<Yireo_NewRelic>
|
15 |
-
<version>1.
|
16 |
</Yireo_NewRelic>
|
17 |
</modules>
|
18 |
|
@@ -32,25 +32,30 @@
|
|
32 |
<class>Yireo_NewRelic_Model</class>
|
33 |
</newrelic>
|
34 |
</models>
|
|
|
|
|
|
|
35 |
<events>
|
36 |
<controller_action_predispatch>
|
37 |
<observers>
|
38 |
<magebridge_controller_action_predispatch>
|
39 |
<type>singleton</type>
|
40 |
-
<class>
|
41 |
<method>controllerActionPredispatch</method>
|
42 |
</magebridge_controller_action_predispatch>
|
43 |
</observers>
|
44 |
</controller_action_predispatch>
|
45 |
-
|
|
|
46 |
<observers>
|
47 |
-
<
|
48 |
<type>singleton</type>
|
49 |
-
<class>
|
50 |
-
<method>
|
51 |
-
</
|
52 |
</observers>
|
53 |
-
</
|
|
|
54 |
<model_save_after>
|
55 |
<observers>
|
56 |
<newrelic_model_save_after>
|
@@ -60,6 +65,7 @@
|
|
60 |
</newrelic_model_save_after>
|
61 |
</observers>
|
62 |
</model_save_after>
|
|
|
63 |
<model_delete_after>
|
64 |
<observers>
|
65 |
<newrelic_model_delete_after>
|
@@ -70,7 +76,15 @@
|
|
70 |
</observers>
|
71 |
</model_delete_after>
|
72 |
</events>
|
73 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
|
75 |
<adminhtml>
|
76 |
<acl>
|
@@ -93,4 +107,15 @@
|
|
93 |
</resources>
|
94 |
</acl>
|
95 |
</adminhtml>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
</config>
|
1 |
<?xml version="1.0"?>
|
2 |
<!--
|
3 |
/**
|
4 |
+
* NewRelic plugin for Magento
|
5 |
*
|
6 |
* @package Yireo_NewRelic
|
7 |
* @author Yireo
|
12 |
<config>
|
13 |
<modules>
|
14 |
<Yireo_NewRelic>
|
15 |
+
<version>1.2.0</version>
|
16 |
</Yireo_NewRelic>
|
17 |
</modules>
|
18 |
|
32 |
<class>Yireo_NewRelic_Model</class>
|
33 |
</newrelic>
|
34 |
</models>
|
35 |
+
</global>
|
36 |
+
|
37 |
+
<frontend>
|
38 |
<events>
|
39 |
<controller_action_predispatch>
|
40 |
<observers>
|
41 |
<magebridge_controller_action_predispatch>
|
42 |
<type>singleton</type>
|
43 |
+
<class>newrelic/observer</class>
|
44 |
<method>controllerActionPredispatch</method>
|
45 |
</magebridge_controller_action_predispatch>
|
46 |
</observers>
|
47 |
</controller_action_predispatch>
|
48 |
+
|
49 |
+
<controller_action_postdispatch>
|
50 |
<observers>
|
51 |
+
<newrelic_controller_action_postdispatch>
|
52 |
<type>singleton</type>
|
53 |
+
<class>newrelic/observer</class>
|
54 |
+
<method>controllerActionPostdispatch</method>
|
55 |
+
</newrelic_controller_action_postdispatch>
|
56 |
</observers>
|
57 |
+
</controller_action_postdispatch>
|
58 |
+
|
59 |
<model_save_after>
|
60 |
<observers>
|
61 |
<newrelic_model_save_after>
|
65 |
</newrelic_model_save_after>
|
66 |
</observers>
|
67 |
</model_save_after>
|
68 |
+
|
69 |
<model_delete_after>
|
70 |
<observers>
|
71 |
<newrelic_model_delete_after>
|
76 |
</observers>
|
77 |
</model_delete_after>
|
78 |
</events>
|
79 |
+
|
80 |
+
<layout>
|
81 |
+
<updates>
|
82 |
+
<newrelic module="newrelic">
|
83 |
+
<file>newrelic.xml</file>
|
84 |
+
</newrelic>
|
85 |
+
</updates>
|
86 |
+
</layout>
|
87 |
+
</frontend>
|
88 |
|
89 |
<adminhtml>
|
90 |
<acl>
|
107 |
</resources>
|
108 |
</acl>
|
109 |
</adminhtml>
|
110 |
+
|
111 |
+
<default>
|
112 |
+
<newrelic>
|
113 |
+
<settings>
|
114 |
+
<enabled>1</enabled>
|
115 |
+
<track_controller>1</track_controller>
|
116 |
+
<real_user_monitoring>0</real_user_monitoring>
|
117 |
+
<xmit>1</xmit>
|
118 |
+
</settings>
|
119 |
+
</newrelic>
|
120 |
+
</default>
|
121 |
</config>
|
app/code/community/Yireo/NewRelic/etc/system.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<!--
|
3 |
/**
|
4 |
-
* NewRelic plugin for Magento
|
5 |
*
|
6 |
* @package Yireo_NewRelic
|
7 |
* @author Yireo
|
@@ -28,11 +28,20 @@
|
|
28 |
<show_in_website>1</show_in_website>
|
29 |
<show_in_store>1</show_in_store>
|
30 |
<fields>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
<appname translate="label">
|
32 |
<label>Application Name</label>
|
33 |
<comment><![CDATA[Appears in New Relic application-overview]]></comment>
|
34 |
<frontend_type>text</frontend_type>
|
35 |
-
<sort_order>
|
36 |
<show_in_default>1</show_in_default>
|
37 |
<show_in_website>1</show_in_website>
|
38 |
<show_in_store>1</show_in_store>
|
@@ -41,17 +50,38 @@
|
|
41 |
<label>License Key</label>
|
42 |
<comment><![CDATA[Override of New Relic license-key]]></comment>
|
43 |
<frontend_type>text</frontend_type>
|
44 |
-
<sort_order>
|
45 |
<show_in_default>1</show_in_default>
|
46 |
<show_in_website>1</show_in_website>
|
47 |
<show_in_store>1</show_in_store>
|
48 |
</license>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
<real_user_monitoring translate="label">
|
50 |
<label>Real User Monitoring</label>
|
51 |
<comment><![CDATA[Enable when your New Relic subscription includes this feature]]></comment>
|
52 |
<frontend_type>select</frontend_type>
|
53 |
<source_model>adminhtml/system_config_source_yesno</source_model>
|
54 |
-
<sort_order>
|
55 |
<show_in_default>1</show_in_default>
|
56 |
<show_in_website>1</show_in_website>
|
57 |
<show_in_store>1</show_in_store>
|
1 |
<?xml version="1.0"?>
|
2 |
<!--
|
3 |
/**
|
4 |
+
* NewRelic plugin for Magento
|
5 |
*
|
6 |
* @package Yireo_NewRelic
|
7 |
* @author Yireo
|
28 |
<show_in_website>1</show_in_website>
|
29 |
<show_in_store>1</show_in_store>
|
30 |
<fields>
|
31 |
+
<enabled translate="label">
|
32 |
+
<label>Enable</label>
|
33 |
+
<frontend_type>select</frontend_type>
|
34 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
35 |
+
<sort_order>10</sort_order>
|
36 |
+
<show_in_default>1</show_in_default>
|
37 |
+
<show_in_website>1</show_in_website>
|
38 |
+
<show_in_store>1</show_in_store>
|
39 |
+
</enabled>
|
40 |
<appname translate="label">
|
41 |
<label>Application Name</label>
|
42 |
<comment><![CDATA[Appears in New Relic application-overview]]></comment>
|
43 |
<frontend_type>text</frontend_type>
|
44 |
+
<sort_order>20</sort_order>
|
45 |
<show_in_default>1</show_in_default>
|
46 |
<show_in_website>1</show_in_website>
|
47 |
<show_in_store>1</show_in_store>
|
50 |
<label>License Key</label>
|
51 |
<comment><![CDATA[Override of New Relic license-key]]></comment>
|
52 |
<frontend_type>text</frontend_type>
|
53 |
+
<sort_order>30</sort_order>
|
54 |
<show_in_default>1</show_in_default>
|
55 |
<show_in_website>1</show_in_website>
|
56 |
<show_in_store>1</show_in_store>
|
57 |
</license>
|
58 |
+
<xmit translate="label">
|
59 |
+
<label>Use xmit</label>
|
60 |
+
<comment><![CDATA[Use xmit on 'newrelic_set_appname<br/>
|
61 |
+
Warning: This gives a slight performance overhead - check the NewRelic docs for details]]></comment>
|
62 |
+
<frontend_type>select</frontend_type>
|
63 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
64 |
+
<sort_order>40</sort_order>
|
65 |
+
<show_in_default>1</show_in_default>
|
66 |
+
<show_in_website>1</show_in_website>
|
67 |
+
<show_in_store>1</show_in_store>
|
68 |
+
</xmit>
|
69 |
+
<track_controller translate="label">
|
70 |
+
<label>Track Controllers</label>
|
71 |
+
<comment><![CDATA[Track the controllers as transactions.]]></comment>
|
72 |
+
<frontend_type>select</frontend_type>
|
73 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
74 |
+
<sort_order>50</sort_order>
|
75 |
+
<show_in_default>1</show_in_default>
|
76 |
+
<show_in_store>1</show_in_store>
|
77 |
+
<show_in_default>1</show_in_default>
|
78 |
+
</track_controller>
|
79 |
<real_user_monitoring translate="label">
|
80 |
<label>Real User Monitoring</label>
|
81 |
<comment><![CDATA[Enable when your New Relic subscription includes this feature]]></comment>
|
82 |
<frontend_type>select</frontend_type>
|
83 |
<source_model>adminhtml/system_config_source_yesno</source_model>
|
84 |
+
<sort_order>60</sort_order>
|
85 |
<show_in_default>1</show_in_default>
|
86 |
<show_in_website>1</show_in_website>
|
87 |
<show_in_store>1</show_in_store>
|
app/design/frontend/base/default/layout/newrelic.xml
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<layout>
|
3 |
+
<default>
|
4 |
+
<reference name="head">
|
5 |
+
<block type="newrelic/rum_timing_header" name="newrelic_rum_timing_header" as="newrelic.rum.timing.header" template="newrelic/rum/timing/content.phtml" />
|
6 |
+
</reference>
|
7 |
+
<reference name="before_body_end">
|
8 |
+
<block type="newrelic/rum_timing_footer" name="newrelic_rum_timing_footer" as="newrelic.rum.timing.footer" template="newrelic/rum/timing/content.phtml" after="-" />
|
9 |
+
</reference>
|
10 |
+
</default>
|
11 |
+
</layout>
|
app/design/frontend/base/default/template/newrelic/rum/timing/content.phtml
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/* @var $this Yireo_Newrelic_Block_Rum_Timing_Abstract */
|
3 |
+
echo $this->getContentHtml();
|
app/etc/modules/Yireo_NewRelic.xml
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
*
|
6 |
* @package Yireo_NewRelic
|
7 |
* @author Yireo (http://www.yireo.com/)
|
8 |
-
* @copyright Copyright (c)
|
9 |
* @license Open Software License
|
10 |
*/
|
11 |
-->
|
5 |
*
|
6 |
* @package Yireo_NewRelic
|
7 |
* @author Yireo (http://www.yireo.com/)
|
8 |
+
* @copyright Copyright (c) 2013 Yireo (http://www.yireo.com/)
|
9 |
* @license Open Software License
|
10 |
*/
|
11 |
-->
|
package.xml
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
-
<package><name>Yireo_NewRelic</name><version>1.
|
1 |
<?xml version="1.0"?>
|
2 |
+
<package><name>Yireo_NewRelic</name><version>1.2.0</version><stability>stable</stability><license>Open Source License</license><channel>community</channel><extends></extends><summary>No summary</summary><description>No description</description><notes>No notes</notes><authors><author><name>Yireo</name><user>yireo</user><email>info@yireo.com</email></author></authors><date>2013-12-22</date><time>8:21:39</time><compatible></compatible><dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies><contents><target name="mage"><dir name="app"><dir name="etc"><dir name="modules"><file name="Yireo_NewRelic.xml" hash="2f2eccc31fd844df834294385486c001"/></dir></dir><dir name="code"><dir name="community"><dir name="Varien"><file name="Profiler.php" hash="e55d75674c132b06a6eaed0467c5c0f5"/></dir><dir name="Yireo"><dir name="NewRelic"><dir name="Block"><dir name="Rum"><dir name="Timing"><file name="Abstract.php" hash="d80f63580a1e88c600f6981b21e19460"/><file name="Footer.php" hash="144812710e16c89c8b753538173657b2"/><file name="Header.php" hash="a53ee01441b34d9efe25404bc4cb8772"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="9722a9b110766bf061f198670c5bee93"/><file name="system.xml" hash="07bbdc6c35b1eb1b0eb4d452b3079875"/></dir><dir name="Helper"><file name="Data.php" hash="f2b8fa2db95a16050d174c24de813618"/></dir><dir name="Model"><file name="Observer.php" hash="0b24f90c76234cb0dcb5f99c50a8bb5f"/><file name="Profiler.php" hash="adea76be2a1e549c6f1fcddb06c3107d"/></dir></dir></dir></dir></dir><dir name="design"><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="newrelic"><dir name="rum"><dir name="timing"><file name="content.phtml" hash="9eb32c31c80f9ef2db1132f4becb3808"/></dir></dir></dir></dir><dir name="layout"><file name="newrelic.xml" hash="c2f3fc2682e867855a0d3924fd709e67"/></dir></dir></dir></dir></dir></dir></target></contents></package>
|