====== АННОТАЦИЯ ======
В данном программном документе приведено руководство системного программиста по установке и настройке программы "Программный интерфейс взаимодействия системы отображения метеорологических данных с базой данных измерительной информации", предназначенной для передачи системе отображения метеорологической информации из базы данных.
====== Общие сведения о системе ======
Программный интерфейс входит в состав системы отображения метеорологических данных МФ МГТУ им. Н.Э. Баумана.
Основные функции программного интерфейса состоят в получении, передачи и обработке метеорологической информации в формате JSON.
====== Структура системы ======
Программный интерфейс состоит из двух частей: программного интерфейса REST(порт 3000) и программного интерфейса GraphQL(порт 4000). Они круглосуточно работают на сервере, ожидая HTTP-запрос метода GET. При получении нового запроса происходит его обработка, согласно заранее определенному сценарию.
Программный интерфейс в ходе своей работы использует Redis - резидентную систему управления базами данных NoSQL, работающую со структурами данных "ключ-значение". Redis работает на порте 6379.
====== Программные зависимости ======
Для функционирования программного интерфейса необходимо инсталлировать резидентную систему управления базами данных класса NoSQL Redis версии 6.0.1.
Также необходимо установить программную платформу Node.js версии 12.16.3, а также ряд npm-пакетов и модулей:
* express - фреймворк для языка JavaScript
* redis - модуль, работающий с базой данных Redis
* fs - модуль, позволяющий работать с файловой системой сервера
* request - модуль, необходимый для осуществления отправки асинхронных запросов
* http-errors - модуль обработчика HTTP-ошибок
* path - модуль, помогающий определить путь файла в файловой системе
* cookie-parser - модуль обработчика cookie-файлов
* morgan - модуль, позволяющий осуществлять логирование и вести системный журнал, в случае неполадок и критических ошибок
* moment - модуль, предоставляющий функции для работы со временем
* graphql - модуль, предоставляющий возможность проектирования, используя архитектуру GraphQL
* express-graphql - модуль, связывающий фреймворк express и graphql
* fetch - модуль для отправки асинхронных запросов
Все вышеперечисленные можно установить по-отдельности с помощью команды:
$ npm install "имя пакета"
Также все программные зависимости можно установить одной командой. Данный процесс описан в разделе "Установка программного интерфейса на сервер".
Все вышеописанное программное обеспечение необходимо устанавливать на операционные системы семейства Linux и Windows. При использовании Windows единственным ограничением будет необходимое использование операционной системы Windows 7 или выше.
====== Установка программного интерфейса на сервер ======
===== Установка NO-SQL базы данных Redis =====
Сначала необходимо установить кэширующее средство Redis. Для этого:
- Обновим пакет apt:
$ sudo apt update
2. Установим пакет build-essential:
$ sudo apt-get install build-essential
3. Установим Redis:
$ sudo apt install redis-server
4. Перезагрузим Redis:
$ sudo systemctl restart redis.service
5. Поставим автозапуск сервера Redis при запуске сервера:
$ sudo systemctl enable redis.service
6. Проверим работу Redis:
$ redis-cli
7. Введем команду:
$ ping
В результате должно вывестись сообщение "PONG", что будет означать успешную установку Redis
===== Установка Node.js =====
1. Установим сам Node.js:
$sudo apt install nodejs
2. Установим менеджер пакетов:
$sudo apt install npm
===== Установка программных зависимостей =====
Для установки ранее описанных программных зависимостей необходимо создать файл package.json, находящийся в приложении 1 данного программного документа, после чего, поместив его в директорию проекта, ввести команду:
$npm install
Все необходимые программные зависимости установятся одной командой.
====== Настройка программного интерфейса ======
Для настройки программного интерфейса необходимо скачать архив программных документов, который находится в программном документе "Текст программы".
Необходимо перенести папку "routes" в корневую папку проекта, после чего объявить использование в основном файле проекта:
app.use('/Rest',restRouter)
app.use('/GraphQL',GraphQLRouter)
Также допустимо и отчасти рекомендуется использовать GraphQL явно, вставляя его в основной файл Express-приложения для большего быстродействия, без добавления в папку routes.
====== Проверка работоспособности ======
Для проверки работоспособности программного интерфейса необходимо проверить работоспособность интерфейсов REST и GraphQL.
Для этого необходимо отправить два запроса:
* Запрос для GraphQL-API:
http://название_домена:4000/graphql?query={calibr(time:"day",date:"2019-04-04",uname:"РОСА-П",serial:"01")}
* Запрос для REST-API:
http://название_домена:3000/api/calibr/day/2019-04-04/РОСА-П/01
В результате должны прийти идентичные данные, содержащие откалиброванную метеорологическую информацию за 2019-04-04 с прибора "РОСА-П", имеющего серийный номер "01".
====== Сообщения системному программисту ======
^ **Сообщение** ^ **Причины** ^ **Действия системного программиста** ^
|404 Error | Сервер, на котором функционирует программный интерфейс, выключен, либо не функционирует корректно. Запрос, отправленный серверу, не соответствует языкам запросов, описанных в руководстве программиста | Проверить работоспособность сервера, при необходимости перезагрузить его. В случае, если сервер работает исправно, еще раз проверить запрос на предмет ошибок и опечаток, после чего повторить запрос. При необходимости переустановить программный интерфейс. |
|Redis connection failed | База данных Redis, необходимая для работы программного интерфейса, либо выключена, либо работает неисправно. | Проверить запущена ли база данных Redis. В случае повторного возникновения данного сообщения перезагрузить ее, или переустановить, при необходимости. |
====== Приложение 1 ======
===== Файл package.json =====
{
"name": "diplom",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"cookie-parser": "~1.4.4",
"debug": "~2.6.9",
"express": "~4.16.1",
"express-graphql": "^0.9.0",
"fetch": "^1.1.0",
"graphql": "^15.0.0",
"http-errors": "~1.6.3",
"moment": "^2.24.0",
"morgan": "~1.9.1",
"node-fetch": "^2.6.0",
"node-jq": "^1.11.0",
"pug": "2.0.0-beta11",
"redis": "^2.8.0",
"request": "^2.88.0",
}
}