-
Всього повідомлень
732 -
Приєднався
-
Останній візит
-
Дней в лидерах
7
Тип контенту
Профили
Форум
Календарь
Все, що було написано ~AsmodeuS~
-
во всех дистрах такое ? (centos, debian, ubuntu). в дебиан и в убунту так в других были прицеденты но точно не могу сказать, решили во всех линуксах по одному образцу делать
-
dv_calls не наполняется... dv_log - да, но туда записи попадают уже сильно опосля... Давно появился сброс клиентов с дублирующимися адресами? Я что-то не замечал такого в коде... CentOS - все прекрасно работает искаропки. Debian - тоже все завелось искаропки в более-менее актуальной версии (в старых типа 0.51 - там да, радиус крашился по причине того что используются глобальные переменные типа $db, в то время как $db должна быть уникальной для каждого потока). 1 проверка дубликатов ИП появилась ее летом billd смотрите 2 было более десятка прицидентов по этому решили сделать так, если кто то хочет завести свой реппозиторий то может сделать но как показала практика собирать радиус и из исходников пока самый оптимальный вариант
-
да можно но при обновлении опять начинаются цирки с этой проблемой и клиенты долго потом не могут понять почему радиус у них не стартует, по этому его ставим для линуксов отдельно и все. Его очень редко нужно обновлять можно сказать вообще не нужно
-
хм. а когда мы были у вас на ком поддержке (где то год-полтора назад), об этом скрипте никто ничего не сказал/не сделал..... возможно у Вас было какое то другое решение этой проблемы
-
Вот за это убивать надо. во первых из исходников собирается только одна программа и то только на линуксе это freeradius, а собирается она потому что perl собран в дистрибутиве с потоками а freeradius без потоков, так что с убийством обращайтесь к создателям дистрибутивов
-
Ммм, я говорил таблица пустая. Наполним, будем смотреть. Да её вообще нужно не выключать, а включать по желанию! А то она вроде есть, жрёть, а не гавкаэ, то есть её не пользуются. Сюда мы обязательно дойдём, ой там интересного... 25к душ, 2 года хранить dv_log чуть более мелкого ISP. к dv_log, нужен не архивный доступ. Да. Я не хотел вас обидеть, не критикуйте меня строго. Я бы не критиковал ваш продукт, если бы им не пользовался. В любом случае, данное обсуждение даст начало, к реализадии более качественного продукта. Никто не сомневается, что вы грамотный и талантливый человек. никто не обижается просто ждём критики по существу а не домыслов, учитывая что при вашей базе 25 тыс Вы сидите на ABillS а рекомендуете другие решения, интересно было бы посмотреть как вы на феликсе или експерте это завели
-
Никуда они не уходят, а попадают в зап при N пропущенных алайвах Да и опенсорс это умеет (во всяком случае срез годичной давности). Только тут вот какое дело - биллинг отпал, сессии попридивались как истекшие, ип адреса повыдавались новым клиентам при коннекте. А сессии-то живые... Итог - нифига не работает нормально, надо по факту полностью рестартовать демоны на брасах или прибивать старые/новые сесии... нет немного не так если они пропали с мониторинга, то на следующем алайве они опять там будут если за это время были выданы эти ип еще кому то они тоже появятся в мониторинге и система скинет дубликаты ип все ь процесс заёмёт 1 алайв период (это для провайдеров до 5 тис онлайн 5 минут больше 5 тис 10 минут) в любом случае єто быстрее чем перезагружать демон и всех скопом заставлять по новому авторизоваться
-
Как это - не отпускает? Как только сессия попадает в зап - все, юзер может коннектиться снова. В зап она попадает после N потерянных алайвов. Один минус - удаляется из запа целиком она всего после 2*N алайвов, я прикрутил себе патчик чтобы в запе она висела Y алайвов (доп.переменная конфига), на случай прерывания связи между биллингом и насами/остановки биллинга на профилактику... Дело в том, что если падает нас, то сессии уходят вместе с ним. Если при этом его быстро поднять, то окажется что сессии висят на нем до сих пор. Причем еще и не запнутые, а юзеры в это время досят насы. стандартная ситуация для серверов доступа которые не могу делать Accounting-On / Accounting-Off для решить эту проблему есть утилита autozh.pl её устанавливаете в автозагрузке и она при поднятии сервера скидывает сессии в зап http://abills.net.ua/wiki/doku.php/abills:docs:faq:ru?posle_perezagruzki_servera_dostupa_sessii_vse_esche_visjat_v_billinge
-
Как это - не отпускает? Как только сессия попадает в зап - все, юзер может коннектиться снова. В зап она попадает после N потерянных алайвов. Один минус - удаляется из запа целиком она всего после 2*N алайвов, я прикрутил себе патчик чтобы в запе она висела Y алайвов (доп.переменная конфига), на случай прерывания связи между биллингом и насами/остановки биллинга на профилактику... ком версия восстанавливает самостоятельно потерянные сессии
-
SELECT id as nas_id, name AS nas_name, nas_identifier, descr AS nas_describe, ip AS nas_ip, nas_type, auth_type AS nas_auth_type, mng_host_port as nas_mng_ip_port, mng_user AS nas_mng_user, DECODE(mng_password, 'test12345678901234567890') AS nas_mng_password, rad_pairs AS nas_rad_pairs, alive AS nas_alive, disable AS nas_disable, ext_acct AS nas_ext_acct, gid, address_build, address_street, address_flat, zip, city, country, domain_id, mac, changed, location_id FROM nas WHERE ip='127.0.0.1' and (nas_identifier='accel-ppp' or nas_identifier='') ORDER BY nas_identifier DESC; SELECT id as nas_id, name AS nas_name, nas_identifier, descr AS nas_describe, ip AS nas_ip, nas_type, auth_type AS nas_auth_type, mng_host_port as nas_mng_ip_port, mng_user AS nas_mng_user, DECODE(mng_password, 'test12345678901234567890') AS nas_mng_password, rad_pairs AS nas_rad_pairs, alive AS nas_alive, disable AS nas_disable, ext_acct AS nas_ext_acct, gid, address_build, address_street, address_flat, zip, city, country, domain_id, mac, changed, location_id FROM nas WHERE ip='127.0.0.1' and (nas_identifier='accel-ppp' or nas_identifier='') ORDER BY nas_identifier DESC; select u.uid, DECODE(password, 'test12345678901234567890') AS passwd, UNIX_TIMESTAMP() AS session_start, UNIX_TIMESTAMP(DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP()), '%Y-%m-%d')) AS day_bagin, DAYOFWEEK(FROM_UNIXTIME(UNIX_TIMESTAMP())) AS day_of_week, DAYOFYEAR(FROM_UNIXTIME(UNIX_TIMESTAMP())) AS day_of_year, u.company_id, u.disable, u.bill_id, u.credit, u.activate AS account_activate, u.reduction, u.ext_bill_id, UNIX_TIMESTAMP(u.expire) AS account_expire FROM users u WHERE u.id='test' AND u.domain_id='0' AND (u.expire='0000-00-00' or u.expire > CURDATE()) AND (u.activate='0000-00-00' or u.activate <= CURDATE()) AND u.deleted='0' GROUP BY u.id; SELECT ROUND(deposit, 2) FROM bills WHERE id='1'; select if (dv.logins=0, if(tp.logins is null, 0, tp.logins), dv.logins) AS logins, if(dv.filter_id != '', dv.filter_id, if(tp.filter_id is null, '', tp.filter_id)) AS filter, if(dv.ip>0, INET_NTOA(dv.ip), 0) AS ip, INET_NTOA(dv.netmask) AS netmask, dv.tp_id AS tp_num, dv.speed AS user_speed, dv.cid, tp.total_time_limit, tp.day_time_limit, tp.week_time_limit, tp.month_time_limit, UNIX_TIMESTAMP(DATE_FORMAT(DATE_ADD(curdate(), INTERVAL 1 MONTH), '%Y-%m-01')) - UNIX_TIMESTAMP() AS time_limit, tp.total_traf_limit, tp.day_traf_limit, tp.week_traf_limit, tp.month_traf_limit, tp.octets_direction, if (count(un.uid) + count(tp_nas.tp_id) = 0, 0, if (count(un.uid)>0, 1, 2)) AS nas, UNIX_TIMESTAMP() AS session_start, UNIX_TIMESTAMP(DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP()), '%Y-%m-%d')) AS day_begin, DAYOFWEEK(FROM_UNIXTIME(UNIX_TIMESTAMP())) AS day_of_week, DAYOFYEAR(FROM_UNIXTIME(UNIX_TIMESTAMP())) AS day_of_year, dv.disable, tp.max_session_duration, tp.payment_type, tp.credit_tresshold, tp.rad_pairs AS tp_rad_pairs, count(i.id) AS intervals, tp.age AS account_age, dv.callback, dv.port, tp.traffic_transfer_period, tp.neg_deposit_filter_id, tp.ext_bill_account, tp.credit AS tp_credit, tp.ippool as tp_ippool, dv.join_service, tp.tp_id, tp.active_day_fee, tp.neg_deposit_ippool AS neg_deposit_ip_pool, dv.expire AS dv_expire FROM (dv_main dv) LEFT JOIN tarif_plans tp ON (dv.tp_id=tp.id AND tp.domain_id='0') LEFT JOIN users_nas un ON (un.uid = dv.uid) LEFT JOIN tp_nas ON (tp_nas.tp_id = tp.tp_id) LEFT JOIN intervals i ON (tp.tp_id = i.tp_id) WHERE dv.uid='1' AND (dv.expire='0000-00-00' or dv.expire > CURDATE()) GROUP BY dv.uid; SELECT ippools.ip, ippools.counts, ippools.id FROM ippools, nas_ippools WHERE ippools.id=nas_ippools.pool_id AND nas_ippools.nas_id='1' ORDER BY ippools.priority; SELECT c.framed_ip_address FROM dv_calls c INNER JOIN nas_ippools np ON (c.nas_id=np.nas_id) WHERE np.pool_id in ( 1 ) GROUP BY c.framed_ip_address; INSERT INTO dv_calls SET started=now(), lupdated = UNIX_TIMESTAMP(), status = '11', acct_session_id = 'IP', nas_ip_address = INET_ATON('127.0.0.1'), nas_id='1', tp_id='100', user_name='test', framed_ip_address=167772224, uid='1'; SELECT id, in_price, out_price, prepaid, in_speed, out_speed, net_id, expression FROM trafic_tarifs WHERE interval_id='0'; INSERT INTO errors_log (date, log_type, action, user, message, nas_id) values (now(), '6', 'AUTH', 'test', 'CID: 192.168.6.94 GT: 0.07730', '1'); SELECT id as nas_id, name AS nas_name, nas_identifier, descr AS nas_describe, ip AS nas_ip, nas_type, auth_type AS nas_auth_type, mng_host_port as nas_mng_ip_port, mng_user AS nas_mng_user, DECODE(mng_password, 'test12345678901234567890') AS nas_mng_password, rad_pairs AS nas_rad_pairs, alive AS nas_alive, disable AS nas_disable, ext_acct AS nas_ext_acct, gid, address_build, address_street, address_flat, zip, city, country, domain_id, mac, changed, location_id FROM nas WHERE ip='127.0.0.1' and (nas_identifier='accel-ppp' or nas_identifier='') ORDER BY nas_identifier DESC; SELECT acct_session_id FROM dv_calls WHERE user_name='test' AND nas_id='1' AND (framed_ip_address=INET_ATON('10.0.0.64') OR framed_ip_address=0); UPDATE dv_calls SET status='1', started=FROM_UNIXTIME(1414669426), lupdated=UNIX_TIMESTAMP(), nas_port_id='0', acct_session_id='0000000000fcf9d2', CID='192.168.6.94', CONNECT_INFO='' WHERE user_name='test' AND nas_id='1' AND acct_session_id='IP' AND (framed_ip_address=INET_ATON('10.0.0.64') OR framed_ip_address=0) LIMIT 1; INSERT into s_detail (acct_session_id, nas_id, acct_status, last_update, sent1, recv1, sent2, recv2, id, sum) VALUES ('0000000000fcf9d2', '1', '1', UNIX_TIMESTAMP(), '0', '0', '0', '0', 'test', '0'); Так выглядит авторизация обычного пользователя в биллинге Abills. Все хорошо, пока база не наполнена. Но как база наполнится, мы увидим прекраснейшее использование могучих индексом mysql. Особенно таблицы dv_log. А далее будем разбирать deadlock который я думаю так и встречается по сей день. ps/ Продолжение следует. И раз вы так любите придерживаться стандартов, поправьте вот этот запрос. select u.uid, DECODE(password, 'test12345678901234567890') AS passwd, UNIX_TIMESTAMP() AS session_start, UNIX_TIMESTAMP(DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP()), '%Y-%m-%d')) AS day_bagin, DAYOFWEEK(FROM_UNIXTIME(UNIX_TIMESTAMP())) AS day_of_week, DAYOFYEAR(FROM_UNIXTIME(UNIX_TIMESTAMP())) AS day_of_year, u.company_id, u.disable, u.bill_id, u.credit, u.activate AS account_activate, u.reduction, u.ext_bill_id, UNIX_TIMESTAMP(u.expire) AS account_expire FROM users u WHERE u.id='test' AND u.domain_id='0' AND (u.expire='0000-00-00' or u.expire > CURDATE()) AND (u.activate='0000-00-00' or u.activate <= CURDATE()) AND u.deleted='0' GROUP BY u.id; select = SELECT. Навскидку при одновременном подключении 300 пользователей, имеем 14*300=4200 запросов в единицу времени (Deadlock привет). начали с експлейнов а закончили маленькими буквами ) ну могу сказать что перед тем как что то выкладывать нужно хотя бы познакомиться с продуктом 1 при использовании rlm_perl (что является обязательным) запрос получения данных по насу используется только 1 раз по время старта радиуса, а у Вас этот запрос 4 раза фигурирует так как вы запустили exec который используется только для теста 2 у всех запросах что Вы показали нет ни одного запроса чтения записи в таблицу более 100 000 (таблица онлайн сессий, если у Вас столько бывает клиентов) 3 есть таблица s_details дополнительная детализация, для провайдеров больше 50 тис абонентов можно отключить 4 тот же что Вы писали dv_log используется только для линейной записи, но в вашем листинге даже этого нету 5 ну и думаю стоит писать какие данные Вы считаете большими, чтобы действительно можно было проверить на тестах 6 ну и забыли сказать авторизация и аккаунтинг я понимаю что в любом продуйте есть какие то недочёты, но как показала практика люди которые реально их видят не постят это на форумах что бы поднять свой авторитет, а те кто их не видит наоборот стараются "отчиться"
-
что они дадут при авторизации ?
-
В лицензиях самих модулей написано, как можно использовать их код в других проектах. И вы ложите на эти лицензии. Не хорошо. А что по этому поводу думает ваша лицензия GPL - никого не волнует Асмодеус, проблемы не исчезают от того, что вы оправдываетесь и говнокод безопаснее и адекватнее не становится. я думаю уже пора Вам вырасти и если есть что сказать то говорить по существу с примерами, а не пальцем в ....
-
сейчас полностью переписывается документация и делается интерактивная подсказка для всех функций, работа с веб интерфейсом будет более понятной Вы ее 2 года уже пишете.и что по первому пункту? просто я честно боюсь обновляться: платной поддержки нет, а остаться с новыми глюками один на один и потом искать решение (которое как всегда - обновите биллинг) мне не хочется. Да и все это на живых юзерах - это еще минус в карму провайдера. Вам нужно что-то поменять кардинально в тестировании, если оно у вас есть. Не нужно тестировать на своих клиентах, и тогда в таких темах Ваш продукт будет на первом месте. зы имхо, у Вас болезнь роста: Вы не можете взять больше людей, потому что Вы тогда не сможете привычно рулить конторой и процессом, но при этом у Вас много клиентов, которые много хотят. И это замкнутый круг. Чтобы его разбить - нужны доп инвестиции и реорганизация. И все это сделать должны будете Вы или проект зачахнет из-за разбежавшихся клиентов. Про вариант, что его форкнут я молчу. довольно проблемно делать отдельно патчи отдельно другую ветку учитывая что добавление новых возможностей идёт каждую неделю, переход на git репозиторий немного улучшил эту ситуация более широкое развитие проекта тормозит не очень благоприятная ситуация в стране плюс отпал большой сегмент в виде рос рынка, но сейчас изменили геоориентацию и все становиться на свои места
-
Я не во всём согласен с "tttt", кроме данного пункта. Считаю, что плейсхолдеры можно не использовать при вставке в запросы только целочисленных параметров, но только в языках со строго типизируемыми данными. Иначе это достаточно серьёзная дыра ABillS начинал свою жизнь еще когда плейсхолдеры не работали с mysql и была выбрана другая технология
-
сейчас полностью переписывается документация и делается интерактивная подсказка для всех функций, работа с веб интерфейсом будет более понятной
-
Какие ошибки ? Например DBD::mysql::st execute failed: Unknown column 'dv.dv_login' in 'field list' at ../../Abills/mysql//main.pm DBD::mysql::st execute failed: Unknown column 'u.uid' in 'where clause' at ../../Abills/mysql//main.pm Дамп БД из дистрибутива... можно написать при каких операциях ?
-
покажите пункт где написано что GPL программы не могу использовать CPAN Perl модули ? покажите хотя бы один билинг проект выложенный на CPAN, или тот же Вами любимый Webmin перед тес как что то выдать хотябы будте знакомы с проектом http://abills.net.ua/wiki/doku.php/abills:docs:development:faq:ru Вы сначало найдите, а потом рассказывайте про injection и безопасность. Малое использование плейсхолдеров имеют совсем другие причины, но ВЫ ж еще до этой главы наверное не дошли. Вам уже сказали и не раз что все есть но зачем их выносить в общественность если они использутся для нашей разработки боюсь тут выходит 0 из 5 всё что написали высосано из пальца. Полное незнание системы. Ну есть такая поговорка человек сделаный из гавна своево гавна не замечает p.s. из всех ваших топиков было замечено что скорее всего Вы пробовали писать какойто проект но Вас в;;;№№№ли очень сильно за него и Вы стараетесь подловить свои ошибки в других проектах даже в этом форуме уже за не знание темы дрючили http://local.com.ua/forum/topic/51725-%D0%BF%D0%BE%D0%BC%D0%BE%D0%B3%D0%B8%D1%82%D0%B5-%D0%B2%D1%8B%D0%B1%D1%80%D0%B0%D1%82%D1%8C-%D0%B1%D0%B8%D0%BB%D0%BB%D0%B8%D0%BD%D0%B3/
-
Какие ошибки ?
-
Попросите у них демку потыкать. Мне очень понравилось, но в связи с войной и еще многими обстоятельствами покупка отменилась. Да и вообще latera очень солидные ребята. А самый большой + это Oracle Database и грамотная структура таблиц. Не столько она уже и стоит, что бы экономить на сердце предприятия. А если вы сомневаетесь в покупке, то загляните в код бесплатной версии всем любимой украинской биллинговой системы и EXPLAINом запросы к базе погоняйте. И вы поймёте, что значит писать не качественно. Это моё мнение. примеры в студию
-
так було уже таке в лютому, але купа клієнтів підняло кіпіш і якось розгреблось
-
как показала практика цены очень демократичные если не говорить почти бесплатно, цено образование в долларах потому что продуктом пользуются более 10 стран мира и как то не очень интересно в каждой стране вести в своей валюте и отслеживать все скачки валюты, или оплачивать программиста например заплату в польских злотых или в валюте республики конго. и кстати я всегда горю если задорого можно можно нанять программиста и он вам сможет дешевле сделать возможно
-
хотели подмахнуть но оказались правы держащий 500 тис абонентов, в отличии от других предлагаемых систем хотя и так понятно по существу у вас нечего написать )
-
А що, у Perl-а вже є JIT? Крім Parrot, звичайно ж. Perl скоріш скриптовий, аніж мова програмування... JIT - то я для прикладу, пану Асмодеусу, а то "йому нема різниці на чому написано" Все зависит как написано в старгейзера ядро подсчета и команды вызова авторизыции написано на С а все остальные функции вызываются внешними шел скриптами с постоянной компиляцией кода, веб интерфейс если брать ubilling php теперь смотрим ABillS все монолитно написано на одном языке Perl, атворизатор вкомпилирован в freeradius для IPoE написаны демоны которые постоянно работают в режиме сервера, для поднятия программы также работают в режиме сервера и не требуют постоянного запуска интерпретатора и компиляции кода и это только поверхностно показывает что все что написано на С пропадает в внешних скриптах, а если углубиться в тему то любом более хорошему программисту или админу понятно что для провайдеров для высокой производительности системы вопрос на чём написано вообще не существенен главное это архитектура системы, и построение базы данных
-
приходите в салон лексуса купить машину, а вам говорят та Вы что лучше самом у собрать вот какой то вася пупкин вам за малую цену сделает, потом оказывается что вася пупкин берёт старые жигули красит их по новому и отдаёт Вам. через полгода поломка но вася пупкин уже машинами не занимается так как он сейчас продаёт холодильники. И вы опять перед выбором искать нового васю пупкина или пойти и купить нормальную машину Старгейзер на сях писаний в чём фишка на чём он написан ?
-
Обыск с изъятием. Или как в Украине быстро убить оператора.
тема ответил в andryas пользователя ~AsmodeuS~ в Мережа - бізнес
мараз не маразм но такие случаи последние 2 года далеко не редкость по этому много провайдеров выносит свои биллинги сейчас на удалённый площадки или делают даже кластера интернет сейчас это разрешает
