По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Как и любая современная АТС, Asterisk имеет свою встроенную систему хранения истории звонков - CDR (Call Detail Record). Она используется для снятия статистики, ведения отчетности, прослушивания вызовов или подсчета биллинговых показателей.
В Asterisk для этого создана база данных asteriskcdrdb, в которой существует таблица cdr. Давайте рассмотрим как пользоваться данной таблицей и ее структуру.
[root@asterisk]# mysql // подключаемся к MySQL
После успешного подключения, необходимо выбрать для работы базу данных asteriskcdrdb:
mysql> use asteriskcdrdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
Давайте убедимся, что у нас есть таблица cdr. Выполним это, как указано ниже:
mysql> show tables;
+-------------------------+
| Tables_in_asteriskcdrdb |
+-------------------------+
| cdr |
| cel |
+-------------------------+
2 rows in set (0.00 sec)
На данном этапе мы убедились, что у нас есть база данных asteriskcdrdb, в которой находится таблица cdr. Давайте попробуем посмотреть входящие звонки из города за сегодня (дата написания статьи 18 марта 2016 года), в период с 12:00 до 12:10, т.е за 10 минут:
SELECT `dst` , `src` , `duration` , `calldate` , `recordingfile`
FROM `cdr` WHERE `calldate` >= '2016-03-18 12:00:00' AND `calldate` <= '2016-03-18 12:10:00' AND LENGTH( `src` ) >3;
+-----+-------------+----------+---------------------+----------------------------------------------------------------+
| dst | src | duration | calldate | recordingfile |
+-----+-------------+----------+---------------------+----------------------------------------------------------------+
| 113 | 84991111111 | 140 | 2016-03-18 12:00:36 | external-113-84991111111-20160318-115933-1458291573.157155.wav |
| 104 | 89162222222 | 81 | 2016-03-18 12:01:33 | external-104-89162222222-20160318-120133-1458291693.157169.wav |
+-----+-------------+----------+---------------------+----------------------------------------------------------------+
2 rows in set (0.00 sec)
В вышеуказанном примере, в SQL запросе указано LENGTH( `src` ) >3. Столбец ‘src’ – показывает номер звонящего (source - источник). Это сделано для того, чтобы исключить внутренние звонки, так как у нас используется трехзначная нумерация. Тем самым, мы получаем в результате данные, с которыми затем можем работать. Например, отправить на почту в виде отчета. Ниже рассмотрена структура таблицы cdr в базе данных asteriskcdrdb:
Столбец
Пример значения
Описание
calldate
2016-03-18 12:00:36
Дата и время звонка
clid
"Oleg Ivanov" <84991111111>
В данное поле попадает полное CallerID (CLID, CID), которое состоит из имени и номера звонящего. Это доступно только для считывания.
src
84991111111
Номер звонящего в конструкции CallerID (CNUM). Это доступно только для считывания.
dst
113
Номер назначения для звонка. Это доступно только для считывания.
dcontext
CustomContext1
Контекст для обработки. Это доступно только для считывания.
channel
SIP/0002B2356854-a34bh3ef
Канал, через который поступил звонок
dstchannel
SIP/0004F6675969-97836bb0
Канал, через который ушел исходящий звонок
lastapp
Dial, Busy, Congestion
Приложение, которое последним отработало этот вызов перед попаданием в таблицу cdr
lastdata
SIP/0004F6675969,30,tT
Аргумент, который был передан приложению, которое отработало вызов последним (lastapp)
duration
75
Количество секунд от начала (отметка start) до окончания вызова (отметка end)
billsec
67
Количество секунд от ответа (отметка answer) до окончания вызова (отметка end). Данное значение всегда меньше значения duration, и отражает длительность самого разговора, что важно для подсчета стоимости.
disposition
ANSWERED, BUSY, NO ANSWER, FAILED
Результат звонка
amaflags
OMIT, BILLING, DOCUMENTATION, Unknown
Метка Automatic Message Accounting (AMA) – автоматический учет стоимости вызова.
accountcode
23232
Идентификатор аккаунта. Данное значение пустое по умолчанию, и определяется параметрами конкретного пользователя.
uniqueid
1458291693.157169
Уникальный идентификатор звонка
userfield
-
Пользовательское поле. Здесь можно передавать что угодно, добавляя данные в этот столбец при работе с вызовом внутри контекста обработки.
did
4996491913
DID (Direct Inward Dialing). На основании DID вызова на Asterisk осуществляется его маршрутизация (это значение приходит от провайдера).
recordingfile
external-113-84991111111-20160318-115933-1458291573.157155.wav
Имя файла, содержащего запись разговора. В данном имени можно проследить путь к файлу в файловой структуре сервера.
cnum
84991111111
Номер звонящего в структуре CallerID.
cnam
Oleg Ivanov
Имя звонящего в структуре CallerID.
Теперь, когда вы понимаете принцип формирования запросов к базе данных и ее структуру, вы можете без труда формировать собственные отчеты. Например, ежедневный отчет о количестве входящих звонков за текущий день на почту. Это реализуется средствами php скрипта и добавления расписания через cron. Поговорим об этом в следующей статье
Все мы знаем, что время – самый ценный ресурс. Сегодня мы рассмотрим 5 способов, которые помогут сэкономить немного времени, при работе в командной строке Cisco IOS. Не будем терять время и рассмотрим их!
exec-timeout 0 0
Эта команда позволяет не терять соединение с вашим роутером или коммутатором при достижении времени таймаута, выставив его на ноль минут и ноль секунд. Если ее применить на консольных линиях и VTY, то IOS интерпретирует это, как никогда не истекающий таймаут.
Конечно, ни в коем случае нельзя использовать эту команду в продакшне из соображений безопасности, но она прекрасно подойдет, чтобы сэкономить ваше время в лаборатории, избавив от необходимости повторного входа на несколько устройств в течение дня.
logging synchronous
Наверняка вы были в ситуации, когда посреди набора вашей команды Cisco IOS чувствовала сильную необходимость отправить сообщение Syslog в консоль? :) Это может сильно отвлекать. Способ предотвращения такого вторжения заключается в применении команды logging synchronous. После ввода этой команды, если IOS понадобится отправить Syslog сообщение, то после его отправки, консоль вернет в сеанс терминала то, что вы уже набрали, чтобы продолжить там, где вы остановились.
no ip domain-lookup
Эта команда позволяет отключить интерпретацию команды как DNS имя, если в ней была сделана ошибка. Еще два менее радикальных метода как обойти это можно найти в этой статье.
alias exec
В качестве еще одного способа экономии времени можно создать несколько команд псевдонимов (alias). Это относительно короткие команды, которые транслируются в IOS в длинные команды. Например, если вам часто приходится смотреть конфигурацию протоколов маршрутизации при помощи команды show run | s router, то можно создать ее короткую версию используя команду alias exec src show run | s router. Теперь вместо всей длинной команды нам нужно будет набрать просто ее псевдоним – src.
Сохраненная начальная конфигурация
И в качестве окончательного способа по экономии времени можно рассмотреть сохранения начальной конфигурации в текстовый файл и вставить текст при запуске оборудования «из коробки» или после сброса. Например, можно завести документ со всеми командами из этой статьи и вставлять его в начале работы.
conf t
line con 0
exec-timeout 0 0
logging synchronous
exit
line vty 0 15
exec-timeout 0 0
logging synchronous
exit
no ip domain-lookup
alias exec src show run | s router
alias exec sib show ip interface brief
end
Надеемся, что это поможет сохранить вам пару драгоценных минут!
Сейчас вы точно прочувствуете важное команды screen. Бывало ли у вас такое, что вы выполняете (очень долго) команду в консоли - CLI на удаленной машине, будучи подключенным через SSH? Команда долго выполняется и близится к завершению как вдруг пропадает подключение, рвется SSH подключение и все, что вы делали - пропало?
Прости, что напомнили. Знаем, это болезненно. Что же, вытрем слезы. Для этих ситуаций есть команда screen о которой мы и поговорим.
Немножко теории
Так называемый screen это терминальный мультиплексор (нас тоже пугает это слово). Другими словами, оно дает нам возможность внутри действующей сессии открыть сколько угодно много виртуальных окон/терминалов. Что важно - процесс, запущенный внутри сессии через screen, будет продолжаться даже тогда, когда вы отключитесь от самой первой сессии.
Установка screen в Linux
Вообще, пакет screen предустановлен на большинстве современных Linux - дистров. Проверить можно командой:
screen --version
Screen version 4.00.03 (FAU) 23-Oct-06
Если случилось так, что у вас его нет - это можно быстро исправить простой установкой.
Установка screen в Ubuntu и Debian
apt install screen
Установка screen в CentOS и Fedora
yum install screen
Запуск screen в Linux
Чтобы запустить screen в консоли, просто наберите screen. Что может быть проще, не правда ли?
screen
У вас откроется новая сессия в новом окне. Уже здесь вы можете вводить все нужные shell команды. Находясь в режиме скрина (screen) вы можете посмотреть список доступных вам команд управления этим режимом. Вот так:
Ctrl+a и ?
Если не получается нажать указанную выше комбинацию, можно поступить проще: нажмите отдельно Ctrl+a, отпустите, а затем в консоль наберите ? и нажмите Enter
Сессия screen с именем
Ну очень удобная фича. Если вы делаете несколько процессов параллельно, просто обзовите их так, чтобы потом понять, что и где выполняется. Синтаксис такой:
screen -S имя_сессия_скрин
Например, вы можете запустить ping - замер хоста с 1С и назвать сессию так:
screen -S pings_towards_1C
Всегда используйте скрин именно так. Будет значительно удобнее.
Как правильно работать с окнами в Windows
Как мы уже сказали, когда вы создаете новую screen - сессию, вы создадите новое окно с shell оболочкой внутри. И что интересно - внутри скрин сессии вы можете создать множество дополнительных окон. Чтобы это сделать, воспользуйтесь командой (внутри скрина) Ctrl+a и c. Новому окну будет назначен номер от 0 до 9 (первый свободный).
Ниже мы собрали все команды, которые понадобятся вам для управления скринами:
Ctrl+a и c - создать дополнительное окно ;
Ctrl+a и " - показать список всех имеющихся окон;
Ctrl+a и 0 - переключиться на окно с номером 0 (номер может быть иной);
Ctrl+a и A - переименовать текущее окно;
Ctrl+a и S - разделить окно по горизонтали на две области;
Ctrl+a и | - разделить окно по вертикали на две области;
Ctrl+a и tab - переключить рабочий фокус на следующую область разделенного окна;
Ctrl+a и Ctrl+a - переключить рабочий фокус на предыдущую область разделенного окна;
Ctrl+a и Q - закрыть все разделенные области кроме;
Ctrl+a и X - закрыть текущую область;
Выход из screen сессии
Вы можете легко выйти из screen - сессии набрав:
Ctrl+a и d
Самое важное: запущенная вами в этот момент команда не остановится и будет продолжать свое выполнение.
Возврат к screen сессии
Чтобы вернуть к screen - сессии используйте команду:
screen -r
Если у вас запущено больше чем одна screen - сессия, то после ключа r нужно указать ее ID. Узнать его просто с помощью команды:
screen -ls
Вывод этой команды будет выглядеть вот так:
screen -ls
There are screens on:
32328.pings_towards_1C (Detached)
32482.wiki.merionet.ru_is_one_love (Detached)
2 Sockets in /var/run/screen/S-root.
В выводе выше мы выделили ID - сессий. Например, чтобы вернуться к сессии 32328 (pings_towards_1C), дайте команду:
screen -r 32328
Немножко кастомизации screen под вас
Когда screen запускается, он считывает свои конфигурационные параметры из /etc/screenrc и ~/.screenrc, если файл присутствует. Так вот - мы можем легко перенастроить предпочтения использования screen и сделать это в файле .screenrc.
Посмотрите пример с комментариями, как мы закастомили screen для себя:
# Выключаем приветствие
startup_message off
# включаем визуальный звонок
vbell off
# буфер для сохраненных строк делаем 10000
defscrollback 10000
# кастомим строку состояния
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'
Типовой сценарий использования screen
Общий случай, так сказать. Обычно он состоит из следующих шагов:
После SSH подключения к серверу, набираем screen;
Запускаем интересующую нас команду в режиме screen - сессии;
Выполняем команду Ctrl + a и d, чтобы выйти из режима работы с экран-сессией
Через какое-то время возвращаемся к запущенному ранее экрану командой screen -r
Выводы
Мы разобрались, как создавать screen сессии, управлять ими внутри, открывая новые окна, выходить из их режима управления (без прекращения выполнения команды), делить горизонтально и вертикально экраны.
Ах да, ещё мы научились кастомизировать screen под себя. Профит!