IPA_SDB(5)

НАИМЕНОВАНИЕ
ipa_sdb -- формат базы данных для ipa_db_sdb(8) и ipa_st_sdb(8)

СИНТАКСИС
#include "ipa_sdb_config.h"
#include <ipa_sdb.h>

ОПИСАНИЕ
ipa_sdb это база данных для IPA модуля базы данных со следующими свойствами:

-   Все файлы и директории базы данных хранятся в собственных форматах базы данных;

-   Каждое правило, лимит и порог имеет собственную директорию;

-   Форматы файлов базы данных не зависят от архитектуры компьютера;

-   Размеры записей в файлах базы данных относительно малы: размер записи для правила равен 15 байт, размер записи для лимита равен 73 байт, размер записи для порога равен 30 байт.

ФОРМАТ БАЗЫ ДАННЫХ
Все структуры, необходимые для прямого обращение к данным базы данных, доступны в файле ipa_sdb.h.

Файл ipa_sdb_config.h содержит макроопределения для упаковывания структур, которые определяются скриптом configure (см. содержимое этого файла). Если вы будете использовать другой компилятор, чем компилятор, который использовал скрипт configure, то измените этот файл и переопределите эти макроопределения.

По умолчанию главная директория базы данных это IPA_SDB_DB_DIR, но так как она может быть изменена, то будем её называть <DB>.

Модули ipa_db_sdb(8) и ipa_st_sdb(8) не ожидают, что файл или директория, которую они используют в текущий момент времени, может быть удалён, переименован или модифицирован другим процессом.

Номер версии формата базы данных хранится в файле <DB>/IPA_SDB_VERSION_FILE. Существует макропеременная IPA_SDB_FORMAT_VERSION, значение которой равно номеру версии формата базы данных.

Статистика для произвольного правила хранится в директории <DB>/<rule>. В этой директории находятся файлы с yyyymm-подобными именами, которые хранят статистику за год/месяц.

Каждый файл <rule>/yyyymm содержит записи в следующем формате:

struct ipa_sdb_rule_record {
    uint8_t             mday;
    uint8_t             h1;
    uint8_t             m1;
    uint8_t             s1;
    uint8_t             h2;
    uint8_t             m2;
    uint8_t             s2;
    uint32_t            c_high;
    uint32_t            c_low;
};

mday это номер дня месяца, h1, m1 и s1 это время, когда запись была добавлена в базу данных, h2, m2 и s2 это время, когда запись была обновлена последний раз. c_high и c_low это старшая 32-битная часть и младшая 32-битная часть счётчика, каждая из этих частей представлена в сетевом порядке байт. Так как новая запись всегда добавляется для нового дня, то в этой структуре достаточно только поля mday.

Файл <rule>/IPA_SDB_INFO_FILE содержит описание правила.

Данные лимитов находятся в директории <rule>/IPA_SDB_LIMITS_DIR, данные для каждого лимита хранится в директории <limit>. В этой директории находятся файлы с yyyymm-подобными именами, которые хранят статистику за год/месяц. Здесь год/месяц обозначает год и месяц, когда лимит был начат.

Каждый файл <limit>/yyyymm содержит записи в следующем формате:

struct ipa_sdb_date_struct {
    uint16_t            year;
    uint8_t             mon;
    uint8_t             mday;
    uint8_t             hour;
    uint8_t             min;
    uint8_t             sec;
};
typedef struct ipa_sdb_date_struct ipa_sdb_date;
#define IPA_SDB_DATE_START_SET         0x01
#define IPA_SDB_DATE_RESTART_SET       0x02
#define IPA_SDB_DATE_RESTART_EXEC_SET  0x04
#define IPA_SDB_DATE_REACH_SET         0x08
#define IPA_SDB_DATE_REACH_EXEC_SET    0x10
#define IPA_SDB_DATE_EXPIRE_SET        0x20
#define IPA_SDB_DATE_EXPIRE_EXEC_SET   0x40
#define IPA_SDB_DATE_UPDATED_SET       0x80
struct ipa_sdb_limit_record {
    uint8_t             set;
    ipa_sdb_date        start;
    ipa_sdb_date        restart;
    ipa_sdb_date        restart_exec;
    ipa_sdb_date        reach;
    ipa_sdb_date        reach_exec;
    ipa_sdb_date        expire;
    ipa_sdb_date        expire_exec;
    uint32_t            l_high;
    uint32_t            l_low;
    ipa_sdb_date        updated;
    uint32_t            c_high;
    uint32_t            c_low;
};

Биты IPA_SDB_DATE_xxx_SET в поле set определяют какое из полей типа ipa_sdb_data имеют действительные данные. start это дата запуска лимита, restart это дата, когда лимит будет перезапущен, restart_exec это дата, когда были запущены команды для перезапущенного лимита, reach это дата когда лимит был достигнут, reach_exec это дата, когда были запущены команды для достигнутого лимита, expire это дата, когда достигнутый лимит будет перезапущен, expire_exec это дата, когда были запущены команды для перезапущенного достигнутого лимита и updated это дата, когда лимит обновлялся последний раз.

Поле year в структуре ipa_sdb_date представлено в сетевом порядке байт.

l_high и l_low представляют значение лимита, c_high и c_low представляют значение счётчика лимита. Эти поля имеют тот же формат, что и поля c_high и c_low в структуре ipa_sdb_rule_record.

Файл <limit>/IPA_SDB_INFO_FILE содержит описание лимита.

Данные порогов находятся в директории <rule>/IPA_SDB_THRESHOLDS_DIR, данные для каждого порога хранится в директории <threshold>. Файл <threshold>/IPA_SDB_THRESHOLD_STATE содержит текущее состояние порога:

struct ipa_sdb_threshold_record {
    uint32_t            t_high;
    uint32_t            t_low;
    uint32_t            c_high;
    uint32_t            c_low;
    ipa_sdb_date        tm_started;
    ipa_sdb_date        tm_updated;
};

l_high и l_low представляют значение порога, c_high и c_low представляют значение счётчика порога. Эти поля имеют тот же формат, что и поля c_high и c_low в структуре ipa_sdb_rule_record.

tm_started и tm_updated это две временные отметки порога.

Файл <threshold>/IPA_SDB_INFO_FILE содержит описание порога. порога.

ДРУГИЕ ИСТОЧНИКИ
ipa_db_sdb(8), ipa_st_sdb(8), ipa_sdb_dump(8)

АВТОР
Andrey Simonenko <simon@comsys.ntu-kpi.kiev.ua>

НЕДОРАБОТКИ
Если вы обнаружите какие-либо ошибки, то, пожалуйста, сообщите мне по email.