Exemplo n.º 1
0
 /**
  * Stops XHProf profiling and saves profile data in var/log/xhprof
  *
  * @return mixed false|string (the run_id)|true (when nosave==true)
  */
 public static function stop($dosave = true)
 {
     if (!extension_loaded('xhprof')) {
         eZPerfLoggerDebug::writeWarning('Extension xhprof not loaded, can not stop profiling', __METHOD__);
         return false;
     }
     if (!self::$profilingRunning) {
         return false;
     }
     $xhprofData = xhprof_disable();
     self::$profilingRunning = false;
     if (!$dosave) {
         return true;
     }
     if (!is_dir(self::$logdir)) {
         mkdir(self::$logdir);
     }
     $logger = new XHProfRuns_Default(self::$logdir);
     $runId = $logger->save_run($xhprofData, "xhprof");
     if ($runId) {
         // beside profiling data, save extra info in another file to make it more useful later
         file_put_contents(self::$logdir . "/{$runId}.info", eZPerfLoggerApacheLogger::apacheLogLine('combined'));
         self::$runs[] = $runId;
     }
     return $runId;
 }
Exemplo n.º 2
0
 /**
  * This method gets called by self::filter()
  */
 public static function doLog($method, array $values, &$output)
 {
     switch ($method) {
         case 'apache':
             foreach ($values as $varName => $value) {
                 /// @todo should remove any " or space chars in the value for proper parsing by updateperfstats.php
                 apache_note($varName, $value);
             }
             break;
         case 'piwik':
             $text = '';
             foreach (eZPerfLoggerINI::variable('GeneralSettings', 'TrackVariables') as $i => $var) {
                 $text .= "\npiwikTracker.setCustomVariable( {$i}, \"{$var}\", \"{$values[$var]}\", \"page\" );";
             }
             $text .= "\npiwikTracker.trackPageView();";
             $output = preg_replace('/piwikTracker\\.trackPageView\\( *\\);?/', $text, $output);
             break;
         case 'googleanalytics':
             $text = '';
             foreach (eZPerfLoggerINI::variable('GeneralSettings', 'TrackVariables') as $i => $var) {
                 $text .= "\n_gaq.push([{$i}, '{$var}', '{$values[$var]}', 3]);";
             }
             $text .= "\n_gaq.push(['_trackPageview']);";
             $output = preg_replace("/_gaq.push\\( *[ *['\"]_trackPageview['\"] *] *\\);?/", $text, $output);
             break;
         case 'logfile':
         case 'syslog':
             /// same format as Apache "combined" by default
             $size = self::$outputSize;
             if ($size == 0) {
                 $size = '-';
             }
             $text = eZPerfLoggerApacheLogger::apacheLogLine('combined', $size, self::$returnCode) . ' ';
             foreach ($values as $value) {
                 // do same as apache does: replace nulls with "-"
                 if ((string) $value === '') {
                     $text .= "- ";
                 } else {
                     /// @todo should remove any " or space chars in the value for proper parsing by updateperfstats.php
                     $text .= $value . " ";
                 }
             }
             if ($method == 'logfile') {
                 $text .= "\n";
                 file_put_contents(eZPerfLoggerINI::variable('logfileSettings', 'FileName'), $text, FILE_APPEND);
             } else {
                 // syslog: we use apache log format for lack of a better idea...
                 openlog("eZPerfLog", LOG_PID, LOG_USER);
                 syslog(LOG_INFO, $text);
             }
             break;
         case 'headers':
             $prefix = eZPerfLoggerINI::variable('HeadersSettings', 'HeaderPrefix');
             foreach (eZPerfLoggerINI::variable('GeneralSettings', 'TrackVariables') as $i => $var) {
                 header($prefix . str_replace(array('(', ')', '<', '>', '@', ',', ';', ':', '\\', '"', '/', '[', ']', '?', '=', '{', '}', ' ', "\t"), '-', $var) . ': ' . $values[$var]);
             }
             break;
         case 'database':
         case 'csv':
         case 'storage':
             if ($method == 'csv') {
                 $storageClass = 'eZPerfLoggerCSVStorage';
             } else {
                 if ($method == 'database') {
                     $storageClass = 'eZPerfLoggerDBStorage';
                 } else {
                     $storageClass = eZPerfLoggerINI::variable('ParsingSettings', 'StorageClass');
                 }
             }
             /// @todo log error if storage class does not implement correct interface
             // when we deprecate php 5.2, we will be able to use $storageClass::insertStats...
             call_user_func(array($storageClass, 'insertStats'), array(array('url' => isset($_SERVER["REQUEST_URI"]) ? $_SERVER["REQUEST_URI"] : $_SERVER["PHP_SELF"], 'ip' => is_callable('eZSys::clientIP') ? eZSys::clientIP() : eZSys::serverVariable('REMOTE_ADDR'), 'time' => time(), 'response_status' => self::$returnCode, 'response_size' => self::$outputSize, 'counters' => $values)));
             break;
             /// @todo !important log a warning for default case (unhandled log format)
     }
 }