====== АННОТАЦИЯ ====== Спецификация предназначена для детализированного описания требований к реализации сущностей АС 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