コード例 #1
0
ファイル: ProcessLog.php プロジェクト: swk/bluebox
 public function importLogs()
 {
     // Scan for new logs that haven't been processed before and import them into the log table
     // Make sure not to get dupes, even if there's a crash (how?)
     $coreFields = array('uuid' => 1, 'accountcode' => 1, 'caller_id_number' => 1, 'destination_number' => 1, 'context' => 1, 'duration' => 1, 'start_stamp' => 1, 'answer_stamp' => 1, 'end_stamp' => 1, 'billsec' => 1, 'hangup_cause' => 1, 'channel_name' => 1, 'bridge_channel' => 1);
     Kohana::log('debug', 'scandir: ' . Kohana::config('calls.scandir'));
     $callFiles = glob(rtrim(Kohana::config('calls.scandir'), '/') . '/' . 'Master.csv.*', GLOB_MARK);
     foreach ($callFiles as $callFile) {
         $recordCount = 0;
         $recordsInserted = 0;
         $recordsErrored = 0;
         $recordsDup = 0;
         $callFileHistory = new CallsFiles();
         $callFileHistory->filename = $callFile;
         // Save before we start so we can see if we crash. Also lets us calc how long it took.
         $callFileHistory->save();
         if (($callFileHandle = fopen($callFile, "r")) !== FALSE) {
             while (($callRecord = fgetcsv($callFileHandle, 2000, ",")) !== FALSE) {
                 $corecdr = array();
                 $extracdr = array();
                 $numFields = count($callRecord);
                 $recordCount++;
                 $insertCall = new Calls();
                 Kohana::log('debug', "{$numFields} fields in record {$recordCount}");
                 for ($field = 0; $field < $numFields; $field = $field + 2) {
                     if (isset($coreFields[$callRecord[$field]])) {
                         $corecdr[$callRecord[$field]] = $callRecord[$field + 1];
                     } else {
                         $extracdr[$callRecord[$field]] = $callRecord[$field + 1];
                     }
                 }
                 $corecdr['custom_fields'] = $extracdr;
                 $insertCall->synchronizeWithArray($corecdr);
                 try {
                     $insertCall->save();
                     $recordsInserted++;
                 } catch (Exception $e) {
                     if (preg_match('/Duplicate entry/', $e->getMessage())) {
                         $recordsDup++;
                     } else {
                         $recordsErrored++;
                     }
                     Kohana::log('debug', 'Insert of Call Log Failed. UUID: ' . $corecdr['uuid'] . 'Message: ' . $e->getMessage());
                 }
                 Kohana::log('debug', 'Call Log: ' . print_r($corecdr, true));
                 Kohana::log('debug', 'Call Log: ' . print_r($extracdr, true));
             }
             fclose($callFileHandle);
         }
         // Update the history adter we have processed the file.
         $callFileHistory->records_processed = $recordCount;
         $callFileHistory->records_inserted = $recordsInserted;
         $callFileHistory->records_errored = $recordsErrored;
         $callFileHistory->records_dup = $recordsDup;
         $callFileHistory->save();
     }
 }