====== АННОТАЦИЯ ======
Спецификация предназначена для детализированного описания требований к реализации сущностей АС averobo на данных БД dbrobo с целью построения ретроспективного анализа данных.
====== Условие отбора данных ======
* Отбор данных из БД Dbrobo:
Выборка данных осуществляется через API-запрос за последние 15 минут. По расаписанию планировщика crontab(работает от демона cron) первый запуск происходит в 00:00 каждого дня и срабатывает каждые 15 минут.
* Отбор данных из БД Averobo:
Выборка данных осуществляется через подключение к БД через библиотеку psycopg2. В зависимости от типа осреднения происходит подключение к одной из двух таблиц. Для осреднений сутки и час обращение идет к таблице half_path, для осреднений неделя и месяц – table_with_time. Полное расписание планировщика представлено в таблице 1.
Табл.1 Расписание планировщика
^ Дата запуска планировщика ^ Тип осреднений ^
| ХХ:00 | 15-минут |
| ХХ:08 | Час |
| 00:12 | Сутки |
| 00:16 | Неделя |
| 00:20 | Месяц |
====== Модель данных ======
Модель данных для таблиц main_table, table_with_time, half_path представлены в таблицах 2, 3, 4 соответсвенно:
Табл. 2 Модель данных main_table
^ Name ^ Code ^ Data Type ^ Comment ^ Алгоритм заполнения ^
| Дата осреднения | date | date | Дата осреднения | |
| Название и серия прибора | name | varchar (50) | Название и серия прибора | |
| Тип осреднения | average | varchar (50) | Типы осреднения:\\ average_of_day\\ maximum_in_day\\ minimum_in_day\\ average_of_week\\ maximum_in_week\\ minimum_in_week | Названия функций:\\ insertavgday\\ insertmaxday\\ insertminweek\\ insertminday\\ insertavgweek\\ insertmaxweek |
| json-file с осреднениями | json-file | json | Структура хранения данных: \\ название датчика: осредненные данные | |
Табл. 3 Модель данных table_with_time
^ Name ^ Code ^ Data Type ^ Comment ^ Алгоритм заполнения |
| Дата осреднения | date | timestamp | Дата осреднения с временем | |
| Название и серия прибора | name | varchar (50) | Название и серия прибора | |
| Тип осреднения | average | varchar (50) | Тип осреднения:\\ aver_hour\\ maximum_in_hour\\ minimum_in_hour\\ aver_15min\\ minimum_in_15min\\ maximum_in_15min | Названия функций:\\ insertavghour\\ insertmaxhour\\ insertminhour\\ function_15_min |
| json-file с осреднениями | json-file | json | Структура хранения данных: \\ название датчика: осредненные данные | |
Табл. 4 Модель данных half_path
^ Name ^ Code ^ Data Type ^ Comment ^ Алгоритм заполнения |
| Дата осреднения | date | timestamp | Дата осреднения с временем | |
| Название и серия прибора | name | varchar (50) | Название и серия прибора | |
| Тип осреднения | average | varchar (50) | Тип осреднения:\\ aver_hour\\ maximum_in_hour\\ minimum_in_hour\\ aver_15min\\ minimum_in_15min\\ maximum_in_15min | Названия функций:\\ insertavghour\\ insertmaxhour\\ insertminhour\\ function_15_min |
| Количество осредненняемых значений | num | json | Количество осредненняемых значений | |
| Сумма неосредненных значений | sum | json | Сумма неосредненных значений |
====== PostgreSQL ======
===== Установка и запуск PostgreSQL =====
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql.service
===== Создание роли =====
Для создания баз данных используются роли в СУБД PostgreSQL. При создании роли автоматически создается БД с аналогичным названием. Для использования роли необходимо создать пользователя, к которому будет применена роль. Имя пользователя и роли должны совпадать.
Создание пользователя для БД логов:
sudo adduser averobo_logs
При создании пользователя необходимо не забывать о предоставлении, если необходимо sudo/root прав. Их необходимо предоставлять отдельно.
Создание роли для БД логов:
sudo -u postgres createuser averobo_logs
Создание пользователя для основной БД:
sudo adduser averobo
Создание роли для основной БД:
sudo -u postgres createuser averobo
* После предоставления роли можно зайти в созданного пользователя через команду:
sudo -i su averobo_logs
Для входа в PostgreSQL:
psql
===== Создание таблицы для БД логов =====
Создание таблиц происходит непосредственно в PostgreSQL. Для этого необходимо авторизоваться через пользователя, к базе данных которого нужно произвести подключение. Данный шаг показан в предыдущем разделе.
* Создание таблицы для логирования:
create table logs (
date timestamp
, level character varying(25)
, function character varying(25)
, message character varying(10000)
);
===== Создание таблицы для основной БД =====
* Создание таблицы для неосредненных значений:
create table half_path (
date timestamp without time zone
, name character varying(50)
, average character varying(50)
, sum json
, num json
);
* Создание таблицы для хранения данных формата дата-время:
create table half_path (
date timestamp without time zone
, name character varying(50)
, average character varying(50)
, json_file json
);
* Создание таблицы для хранения данных формата дата:
create table half_path (
date date
, name character varying(50)
, average character varying(50)
, json_file json
);
===== Проверки после создания таблиц =====
Проверка наличия таблицы:
select * from logs;
Просмотр всех существующих таблиц в БД:
\dt
Просмотр полей и деталей о колонках в конкретной таблице:
\d logs
===== Если база данных не создалась автоматически =====
* Создание БД через пользователя PostgreSQL по умолчанию
sudo -i su postgres
Команда для создания БД:
createdb averobo_logs
* Создание БД через bash-команду
sudo -u postgres createdb averobo_logs
====== CRONTAB ======
Для установки расписания выполнения программ используется **crontab**. Чтобы запустить текстовый редактор и добавить необходимые записи в файл конфигурации cron необходимо выполнить следующую команду:
crontab -e
Запись состоит из семи полей:
минуты часы день месяц день_недели выполняющая_программа команда
Следовательно, для запуска скрипта для заполнения пятнадцатиминутных значений необходимо прописать время в формате */15 * * * *, путь до расположения интерпретатора Python3 и путь до выполняемого файла.
*/15 * * * * /usr/bin/python3 /home/alenanaz/test_myfunctions.py
Аналогично будут составлены записи для заполнения почасовых и ежедневных значений.
10 * * * * /usr/bin/python3 /home/alenanaz/test_myfunctions_hour.py
15 0 * * * /usr/bin/python3 /home/alenanaz/test_myfunctions_day.py