Проект учета пользовательских счетов для интернет-провайдеров на базе OS FreeBSD с применением программы Billing ISP
всегда положителен. В русском языке обычно под этим подразумевают сладкое
слово "халява". Разумеется, этот файл прежде всего должны иметь, например,
сотрудники ISP и их ближайшие родственники ;-)
.refused - наличие такого файла сигнализирует о том, что баланс лицевого
счета пользователя всегда отрицателен, т.е. доступ ему в систему временно
приостановлен;
.type - тип пользователя (например, "свой", "халява", "бартер", "деньги").
Служит для деления пользователей на группы, по которым в дальнейшем
генерируется статистическая информация;
.account - тип (или индекс) прайс-листа для данного пользователя. Этот файл
очень удобно использовать для задания прайс-листа отдельным группам
пользователей. Вы создаете желаемый прайс-лист и помещаете его в каталог
/var/statserv/etc, а пользователям в домашних каталогах указываете лишь
ссылку на него. Если Вы хотите поменять прайс-лист для некоторой группы
пользователей, то, Вы редактируете прайс-лист всего в одном месте (см. ниже
"Алгоритм выбора тарифной схемы для пользователя при старте демона");
.account.conf - собственный прайс-лист для данного пользователя. См.
структуру файла .account.conf. Этот файл следует применять в том случае,
когда Вы хотите задать для пользователя индивидуальный прайс-лист;
.pay.next - авансовый платеж, или следующее начисление на лицевой счет
пользователя после обнуления текущего лицевого счета. Может быть
использовано в том случае, когда пользователь не исчерпал текущий лицевой
счет, однако оплатил следующую услугу по прежнему или новому прайс-листу;
.account.next - то же, что и .account (см. выше), но только для авансового
платежа.
2. Описание выходных документов.
В результате работы биллинговой программы вся информация о работе
пользователь, как было сказано выше, фиксируется в лог-файлах и базе
данных. Это является основным базисом для генерации отчетов и статистики.
Извлекаемые данные могут быть представлены в качестве структурированных
таблиц, либо в форме отчетов по запрашиваемым данным. Данная информация,
также является подтверждением того, что пользователь работал в сети на
случай претензий последнего.
Список информации - данных, которые предлагаются пользователю и системному
администратору (биллинг-инженеру):
1. Время регистрации пользователя в конкретный день
2. Оставшаяся сумма на счету у пользователя
3. Время, проведенное в сети
4. Статистика работы в сети по дням, неделям и месяцам
5. Почтовое уведомление пользователя и администратора об истечении
денежного взноса.
6. Общая структурированная таблица статистики за определенный период
времени
При генерации выше указанной информации используются дополнительные модули
программы «Billing ISP» и системные программы Unix такие как, CGI- модули
(для обращения к базам данных и генерации HTML кода и форм или писем),
Apache web server (для вывода на экран HTML кода сгенерированного CGI
программой), MTA Sendmail (для отправки электронного письма пользователю об
окончании счета).
2. Описание технологии и алгоритмов решения задачи и их машинная
реализация.
1. Описание ввода в базу данных входной информации.
Отличительная черта рассматриваемой программы от других вариантов данной
курсовой работы, является полностью ароматическая генерация и занесение в
базу данных информации за исключением создания самих счетов пользователей.
Это определяется в основном спецификой данного программного продукта и
операционной среды, в которой он работает.
Алгоритм начисления условных единиц на лицевой счет пользователя
1. Если файл .pay в домашнем каталоге пользователя отсутствует, то
занести размер платежа в файл .pay, а индекс прайс-листа в файл
.account. Переход к пункту 3;
2. Вычислить текущий размер лицевого счета пользователя. Если он
отрицателен или равен нулю, то очередной платеж заносится в файл .pay,
а выбранный индекс прайс-лист в файл .account. Если текущий размер
лицевого счета пользователя положителен, то очередной платеж заносится
в файл .pay.next, а выбранный индекс прайс-листа в файл .account.next;
3. Обновить файл .current с текущим размером лицевого счета;
4. Занести платеж в таблицу "ПЛАТЕЖИ" базы данных (опционально).
Алгоритм фиксации в базе статистической информации
Введение.
Рассматриваемый программный продукт напрямую зависит от системных вызовов
операционной среды, в которой он работает, а также и от некоторых
приложений, например PPPD (название этого демона происходит от названия
протокола соединения пользователя и провайдера Point to Point Protocol),
syslog (системная программа, которая фиксирует пребывание пользователя в
системе, а также фиксирует в лог-файлы сообщения ядра ОС). В связи с тем,
что описания данных продуктов это тема отдельной курсовой работы, данный
алгоритм будет описан поверхностно.
1. При соединении пользователя к провайдеру запускается программа Mgetty,
которая управляет и инициализирует работу модема. Запуск данной
програмы фиксируется в системных лог-файлах системы. После ее запуска
она активизирует, в нашем случаи демон PPPD, который в свою очередь
принемает и регистрирует пользовательские запросы и после проверки
всего необходимого впускает или нет в систему. Все действия данных
сервисов после соединения отслеживает программа syslog, которая и
генерирует основную базу действий пользователя в системе.
2. Billing ISP, как уже говорилось выше напрямую взаимодействует с PPPD
проверяя актуальность данного подключения и в случаи удачного входа
изменяет (уменьшает) за определенный квант времени счет пользователя.
3. Также демон биллинга с момента соединения пользователя начинает вести
подсчет времени пребывания пользователя с соответствующим изменением в
SQL базе полей.
2. Обобщенный алгоритм решения задачи.
Ядром предлагаемой системы является специально написанный демон "биллинга"
(в дальнейшем просто демон), осуществляющий контроль за израсходованнным
временем и/или условными единицами пользователя, находящегося в данный
момент в режиме "он-лайн". Демон запускается в момент входа пользователя в
систему, по истечении одного кванта времени (например, 5 секунд) снимает с
лицевого счета пользователя стоимость одного кванта в соответствии с
действующей в данный момент ценой, которая, кстати, может меняться в
зависимости от времени суток, а после завершения сеанса связи демон
прекращает свою работу, протоколируя информацию о продолжительности сеанса
связи и отработанной стоимости в специальный лог-файл в домашнем каталоге
пользователя и, при необходимости, в общую SQL-базу данных. Другими
словами, отдельная копия демона постоянно присутствует в памяти сервера
биллинга и "следит" за пользователем на протяжении всего сеанса связи.
Информация о начислениях на лицевой счет пользователя и снятия с лицевого
счета за фактически отработанное "он-лайновое" время (так называемая
"биллинговая информация") хранится в домашних каталогах пользователей в
обычных текстовых файлах. Т.е. для каждого пользователя создается свой
набор файлов с биллинговой информацией. Соответственно, вычисление размера
лицевого счета пользователя происходит на основании содержимого этих
файлов. Такое распределенное хранение биллинговой информации по каждому
пользователю обеспечивает простоту построения системы, а значит надежность,
и предоставляет возможность организации несложной системы доступа к лицевым
счетам через www-интерфейс. В тоже время, такая же информация, но немного в
другом виде хранится в SQL-базе, однако она используется исключительно для
генерации статистической информации предоставляемой системному
администратору.
3. Алгоритм выполнения отдельных модулей.
Алгоритм вычисления лицевого счета при входе пользователя в систему
Данный алгоритм должна реализовывать программа, выполняющая аутентификацию
пользователя (TACACS+ или pppd) на этапе подключения его к Интернету. В
этот случае основную роль должен играть файл .current, который содержит уже
вычисленное значение размера лицевого счета, т.к. в данный момент размер
лицевого счета должен быть получен практически мгновенно.
1. Если файл .refused присутствует в домашнем каталоге пользователя, то
текущий размер лицевого счета принимается отрицательным. Переход к
пункту 5;
2. Если файл .time присутствует в домашнем каталоге пользователя, то
текущий размер лицевого счета принимается положительным. Переход к
пункту 5;
3. Если файл .current присутствует в домашнем каталоге пользователя, то
из него берется текущий размер лицевого счета (файл .current
обновляется каждый раз после завершения работы демона). Переход к
пункту 5;
4. Текущий размер лицевого счета вычисляется по формуле : "общая сумма
начислений из файла .pay минус общая сумма отчислений из файла .work
минус общая сумма отчислений из файла .weekly";
5. Если текущий размер лицевого счета положителен, доступ в систему
пользователю разрешатеся, в противном случае - запрещается.
Алгоритм выбора прайс-листа (тарифной схемы) для пользователя при старте
демона
. Если в домашнем каталоге пользователя находится файл .account.conf, то
прайс-лист для данного пользователя читается из этого файла;
. Если в домашнем каталоге пользователя присутсвует файл .account, то из
него читается первая строчка, которая добавляется в слову account, к
полученной строке добавляется расширение .conf, и, таким образом файл
c прайс-листом с полученным именем читается из каталога
/var/statserv/etc;
. Если файлы .account.conf и .account отсутствуют в домашнем каталоге
пользователя, то прайс-лист для данного пользователя читается из файла
/var/statserv/etc/account.conf (прайс-лист по умолчанию)
Действия, выполняемые демоном при старте
. Анализирует командную строку. В качестве первого параметра ему
передается имя пользователя, в качестве второго - NAS-порт (или
устройство, например, /dev/cuaa2), в качестве третьего - адрес NAS-
сервера (третий параметр нужен только в том случае когда у провайдера
более одного NAS'a);
. Выбирает прайс-лист (тарифную схему) для пользователя (см. "Алгоритм
выбора прайс-листа для пользователя при старте демона");
. Проверяет присутствие в домашнем каталоге файла .time, если он там
есть - взводит соответствующий флажок в переменную us.unoff=1;
. Проверяет присутствие в домашнем каталоге файла .refused, если он там
есть - взводит соответствующий флажок в переменную us.refused=1;
. Вычисляет значение лицевого счета пользователя (см. пункт 4 "Алгоритма
вычисления лицевого счета при входе пользователя в систему"). Даже
если размер лицевого счета отрицателен, демон все равно продолжит свою
работу, поскольку по истечении первого же кванта времени он, при
необходимости, подаст сигнал на отключение этого пользователя;
. Демонизируется ;-);
. Записывает свой PID в файл с именем NAS-порта в каталог /var/run (если
у провайдера больше одного NAS'a - то необходимо модифицировать демон,
чтобы избежать конфликтов в каталоге /var/run между NAS'ами);
. Программирует собственный таймер на заданный квант времени и входит в
бесконечный цикл, вывести из которого может только SIGHUP.
Действия, выполняемые демоном при истечении одного кванта времени
1. Обновить счетчик (в секундах) продолжительности текущего соединения, в
соответствии с действующим тарифом вычислить стоимость одного кванта
времени, обновить переменную в которой накапливается стоимость текущей
сессии;
2. Проверить, присутствует ли пользователь все еще в системе -
просмотреть файл /var/run/utmp. Если пользователя в системе нет, то
вызвать процедуру, выполняемую при завершении сессии;
3. Если пользователь не исчерпал свой лицевой счет, то ждать истечение
следующего кванта времени. В противном случае описанные ниже действия
возникают при исчерпывании средств на лицевом счете:
4. Проверить, является ли этот пользовать "привелегированным". Для этого
посмотреть на флажок us.unoff. Если us.unoff==1, то ждать истечение
следующего кванта времени;
5. Проверить, была ли вызвана программа /var/statserv/bin/killuser, если
да - то ждать истечение следующего кванта времени. Дело в том, что из-
за особенностей построения некоторых систем аутентификации, при
исчерпывании средств на лицевом счете, фактически пользователь
отключается не сразу после вызова программы
/var/statserv/bin/killuser, а через некоторый интервал времени;
6. Если файл .pay.next отсутствует в домашнем каталоге пользователя,
значит, пользователя необходимо принудительно отключить. Переход к
пункту 9;
7. Прочитать сумму из файла .pay.next. Переписать ее в файл .pay. Удалить
файл .pay.next. Вычислить текущий размер лицевого счета пользователя.
Если он отрицателен, то переход к пункту 9;
8. Перечитать новый прайс-лист из файла .account.next. Удалить файл
.account.conf, если он присутствует. Переименовать файл .account.next
в файл .account и ждать истечение следующего кванта времени.
9. Вызвать программу /var/statserv/bin/killuser с параметрами
имя_пользователя и NAS-порт, которая пошлет сигнал на отключение
пользователя;
Действия, выполняемые демоном при завершении сессии
При завершении сессии сервер аутентификации TACACS (или pppd) читает PID
демона из каталога /var/run/ и посылает ему SIGHUP (возможен, также другой
вариант, когда демон постоянно сканирует файл utmp и выполняет ниже
описанные действия, если пользователь "изчез" из файла utmp). Демон удаляет
файл со своим PID-ом из /var/run/, записывает сведения о только что
завершенной сессии в файл .weekly, обновляет файл .current с текущим
размером лицевого счета пользователя и вызывает скрипт
/var/statserv/bin/close_session. с параметрами имя_пользователя, NAS-port,
продолжительность_сессии, стоимость_сессии.
4. Контрольный пример.
Описание использования демона биллинга
Описание использования демона биллинга
Демон billing является ядром предлагаемой системы учета пользователей для
ISP. Он может работать в двух режимах - в "основном" режиме (т.е. режиме
демона) для контроля лицевого счета пользователя в реальном масштабе
времени и в "вспомогательном" режиме выдачи сведений о размере лицевого
счета пользователя или контроля правильности задания тарифной схемы. Ниже
приведены все возможные ключи запуска и параметры командной строки:
/var/statserv/bin/billing
Usage error: billing [-vdeashtpPrRwW] [username] [port] [nas]
-v show version and exit
-d daemonize billing
-e increase debug level in daemonize mode
-a show current price
-c show current account for sysadmin
-s show current account
-h show current account in HTML format
-t total user account
-p show pay -P show pay history
-n show pay.next -N show pay.next history
-r show work -R show work history
-w show weekly -W show weekly history
Режим демона - запуск с ключом -d. Далее следуют обязательные параметры -
имя пользователя, NAS-порт (порт модема) и имя NAS-сервера (если NAS-
сервер у ISP один, то этот параметр выбирается произвольно, однако совсем
опускать его нельзя). Пример:
/var/statserv/bin/billing -d jackson Async2 access.provider.net
Режим выдачи сведений о размере лицевого счета пользователя - запуск с
ключом -s и единственным параметром - именем пользователя. Пример:
/var/statserv/bin/billing -s jackson
В данном варианте на стандартный вывод ничего не выводится, а "знак"
лицевого счета отражается в коде возврата. Если размер лицевого счета
больше либо равен нулю, т.е. доступ пользователю в систему разрешен, то
billing возвращает число 0, если меньше нуля, т.е. доступ пользователю в
систему ограничен, то billing возвращает число 1.
/var/statserv/bin/billing -st jackson
На стандартный вывод выводится общий размер лицевого счета пользователя в
plain text. См. п.4 алгоритма вычисления размера лицевого счета
пользователя
/var/statserv/bin/billing -spt jackson
На стандартный вывод выводится общий размер начислений на лицевой счет
пользователя и его общий размер в plain text. Алгоритм вычисления
лицевого счета тот же самый. Ключ -P задает вывод истории начислений.
/var/statserv/bin/billing -c jackson
Соответствует вызову
/var/statserv/bin/billing -stpnrw jackson
т.е. наиболее "употребительному" использованию billing с точки зрения
системного администратора. Вызов billing с ключом -h, например
/var/statserv/bin/billing -shtpnrw jackson
выводит информацию о лицевом счете пользователя в HTML-формате для того,
чтобы ее можно было предоставлять пользователю через www-интерфейс;
Режим проверки алгоритма выбора прайс-листа для пользователя. Вызов:
/var/statserv/bin/billing -a jackson
Предназначен исключительно для системного администратора чтобы
контролировать правильность задания тарифной схемы для данного
пользователя.
Страницы: 1, 2
|