madf Posted September 20, 2011 Posted September 20, 2011 (edited) Ссылка для скачивания: stg-2.408-rc1.tar.gz ChangeLog: General: Стандартизован стиль именования параметров: SnakeCase. В документации к XML-RPC API добавлено пропущенное поле 'password' для метода chg_admin. Приведена в порядок работа с сигналами. Теперь сигналы перехватываются только из основного потока и перехватываются корректно, в отличие от старых версий. Для остановки плагинов больше не используется pthread_kill, т.к. плагины его все равно теперь игнорируют. Устаревшая функция usleep заменена на более продвинутую функцию nanosleep в соответствии с POSIX.1-2008. Удалены странные, непонятные и ненужные комментарии в коде. Некоторые типы данных сделаны более "строгими". Добавлено несколько дополнительных проверочных утверждений. Упрощено API плагинов. Удален странный код. Большая часть кода приведена в соответствие с рекомендациями Скотта Мейерса. Вычищена куча кода. Но это еще не конец. Compilation: При проверке условий сборки теперь используются переменные CC и CXX вместо явного вызова gcc/g++. Если переменные CC и CXX не определены то используются gcc и g++ по умолчанию. Добавлено разделение флагов на CFLAGS и CXXFLAGS. Теперь релиз рекомендуется собирать так: $ CFLAGS="-O2" CXXFLAGS="${CFLAGS}" ./build Флаг компиляторы -g3 заменен на -ggdb3 (все равно его поддерживает и gcc, и clang, и ekopath). Существенно переработана система сборки. Теперь она не сорит заголовочными файлами и библотеками там где не нужно. Libraries: Использование динамических внутренних библиотек признано нецелесообразным, возвращены старые-добрые a-файлы (последний раз они были в версии 2.401). Добавлена специализация x2str для беззнаковых типов. Библиотеки crypto.lib и scriptexecuter.lib теперь содержат 100% кода на языке C! Plugins: В плагин для PostgreSQL добавлен параметр retries указывающий количество повторных попыток установить соединение с БД. Оптимизирована логика работы RemoveDir - теперь он удаляет ваши каталоги на 50% быстрее! Унифицированы имена параметров плагинов для работы с БД: Server, Database, User, Password. Старые имена поддерживаются, но объявлены устаревшими. В будущем будут удалены. Добавлен плагин для работы с snmpd по протоколу SMUX. Позволяет производить мониторинг некоторых параметров системы:общее количество абонентов; количество абонентов online; количество авторизованных абонентов; количество абонентов с флагом alwaysOnline; количество абонентов с отрицательным балансом; количество абонентов с отключенной детальной статистикой; количество отключенных ("disabled") абонентов; количество "замороженных" ("passive") абонентов; количество абонентов с положительным кредитом; количество абонентов с положительным предоплаченным трафиком; количество абонентов меняющих тарифный план в следующем месяце; общее количество тарифов; количество абонентов потарифно; общее количество админов; общее количество сервисов; общее количество корпораций; общее количество правил классификации трафика. [*]Добавлен шаблонный класс PLUGIN_CREATOR для универсального удобного порождения плагинов. [*]При немедленном изменении тарифа через XML-RPC API добавлен "сброс" отложенного тарифа. [*]Возможно исправлена ошибка приводящая к "зависаниям" плагина конфигуратора. [*]Исправлена утечка ресурсов (файловых дескрипторов) в плагине файлового хранилища. [*]Улучшены сообщения об ошибках авторизации, теперь в них на 73.1% больше информации! [*]В плагине для XML-RPC API вынужденно используется внешний сокет для корректной остановки плагина. Привет мейнтейнерам Debian которые до сих пор не обновили xmlrpc-c! Зато минус одно падение с SIGSEGV и General Protection Fault при останове! stargazer: Исправлена ошибка приводящая к неправильному сообщению о причине отключения. Убрано бесполезное изменение значения nice для процесса. Добавлены три возможных сценария снятия абонплаты:обычный; не снимать абонплату при отрицательном балансе; не снимать абонплату ели баланс при этом станет отрицательным. [*]Добавлен параметр ReconnectOnTariffChange указывающий системе выполнять переподключение абонента при изменении тарифа. [*]Добавлена "подписка" на добавление и удаление тарифов. [*]Управление авторизацией абонентов перемещено из класса USER в класс USERS что позволило избавиться от дедлока в определенных условиях. [*]Устранена возможность выгрузки активного плагина. Минус одно потенциальное падение с SIGSEGV и General Protection Fault! rscriptd: В примере конфигурационного файла для rscriptd путь /etc/rscriptd заменен на /etc/stargazer. Happy testing! PS: проверял сборку с clang и ekopath - все собирается, все работает. Патчи: fix-libs-install-patch.diff, fix-libs-order-patch.diff, fix-radius-authorization-patch.diff stg-2.408-rc1.tar.gz fix-libs-install-patch.diff.txt fix-libs-order-patch.diff.txt fix-radius-authorization-patch.diff.txt Edited September 21, 2011 by madf Опечатка
Kucher2 Posted September 20, 2011 Posted September 20, 2011 Добавлены три возможных сценария снятия абонплаты: обычный; не снимать абонплату при отрицательном балансе; не снимать абонплату если баланс при этом станет отрицательным. Ура, долой скриптовые заплатки!
yKpon Posted September 21, 2011 Posted September 21, 2011 madf, огромное спасибо за проделанную работу! начинаем тест
Roman Pogosyan Posted September 21, 2011 Posted September 21, 2011 Грациес сейсчас заценим кстате "не снимать абонплату при отрицательном балансе." с нулем разобрался ?
Небесный Posted September 21, 2011 Posted September 21, 2011 кстате "не снимать абонплату при отрицательном балансе." с нулем разобрался ? http://local.com.ua/forum/topic/29846-stg-2408-alpha/page__view__findpost__p__245069
Roman Pogosyan Posted September 21, 2011 Posted September 21, 2011 mkdir -m 0755 -p /usr/include/stg install -m 0644 -o root logger.h /usr/include/stg/ install: cannot stat `logger.h': No such file or directory make[2]: *** [install] Error 1 make[2]: Leaving directory `/home/roman/stg-2.408-rc1/stglibs/logger.lib' make[1]: *** [logger.lib] Error 2 make[1]: Leaving directory `/home/roman/stg-2.408-rc1/stglibs' make: *** [install-bin] Error 2
Roman Pogosyan Posted September 21, 2011 Posted September 21, 2011 ищет h файлыш папке самого плугина а не в папке инклуд/стг
Roman Pogosyan Posted September 21, 2011 Posted September 21, 2011 первые ощущения : все подключилось нормально, и вроде производительности добавилось
madf Posted September 21, 2011 Author Posted September 21, 2011 Грациес сейсчас заценим кстате "не снимать абонплату при отрицательном балансе." с нулем разобрался ? Просто включил 0 и fee в интервалы. Т.е. оно все равно будет в "минус" уводить, но не сильно, не более чем на fee. Неправильно, конечно, но переписывать stg с нуля - это куча времени. mkdir -m 0755 -p /usr/include/stg install -m 0644 -o root logger.h /usr/include/stg/ install: cannot stat `logger.h': No such file or directory make[2]: *** [install] Error 1 make[2]: Leaving directory `/home/roman/stg-2.408-rc1/stglibs/logger.lib' make[1]: *** [logger.lib] Error 2 make[1]: Leaving directory `/home/roman/stg-2.408-rc1/stglibs' make: *** [install-bin] Error 2 Опа! Все проверил, а инсталл не проверил! Спасибо, исправим. На то оно и rc. первые ощущения : все подключилось нормально, и вроде производительности добавилось А в чем это ощущается?
nightfly Posted September 21, 2011 Posted September 21, 2011 ReconnectOnTariffChange фуф, конец подпоркам на похапе
Roman Pogosyan Posted September 21, 2011 Posted September 21, 2011 подключении клиента, админки, запускас/стопа старгайзера .. rlm_stg не троганный опять сигфаулт
Roman Pogosyan Posted September 21, 2011 Posted September 21, 2011 Просто включил 0 и fee в интервалы. Т.е. оно все равно будет в "минус" уводить, но не сильно, не более чем на fee. Неправильно, конечно, но переписывать stg с нуля - это куча времени. конечно , лучше маленький минус чем большой
S_ergey Posted September 21, 2011 Posted September 21, 2011 sgсonf не собирается куда копать ? ../../stglibs/srvconf.lib/libstgsrvconf.a(servconf.o): In function `AnsRecv(void*, std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*)': servconf.cpp:(.text+0x4c): undefined reference to `XML_ParserReset' servconf.cpp:(.text+0x71): undefined reference to `XML_SetElementHandler' servconf.cpp:(.text+0x89): undefined reference to `XML_SetUserData' servconf.cpp:(.text+0x14a): undefined reference to `XML_Parse' servconf.cpp:(.text+0x164): undefined reference to `XML_GetErrorCode' servconf.cpp:(.text+0x16c): undefined reference to `XML_ErrorString' servconf.cpp:(.text+0x17f): undefined reference to `XML_GetCurrentLineNumber' ../../stglibs/srvconf.lib/libstgsrvconf.a(servconf.o): In function `SERVCONF::SERVCONF()': servconf.cpp:(.text+0x3ca): undefined reference to `XML_ParserCreate' collect2: ld returned 1 exit status make: *** [sgconf] Error 1
madf Posted September 21, 2011 Author Posted September 21, 2011 sgсonf не собирается куда копать ? ../../stglibs/srvconf.lib/libstgsrvconf.a(servconf.o): In function `AnsRecv(void*, std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*)': servconf.cpp:(.text+0x4c): undefined reference to `XML_ParserReset' servconf.cpp:(.text+0x71): undefined reference to `XML_SetElementHandler' servconf.cpp:(.text+0x89): undefined reference to `XML_SetUserData' servconf.cpp:(.text+0x14a): undefined reference to `XML_Parse' servconf.cpp:(.text+0x164): undefined reference to `XML_GetErrorCode' servconf.cpp:(.text+0x16c): undefined reference to `XML_ErrorString' servconf.cpp:(.text+0x17f): undefined reference to `XML_GetCurrentLineNumber' ../../stglibs/srvconf.lib/libstgsrvconf.a(servconf.o): In function `SERVCONF::SERVCONF()': servconf.cpp:(.text+0x3ca): undefined reference to `XML_ParserCreate' collect2: ld returned 1 exit status make: *** [sgconf] Error 1 Можно полный лог сборки и указать ОС на которой она проводилась?
madf Posted September 21, 2011 Author Posted September 21, 2011 подключении клиента, админки, запускас/стопа старгайзера .. rlm_stg не троганный опять сигфаулт Да, я там ничего не менял. Нужно разобраться откуда ростут ноги у проблемы а не заменять заголовочные файлы.
madf Posted September 21, 2011 Author Posted September 21, 2011 подключении клиента, админки, запускас/стопа старгайзера .. ... Авторизации и работа конфигуратора - может быть. А вот старт/стоп вряд ли. Там основной тормоз i/o.
Roman Pogosyan Posted September 21, 2011 Posted September 21, 2011 ну говорю то что заметил, может это из за того что с модулями стал легче управляться
Roman Pogosyan Posted September 21, 2011 Posted September 21, 2011 кстате когда дойдут руки до радиуса , добавь в него приписывания IP если стоит '*'
S_ergey Posted September 21, 2011 Posted September 21, 2011 Можно полный лог сборки и указать ОС на которой она проводилась? OS ALT Linux (p6) sgconf-log.txt
madf Posted September 21, 2011 Author Posted September 21, 2011 Можно полный лог сборки и указать ОС на которой она проводилась? OS ALT Linux (p6) Спасибо! Я уже сам вспомнил про Альт и --as-needed. Сейчас все поправим.
madf Posted September 21, 2011 Author Posted September 21, 2011 Патчи: fix-libs-install-patch.diff (исправляет установку), fix-libs-order-patch.diff (исправляет сборку с --as-needed).
Roman Pogosyan Posted September 21, 2011 Posted September 21, 2011 у меня опять проблема с радиусом а именно с этой строчкой if (users->Authorize(ui->GetLogin(), ips[0].ip, 0xffFFffFF, this)) { если стоит * авторизация проходит аккаунтинг вроде тоже, но клиент в биллинге не становится "online" и IP ему не прописывается. если сделать по старинке if (users->Authorize(ui->GetLogin(),packet->ip, 0xffFFffFF, this)), то статус меняется на онлайн, ип прописывается, но аккаунтинг возвращает ошибку
madf Posted September 21, 2011 Author Posted September 21, 2011 у меня опять проблема с радиусом а именно с этой строчкой if (users->Authorize(ui->GetLogin(), ips[0].ip, 0xffFFffFF, this)) { если стоит * авторизация проходит аккаунтинг вроде тоже, но клиент в биллинге не становится "online" и IP ему не прописывается. если сделать по старинке if (users->Authorize(ui->GetLogin(),packet->ip, 0xffFFffFF, this)), то статус меняется на онлайн, ип прописывается, но аккаунтинг возвращает ошибку Если стоит * то IP у юзера нету и делать вот так: ips[0].ip - потенциально небезопасно. Чревато сегфолтом. А какую ошибку аккаунтинг возвращает?
Roman Pogosyan Posted September 21, 2011 Posted September 21, 2011 он никогда не возвращал текст ошибки (в 407 тоже) просто ковычки
Recommended Posts