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

Главная категория => Разработка => Тема начата: Efendy от 08 Августа 2009, 03:55:49



Название: 50.25
Отправлено: Efendy от 08 Августа 2009, 03:55:49
Скрины


Название: Re: 50.25
Отправлено: elite от 08 Августа 2009, 05:41:14
круто )
а список изменения по сравнению с предыдущей версией будет?


Название: Re: 50.25
Отправлено: Efendy от 08 Августа 2009, 09:29:49
да


Название: Re: 50.25
Отправлено: Efendy от 08 Августа 2009, 09:33:04
Видимость колонок задается в личных настройках админа:


Название: Re: 50.25
Отправлено: VitalVas от 08 Августа 2009, 09:44:57
а можно разослать разработчикам, чтоб поковырять топологию??


Название: Re: 50.25
Отправлено: Efendy от 08 Августа 2009, 10:04:45
топология пока не закончена. Пока в ней устаревший поиск, переделываю


Название: Re: 50.25
Отправлено: elite от 08 Августа 2009, 16:39:34
а когда будет разослана пользователям?


Название: Re: 50.25
Отправлено: Efendy от 08 Августа 2009, 18:02:27
Сперва зальем на демку (сегодня/завтра) - надо погонять потестить, особенно потестить производительность sql-запросов ибо по новой концепции "поле = строка в dopdata" чтоб найти всех клиентов по адресу Дом 20 кв. 2 надо выполнить такой ядреный запрос:

Цитировать
SELECT id FROM users WHERE id IN (SELECT DISTINCT parent_id AS id FROM dopvalues WHERE revision IN (SELECT revision FROM dopvalues WHERE revision IN (SELECT revision FROM dopvalues WHERE revision IN (SELECT rev FROM rev_users WHERE template_num=2) AND dopfield_id=4 AND field_value LIKE '2') AND dopfield_id=7 AND field_value LIKE 'в') AND dopfield_id=2 AND field_value LIKE '20') ORDER BY sortip

Функционал того стоит.



Название: Re: 50.25
Отправлено: elite от 13 Августа 2009, 11:30:21
а можно ли сделать поле общий трафик в плавающих единицах (МБ - ГБ - ТБ) с 1-2 знаками после запятой?


Название: Re: 50.25
Отправлено: Sergius от 20 Августа 2009, 07:11:30
Ну по сравнению с 50-17 есть заметные изменения?
Это из Москвы пишут.(Школа) Так как 50 версия не стала работать так как хотелось, установили 49, я её немного докрутил на наш лад и она работает. 50 версию я лично тестю на второй машине в параллель :) Получается скажу вам очень прикольно.

Будем ждать. Москва.


Название: Re: 50.25
Отправлено: Efendy от 20 Августа 2009, 08:18:45

* В агентах сателлитов реализована поддержка pid-файлов, благодаря чему
появилась возможность посылать сигналы перезагрузки или завершения работы
скриптов.

Рестарт noserver.pl:
kill -HUP `cat /var/run/noserver.pid`

Завершение работы noserver.pl:
kill -TERM `cat /var/run/noserver.pid`

Пока pid-файлы поддерживается только noserver.pl (noserver.pid) и
nol2auth.pl (nol2auth.pid).

Посылать сигналы не является необходимостью - разработаны rc.d скрипты,
которые поддерживают команды start/stop/restart. Эти скрипты находятся
в папке /usr/local/nodeny/rc.d. Скопируйте их в системную rc.d:

cp /usr/local/nodeny/rc.d/* /usr/local/etc/rc.d/

Предусмотрена защита от параллельного запуска, а также зомби pid-файлов -
когда pid-файл существует, а процесс - нет (это возможно если послать
сигнал -INT. Посылайте -TERM чтоб этого не происходило).


* Улучшение инсталятора install.pl. Теперь во всех последующих апдейтах
после вопроса о пути к папке nodeny (/usr/local/nodeny), остальные пути
будут браться из истории предыдущих установок/апгрейдов: создается
файл history.nod, в котором сохраняются ключевые данные. Фича полезная,
когда www каталог находится по иному пути чем стандартно для apache в
freebsd, либо параметры соединения с mysql отличаются от дефолтовых.

* Слегка улучшен скрипт бекапа БД:

- теперь может запускаться из /etc/periodic/weekly
- не бекапится талица traf_info т.к. не ключевая, но имеет значительный объем
- при инсталляции/апгрейде копируется в /usr/local/nodeny. Не забудьте
  поменять пароль в нем.

* noserver.pl, динамическое управление скоростями:
- теперь сохраняется соотношение вход/исход скоростей для пониженных скоростей
так же как оно (соотношение) было для начальных скоростей, прописанных в тарифе.

* В тарифах появилось поле `описание для клиентов`.

* Динамическое управление скоростями доступно для редактирования на странице
тарифов.

* Изменена структура папок документации: в корень вынесены index.html и
FAQ.html чтоб новичкам было легче найти "куда тыкать" в начало документации.

* Неключевые данные адресов клиентов перенесены в дополнительные поля, что
позволяет гибко настраивать их перечень (ввести новые, удалять ненужные,
например, добавить поля `город`, `подъезд`), тип (строковое, числовое,
да/нет и т.д), их названия. Возможность просмотреть/откатиться к любой
ревизии, т.е. к данным сущестовавшим в определенный момент времени.

* Таблица со списком клиентов настраиваема: в настройках админа появилась
возможность настроить несколько видов отображения списка клиентов, в каждом
свой список полей. В процессе отображения возможно переключаться между
видами. Также возможно убирать/восстанавливать колонки в процессе работы
со списком клиентов.

* При отображении списка клиентов добавлены разнличные сортировки.




Название: Re: 50.25
Отправлено: Sergius от 20 Августа 2009, 11:35:34
Огромное спасибо за тщательный мануал изменений/дополнений. Бум ждать для теста.


Название: Re: 50.25
Отправлено: Elisium от 20 Августа 2009, 16:30:18
Цитировать
* Неключевые данные адресов клиентов перенесены в дополнительные поля ...


Учитывая то, что при обновлении со старых версий (49<) до 50х, часть данных со СТАРОЙ БД была вынесена в НОВЫЕ ПОЛЯ и догадываться про это приходилось самому,
то  БОЛЬШАЯ ПРОСЬБА!!! дописать в инсталлятор (или просто отдельный скрипт) модуль, который АВТОМАТОМ создаст новые поля в новой БД и перенесет всю инфу из соответствующих полей старой БД ..
п.с. При переходе с 48 на 50ю версию столкнулся с таким "сюрпризом"  - не перенеслись поля МАК и Разрешенные порты. Только после упорного "прочесывания" гугл-форума нашел заготовку такого скрипта ..
Хотелось бы, что бы обновление прошло более менее спокойно, а не в вылавливании потом "а вот чегож эта фигня не попала в новую базу ?"


Название: Re: 50.25
Отправлено: Efendy от 20 Августа 2009, 20:48:51
Инсталятор переносит те поля, который знает. О маках он ничего не знает т.к.  это поле мы как бы не стандартизировали.


Название: Re: 50.25
Отправлено: Elisium от 20 Августа 2009, 21:03:47
Ммм... тогда вопрос вдогонку - ТЕ поля, которые вы в новой версии выделите в ДопПоля - они перенесутся АВТОМАТОМ при обновлении??
Скажем , с 50.19 на 50.26 ?? Ведь, стандартизированы они или нет, НО они есть в билле (и в админке, само собой), в них заносятся какието нужные данные ..
А потом при апгрэйде бах! - и в новой версии этих полей нет .. вернее есть новые, НО пустые ... "Ты суслика видишь? - Нет. - А он есть..." (с)
Ведь, имхо, если уж поле есть в текущем релизе, то надо бы както и позаботиться о его переносе в следующие релизы или хотябы дать возможность (готовым скриптом) их перенести ...
Ведь для матерых пёрлописателей это десять строк кода, а человека, незнакомая с этим языком, будет иметь много гимора..(((

п.с. заранее спасибо за ответ )))


Название: Re: 50.25
Отправлено: Efendy от 20 Августа 2009, 22:26:00
автоматом перенесутся те поля, которые были стандартизированы - это поля адреса (улица, дом, квартира...), а также телефон. Формат дополнительных данных в их старом понятии, имеется ввиду специальное поле, которое разделителем разделялось на несколько, не фиксирован. Обычно он состоял из полей "входящая скорость", "исходящая" и др. Однако, формат этого поля не являлся обязательным, поэтому в других сетях разные данные были забиты в них. Переносить эти данные можно только зная их формат. Поскольку, как уже сказал, от сети к сети там разные данные - автоматом перенести нельзя. Понадобится персональная модификация инсталятора. Пока так


Название: Re: 50.25
Отправлено: Elisium от 22 Августа 2009, 00:17:59
мдя .. понял ...
вобщем, вижу, грозит мне более глубокое, чем хотелось, изучение Перла ))


Название: Re: 50.25
Отправлено: bondar от 27 Августа 2009, 17:07:20
мдя .. понял ...
вобщем, вижу, грозит мне более глубокое, чем хотелось, изучение Перла ))
могу поделится похожим скриптом, писали для переноса дополнительных полей из 45й версии, в 50.19.
версии отличаются, но форматы полей одинаковые, тот же разделитель.


Название: Re: 50.25
Отправлено: Elisium от 27 Августа 2009, 17:47:40
чето типа такого ?
От оригинального отличается исправлеными ошибками, дописано пару строк ...
Предполагается что таблица doplavues  пуста ... или номер ревизии нужно поставить такой же, как у других данных ..

Код:
#!/usr/bin/perl
#
# Скрипт для конвертации дополнительного поля с MAC-адресом из версии 49q в 50ю версию
#
# Настройки скрипта:
# $id_dop - ID поля с mac-адресом, в таблице dopfields
# $admin_id - ID админа
# $time - можно указать конкретно время в unix timestamp
# $revision - номер ревизии, желательно сделать его выше всех ревизий которые есть в таблице dopvalues

# По поводу количества дополнительных полей: в строке номер 45 можно это указать, например,
# если у Вас 5 дополнительных полей и одно из них с MAC-адресов, строка будет выглядеть так:
# (undef,undef,$ipmac,undef,undef)=split(/\|/,$dop);
# в этом варианте поле с мак-адресов у Вас третье по счету.
#
# email автора: wobondar@gmail.com
#
# (?:[0-9,aA-fF][0-9,aA-fF]\:){5}[0-9,aA-fF][0-9,aA-fF]
# 20000|20000|00:50:8d:95:b0:dd||
# ||00:1A:4D:73:6E:BF||

# Настройки скрипта
$id_dop=4;
$admin_id = 6;
$add_time = time;
$revision = 6;

# Настройка доступа к базе данных
$dbname='bill';                          # Имя БД
$dbuser='bill_kernel';                  # Логин БД
$dbpass='MY_hArd_pAssSWorD';  # Пароль БД

use DBI;
$DSN="DBI:mysql:database=$dbname;host=localhost;";
$dbh = DBI->connect($DSN,$dbuser,$dbpass);
unless ($dbh) {
    print ("Error Database");
    }
$sth=$dbh->prepare("SELECT `id`, `dop_param` FROM `users`;");
$sth->execute();
while ($p=$sth->fetchrow_hashref){
        $dop=$p->{'dop_param'};
        $id_user=$p->{'id'};
        (undef,undef,$ipmac,undef,undef)=split(/\|/,$dop);
        $ipmac=~ s/\#//s;
        $ipmac=~ s/-/:/g;
        if($ipmac){
                $dbh->do("INSERT INTO `dopvalues` (`line_id`, `parent_id`, `dopfield_id`, `field_value`, `admin_id`, `time`, `revision`) VALUES (0, '$id_user', '$id_dop', '$ipmac', '$admin_id', '$add_time', '$revision');");
                print "id = $id_user\t$mac - OK!\n";
        }
}


Название: Re: 50.25
Отправлено: bondar от 27 Августа 2009, 22:30:05
чето типа такого ?
От оригинального отличается исправлеными ошибками, дописано пару строк ...
Предполагается что таблица doplavues  пуста ... или номер ревизии нужно поставить такой же, как у других данных ..

Код:
#!/usr/bin/perl
#
# Скрипт для конвертации дополнительного поля с MAC-адресом из версии 49q в 50ю версию
#
# Настройки скрипта:
# $id_dop - ID поля с mac-адресом, в таблице dopfields
# $admin_id - ID админа
# $time - можно указать конкретно время в unix timestamp
# $revision - номер ревизии, желательно сделать его выше всех ревизий которые есть в таблице dopvalues

# По поводу количества дополнительных полей: в строке номер 45 можно это указать, например,
# если у Вас 5 дополнительных полей и одно из них с MAC-адресов, строка будет выглядеть так:
# (undef,undef,$ipmac,undef,undef)=split(/\|/,$dop);
# в этом варианте поле с мак-адресов у Вас третье по счету.
#
# email автора: wobondar@gmail.com
#
# (?:[0-9,aA-fF][0-9,aA-fF]\:){5}[0-9,aA-fF][0-9,aA-fF]
# 20000|20000|00:50:8d:95:b0:dd||
# ||00:1A:4D:73:6E:BF||

# Настройки скрипта
$id_dop=4;
$admin_id = 6;
$add_time = time;
$revision = 6;

# Настройка доступа к базе данных
$dbname='bill';                          # Имя БД
$dbuser='bill_kernel';                  # Логин БД
$dbpass='MY_hArd_pAssSWorD';  # Пароль БД

use DBI;
$DSN="DBI:mysql:database=$dbname;host=localhost;";
$dbh = DBI->connect($DSN,$dbuser,$dbpass);
unless ($dbh) {
    print ("Error Database");
    }
$sth=$dbh->prepare("SELECT `id`, `dop_param` FROM `users`;");
$sth->execute();
while ($p=$sth->fetchrow_hashref){
        $dop=$p->{'dop_param'};
        $id_user=$p->{'id'};
        (undef,undef,$ipmac,undef,undef)=split(/\|/,$dop);
        $ipmac=~ s/\#//s;
        $ipmac=~ s/-/:/g;
        if($ipmac){
                $dbh->do("INSERT INTO `dopvalues` (`line_id`, `parent_id`, `dopfield_id`, `field_value`, `admin_id`, `time`, `revision`) VALUES (0, '$id_user', '$id_dop', '$ipmac', '$admin_id', '$add_time', '$revision');");
                print "id = $id_user\t$mac - OK!\n";
        }
}

ооо...он самый  :)
да его можно использовать, при переходе он сработал на все 100%.