Сервер хранит практически все данные за исключением конфигурационных файлов в SQL базе данных. Для того, чтобы обеспечить возможность использования любой, неизвестной на этапе компиляции базы данных, используется универсальная middle-ware библиотека - EasySQL.
Сервер статистики использует базы данных, заданную параметром конфигурации sql-database (по умолчанию - `amstat'). Все параметры реального соединения с базой данных (сервер, имя, пароль) и ее тип (msql, msql2, mysql и т.п.) указываются в конфигурации EasySQL.
Если Вы не знаете на какой базе данных остановиться и в Вашей компании еще не используется никакая, то можно использовать следующие рекомендации - при числе клиентов до 100..200 можно использовать mSQL-2, при большем - MySQL или можно подумать о Oracle/Informix (на февраль 1998 года автор сервера статистики использует MySQL для приблизительно 500 клиентов компании F1 Communications). MySQL предоставляет существенно большие возможности для анализа, но более требователен к ресурсам (не менее 64Mb оперативной памяти), чем mSQL.
Перед эксплуатацией сервера базу данных необходимо создать средствами используемого SQL сервера. Например для MySQL соответствующая команда будет выглядеть так:
/usr/local/mysql/bin/mysqladmin create amstat
После необходимых настроек прав доступа/паролей необходимо описать
созданную базу данных в EasySQL. Для этого служит файл amstat (или
с тем названием, которое Вы задали в `sql-database') в каталоге
`/usr/local/easysql/databases/'
. Его содержимое может быть
таким (обязательно прочитайте подробности процедуры в документации на EasySQL):
driver mysql host localhost database amstat user stat-adm password StAtiStIc |
Для проверки структуры таблиц и создания отсутсвующих таблиц (например при первоначальной установке сервера) можно (и рекомендуется) использовать модуль ckconfig. Просто запустите его без параметров и, если сама база данных создана корректно и доступна, он создаст все необходимые таблицы. Затем запустите его еще раз для проверки.
Общим правилом является следующее - до тех пор, пока Вы не планируете делать что-то специфичное с таблицами или пытаться писать свои дополнения к серверу, не делайте действий по созданию, изменению или удалению данных из таблиц вручную. Таким образом, остаток этого раздела следует считать скорее справочным пособием для интересующихся структурой данных.
Все таблицы, описанные ниже, могут включать в себя дополнительные поля, если они Вам необходимы; указанные поля могут следовать в другом порядке; текстовые записи могут состоять из большего числа символов (но не из меньшего!). При включении новых полей необходимо помнить, что им нельзя присваивать опцию `NOT NULL', т.к. в этом случае сервер не сможет создать новую запись в такой таблице.
Для удобства однозначной идентификации записей в таблицах сервера (что особенно удобно для разработки разного рода дополнительных модулей к серверу) каждая запись всех таблиц сервера имеет уникальный идентификатор ряда. Традиционно имя этого поля - `id'.
Лицевые счета пользователей хранятся в таблице accounts -
необходимо создать ее создать. Для этого можно запустить модуль
ckconfig без параметров или
создать ее вручную, выполнив в базе данных сервера статистики
такую команду (в MySQL это можно сделать запустив
`mysql statserv'
):
CREATE TABLE accounts
( id INT NOT NULL PRIMARY KEY,
user CHAR(16) NOT NULL,
when INT NOT NULL,
sum REAL NOT NULL,
cmt CHAR(200),
flag INT
)
Рассмотрим назначение полей:
Уникальный идентификатор ряда. Удобен для последующих операций с таблицей.
Внутреннее имя пользователя (будет объяснено при описании пользовательской конфигурации).
Здесь и в иных таблицах - дата, целое число, цифры которого представляют собой дату в формате YYYYMMDD.
Сумма средств, добавленная или списанная с лицевого счета пользователя.
Дробная величина, при внесении операции сервером округляется до
точности основной денежной единицы (параметр
currency-precision `amstat.conf'
).
Комментарий. Может быть довольно длинным - при выводе переносится на несколько строк.
Поле сбрасываемое сервером в 0 для всех вносимых им записей. Никак не используется, предусмотрено для целей расширения и оставлено из старых версий скорее по традиции.
Допустимо вводить в эту таблицу какие-то иные, дополнительные поля, но перечисленные выше должны присутствовать обязательно!
Для хранения статистики сервер использует SQL таблицу statistic. Для ее создания Вам необходимо выполнить SQL-команду:
CREATE TABLE statistic
( id INT NOT NULL PRIMARY KEY,
user CHAR(16) NOT NULL,
when INT NOT NULL,
name CHAR(16) NOT NULL,
grp CHAR(16) NOT NULL,
amount REAL NOT NULL,
sname CHAR(16),
sum REAL NOT NULL
)
Назначение полей:
Уникальный идентификатор записи.
Внутреннее имя пользователя.
Дата (формат смотрите в описании accounts). Все операции проводимые сервером в этой таблице имеют отношение к всему месяцу сразу - для индикации этого факта поле `день месяца' устанавливается равным нулю. Например для записей за июнь 1996 года дата будет установлена в 19960600.
Имя сервиса. Если формируется сервером, то совпадает с названием сервиса в прайс-листе. Более подробно об этом написано в описании модуля convertstat.
Название группы сервиса. Генерируется автоматически на основании данных прайс листов модулем convertstat.
Количество потребленной пользователем услуги. Дробная величина. Обычно имеет смысл подбирать формулы пересчета и единицы измерений таки образом, чтобы значение этого параметра было не меньше 0.01 по абсолютному значению. Это связано с тем, что при выводе генератором отчетов значение выводится с точностью до тысячных.
Единица измерения услуги ("мин", "кб", "стр." и т.п.). Используется только генератором отчетов - mkreport.
Стоимость потребленной услуги для пользователя. Цена услуги при генерации отчета получается делением стоимости на объем услуги.
Если в прайс-листах Вы используете иные валюты, кроме основной или в конфигурации задан параметр price-currency, то серверу необходимо знать курс указанной валюты по отношению к основной.
Для хранения курсов валют служит таблица rates (смотрите также описание модуля setrate). Для ее создания Вам необходимо выполнить SQL-команду:
CREATE TABLE rates
( id INT NOT NULL PRIMARY KEY,
name CHAR(16) NOT NULL,
when INT NOT NULL,
rate REAL NOT NULL
)
Назначение полей:
Уникальный идентификатор записи.
Название валюты, по нему на валюту ссылаются прайс-листы.
Дата, формат ее описан ранее.
Число единиц основной валюты в единице указанной, дробная величина.
Комментарии к сервисам сервер хранит в таблице snames. Именно эта таблица используется генератором отчетов при поиске комментария к указанному в таблице statistic сервису. Таблица генерируется и обновляется автоматически при чтении прайс-листов модулем convertstat (кроме этого модуля прайс-листы не анализируются ничем).
Для создания таблицы snames можно запустить модуль ckconfig без параметров или выполнить операцию SQL:
CREATE TABLE snames
( id INT NOT NULL PRIMARY KEY,
lang CHAR(2) NOT NULL,
name CHAR(16) NOT NULL,
descr CHAR(200) NOT NULL,
)
Назначение полей:
Уникальный идентификатор записи.
Код языка, для которого приведено описание в этой строке.
Наименование сервиса (соответствует полю name таблицы statistic).
Описание сервиса. При выводе переносится на несколько строк по словам, что позволяет делать его довольно длинным.
Для хранения названий групп сервиса сервер использует таблицу sgroups. Таблица генерируется и обновляется автоматически при чтении прайс-листов модулем convertstat.
Для создания таблицы sgroups можно запустить модуль ckconfig без параметров или выполнить операцию SQL:
CREATE TABLE sgroups
( id INT NOT NULL PRIMARY KEY,
lang CHAR(2) NOT NULL,
name CHAR(16) NOT NULL,
descr CHAR(200) NOT NULL,
)
Назначение полей:
Уникальный идентификатор записи.
Код языка, для которого приведено название группы в этой строке.
Наименование сервиса (соответствует полю name таблицы statistic).
Описание сервиса. При выводе переносится на несколько строк по словам, что позволяет делать его довольно длинным.