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
-~----------~----~----~----~------~----~------~--~---

Reply via email to