/** * Run calculations for the given profile. * * @param \Sandstorm\PhpProfiler\Domain\Model\ProfilingRun $profile * @param array $calculationOptions * @return array */ public function render(\Sandstorm\PhpProfiler\Domain\Model\ProfilingRun $profile, array $calculationOptions) { return $this->calculationService->calculate($profile, $calculationOptions); }
/** * Show an overview of all existing profiles. * * @return void */ public function indexAction() { $profiles = $this->getProfiles(); $profileData = array(); $options = array(); $calculations = $this->settings['calculations']; $currentCalculationHash = sha1(serialize($calculations)); $calculationMinMax = array(); foreach ($calculations as $calculationName => $calculationOptions) { $calculationMinMax[$calculationName] = array('min' => PHP_INT_MAX, 'max' => -PHP_INT_MAX); } foreach ($profiles as $profileId => $profile) { $currentProfileData = array(); $currentProfileData['id'] = $profileId; $currentProfileData['tagsAsHtml'] = $this->renderTagsService->render($profile->getTags()); foreach ($profile->getOptions() as $optionName => $optionValue) { if (!is_string($optionValue)) { continue; } if (!isset($options[$optionName])) { $options[$optionName] = array(); } $options[$optionName][$optionValue] = $optionValue; $currentProfileData[$optionName] = $optionValue; } $cachedCalculationResults = $profile->getCachedCalculationResults($currentCalculationHash); $shouldUpdateCalculationCache = FALSE; foreach ($calculations as $calculationName => $calculationOptions) { if (isset($cachedCalculationResults[$calculationName])) { $calculationResult = $cachedCalculationResults[$calculationName]; } else { $calculationResult = $this->calculationService->calculate($profile, $calculationOptions); $cachedCalculationResults[$calculationName] = $calculationResult; $shouldUpdateCalculationCache = TRUE; } $currentProfileData[$calculationName] = $calculationResult; if ($calculationResult['value'] < $calculationMinMax[$calculationName]['min']) { $calculationMinMax[$calculationName]['min'] = $calculationResult['value']; } if ($calculationResult['value'] > $calculationMinMax[$calculationName]['max']) { $calculationMinMax[$calculationName]['max'] = $calculationResult['value']; } } $profileData[] = $currentProfileData; if ($shouldUpdateCalculationCache) { $profile->setCachedCalculationResults($currentCalculationHash, $cachedCalculationResults); $profile->save(); } } foreach ($calculations as $calculationName => &$calculationOptions) { if (!isset($calculationOptions['crossfilter']['min'])) { $calculationOptions['crossfilter']['min'] = $calculationMinMax[$calculationName]['min']; } if (!isset($calculationOptions['crossfilter']['max'])) { $calculationOptions['crossfilter']['max'] = $calculationMinMax[$calculationName]['max']; } } $this->view->assign('profileData', json_encode($profileData)); $this->view->assign('calculationsJson', json_encode($calculations)); $this->view->assign('calculations', $calculations); $this->view->assign('options', $options); $this->view->assign('optionsJson', json_encode($options)); }