Пример #1
0
 function populate_tracker_queries()
 {
     if ($monitor4 = $this->trackerManager->getMonitor('tracker_queries')) {
         $sql = "INSERT INTO FOO VALUES ('Test', '{$monitor4->monitor_id}', 101, 'News Time', 'Our Latest Headlines', 4)";
         $sql = $query = TrackerUtility::getGenericSQL($sql);
         $monitor4->setValue('text', $sql);
         $monitor4->setValue('query_id', $monitor4->monitor_id);
         $monitor4->setValue('query_hash', md5($monitor4->text));
         $monitor4->setValue('run_count', rand(1, 25));
         $monitor4->setValue('sec_total', rand(200, 500));
         $monitor4->setValue('sec_avg', rand(200, 500));
         $monitor4->setValue('date_modified', $this->randomTimestamp());
     }
     //Insert into tracker_tracker_queries here
     if ($monitor5 = $this->trackerManager->getMonitor('tracker_tracker_queries')) {
         $monitor5->setValue('monitor_id', $monitor5->monitor_id);
         $monitor5->setValue('date_modified', $monitor4->date_modified);
         $monitor5->setValue('query_id', $monitor4->query_id);
     }
 }
 /**
  * save
  * This method retrieves the Store instances associated with monitor and calls
  * the flush method passing with the montior ($this) instance.
  * 
  */
 public function save($flush = true)
 {
     if (empty($this->date_modified)) {
         $this->date_modified = $GLOBALS['timedate']->nowDb();
     }
     $this->cached_data[] = $this->toArray();
     if ($flush && empty($GLOBALS['tracker_' . $this->table_name]) && !empty($this->cached_data)) {
         require_once 'modules/Trackers/TrackerUtility.php';
         $write_entries = array();
         foreach ($this->cached_data as $entry) {
             $query = str_replace(array("\r", "\n", "\r\n", "\t"), ' ', $entry['text']);
             $query = preg_replace("/\\s{2,}/", ' ', $query);
             $query = TrackerUtility::getGenericSQL($query);
             $entry['text'] = $query;
             $md5 = md5($query);
             if (!isset($write_entries[$md5])) {
                 $entry['query_hash'] = $md5;
                 $result = $GLOBALS['db']->query("SELECT * FROM tracker_queries WHERE query_hash = '{$md5}'");
                 if ($row = $GLOBALS['db']->fetchByAssoc($result)) {
                     $entry['query_id'] = $row['query_id'];
                     $entry['run_count'] = $row['run_count'] + 1;
                     $entry['sec_total'] = $row['sec_total'] + $entry['sec_total'];
                     $entry['sec_avg'] = $entry['sec_total'] / $entry['run_count'];
                 } else {
                     $entry['query_id'] = create_guid();
                     $entry['run_count'] = 1;
                     $entry['sec_total'] = $entry['sec_total'];
                     $entry['sec_avg'] = $entry['sec_total'];
                 }
                 $write_entries[$md5] = $entry;
             } else {
                 $write_entries[$md5]['run_count'] = $write_entries[$md5]['run_count']++;
                 $write_entries[$md5]['sec_total'] = $write_entries[$md5]['sec_total'] + $entry['sec_total'];
                 $write_entries[$md5]['sec_avg'] = $write_entries[$md5]['sec_total'] / $write_entries[$md5]['run_count'];
             }
             //if-else
         }
         //foreach
         $trackerManager = TrackerManager::getInstance();
         if ($monitor2 = $trackerManager->getMonitor('tracker_tracker_queries')) {
             $trackerManager->pause();
             //Loop through the stored cached data entries
             foreach ($write_entries as $write_e) {
                 //Set the values from the cached data entries
                 foreach ($write_e as $name => $value) {
                     $this->{$name} = $value;
                 }
                 //foreach
                 //Write to the tracker_tracker_monitor monitor
                 $monitor2->setValue('monitor_id', $this->monitor_id);
                 $monitor2->setValue('date_modified', $this->date_modified);
                 $monitor2->setValue('query_id', $this->query_id);
                 $monitor2->save($flush);
                 // <--- save to tracker_tracker_monitor
                 foreach ($this->stores as $s) {
                     $store = $this->getStore($s);
                     //Flush to the store
                     $store->flush($this);
                 }
                 //Clear the monitor
                 $this->clear();
             }
             //foreach
             $trackerManager->unPause();
         }
         unset($this->cached_data);
     }
     //if
 }