Asterisk-CDR-Viewer-Mod icon indicating copy to clipboard operation
Asterisk-CDR-Viewer-Mod copied to clipboard

Многотенантная система

Open anutator opened this issue 8 years ago • 13 comments
trafficstars

Хочу поставить вашу систему статистики, понравилась по виду и описанию. Есть ли возможность разделять статистику по предприятиям со своими логинами и паролями (не один логин на предприятие, т.к. кому-то даем возможность удалять аудиозаписи, кому-то нет). Хотелось бы добавлять не каждый номер к предприятию, а определять соответствие контекстов и предприятий (2-4 контекста на 1 предприятие, т.к. в предприятии номера разделены по контекстам в зависимости от прав выхода на городские линии, либо старший контекст). Если в предприятии 100 номеров, удобнее конечно контекстом определить принадлежность предприятию. Как вариант, префиксы номеров начинающиеся на определенные цифры, принадлежат такому-то предприятию. Можно такое сделать или может уже сделано?

anutator avatar May 05 '17 19:05 anutator

Для разделения можно использовать "пользовательский" конфиг, в котором сможете задать разные настройки. Кнопку удаления записей можно отключить в конфиге. Поиск с учетом Контекста отсутствует, может быть добавлю в следующем обновлении. При поиске можно использовать Регулярные выражения в формате Asterisk. Например: Номер назначения - _X95. Мне кажется, вам будет удобнее какая-нибудь CRM, например Freepbx

prog-it avatar May 06 '17 04:05 prog-it

Во FreePBX нельзя сделать многотенантную систему. Во всяком случае в старых версиях.

anutator avatar May 06 '17 09:05 anutator

Мне кажется нужно добавить еще одно поле в mysql с названием пользователя/предприятия и чтобы по нему CDR-Viever отображал информацию. А вебку для разных предприятий как раз удобно развести через пользовательский конфиг.

Korgoth1234 avatar Jul 05 '17 14:07 Korgoth1234

Название предприятия в этом случае в базу будет писать сам Asterisk ? Если такой вариант подходит, то будет добавлено в ближайшее время. Название предприятия для поиска в базе прописано в конфиге, разграничение же по предприятиям по "пользовательскому конфигу".

prog-it avatar Jul 13 '17 07:07 prog-it

Пока не знаю как реализовать грамотнее, я базы данных еще не знаю.

Вариант 1 (Астер сам пишет в базу): в Астере в AstDB имени контекста, который присвоен абоненту, сопоставить имя предприятия. У нескольких контекстов одно и то же имя предприятия (т.к. телефоны с разными правами), но все контексты одного предприятия имеют 3 общие первые цифры, поэтому достаточно 1 строки в AstDB. Далее во время звонка имя, соответствующее контексту, вытаскиваем из AstDB, и помещаем значение в дополнительное поле базы cdr (аналогично имени файла записи разговора). На общей странице видны все звонки, на странице предприятия только звонки этого предприятия. Но этот вариант добавляет дополнительный шаг в план нумерации и больше в базу будет писать в итоге. Но главное чтобы работало.

Вариант 2. В базе данных MySQL/MariaDB составляется дополнительная таблица:

Рога и копыта - контексты 123gorod, 123internal, 123mobile, 123international Петров и Ко - контексты 421gorod, 421internal..... И по соответствию подставляется имя предприятия. Или сопоставить имя и 3 первые цифры контекста.

Что проще реализовать?

anutator avatar Jul 13 '17 13:07 anutator

Более правильно, конечно, использовать доп. таблицу в базе, но первый вариант проще и с вариантом 2 много нужно переписывать. Скорее всего, первый вариант и будет добавлен. А насчет того, что "Астер сам пишет в базу", можно сделать через триггер в базе. Т.е. будет еще одна таблица в базе по варианту 2 и триггер на событие "insert". Триггер выполнит соответствие контекстов и вставит нужное имя предприятия в cdr. Но триггер, понятно, нужно будет написать самим.

prog-it avatar Jul 14 '17 07:07 prog-it

Прикрутил CDR-Viewer к FreeSwitсh, но хочется большего. Возможно ли сделать такую штуку... Сейчас в FS используется несколько доменов и в MySQL, домен записывается в отдельный столбец к каждому звонку. Очень хочется, чтобы была возможность сортировки данных по этому столбцу. Это тогда решит вопрос мультидоменности в FS. Естественно, данная сортировка должна настраиваться в конфиге, чтобы пользователям небыло доступа для смены домена. Возможно ли это реализовать на текущей версии или будет такая возможность в ближайшее время? Кроме этого, хотелось бы вывести в статистику дополнительные колонки, указав самостоятельно какие именно.

dimm71 avatar Dec 14 '17 12:12 dimm71

тоже интересна возможность фильтровать по определенному столбцу прямо из конфига

andrewnord avatar Dec 18 '17 17:12 andrewnord

andrewnord Т.е. задавать в конфиге имя столбца и значение, по которому фильтровать. В веб-интерфейсе, чтобы сразу уже выводились отфильтрованные данные?

dimm71

Очень хочется, чтобы была возможность сортировки данных по этому столбцу

Только тут получается не сортировка по домену, а поиск? Вам же нужно выводить записи только по одному домену. Т.е. задать в конфиге имя домена и выводить записи только по нему, так?

Кроме этого, хотелось бы вывести в статистику дополнительные колонки, указав самостоятельно какие именно.

Только вывести, или с возможностью поиска по ним? Если только вывести, то немного проще.

prog-it avatar Dec 20 '17 00:12 prog-it

Да. Я хотел бы вбить нужный домен в конфиге и чтобы поля выводились только те, где в строках присутствует этот домен.

В принципе можно и поиск сделать, но хотя бы для начала их просто вывести.

И такой вопрос... Если использовать разные конфиги и будет установлен пароль, то ведь любой желающий изменив в браузере строку ввода может попасть в любой профиль и посмотреть статистику. Или я ошибаюсь?!

dimm71 avatar Dec 20 '17 07:12 dimm71

Постараюсь в ближайшее время добавить.

Да. Но, для этого нужно знать имя конфига, желательно задавать какое-нибудь уникальное имя. А базовый конфиг (запрос без параметров ?config=) можно вообще удалить.

prog-it avatar Dec 20 '17 07:12 prog-it

Отлично. Буду ждать.

dimm71 avatar Dec 21 '17 09:12 dimm71

andrewnord Т.е. задавать в конфиге имя столбца и значение, по которому фильтровать. В веб-интерфейсе, чтобы сразу уже выводились отфильтрованные данные?

да, именно так

Да. Но, для этого нужно знать имя конфига, желательно задавать какое-нибудь уникальное имя. А базовый конфиг (запрос без параметров ?config=) можно вообще удалить.

а нельзя добавить в config имена пользователей для которых будет доступен этот конфиг? по аналогии как задаются 'admins' => array( );, добавить еще 'users' => array( ); - все остальным доступ закрыт

andrewnord avatar Dec 21 '17 17:12 andrewnord