SQL и БД UTM5

Технические вопросы по UTM 5.0
Ответить
srusv
Сообщения: 3
Зарегистрирован: Ср ноя 02, 2011 13:58

SQL и БД UTM5

Сообщение srusv »

Здравствуйте господа. С этим биллингом познакомился недавно, посему, возможно, спрошу что-то тривиальное. Помогите плз с запросом, требуется вывести клиентов в такой вот форме:

Полное_имя IP(в виде ххх.ххх.ххх.ххх/32) login входящий_траф Исходящий_траф

Не могу понять как именно хранятся в базе ИП и маски, если просто использую функцию inet_ntoa то появляется ошибка в адресе сети, но нет ошибки в отдельном адресе, если подгоняю под сеть то появляется ошибка в единичном адресе(с маской 32).

Положим запрос:

SELECT

us.login login,

ig.id,

ig.ip_group_id,

GROUP_CONCAT(concat_ws( "/",inet_ntoa(ig.ip & 0xffffffff),inet_ntoa(ig.mask & 0xffffffff))) ip

FROM ip_groups ig

INNER JOIN service_links sl

ON sl.id = ig.ip_group_id

INNER JOIN users us

ON us.id = sl.user_id

WHERE

ig.is_deleted=0

GROUP BY

login;
Подготовительный для обработки возвращает правильные единичные адреса и ошибается в адресах сетей на +1. Например: сеть которая показана в админке биллинга - 192.168.100.0/24 а запрос выдает 192.168.101.0/255.255.255.0
Может кто может помочь...

Аватара пользователя
Chrst
Сообщения: 370
Зарегистрирован: Пт май 11, 2007 09:28
Откуда: Медиахолдинг "ЛеККС"
Контактная информация:

Re: SQL и БД UTM5

Сообщение Chrst »

srusv писал(а):Подготовительный для обработки возвращает правильные единичные адреса и ошибается в адресах сетей на +1. Например: сеть которая показана в админке биллинга - 192.168.100.0/24 а запрос выдает 192.168.101.0/255.255.255.0
Может кто может помочь...
Могу предположить, что по запросу возвращается первый доступный адрес из диапазона. 192.168.100.0 идентификатор сети и адресом как таковым не является.

srusv
Сообщения: 3
Зарегистрирован: Ср ноя 02, 2011 13:58

Re:Re:

Сообщение srusv »

Да нет, СУБД ведь не учитывает первый возможный, и функция inet_ntoa тоже для этого не предусмотрена. Да и возвращаться наверное должна не первая возможная сеть :-)

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

SELECT 'Login','FullName','Bytes IN','Bytes OUT','Account ID','User ID','IP-addr','Server','DT'

UNION ALL

SELECT

users.login,

users.full_name,

ifnull(sum(trans.bytes_in),0),

ifnull(sum(trans.bytes_out),0),

trans.account_id,

users.id,

( SELECT

GROUP_CONCAT(concat_ws( "/",inet_ntoa(ig.ip & 0xffffffff),inet_ntoa(ig.mask & 0xffffffff))) ip

FROM ip_groups ig

INNER JOIN service_links sl

ON sl.id = ig.ip_group_id

INNER JOIN users us

ON us.id = sl.user_id

WHERE

us.id = users.id

and ig.is_deleted=0) as IP_add,

'"utm5-m9"',

FROM_UNIXTIME(trans.discount_date_day,'%Y%m')

FROM

(SELECT case t_class when 10 then bytes else null end bytes_in,

case t_class when 20 then bytes else null end bytes_out, account_id,discount_date,

discount_date_day

FROM UTM5arc.dti_2011_10

WHERE

discount_date>='1317416400' AND

discount_date <'1320091199')

trans left join users_accounts ua

on trans.account_id=ua.account_id

left join users on ua.uid=users.id

left join ip_groups on users.id=ip_groups.ip_group_id

where users.login is not NULL

GROUP BY users.login;

Аватара пользователя
Chrst
Сообщения: 370
Зарегистрирован: Пт май 11, 2007 09:28
Откуда: Медиахолдинг "ЛеККС"
Контактная информация:

Сообщение Chrst »

Ну это было всего-лишь предположение. :oops: Но, хотя БД и не учитывает, но кто его знает что туда пишет биллинг ;)

Конструкция inet_ntoa(ig.mask & 0xffffffff) вроде верная, так используем, но правда только для /32.

srusv
Сообщения: 3
Зарегистрирован: Ср ноя 02, 2011 13:58

появилось подозрение

Сообщение srusv »

Появилось одно подозрение, если для вычисления ип-адреса сете пользоваться конструкцией типа inet_ntoa(ip+mask & 0xffffffff) получаем первый адрес из указанной сети. надо проверять. проверю, свой результирующий запросик отпишу.

Также, наткнулся на еще одну непонятность, в админке по одному из клиентов показывается что ему адреса не описаны, а только впн, а при выборке - они откуда-то берутся ... короче буду гонять тесты дальше...

:(

gravis
Сообщения: 562
Зарегистрирован: Ср мар 16, 2005 15:31
Откуда: Село Красноярск

Сообщение gravis »

почти в каждой таблице есть колонка is_deleted
биллинг не удаляет записи, он помечает их как is_deleted = 1
учитывайте это в SQL запросе

Ответить