====== АННОТАЦИЯ ====== В данном программном документе приведено руководство системного программиста по установке и настройке программы "Программный интерфейс взаимодействия системы отображения метеорологических данных с базой данных измерительной информации", предназначенной для передачи системе отображения метеорологической информации из базы данных. ====== Общие сведения о системе ====== Программный интерфейс входит в состав системы отображения метеорологических данных МФ МГТУ им. Н.Э. Баумана. Основные функции программного интерфейса состоят в получении, передачи и обработке метеорологической информации в формате 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", } }