Загружается...
 

источник: (http://www.voip-info.org/wiki/view/Asterisk+CDR+csv+mysql+import)


Здесь еще один написанный на PHP скрипт для импорта файлов cdr.csv в mysql
cdr базу данных. Полезен для перехода от текстовых cdr файлов к БД или даже для еженочных импортов.

Этот скрипт надежен для запуска многократное число раз лог файл, который хранит рост, потому что он, во-первых, проверяет таблицу БД для поиска старшей записи и только потом импортирует CDRs, которые НИКОГДА
This script is safe to run multiple times on a log file that keeps growing
because it first checks the database table to find the oldest record and
then only imports CDRs that are NEWER than the oldest database record.

Скопируйте и вставьте скрипт в текстовый файл, например, “importcdr.php” и затем используйте php в командной строке для выполнения следующего:
php importcdr.php Master.csv

Обновлено July 21, 2005: I fixed this code so it should copy and paste properly now. Wiki не нравятся квадратные скобки!

Замечание: Поля в файле Master.csv очень зависят от ваших настроек. Там есть комментарии о них.

Обновлено June 2, 2006: Этот скрипт теперь прекрасно работает с астериском 1.2.7.1.


<?
/** process asterisk cdr file (Master.csv) вставляет употребительные
* значения в mysql бд, которые созданы для использования
* с Asterisk_addons cdr_addon_mysql.so
* Скрипт будет только вставлять НОВЫЕ записи, поэтому это безопасно
* для запуска на том же самом логе over-and-over, так же как в
* случае, когда логи не были сдвинуты.
*
* Автор: John Lange (john.lange@open-it.ca)
* Дата: May 4, 2005. Updated July 21, 2005
*
* Вот что делает скрипт:
*
* 1) Ищет последний лог элемент в таблице cdr бд.
* 2) Сканирует логи Астериска до тех пор, пока данные не будут больше, чем элемент последнего лога (так мы не дублируем элементы)
* 3) Анализирует каждый ряд из текстового лога и вставляет его в бд.
*
*/

$locale_db_host = 'localhost';
$locale_db_name = 'asteriskcdrdb';
$locale_db_login = 'asteriskcdruser';
$locale_db_pass = 'password';

if($argc == 2) {
$logfile = $argv[1];
} else {
print("Usage ".$argv[0]." <filename>\n");
print("Where filename is the path to the Asterisk csv file to import (Master.csv)\n");
print("This script is safe to run multiple times on a growing log file as it only imports records that are newer than the database\n");
exit(0);
}

// соединение с бд
$linkmb = mysql_connect($locale_db_host, $locale_db_login, $locale_db_pass)
or die("Could not connect : " . mysql_error());
//echo "Connected successfully\n";
mysql_select_db($locale_db_name, $linkmb) or die("Could not select database $locale_db_name");

/** 1) Ищет последний элемент лога **/
// просматривает в cdr таблице, чтобы увидеть, когда последний элемент был создан.
// это устанавливает начальную точку для данных астариска.
$sql="SELECT UNIX_TIMESTAMP(calldate) as calldate".
" FROM cdr".
" ORDER BY calldate DESC".
" LIMIT 1";

if(!($result = mysql_query($sql, $linkmb))) {
print("Invalid query: " . mysql_error()."\n");
print("SQL: $sql\n");
die();
}
$result_array = mysql_fetch_array($result);
//$lasttimestamp = date("Y-m-d H:i:s", $result_array['voip_stamp']);
$lasttimestamp = $result_array['calldate'];

//** 2) ищет новые записи в лог файле астериска. **

$rows = 0;
$handle = fopen($logfile, "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
// ЗАМЕЧАНИЕ: поля в Master.csv могут изменяться. Это должно работать по умолчанию на всех кстановках, но вы можете отредактировать следующую строку для сравнения вашей конфигурации
list($accountcode,$src, $dst, $dcontext, $clid, $channel, $dstchannel, $lastapp, $lastdata, $start, $answer, $end, $duration,
$billsec, $disposition, $amaflags ) = $data;

// 3) анализирует каждый ряд и добавляет к бд
if(strtotime($end) > $lasttimestamp) { // мы нашли новую запись, добавим ее к БД
$sql = "INSERT INTO cdr (calldate, clid, src, dst, dcontext, channel, dstchannel, lastapp, lastdata, duration, billsec, disposition, amaflags, accountcode)
VALUES('$end', '".mysql_real_escape_string($clid)."', '$src', '$dst', '$dcontext', '$channel', '$dstchannel', '$lastapp', '$lastdata', '$duration', '$billsec',
'$disposition', '$amaflags', '$accountcode')";
if(!($result2 = mysql_query($sql, $linkmb))) {
print("Invalid query: " . mysql_error()."\n");
print("SQL: $sql\n");
die();
}
$rows++;
}
}
fclose($handle);

print("$rows imported\n");
?>


Смотри также


Asterisk cdr csv


Создано yulka. Последнее изменение: пятница 27 / октябрь, 2006 18:22:23 MSD автор yulka.