Well, that's not exactly the simplest code. What did you expect? And why do you have so many raw SQL queries? You're using 5 models and not even taking advantage of the framework.
Also, $phoneTypes should be a model class var. Defining it within a controller method is a bit dodgy, I think. On Mon, Jun 22, 2009 at 10:33 PM, 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 -~----------~----~----~----~------~----~------~--~---
