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

Главная категория => Разработка => Тема начата: traktor150 от 13 Декабря 2009, 14:35:24



Название: Передача параметров скорости клиента через радиус на микротик
Отправлено: traktor150 от 13 Декабря 2009, 14:35:24
Доброго времени суток.
Помогите дописать процедуру
DROP PROCEDURE IF EXISTS `radreply`;
DELIMITER $$ 
CREATE PROCEDURE `radreply` (IN login VARCHAR(64))
BEGIN
  DECLARE usr_id INT; 
  DECLARE usr_ip VARCHAR(15);

  SELECT id,ip INTO usr_id,usr_ip FROM users WHERE name=login;
  INSERT into dblogin (mid,act,time) VALUES (usr_id,47,unix_timestamp());

  SELECT NULL,login,'Framed-IP-Address',usr_ip,'=';
  SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','=';
  SELECT NULL,login,'Acct-Interim-Interval','50','=';
END$$
DELIMITER ;

Задача передать на микротик еще и скорость клиента. Так вот скорость клиента хранится в таблице plans2 в таблице users поле paket указывает на тариф в котором и хранится информация о скорости клеинта. Помогите правильно составить SQL запрос чтоб получить скорость клиента.


Название: Re: Передача параметров скорости клиента через радиус на микротик
Отправлено: Efendy от 14 Декабря 2009, 14:19:04
select speed from plans2 where id=(select paket from users where id=24);


Название: Re: Передача параметров скорости клиента через радиус на микротик
Отправлено: traktor150 от 17 Декабря 2009, 16:56:21
DROP PROCEDURE IF EXISTS `radreply`;
DELIMITER $$
CREATE PROCEDURE `radreply` (IN login VARCHAR(64))
BEGIN
  DECLARE usr_id INT;
  DECLARE usr_ip VARCHAR(15);
  DECLARE speed VARCHAR(15);

  SELECT id,ip INTO usr_id,usr_ip FROM users WHERE name=login;
  INSERT into dblogin (mid,act,time) VALUES (usr_id,47,unix_timestamp());
  SELECT speed from plans2 where id=(select paket from users where id=user_id);

  SELECT NULL,login,'Framed-IP-Address',usr_ip,'=';
  SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','=';
  SELECT NULL,login,'Acct-Interim-Interval','50','=';
  SELECT NULL,login,'Ascend-Data-Rate','speed','=';

END$$
DELIMITER ;

Сделал вот так. не работает скорость не режет. Где ошибка подскажите?


Название: Re: Передача параметров скорости клиента через радиус на микротик
Отправлено: goletsa от 17 Декабря 2009, 17:11:08
speed в кавычках?

покажите что пишет radtest



Название: Re: Передача параметров скорости клиента через радиус на микротик
Отправлено: Efendy от 17 Декабря 2009, 17:26:16
speed в кавычках?
ага, здесь и ошибка


Название: Re: Передача параметров скорости клиента через радиус на микротик
Отправлено: traktor150 от 17 Декабря 2009, 22:02:22
всеравно не работает


Название: Re: Передача параметров скорости клиента через радиус на микротик
Отправлено: Efendy от 17 Декабря 2009, 22:34:33
покажите что пишет radtest


Название: Re: Передача параметров скорости клиента через радиус на микротик
Отправлено: traktor150 от 18 Декабря 2009, 14:30:02
%radtest admin 12345678 127.0.0.1 0 test
Sending Access-Request of id 38 to 127.0.0.1 port 1812
        User-Name = "admin"
        User-Password = "12345678"
        NAS-IP-Address = 255.255.255.255
        NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=38, length=38
        Framed-IP-Address = 192.168.70.154
        Framed-IP-Netmask = 255.255.255.255
        Acct-Interim-Interval = 50
DROP PROCEDURE IF EXISTS `radreply`;
DELIMITER $$
CREATE PROCEDURE `radreply` (IN login VARCHAR(64))
BEGIN
  DECLARE usr_id INT;
  DECLARE usr_ip VARCHAR(15);
  DECLARE speed VARCHAR(15);

  SELECT id,ip INTO usr_id,usr_ip FROM users WHERE name=login;
  INSERT into dblogin (mid,act,time) VALUES (usr_id,47,unix_timestamp());
  SELECT speed from plans2 where id=(select paket from users where id=user_id);

  SELECT NULL,login,'Framed-IP-Address',usr_ip,'=';
  SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','=';
  SELECT NULL,login,'Acct-Interim-Interval','50','=';
  SELECT NULL,login,'Ascend-Data-Rate',speed,'=';

END$$
DELIMITER ;


Название: Re: Передача параметров скорости клиента через радиус на микротик
Отправлено: VitalVas от 18 Декабря 2009, 19:32:03
те все ето в ответ приходит??
Код:
%radtest admin 12345678 127.0.0.1 0 test
Sending Access-Request of id 38 to 127.0.0.1 port 1812
        User-Name = "admin"
        User-Password = "12345678"
        NAS-IP-Address = 255.255.255.255
        NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=38, length=38
        Framed-IP-Address = 192.168.70.154
        Framed-IP-Netmask = 255.255.255.255
        Acct-Interim-Interval = 50
DROP PROCEDURE IF EXISTS `radreply`;
DELIMITER $$
CREATE PROCEDURE `radreply` (IN login VARCHAR(64))
BEGIN
  DECLARE usr_id INT;
  DECLARE usr_ip VARCHAR(15);
  DECLARE speed VARCHAR(15);

  SELECT id,ip INTO usr_id,usr_ip FROM users WHERE name=login;
  INSERT into dblogin (mid,act,time) VALUES (usr_id,47,unix_timestamp());
  SELECT speed from plans2 where id=(select paket from users where id=user_id);

  SELECT NULL,login,'Framed-IP-Address',usr_ip,'=';
  SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','=';
  SELECT NULL,login,'Acct-Interim-Interval','50','=';
  SELECT NULL,login,'Ascend-Data-Rate',speed,'=';

END$$
DELIMITER ;

п.с. разделяй чемто, а то получается что все ето тебе в ответ


Название: Re: Передача параметров скорости клиента через радиус на микротик
Отправлено: versus от 19 Декабря 2009, 11:16:24
Код:
SELECT id,ip INTO usr_id,usr_ip FROM users WHERE name=login;
  INSERT into dblogin (mid,act,time) VALUES (usr_id,47,unix_timestamp());
  SELECT speed from plans2 where id=(select paket from users where id=user_id);

Странно, а где именно берется переменная user_id в процедуре ? Я так понимаю, что ее все таки надо назвать  usr_id, потому что если посмотреть на первый селект, то именно так называется переменная с айди пользователя.
Я понимаю что копипаст от Стаса рулит, но голова дана для того что бы думать, а не слепо копировать, что дали.


Название: Re: Передача параметров скорости клиента через радиус на микротик
Отправлено: traktor150 от 19 Декабря 2009, 12:42:56
копипаст не рулит так как Стас ничо не давал, сам затупил. Спасибо что указали где. Исправил и теперь вот так
admin 12345678 127.0.0.1 0 test
Sending Access-Request of id 131 to 127.0.0.1 port 1812
        User-Name = "admin"
        User-Password = "12345678"
        NAS-IP-Address = 255.255.255.255
        NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=131, length=20



Название: Re: Передача параметров скорости клиента через радиус на микротик
Отправлено: stix от 13 Июля 2010, 15:14:50
т.к. закрыли свежий топик, то продолжу тут
http://forum.nodeny.com.ua/index.php?topic=777.msg8117;boardseen#new

Код:
DROP PROCEDURE IF EXISTS `radreply`;
DELIMITER $$ 
CREATE PROCEDURE `radreply` (IN login VARCHAR(64))
BEGIN
  DECLARE usr_id INT; 
  DECLARE usr_ip VARCHAR(15);
 DECLARE usr_speed VARCHAR(15);
  SELECT id,ip INTO usr_id,usr_ip FROM users WHERE name=login;
  INSERT into dblogin (mid,act,time) VALUES (usr_id,47,unix_timestamp());
SELECT speed INTO usr_speed from plans2 where id=(select paket from users where id=usr_id);
  SELECT NULL,login,'Framed-IP-Address',usr_ip,'=';
  SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','=';
  SELECT NULL,login,'Acct-Interim-Interval','50','=';
 SELECT NULL,login,'Ascend-Data-Rate',usr_speed,'=';
END$$
DELIMITER ;
таким образом, на микротике будет создаваться динамический шейпер при работе с PPP
очень удобно для ресурсосбережения

с биллинга идет выборка целого значения, например тариф 4000
в биллинге это значение килобит, а на микротик передается значение в битах
соответственно будет шейпер в 4кбит

как правильней решить, добавить нулей в биллинг или изменить процедуру?


Название: Re: Передача параметров скорости клиента через радиус на микротик
Отправлено: stix от 13 Июля 2010, 15:22:41
а все проще простого  :D

Код:
DROP PROCEDURE IF EXISTS `radreply`;
DELIMITER $$ 
CREATE PROCEDURE `radreply` (IN login VARCHAR(64))
BEGIN
  DECLARE usr_id INT; 
  DECLARE usr_ip VARCHAR(15);
 DECLARE usr_speed VARCHAR(15);
  SELECT id,ip INTO usr_id,usr_ip FROM users WHERE name=login;
  INSERT into dblogin (mid,act,time) VALUES (usr_id,47,unix_timestamp());
SELECT speed * 1000 INTO usr_speed from plans2 where id=(select paket from users where id=usr_id);
  SELECT NULL,login,'Framed-IP-Address',usr_ip,'=';
  SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','=';
  SELECT NULL,login,'Acct-Interim-Interval','50','=';
 SELECT NULL,login,'Ascend-Data-Rate',usr_speed,'=';
END$$
DELIMITER ;

и получаем динамический шейпер для микротика.
часть из hw_mikrotik ответственную за добавление удаление шейперов можно вырезать.
но это касается только случаев использования PPP


Название: Re: Передача параметров скорости клиента через радиус на микротик
Отправлено: goletsa от 13 Июля 2010, 17:32:34
Вот только меня одного смущает SELECT ... WHERE id=(SELECT?
Вложенные запросы както неособо быстро выполняютcя мускулом.


Название: Re: Передача параметров скорости клиента через радиус на микротик
Отправлено: stix от 13 Июля 2010, 19:10:11
запрос занял 0.0010 сек

не так часто строятся ppp соединения
чаще идет выборка данных сателитом.
я планирую изменить немного на более простой алгоритм адрес-листы


Название: Re: Передача параметров скорости клиента через радиус на микротик
Отправлено: YuSHa от 22 Июля 2010, 18:47:58
в таком случае  создаётся шейпер с одинаковой скоростью что на приём, что на отдачу. А если я ставлю отдачи меньше? скажем 1024/256? как быть?


Название: Re: Передача параметров скорости клиента через радиус на микротик
Отправлено: stix от 22 Июля 2010, 18:52:24
делать программируемый тариф и в нем выставлять скорость.
и поменять запрос выборки из БД


Название: Re: Передача параметров скорости клиента через радиус на микротик
Отправлено: Demeo от 23 Июля 2010, 11:22:52
в таком случае  создаётся шейпер с одинаковой скоростью что на приём, что на отдачу. А если я ставлю отдачи меньше? скажем 1024/256? как быть?

Моя процедура для разных скоростей отдачи/приема

Код:
DROP PROCEDURE IF EXISTS `radreply`;
DELIMITER $$
CREATE PROCEDURE `radreply` (IN login VARCHAR(64))
BEGIN
  DECLARE usr_id INT;
  DECLARE usr_ip VARCHAR(15);
  DECLARE speedrx VARCHAR(15);
  DECLARE speedtx VARCHAR(15);

  SELECT id,ip INTO usr_id,usr_ip FROM users WHERE name=login;
  INSERT into dblogin (mid,act,time) VALUES (usr_id,47,unix_timestamp());
  SELECT speed INTO speedrx from plans2 where id=(select paket from users where id=usr_id);
  SELECT speed_out INTO speedtx from plans2 where id=(select paket from users where id=usr_id);

  SELECT NULL,login,'Framed-IP-Address',usr_ip,'=';
  SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','=';
  SELECT NULL,login,'Acct-Interim-Interval','50','=';
  SELECT NULL,login,'Ascend-Data-Rate',speedtx,'=';
  SELECT NULL,login,'Ascend-Xmit-Rate',speedrx,'=';

END$$
DELIMITER ;


Название: Re: Передача параметров скорости клиента через радиус на микротик
Отправлено: stix от 23 Июля 2010, 12:23:44
точно, там же отдельно идет вход и исход.