По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Сегодня подробно расскажем как найти практическое применение знаниям, полученным в статье про структуру asteriskcdrdb, а именно, как сделать ежедневные отчеты о входящих звонках на почту. Создание скрипта Чтобы наш .php скрипт смог подключиться к базе данных, необходимо создать пользователя, с правами, которые буду позволять ему извлекать необходимую информацию. Для этого, подключимся к нашему серверу по SSH [root@asterisk]# mysql mysql>CREATE USER ' user'@'localhost' IDENTIFIED BY 'P@ssw0rd'; На данном этапе мы создали пользователя user с паролем P@ssw0rd. Далее дадим ему необходимые права: mysql> GRANT SELECT ON asteriskcdrdb.cdr TO 'user' Создадим файл с расширением .php, в котором мы отразим подключение к нашей базе данных. Запишем эту конструкцию так: $hostname = "localhost"; //адрес хоста. Скрипт мы будем запускать на той же машине, на которой находится БД asteriskcdrdb; $username = "user"; //отражаем пользователя $password = "P@ssw0rd"; //пароль для созданного нами пользователя $dbName = "asteriskcdrdb"; //база данных, в которой хранятся необходимые нам данные $today = date('y-m-d'); // сегодняшняя дата в формате 2016-03-25 $counter = 1; // счетчик mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); // соединиться к БД mysql_select_db($dbName) or die(mysql_error()); //выбрать базу данных. Если произойдет ошибка - вывести ее $headers = "; charset=windows-1251 "; //заголовок для письма $headers .= "From: Мерион Нетворкс <info@merionet.ru> "; $headers .= "Reply-To: info@merionet.ru "; Предположим, что все входящие звонки приходят на номер секретаря – 100. Так же мы знаем, что при звонке из города, мы видим номер звонящего, который содержит в себе больше 3 символов (пусть у нас используется трехзначная внутренняя нумерация). Наша задача сводится к формулировке запроса к таблице cdr. Добавляем к нашему .php файлу: $query = "SELECT `dst` , `src` , `duration` , `dstchannel` , `calldate` , `disposition` FROM `cdr` WHERE `calldate` >='$today 00:00:00' AND `calldate` <='$today 23:59:59' AND LENGTH( `src` ) >3 AND `dst` = '100';" ; $res=mysql_query($query) or die(mysql_error()); // Выполнить запрос. Если произойдет ошибка - вывести ее. $number = mysql_num_rows($res); // Как много нашлось строк У нас почти все готово. Осталось только обработать данные на выходе. Для этого, нам понадобится следующая конструкция: //формируем шапку нашей таблицы со значениями $mes .= ' table style="max-width: 575px;border-bottom:none; margin: 0 auto;border-spacing: inherit;"> thead> tr style="border-bottom: 2px solid #05477c;"> th style="padding:10px; color: #fff; max-width: 150px;background:#05477c;">Порядковый номер</th> th style="padding:10px; color: #fff; max-width: 150px;background:#05477c;">Дата</th> th style="padding:10px; color: #fff; max-width: 100px;background:#05477c;">От кого</th> th style="padding:10px; color: #fff; max-width: 45px;background:#05477c;">Кому</th> th style="padding:10px; color: #fff; max-width: 45px;background:#05477c;">Статус звонка</th> /tr> /thead>'; //перебираем значения ассоциативного массива. Число элементов данного массива равно числу строк на выходе sql запроса while ($row=mysql_fetch_array($res)) { $mes .= ' tbody> tr style="width: 100px;"> td style="padding:10px; border-bottom: 1px solid #eee; text-align:center;">'.$counter.'</td> td style="padding:10px; border-bottom: 1px solid #eee; text-align:center;min-width: 100px;">'. $row['calldate'].'</td> td style="padding:10px; border-bottom: 1px solid #eee; text-align:center;min-width: 100px;">'. $row['src'].'</td> td style="padding:10px; border-bottom: 1px solid #eee; text-align:center;">'.$row['dst'].'</td> td style="padding:10px; text-align:center; border-bottom: 1px solid #eee; min-width: 120px; ">'.$row['disposition'].'</td> /tr>'; $counter = $counter + 1; } Теперь, мы храним в переменной $mes html таблицу, которая готова к отправке на почту. Добавим в конец скрипта: mail("info@merionet.ru", 'Все входящие за '.$today.'', $mes, $headers); ВАЖНО! Если вы используете кириллические символы, установите кодировку .php файла на Кириллицу (windows-1251) Итак, готово. Давайте посмотрим что приходит нам на почту: Работает. Давайте сделаем ежедневное задание на отработку этого скрипта через cron. Сделаем, например, ежедневно, в 17:30, когда рабочий день подходит к концу: 30 17 * * * php /home/admin/mail_report.php Не забудьте в начала скрипта поставить открывающий тэг php, а в конце скрипта закрывающий.
img
Старый и безусловно привычный администраторам интерфейс FreePBX 12 – ой версии в прошлом – в декабре 2015 выпущена тринадцатая версия графической оболочки для Asterisk. Как идти в ногу со временем и произвести обновление с 12 на 13 версию FreePBX расскажем в статье. Обновление через WEB - интерфейс Для полного удобства в двенадцатой версии FreePBX был создан встроенный пошаговый мастер обновления. Перейдите во вкладку Admin -> 12 to 13 Upgrade Tool Перед вами откроется приветственное меню мастера обновления. Тут же, развернув выделенную на скриншоте ниже красным вкладку, вы сможете ознакомиться с новинками FreePBX 13. Для продолжения установки, нажмите Check the requirements!. Система проверит текущие версии установленных на вашей IP – АТС Asterisk модулей, и, в случае не совместимости укажет какие из них необходимо будет обновить. Имейте ввиду, для корректного обновления необходимо чтобы следующие условия были выполнены: Asterisk 11 версии или выше PHP версии 5.3.3 или выше FreePBX версии 12 Нажмите на кнопку Proceed to the upgrade process. Мастер обновления занимает 3 простых шага: На первом шаге необходимо указать информацию о пользователе FreePBX, выбрав наиболее подходящую опцию в выпадающем поле Distribution На втором шаге, мастер попросит указать ваши контактные данные, такие как: Ваше имя Название компании Номер телефона Адрес электронной почты Третьим шагом будет начато обновление дистрибутива FreePBX 12 до 13 версии. По окончанию работы мастера обновления ваша система будет готова к работе в рамках 13 версии. Обновление через консоль Если по каким-либо причинам вы не можете обновить FreePBX через пошаговый, встроенный в графический интерфейс мастер обновления, вы можете сделать это через командную строку Asterisk, то есть через CLI. Для этого, выполните указанные ниже команды: amportal a ma upgradeall amportal a m update admin set value = '13.0.0alpha1' where variable = 'version'; exit amportal a ma upgrade framework fwconsole --fix_zend fwconsole ma upgrade core fwconsole ma disable backup fwconsole ma download backup fwconsole ma install backup Рассмотрим команды поподробнее. Сразу обозначим, что fwconsole и amportal это командная прослойка между пользователем через командную строку Linux и FreePBX. Итак: ma - это короткая запись команды moduleadmin. Команда отвечает за администрирование модулей FreePBX ma upgradeall - обновление в FreePBX 12 всех имеющихся модулей m - это короткая запись команды mysql. Команда отвечает за управление базой данных через MySQL update admin set value = '13.0.0alpha1' where variable = 'version'; - обновляем версию в базе данных на 13 a ma upgrade framework - обновление фреймворка FreePBX --fix_zend - с помощью программного обеспечения Zend Guard, на момент активации ваш сервер генерирует хэш – сумму, которая хранится на сервере лицензирования. Данный хэш связывается с идентификатором инсталляции, и называется Zend ID. Данная команда урегулирует все возможные конфликты с Zend. ma upgrade core - обновление модуля Core. Обратите внимание, команда уже выполняется с помощью fwconsole ma disable backup - выключаем модуль Backup ma download backup - загружаем модуль Backup ma install backup - устанавливаем модуль Backup Если у вас имеются коммерческие (купленные) модули, то укажите так же команду fwconsole ma upgrade sysadmin Для завершения установки, укажите следующие команды: fwconsole ma upgradeall fwconsole chown fwconsole reload ma upgradeall - обновление всех модулей до актуальных версий fwconsole chown - команда устанавливает необходимые права на все файлы FreePBX fwconsole reload - перезагружаем FreePBX
img
А пока не начали - почитайте материал про одноадресные пути без петель. Простое правило кратчайшего пути используется для построения описания набора путей, а не одного пути в реальных сетях. Хотя для представления набора путей через топологию или сеть можно использовать ряд различных видов деревьев, для описания компьютерных сетей обычно используются два: Minimum Spanning Tree - MST и Shortest Path Tree - SPT. Разница между этими двумя видами деревьев часто неуловима. Сеть, показанная на рисунке 3, будет использоваться для иллюстрации MST и SPT. На рисунке 3 несколько различных путей будут касаться каждого узла, например, с точки зрения А: [A, B, E, D, C] и [A, C, D, E, B], каждая общей стоимостью 10 [A, B, E] стоимостью 5 и [A, C, D] стоимостью 3, общая стоимость 8 [A, C, D, E] стоимостью 6 и [A, B] стоимостью 1, общая стоимость - 7 MST - это дерево, которое посещает каждый узел в сети с минимальной общей стоимостью (обычно измеряется как сумма всех линий связи, выбранных в сети). Алгоритм, вычисляющий MST, выберет вариант 3, поскольку он имеет наименьшую общую стоимость по набору граней, необходимых для достижения каждого узла в сети. SPT описывает кратчайший путь к каждому пункту назначения в сети, независимо от общей стоимости графа. Алгоритм, вычисляющий SPT, с точки зрения A выбрал бы: От [A, B] до B со стоимостью 1, так как этот путь короче, чем [A, C, D, E, B] со стоимостью 10 [A, B, E] в E стоимостью 5, так как это короче, чем [A, C, D, E] стоимостью 6 От [A, C] до C со стоимостью 1, так как это короче, чем [A, B, E, D, C] со стоимостью 10 [A, C, D] в D стоимостью 3, так как это короче, чем [A, B, E, D] стоимостью 8 Сравнивая набор кратчайших путей с набором путей, которые будут касаться каждого узла, приведенный выше алгоритм, вычисляющий SPT, выберет вариант 2, а не 3 в вышеуказанном списке. Другими словами, SPT будет игнорировать общую стоимость граней в MST, чтобы найти кратчайший путь к каждому достижимому месту назначения (в данном случае к узлам), тогда как MST будет игнорировать кратчайший путь к каждому достижимому месту назначения, чтобы минимизировать стоимость всего графа. Плоскости управления сетью чаще всего вычисляют SPT, а не MST, используя какую-либо форму greedy алгоритма. Хотя SPT не оптимальны для решения всех проблем, связанных с потоками сетевого трафика, они, как правило, лучше, чем MST, в типах проблем потока трафика, которые должны решать плоскости управления сетью. Greedy алгоритм Greedy алгоритмы выбирают локально оптимальные решения для решения больших проблем. Например, при вычислении кратчайшего пути через сеть Greedy алгоритм может выбрать посещение более близких соседних узлов (может быть достигнуто через линию связи с более низкой стоимостью) перед узлами, которые находятся дальше (могут быть достигнуты через линию связи с более высокой стоимостью). Таким образом, можно сказать, что Greedy алгоритмы ослабляют вычисления, обычно игнорируя или приближая глобальную оптимизацию. Иногда Greedy алгоритмы могут потерпеть неудачу. Когда они действительно дают сбой, они могут потерпеть впечатляющую неудачу, обеспечивая худшее из возможных решений. Например, при правильном наборе метрик жадный алгоритм, такой как алгоритм Дейкстры, может вычислить набор самых длинных путей через сеть, а не набор самых коротких. Поэтому Greedy алгоритмы иногда считаются эвристическими, поскольку они приближают решение сложной задачи или могут решить ее в ограниченных средах, а не фактически решают общую задачу. В реальном мире компьютерные сети спроектированы таким образом, чтобы эти алгоритмы вычисляли наилучшее возможное решение поставленной проблемы в каждом случае, а именно нахождение кратчайшего набора путей через сеть. А дальше интереснее - почитайте про альтернативные пути без петель.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59