.. _rest_uploader_format: Проверка форматно-логического контроля ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Проверка форматно-логического контроля включает в себя: - обязательные проверки, выполняющиеся вне зависимости от настроек модуля в синхронном режиме; - необязательные проверки, индивидуальные для каждой таблицы, которыми управляет администратор Системы, выполняющиеся в асинхронном режиме. .. tabularcolumns:: |\Y{0.3}|\Y{0.3}|\Y{0.4}| .. table:: Список реализованных проверок +---------------------------+-----------------------+---------------------------------+ | **Наименование проверки** | **Код ошибки** | **Кирилическое описание** | +===========================+=======================+=================================+ | Проверка уникальности | ``dublicate`` | Дубликат файла/группы | +---------------------------+-----------------------+---------------------------------+ | Проверка парсинга файла | ``parsingErr`` | Ошибка парсинга: *текст ошибки* | +---------------------------+-----------------------+---------------------------------+ | Проверка кодирования | ``encodingErr`` | Кодировка файла не | | | | соответствует кодировке | | | | UTF-8 | +---------------------------+-----------------------+---------------------------------+ | Проверка превышения | ``tooLargeFile`` | Слишком большой файл | | предельного размера файла | | | | (больше 512 Мб) | | | +---------------------------+-----------------------+---------------------------------+ | Проверка наличия данных | ``emptyFile`` | Пустой файл | | в файле | | | +---------------------------+-----------------------+---------------------------------+ | Проверка соответствия | ``wrongMetadata`` | Структура файла не | | заголовков инфосхеме | | соответствует схеме | +---------------------------+-----------------------+---------------------------------+ | Проверка соответствия | ``wrongFieldsCount`` | Некорректное число | | числа столбцов в строке | | столбцов в строке | +---------------------------+-----------------------+---------------------------------+ | Проверка соответствия | ``wrongFieldType`` | Значение не соответствует | | типам полей | | типу *требуемый тип* | +---------------------------+-----------------------+---------------------------------+ | Проверка уникальности | ``nonUniq`` | Значение не отвечает | | полей | | требованиям уникальности | +---------------------------+-----------------------+---------------------------------+ | Проверка регулярных | ``nonMatchRegex`` | Значение не соответствует | | выражений | | регулярному выражению | | | | *регулярное выражение* | +---------------------------+-----------------------+---------------------------------+ | Проверка соответствия | ``nonMatchConstant`` | Значение не соответствует | | условию | | условию *условие* | +---------------------------+-----------------------+---------------------------------+ | Таймаут валидации | ``validationTimeout`` | Истек таймаут валидации файла | +---------------------------+-----------------------+---------------------------------+ Синхронная проверка ФЛК ####################### .. note:: - синхронные проверки выполняются вне зависимости от настроек модуля REST-Uploader; - синхронные проверки являются блокирующими; - ошибки синхронных проверок возвращаются в теле ответа по REST-API. К синхронным проверкам относятся: - проверка соответствия инфосхеме: - проверка соответствия имен и количества полей в заголовках; - проверка типа данных; - проверка экранирования данных: проверка соответствия числа столбцов по каждой строке; - проверка соответствия файла кодировке UTF-8 , отсутствие BOM (при наличии BOM при загрузке удаляются начальные байты ``ef`` ``bb`` ``bf``); - проверка размера файла и наличия данных: - проверка предельного размера загружаемого файла 512Мб; - проверка наличия данных в файле. Асинхронная проверка ##################### .. note:: - асинхронные проверки выполняются в зависимости от настроек модуля; - проверки не являются блокирующими (поведение при их наличии определяется конфигурацией модуля); - список проверок уникален для каждой таблицы и хранится в Zookeeper в виде отдельного YAML файла. К асинхронным проверкам относятся: - проверка уникальности полей: - по сочетанию атрибутов (для комплексных ключей); - по заданному атрибуту; - сравнение значения с константой; - соответствие регулярному выражению. Для одного поля возможно создать не более одной проверки одного типа, при этом у каждого поля может быть несколько проверок разных типов. Проверка уникальности по одному или по сочетанию полей """""""""""""""""""""""""""""""""""""""""""""""""""""" Проверка уникальности проводится: - в рамках группы файлов, если заданы **headers** - для проверки в рамках группы обязательно заполнения всех полей: - ``group_id``; - ``group_file_num``; - ``group_file_count``. - при проверке в рамках группы значения ключей для проверки уникальности в рамках группы хранится в **Redis**: - по всем файлам в рамках группы при наличии групповых атрибутов - по одному файлу, при отсутствии групповых атрибутов Пример запроса для проверки уникальности по группе файлов: .. code-block:: yaml --проверка по сочетанию полей fields: id: uniq: true uniq-with: [type,region] --проверка уникальности по одному полю snils: match: "/^[-\s\d]{11}$/" uniq: true Проверка соответствия заданному значению """"""""""""""""""""""""""""""""""""""""" - проверка соответствия заданному значению проводится для каждого файла вне зависимости от наличия group_id; - проверка осуществляется для значений каждого поля в соответствии с заданным правилом; - проверка соответствия заданному значению включает в себя: - - проверку сравнения с константой (``>``, ``<``, ``>=``, ``<=``, ``=``, ``!=``); - проверку соответствия регулярному выражению (должна выполняться на основе Java Util Regexp https://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html ) Поведение в случае таймаута валидации """""""""""""""""""""""""""""""""""""" Период выполнения асинхронных проверок определяется конфигурационным параметром ``validation-timeout`` и по умолчанию составляет 60 минут. В случае, если за указанное в настройках время асинхронные проверки не были выполнены, файл удаляется из очереди с обогащением отчета о найденных ошибках ошибкой ``validationTimeout``. В случае возникновения подобной ошибки рекомендуется: - проверить регулярные выражения, по которым происходит проверка, так как неверно заданное регулярное выражение кратно увеличивает скорость проверки; - увеличить значение ``validation-timeout`` и повторить загрузку данных. Статусная модель ################ .. table:: Статусная модель +------------+-------------------------------------+----------------------------------------------------------------------------------------+ | **Статус** | **Наименование** | **Описание статусов** | +============+=====================================+========================================================================================+ | -1 | Загрузка данных в буффер | Получение данных от клиента и загрузка их на сервер | +------------+-------------------------------------+----------------------------------------------------------------------------------------+ | 0 | Запрос буфферизирован | Загружаемые данные, получены сервером и находятся в очереди на обработку | +------------+-------------------------------------+----------------------------------------------------------------------------------------+ | 1 | Ожидает открытия дельты | Загружаемые данные находятся на сервере и ожидают открытия дельты в сервисе Prostore | +------------+-------------------------------------+----------------------------------------------------------------------------------------+ | 2 | В обработке (модулем DATA-Uploader) | Выполняется загрузка данных в Prostore модулями Витрины | +------------+-------------------------------------+----------------------------------------------------------------------------------------+ | 3 | Успешно обработан | Данные успешно загружены | +------------+-------------------------------------+----------------------------------------------------------------------------------------+ | 4 | Ошибка обработки запроса | В процессе загрузки данных возникла ошибка | +------------+-------------------------------------+----------------------------------------------------------------------------------------+ | 5 | Идентификатор запроса не обнаружен | Запрошен статус по неизвестному идентификатору запроса | +------------+-------------------------------------+----------------------------------------------------------------------------------------+ | 6 | Форматно-логический контроль | Выполняется форматно-логический контроль загружаемых данных | +------------+-------------------------------------+----------------------------------------------------------------------------------------+ | 7 | Ошибки ФЛК | В процессе выполнения форматно-логического контроля загружаемых данных возникли ошибки.| | | | | | | | При возникновении ошибки можно выполнить GET запрос ``requests/{request_id}/report/`` | +------------+-------------------------------------+----------------------------------------------------------------------------------------+