Инструменты пользователя

Инструменты сайта


doc:1605:643.mgul.21010-10_13_01

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


Программные зависимости

  • express - фреймворк web-приложений для Node.js
  • ioredis - библиотека для эффективной работы с Redis
  • fs - библиотека для работы с файловой системой (является частью Node.js)
  • moment - библиотека для работы с датами и временем
  • request - библиотека для выполнения HTTP-запросов в Node.js

Функции в коде

Название функции Назначение
getCalibrationNameAndSerial(calibrationData) функция возвращает имена приборов и их серийные номера, в случае, если для них есть калибровочные коэффициенты
readAndParseCalibrationFile(file) асинхронная функция предназначена для чтения и парсинга JSON-файла с данными о калибровке.
getCalibrationSensorNames(calibrationData) функция возвращает массив с названиями сенсоров для калибровки
getAllRedisKeys() асинхронная функция для получения всех ключей из Redis
getNecessaryKeys(startDate, endDate, keysArray) функция выполняет фильтрацию массива ключей (keysArray) на основе заданного временного диапазона
checkDateRangeInRedis(formattedStartDate, formattedEndDate, keysArray) функция проверяет, находится ли заданный временной диапазон внутри или частично пересекается с временным диапазоном, представленным в массиве keysArray
sortRedisKeys(keysArray) функция для сортировки массива ключей Redis
sortedAndFilteredKeys(formattedStartDate, formattedEndDate) асинхронная функция для получения отсортированных и отфильтрованных ключей из Redis
updateDataInRedis(url) асинхронная функция для добавления данных в Redis
processAndAggregateLastMeasurements(respondParsed, keysArray) функция для обработки данных (для запросов last_measurements)
processAndAggregateResponsesList(respondParsed, keysArray) функция для обработки данных (для запросов list)
downloadPage(url) асинхронная функция выполняет запрос по указанному URL и возвращает ответ
requestAdditionalDataIfMissing(formattedStartDate, formattedEndDate, filteredKeys) асинхронная функция для дозапроса данных
respondToDataQuery(keys) функция предназначена для получения значений по заданным ключам
respondToDataQueryParsed(keys) функция предназначена для получения значений по заданным ключам
applyCalibrationsToData(calibrationData, filteredResponse) функция выполняет калибровку данных

Дополнительные объяснения по функциям

updateDataInRedis(url)

Загружаем данные из внешнего источника

  const databaseResponse = await downloadPage(url);
  const keys = Object.keys(databaseResponse);

Объявляем конвейеры

  const existsPipeline = redis.pipeline();
  const updatePipeline = redis.pipeline();

Добавляем в конвейер команду проверки на существования в Redis для каждого ключа

  for (const key of keys) {
      const currentDate = databaseResponse[key].Date;
      existsPipeline.exists(currentDate);
  }

Запускаем конвейер и ждём результат

  const existsResults = await existsPipeline.exec();

Добавляем данные для отсутствующих ключей

  for (let i = 0; i < keys.length; i++) {
      const key = keys[i];
      const currentDate = databaseResponse[key].Date;
      const keyExistsInRedis = existsResults[i][1] === 1;
      if (!keyExistsInRedis) {
          const newDataArray = JSON.stringify(databaseResponse[key]);
          updatePipeline.set(currentDate, newDataArray, 'EX', REDIS_EXPIRY_SECONDS);
      }
  }

Запускаем конвейер и ждём результат

  await updatePipeline.exec();
doc/1605/643.mgul.21010-10_13_01.1704367053.txt.gz · Последние изменения: 2024/01/04 14:17 — aminaraon