示例#1
0
 /**
  * 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);
 }
示例#2
0
 /**
  * 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));
 }