Это старая версия документа!


Инструкция по установке Модуля проверки

Создано тестовое приложение в виде server.js-файла, который запускается на Node.js как веб-сервер. Исходный код находится в репозитории: https://git.hitsoft-it.com/e-dictation/rsv

Пользователь: ecopsy
Пароль: экопси_пароль

Сервер, собранный в docker-образ, имеет следующий идентификатор reg.hitsoft-it.com/e-dictation/rsv/server:latest

Чтобы получить доступ к репозиторию, необходимо авторизоваться в хранилище образов reg.hitsoft-it.com

Для этого нужно использовать команду:

docker login reg.hitsoft-it.com

Далее, ввести пароль и логин пользователя, указанные выше.

Для этого пользователя сгенерирован токен ecopsy_token, с ключом токен_ключ, поэтому авторизоваться также можно через команду:

docker login reg.hitsoft-it.com -u ecopsy_token -p токен_ключ

Для запуска можно использовать docker compose, например, такой файл docker-compose.yml

version: '2.0'
 
services:
 
  server:
    image: reg.hitsoft-it.com/e-dictation/rsv/server:latest
    restart: always
    volumes:
      - ./logs:/server/logs
    ports:
      - "8980:8080" 
    networks:
      - rsv-network
 
networks:
  rsv-network:

Вместо 8980 можно указать любой предпочтительный порт, который будет пробрасыватьcя в докер, а вместо ./logs любой относительный (относительно файла docker-compose.yml) или абсолютный путь к директории, которая будет заменять директорию с логами в докере.

После создания файла, докер контейнер можно запустить командой:

docker compose up -d

Либо можно запускать docker-контейнер обычным докером при помощи команды:

docker run -v ./logs:/server/logs -p 8980:8080 -d reg.hitsoft-it.com/e-dictation/rsv/server:latest

Затем сервер будет доступен по адресу http://localhost:8980/calcResult на сервере, где запущен docker (либо на на другом порту, на который будет заменён 8980).

Note: Полный цикл установки проверен на чистой системе Ubuntu 22.04.2 LTS, в которую был установлен только docker и его компоненты.

Создано тестовое приложение в виде server.js-файла, который запускается на Node.js как веб-сервер по адресу 0.0.0.0:8080, и реализует метод /calcResult, который принимает три параметра:
dictId — строка,
userId — строка,
text — строка.

При заданных параметрах сервер вернёт HTTP-код 200 и фиксированный (отладочный) результат в виде JSON.

Сервер может принимать как GET-запросы с параметрами в URL-е, так и POST-запросы с параметрами, закодированными в форматах multipart/form-data, application/x-www-form-urlencoded или JSON-объекта.

Если какой-то параметр пропущен, сервер выдаст ошибку.

const path = require('path'); // Модуль для работы с путями файловой системы
const fs = require('fs'); // Модуль для работы с файловой системой
const request = require('request'); // Библиотека для HTTP-запросов
const process = require('process'); // Модуль для взаимодействия с процессом Node.js
 
// URL для POST-запроса
const url = 'http://127.0.0.1:8979/calcResult';
 
// Путь к директории с текстовыми файлами
const dirpath = path.join(__dirname, '/texts')
 
// Константа для перевода секунд в наносекунды (используется с process.hrtime)
const NS_PER_SEC = 1e9;
 
// Чтение всех файлов в директории
fs.readdir(dirpath, function(err, files) {
  // Отмечаем время начала обработки всех файлов
  const allStart = process.hrtime();
 
  // Фильтруем только .txt файлы
  const txtFiles = files.filter(el => path.extname(el) === '.txt')
 
  // Рекурсивная функция для последовательной отправки POST-запросов
  function run(idx) {
    if (idx < txtFiles.length) {
      // Время начала обработки конкретного файла
      const start = process.hrtime();
 
      // POST-запрос на сервер с содержимым файла и метаданными
      request.post(
          url,
          { 
            json: { 
              returnStats: true, 
              dictId: 'v1', 
              dictSubId: 'v1_1', 
              userId: idx.toString(), 
              text: fs.readFileSync(dirpath + '/' + txtFiles[idx], {encoding:'utf8', flag:'r'}) // читаем файл
            }
          },
          function (error, response, body) {
            if (!error && response.statusCode == 200) {
              console.log(body); // выводим ответ сервера
            }
 
            // Логируем время обработки конкретного файла
            console.log('text '  + idx + ' take ' + process.hrtime(start));
 
            // Рекурсивно вызываем следующую итерацию для следующего файла
            run(idx + 1);
          }
      );
    } else {
      // Когда все файлы обработаны, выводим общее время
      const time = process.hrtime(allStart);
      const nanoTime = time[0] * NS_PER_SEC + time[1]
      console.log('All time is ' + time + ' for ' + txtFiles.length);
 
      // Выводим среднее время обработки одного файла
      if (txtFiles.length > 0) {
        console.log('Average time is ' + ((nanoTime / txtFiles.length)/NS_PER_SEC).toFixed(4));
      }
    }
  }
 
  // Запускаем рекурсивную обработку с первого файла
  run(0)
});
 
console.log(global.txtFiles)
  • /opt/bitnami/dokuwiki/data/attic/tech/customer/rsv/install.1763719377.txt.gz
  • Последнее изменение: 2025/11/21 10:02
  • dmitry_kalashnikov