You have very messy code, more likely MySQL is dying there because a
lot of queries.

Look into cake SQL log.
Use recursive property of models or Containable behavior to optimize
models.
Use cache where you can.
Check table indexes.
Switch to innodb engine for all those updates.
Use "return false" instead od exit(), let framework die.

How many queries are there? 69? :)



On Jun 23, 4:33 am, PD <[email protected]> wrote:
> Hello Everyone,
>
> I am developing a  simple cake application which is causing CPU
> spikes. I dont know what I am doing wrong. I have pasted my controller
> code below.
>
> class DatasyncController extends AppController
> {
>
>         public $uses = array('LiveServer', 'LivePhone', 'SyncLog', 'Server',
> 'Phone');
>
>         public function index() {
>                 echo 'This is Datasync->index()';
>                 exit();
>         }
>
>         public function serversync() {
>                 // sync server
>                 $traverseOrder = array('LiveServer.result_id ASC'); // 
> traverse the
> list starting with the first record
>
>                 $current = $this->LiveServer->find('first', array('order' =>
> $traverseOrder, 'fields' => array('LiveServer.result_id',
> 'LiveServer.server_id', 'LiveServer.reported')));
>                 $hasNext = true;
>
>                 do
>                 {
>                         //process current
>                         if (!$this->SyncLog->find('first', array('conditions' 
> => array('id'
> => $current['LiveServer']['result_id']))))
>                         {
>                                 if (!$this->Server->find('first', 
> array('conditions' => array('id'
> => $current['LiveServer']['server_id']))))
>                                         $this->Server->save(array('Server' => 
> array('id' => $current
> ['LiveServer']['server_id'], 'first_log_date' => $current['LiveServer']
> ['reported'], 'last_log_date' => $current['LiveServer']['reported'],
> 'total_logs' => '1')));
>                                 else
>                                         $this->Server->query("       UPDATE 
> {$this->Server->useTable}
>                                                                               
>           SET last_log_date = '{$current['LiveServer']['reported']}',
> total_logs = total_logs + 1
>                                                                               
>           WHERE id = '{$current['LiveServer']['server_id']}'
>                                                                               
>           LIMIT 1"
>                                                                               
>   );
>
>                                 // record the result id to keep track;
>                                 $this->SyncLog->save(array('SyncLog' => 
> array('id' => $current
> ['LiveServer']['result_id'])));
>                                 echo " + ";
>                                 //echo "Inserted 
> {$current['LiveServer']['result_id']} - {$current
> ['LiveServer']['server_id']}<br />";
>                         }
>
>                         // find next
>                         $neighbors = $this->LiveServer->find('neighbors', 
> array('field' =>
> 'result_id', 'value' => $current['LiveServer']['result_id'], 'order'
> => $traverseOrder, 'fields' => array('LiveServer.result_id',
> 'LiveServer.server_id', 'LiveServer.reported')));
>                         $hasNext = is_array($neighbors['next']);
>                         $current = $neighbors['next'];
>
>                 } while ($hasNext);
>                 echo "done";exit();
>                 // sync phones
>         }
>
>         public function phonestats() {
>
>                 // sync phones
>                 $traverseOrder = array('LivePhone.phone_id');
>
>                 $current = $this->LivePhone->find('first', array('order' =>
> $traverseOrder, 'fields' => array('DISTINCT LivePhone.mac',
> 'LivePhone.useragent', )));
>                 $hasNext = true;
>                 do {
>                         foreach ($current['LivePhone'] as &$value) $value = 
> trim($value);
>                         $phoneTypes = array( "Aastra", "Cisco", 
> "Grandstream", "Polycom",
> "Linksys", "snom", "X-Lite", "Zoiper", "eyeBeam", "Sipura", "Siemens",
> "Pirelli");
>                         foreach ($phoneTypes as $phoneType) {
>                                 if 
> (stripos($current['LivePhone']['useragent'], $phoneType)) {
>
>                                         $q = "     UPDATE 
> {$this->PhoneStat->useTable}
>                                                         SET value = value + 1
>                                                         WHERE id = 
> '{$current['LivePhone']['server_id']}'
>                                                         LIMIT 1";
>                                         $c = "CREATE TABLE stats (
>                                                         id int(11) NOT NULL,
>                                                         type enum('server', 
> 'phone') NOT NULL,
>                                                         attribute 
> varchar(255) NOT NULL,
>                                                         )";
>                                         $this->Phone->query($q);
>                                         //echo "<br />" . $q;
>                                         break;
>                                 }
>                         }
>
>                         // find next
>                         $neighbors = $this->LivePhone->find('neighbors', 
> array('field' =>
> 'phone_id', 'value' => $current['LivePhone']['phone_id'], 'order' =>
> $traverseOrder, 'fields' => array('LivePhone.server_id',
> 'LivePhone.mac', 'LivePhone.add_date')));
>                         $hasNext = is_array($neighbors['next']);
>                         $current = $neighbors['next'];
>                 } while ($hasNext);
>                 exit();
>         }
>
>         public function phonesync() {
>                 // sync phones
>                 $traverseOrder = array('LivePhone.phone_id');
>
>                 $current = $this->LivePhone->find('first', array('order' =>
> $traverseOrder, 'fields' => array('LivePhone.server_id',
> 'LivePhone.mac', 'LivePhone.add_date')));
>                 $hasNext = true;
>                 do {
>                         foreach ($current['LivePhone'] as &$value) $value = 
> trim($value);
>
>                         // if this record has not been processed - process it
>                         if (!$this->SyncLog->find('first', array('conditions' 
> => array('id'
> => $current['LivePhone']['phone_id']))) && strlen($current['LivePhone']
> ['mac'])) {
>                                 if (!$this->Phone->find('first', 
> array('conditions' => array('mac'
> => $current['LivePhone']['mac'])))) {
>                                         echo "<br />added new phone";
>                                         $phoneData = array('Phone' =>
>                                                                               
>           array(
>                                                                               
>                           'server_id' => $current['LivePhone']['server_id'],
>                                                                               
>                           'mac' => $current['LivePhone']['mac'],
>                                                                               
>                           'first_log_date' => 
> $current['LivePhone']['add_date'],
>                                                                               
>                           'last_log_date' => 
> $current['LivePhone']['add_date'],
>                                                                               
>                           'total_logs' => '1'
>                                                                               
>           )
>                                                                               
>   );
>                                         $this->Phone->save($phoneData);
>                                         $q = "     UPDATE 
> {$this->Server->useTable}
>                                                         SET total_phones = 
> total_phones + 1
>                                                         WHERE id = 
> '{$current['LivePhone']['server_id']}'
>                                                         LIMIT 1";
>                                         $this->Phone->query($q);
>                                         //echo "<br />" . $q;
>                                 } else {
>                                         echo "<br />updated existing phone";
>                                         $q = "     UPDATE 
> {$this->Phone->useTable}
>                                                         SET last_log_date = 
> '{$current['LivePhone']['add_date']}',
> total_logs = total_logs + 1
>                                                         WHERE mac = 
> '{$current['LivePhone']['mac']}'
>                                                         LIMIT 1";
>                                         $this->Phone->query($q);
>                                         //echo "<br />" . $q;
>                                 }
>
>                                 // record the processed phone id to keep 
> track;
>                                 $this->SyncLog->save(array('SyncLog' => 
> array('id' => $current
> ['LivePhone']['phone_id'])));
>                                 //echo 
> "<pre>";print_r($current['LivePhone']);echo "</pre>";
>                                 echo " + ";
>
>                                 // find next
>                                 $neighbors = 
> $this->LivePhone->find('neighbors', array('field' =>
> 'phone_id', 'value' => $current['LivePhone']['phone_id'], 'order' =>
> $traverseOrder, 'fields' => array('LivePhone.server_id',
> 'LivePhone.mac', 'LivePhone.add_date')));
>                                 $hasNext = is_array($neighbors['next']);
>                                 $current = $neighbors['next'];
>                         }
>                 } while ($hasNext);
>                 exit();
>         }
>
> }
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to