Биллинговая система Nodeny

Главная категория => Ревизии => Тема начата: Efendy от 14 Августа 2018, 11:03:01



Название: rev.527
Отправлено: Efendy от 14 Августа 2018, 11:03:01
В этой ревизии появились такие фичи:

1) возможность задать группы, для которых должна быть разная нумерация. Например, у нас есть группы: клиенты, работники и оборудование. Мы хотим чтобы id свичей шли не в перемешку с id других групп, а, например, начинались с миллиона. Скорее всего вам эта фича не понадобится, но меня попросили - я сделал

2) есть такая фича как "рабочий список" - он хранит заранее подготовленный список абонентов. Может понадобиться когда мы хотим посмотреть, скажем, отчет по нескольким никак не связанным клиентам. Теперь можно добавлять в рабочий список не по одному клиенту, а группу по фильтру. Например, мы выбрали всех абонентов по фильтру "Хрещатик 15", добавили в "рабочий список", затем выбрали по фильтру "Оболонский проспект 16", снова добавили. Теперь мы можем смотреть статистику по клиентам по обоим фильтрам

3) есть поле типа выпадающий список. Есть фича фильтрации по нескольким значениям выпадающего списка - например, фильтр "все абоненты по улице Лалала или Блаблабла или Хахаха". Теперь можно не только фильтровать, но и хранить несколько значений в учетной записи. Эту фичу сделал в основном для модуля dhcp. Теперь этот модуль может предлагать подвязать свич к абоненту в зависимости от адреса проживания последнего и расположения свича. Доку я еще не написал, поэтому на словах:

В модуле dhcp есть таблица (mac_uid), которая хранит параметры подключения абонентов. В зависимости от организации сети, там хранятся разные данные. Например, в неуправляемой сети, там хранятся связки мак-абонента = id абонента. Для таких сетей нововведение не интересно.

А вот в управляемой сети в этой таблице уже хранятся еще и параметры устройства: мак-свича и порт свича. Т.е. связки уже такие: мак свича + порт свича + мак абона = id абона. Кстати, если на порту только один абон, то его мак может игнорироваться.

Обычно эта таблица заполняется автоматически - для неизвестных связок перехватываются http-запросы и выводится заглушка "авторизуйтесь", после чего создается связка.

Некоторые сети предпочитают заполнять эти связки вручную. Кстати, теперь я их называю "соединение". При ручном добавлении появляется большое неудобство - необходимо вручную вводить мак адрес свича. Причем не однократно, а при подключении каждого абона.

Поэтому еще до этой ревизии я сделал такую фичу: в самом биллинге можно сделать группу "оборудование" (или "свичи") с любыми параметрами, например: состояние (ремонт, в раьботе, глючит), стоимость, тип, прошивка и т.д. Это уже само по себе удобно. Но. Основной профит от создания группы "свичи" в том, что можно сделать поле "мак адрес" и при создании связки "мак-свича + порт + мак абона" можно не вводить его вручную, а выбрать свич из списка. В видео пример этого:

https://www.youtube.com/watch?v=giFW9HDfLk4

Кроме итого, на видео вы могли заметить новую фичу. У свича можно задать адрес облуживания. Т.е. можно указать, что свич обслуживает абонентов по улице Лютого в домах 15, 17 и 19, а также по улице Вересня в домах 22, 24 и 28.

Обратите внимание, на видео улицы - выпадающий список. Дома - тоже выпадающий список. Если кто не знал, я напомню - в NoDeny можно сделать связанные списки - это когда значения поля зависят от другого поля. например, можно сделать поле "город". Выбираем город "Киев" и получаем список улиц актуальных только для данного города. Ну или список районов. Выбираем нужный район и получаем улицы только данного района. Выбираем улицу и получаем список домов на этой улицы. Это значительно упрощает ввод т.к убираются ненужные варианты.

Так и в примере на видео дома зависят от улицы. Более того, можно выбрать несколько домов - часто к свичу могут быть подключены абоненты из соседних домов, особенно если это частный сектор.

Когда адрес подключения абонента совпадает с адресом обслуживания свича - биллинг сам предложит создать подключение к нему.

Поля по которым идет сравнение, естественно, задаются в настройках. Можно вообще не по адресу связывать.


Название: Re: rev.527
Отправлено: tom от 14 Августа 2018, 12:46:37
Відносно п.3 - я вірно зрозумів, у кого данні мак+пристрій+порт - заповнюється автоматично, то він не актуальний?

Доречі, маю таку невеличку складність при гібридній мережі - де є порт на користувача так і багато користувачів на порту. Чи варто і чи можна зробити так, щоб (наприклад) параметр свіча був - oneconnect, це значить що на ньому лише абони один на порт, і будьякий неавторизований абон буде з цим параметром. Ато виходить коли абон не авторизований і авторизувався, в нього oneconnect=0, і зміна мака - веде до створення ще одного запису в таблиці mac_uid.

Є думки в цьому напрямку? Чи це одиничний випадок і періодичну моніторити таблицю?


Название: Re: rev.527
Отправлено: Efendy от 14 Августа 2018, 13:39:52
Відносно п.3 - я вірно зрозумів, у кого данні мак+пристрій+порт - заповнюється автоматично, то він не актуальний?
неактуальный

Доречі, маю таку невеличку складність при гібридній мережі - де є порт на користувача так і багато користувачів на порту. Чи варто і чи можна зробити так, щоб (наприклад) параметр свіча був - oneconnect, це значить що на ньому лише абони один на порт, і будьякий неавторизований абон буде з цим параметром. Ато виходить коли абон не авторизований і авторизувався, в нього oneconnect=0, і зміна мака - веде до створення ще одного запису в таблиці mac_uid.

Є думки в цьому напрямку? Чи це одиничний випадок і періодичну моніторити таблицю?
подумаю


Название: Re: rev.527
Отправлено: cojiict от 15 Августа 2018, 11:07:47
Код:
INSERT INTO users SET modify_time=UNIX_TIMESTAMP(), cstate='1', state='on', contract='6669', lstate='0', contract_date='0', block_if_limit='1', limit_balance='0', cstate_time='0', fio='', comment='', grp='14', passwd=AES_ENCRYPT('*****','******'), id='7554';
ERROR 1364 (HY000): Field 'name' doesn't have a default value
Цитировать
SELECT @@global.sql_mode;
+------------------------+
| @@global.sql_mode      |
+------------------------+
| NO_ENGINE_SUBSTITUTION |
+------------------------+
1 row in set (0.00 sec)

mysql> SELECT @@session.sql_mode;
+------------------------+
| @@session.sql_mode     |
+------------------------+
| NO_ENGINE_SUBSTITUTION |
+------------------------+
1 row in set (0.00 sec)

Зробив
Код:
SET @@GLOBAL.sql_mode= ''
SET @@SESSION.sql_mode= ''
Нові граблі
Код:
Duplicate entry '' for key 'name'

Код:
+----------------+---------------------+------+-----+---------+----------------+
| Field          | Type                | Null | Key | Default | Extra          |
+----------------+---------------------+------+-----+---------+----------------+
| id             | int(11)             | NO   | PRI | NULL    | auto_increment |
| name           | varchar(64)         | NO   | UNI | NULL    |                |
| passwd         | varbinary(64)       | NO   |     | NULL    |                |
| grp            | tinyint(4) unsigned | NO   |     | 0       |                |
| contract       | tinytext            | NO   |     | NULL    |                |
| contract_date  | int(10) unsigned    | NO   |     | NULL    |                |
| state          | enum('off','on')    | NO   | MUL | on      |                |
| balance        | float(10,2)         | NO   |     | 0.00    |                |
| limit_balance  | float(6,2)          | NO   |     | 0.00    |                |
| block_if_limit | tinyint(4)          | NO   |     | 0       |                |
| modify_time    | int(11)             | NO   |     | 0       |                |
| fio            | tinytext            | NO   |     | NULL    |                |
| discount       | tinyint(4)          | NO   |     | 0       |                |
| cstate         | int(11)             | NO   |     | 0       |                |
| cstate_time    | int(10) unsigned    | NO   |     | NULL    |                |
| comment        | text                | NO   |     | NULL    |                |
| lstate         | tinyint(4)          | NO   |     | 0       |                |


Название: Re: rev.527
Отправлено: cojiict от 15 Августа 2018, 11:15:06
изменение режима SQL mode после создания и вставки данных в партиционные таблицы (partitioning tables) может привести к существенным изменениям в поведении таких таблиц, что, в свою очередь, может привести к потере или повреждению данных.


Название: Re: rev.527
Отправлено: Efendy от 15 Августа 2018, 11:49:35
ALTER TABLE users CHANGE name name VARCHAR(64) NULL DEFAULT NULL;


Название: Re: rev.527
Отправлено: tom от 23 Августа 2018, 21:19:58
Після 528 у кого заглушка на nginx -  вона норм привязує клієнта після авторизації?! В мене логін пароль вводять, а з ipset таблиці нікого не виводить.. СоА працює, клієнтів розблоковує.


Название: Re: rev.527
Отправлено: Efendy от 23 Августа 2018, 23:05:48
Після 528 у кого заглушка на nginx -  вона норм привязує клієнта після авторизації?! В мене логін пароль вводять, а з ipset таблиці нікого не виводить.. СоА працює, клієнтів розблоковує.
модуль dhcp обнови, там были изменения для этой ревизии


Название: Re: rev.527
Отправлено: tom от 24 Августа 2018, 02:39:29
Все наче ок, тут вийшов глюк криворукий інженер.. )))


Название: Re: rev.527
Отправлено: tom от 24 Августа 2018, 12:18:18
Все таки модуль тре оновити.
Після оновлення вилізли бока в радіус запитах
(5) sql: EXPAND call radreply('%{User-Name}','%{NAS-Identifier}','%{Calling-Station-Id}')
(5) sql:    --> call radreply('717:112','NAS7','b0:4e:26:b7:02:b1')
(5) sql: Executing select query: call radreply('717:112','NAS7','b0:4e:26:b7:02:b1')
(5) sql: ERROR: rlm_sql_mysql: ERROR 1136 (Column count doesn't match value count at row 1): 21S01
(5) sql: ERROR: SQL query error getting reply attributes
зявились дедлоки.

       authorize_reply_query = "call radreply('%{User-Name}','%{NAS-Identifier}','%{Calling-Station-Id}')"

CREATE DEFINER=`root`@`localhost` PROCEDURE `radreply`(IN login VARCHAR(64), IN `tag` VARCHAR(64), IN rad_usr_mac VARCHAR(17))


Название: Re: rev.527
Отправлено: tom от 24 Августа 2018, 15:57:14
Знайшов
тре правити процедуру radreply


Название: Re: rev.527
Отправлено: cojiict от 19 Сентября 2018, 10:27:15
Доку я еще не написал...
Коли можна буде вже ознайомитись?
Об’єми роботи будуть не малі. Чи буде якийсь скрипт по оптимізації sql в доці? Щось схоже на перехід з 50.32?
Чекаємо з нетерпінням


Название: Re: rev.527
Отправлено: Efendy от 19 Сентября 2018, 22:13:37
Чи буде якийсь скрипт по оптимізації sql в доці? Щось схоже на перехід з 50.32?
Не совсем понял о каком скрипте оптимизации идет речь. Если о процедурах и функциях - они же пишутся исходя из конкретных случаев. Ну, а вообще, mysql огорчает - мы с этими дедлоками боремся уже который год, а они все равно возникают просто на элементарных операциях. Не знаю, писал я где-то или нет, но в 8м мускуле появилась фича, которая по идее позволит избавиться от дедлоков. Ждем когда станет стабильной


Название: Re: rev.527
Отправлено: cojiict от 20 Сентября 2018, 09:14:39
мова про оптимізацію доп_полів.
Зараз працює по старій схемі.
Код:
Місто/Село	_ip_tag	выпадающий список		
Вулиця _adr_street выпадающий список Титульное
Будинок _adr_house одна строка

Тепер щоб отримувати перелік комутаторі привязка мала б бути приблизно така
Код:
_adr_city:street:building
обдумував рішення як перейти під новий формат. В моєму розумінні це дуже клопітка робота, або ручний ввід.
Можливо хтось вже робив щось подібне. Поділіться, будь ласка, скриптом або напрямком


Название: Re: rev.527
Отправлено: cojiict от 20 Сентября 2018, 11:16:19
не побачив опис модуля в білінгу. Буду пробувати по ману. Дякую


Название: Re: rev.527
Отправлено: cojiict от 21 Сентября 2018, 11:47:55
Помітив недоліки, було б добре якось врахувати!
якщо завершити пакет послуг вручну то повернення коштів враховує ще і години який користувався клієнт даним тарифом
А при повторному підключенні тарифу з такою ж вартістю (але наприклад з іншою швидкістю чи умовами) враховує тільки день і вартість відповідно збільшується.


Название: Re: rev.527
Отправлено: Efendy от 21 Сентября 2018, 12:06:36
 какое это имеет отношение к ревизии 527?