and so many exit() at the end of a function? On Tue, Jun 23, 2009 at 5:48 PM, Walther <[email protected]> wrote:
> First, what do you mean by CPU spikes? What action causes it, and have > you run a profiler on it? > > Second, why are you using raw SQL queries? > > 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(); > > } > > > > } > > > > > > > -- Thanks Joshua --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
