/** * Sends to the logging subsystem the perf data in $values. * - checking first if there is any logging filter class registered * - removing from $values all variables not defined in ezperformancelogger.ini/TrackVars * * @too !important split method in 2 methods, with one public and one protected? */ protected static function logIfNeeded(array $values, &$output) { // check if there is any registered filter class. If there is, ask it whether we should log or not $skip = false; $filters = eZPerfLoggerINI::variable('GeneralSettings', 'LogFilters'); // cater to 'array reset' situations: only 1 empty val in the array if (count($filters) > 1 || count($filters) == 1 && $filters[0] != '') { $skip = true; foreach ($filters as $filterClass) { if (call_user_func_array(array($filterClass, 'shouldLog'), array($values, $output))) { $skip = false; break; } } } if (!$skip) { // build the array with the values we want to record in the logs - // only the ones corresponding to variables defined in the ini file, // not all the values measured so far $toLog = array(); foreach (eZPerfLoggerINI::variable('GeneralSettings', 'TrackVariables') as $varName) { $toLog[$varName] = isset($values[$varName]) ? $values[$varName] : null; } // for each logging type configured, log values to it, using the class which supports it foreach (eZPerfLoggerINI::variable('GeneralSettings', 'LogMethods') as $logMethod) { $logged = false; foreach (eZPerfLoggerINI::variable('GeneralSettings', 'LogProviders') as $loggerClass) { /// @todo !important check that $loggerClass exposes the correct interface if (in_array($logMethod, call_user_func(array($loggerClass, 'supportedLogMethods')))) { call_user_func_array(array($loggerClass, 'doLog'), array($logMethod, $toLog, &$output)); $logged = true; break; } } if (!$logged) { eZPerfLoggerDebug::writeError("Could not log perf data to log '{$logMethod}', no logger class supports it", __METHOD__); } } } }
/** * Writes a "token file" * This is useful whenever there are log files which get parse based on cronjobs * and we have to remember the last line which has been found */ protected static function writeUpdateToken($tokenFile, $tokenLine) { $sys = eZSys::instance(); $updateViewLogPath = $sys->varDirectory() . "/" . eZPerfLoggerINI::variable('FileSettings', 'LogDir', 'site.ini') . "/" . $tokenFile; $dt = new eZDateTime(); if (!file_put_contents($updateViewLogPath, "# Finished at " . $dt->toString() . "\n" . "# Last updated entry:" . "\n" . $tokenLine . "\n")) { eZPerfLoggerDebug::writeError("Could not store last date of perf-log file parsing in {$updateViewLogPath}, double-counting might occur", __METHOD__); } }