Продукты и услуги Информационно-правовое обеспечение ПРАЙМ Документы ленты ПРАЙМ Проект Приказа Министерства цифрового развития, связи и массовых коммуникаций РФ "Об утверждении требований к вычислительной мощности, используемой провайдером хостинга, для проведения уполномоченными государственными органами, осуществляющими оперативно-разыскную деятельность или обеспечение безопасности Российской Федерации, мероприятий в целях реализации возложенных на них задач" (подготовлен Минцифры России 14.09.2023)

Обзор документа

Проект Приказа Министерства цифрового развития, связи и массовых коммуникаций РФ "Об утверждении требований к вычислительной мощности, используемой провайдером хостинга, для проведения уполномоченными государственными органами, осуществляющими оперативно-разыскную деятельность или обеспечение безопасности Российской Федерации, мероприятий в целях реализации возложенных на них задач" (подготовлен Минцифры России 14.09.2023)

Досье на проект

Пояснительная записка

В соответствии с частью 3 статьи 10 2-1 Федерального закона "Об информации, информационных технологиях и о защите информации", пунктом 1 и подпунктом 5.2.55(2) пункта 5 Положения о Министерстве цифрового развития, связи и массовых коммуникаций Российской Федерации, утвержденного постановлением Правительства Российской Федерации от 2 июня 2008 г. N 418, приказываю:

1. Утвердить прилагаемые требования к вычислительной мощности, используемой провайдером хостинга, для проведения уполномоченными государственными органами, осуществляющими оперативно-разыскную деятельность или обеспечение безопасности Российской Федерации, мероприятий в целях реализации возложенных на них задач.

2. Настоящий приказ вступает в силу с 1 декабря 2023 г.

Министр М.И. Шадаев

УТВЕРЖДЕНЫ
приказом Министерства
цифрового развития, связи
и массовых коммуникаций
Российской Федерации
от ______ N _________

ТРЕБОВАНИЯ
к вычислительной мощности, используемой провайдером хостинга, для проведения уполномоченными государственными органами, осуществляющими оперативно-розыскную деятельность или обеспечение безопасности Российской Федерации, мероприятий в целях реализации возложенных на них задач.

I. Общие положения

1. Требования к вычислительной мощности, используемой провайдером хостинга, для обеспечения выполнения установленных действий при проведении оперативно-розыскных мероприятий (далее соответственно - требования, ОРМ), разработаны в целях обеспечения устойчивого, безопасного и целостного функционирования на территории Российской Федерации информационно-телекоммуникационной сети "Интернет", а также создания условий для выполнения уполномоченными государственными органами, осуществляющими оперативно-розыскную деятельность (далее - уполномоченные государственные органы), возложенных на них задач с использованием технических средств ОРМ (далее - ТС ОРМ).

II. Общие требования к ТС ОРМ

2. Состав и построение ТС ОРМ определяются особенностями построения информационных систем провайдеров хостинга (далее - ИС), перечнем предоставляемых информационных услуг и коммуникационных интернет-сервисов.

3. При реализации ТС ОРМ должен быть использован один из вариантов их построения:

а) отдельный аппаратно-программный комплекс;

б) отдельный программный модуль в ИС;

в) комбинированный вариант, предусматривающий совместное использование элементов в соответствии с подпунктами "а" и "б" настоящего пункта.

4. Для каждого варианта построения должны обеспечиваться требования по информационной безопасности, согласованные с уполномоченным подразделением органа федеральной службы безопасности, а также защита от несанкционированного доступа к информации, связанной с проведением ОРМ, в соответствии с подпунктами "з" и "и" пункта 18 настоящих требований.

5. ТС ОРМ должны быть частью вычислительной мощности, используемой провайдером хостинга.

III. Функциональные требования к ТС ОРМ

6. ТС ОРМ должны осуществлять поиск, обработку и передачу на пульт управления уполномоченного государственного органа (далее - ПУ) по его запросу или в автоматическом режиме информацию, хранящуюся в ИС и обрабатываемую с использованием вычислительной мощности провайдера хостинга.

7. Перечень доступной для поиска информации, хранящейся в ИС и обрабатываемой с использованием ТС ОРМ (см. приложение N 1 к настоящим требованиям) провайдера хостинга, и схема ее представления (см. приложение N 3 к настоящим требованиям) должны согласовываться с уполномоченным подразделением органа федеральной службы безопасности. Мероприятия по согласованию должны включаться в план мероприятий по внедрению ТС ОРМ в информационную систему провайдера хостинга.

8. Взаимодействие ТС ОРМ с ПУ должно осуществляться по единому каналу передачи данных.

9. Суммарная пропускная способность канала передачи данных между ТС ОРМ и ПУ должна соответствовать данным, приведенным в таблице N 1.

Таблица N 1.

N п/п Среднесуточный объем новых данных, поступающих в ИС, Гбайт Суммарная пропускная способность каналов передачи данных между ТС ОРМ и ПУ, не менее Мбит/с
1 <1 10
2 1 - 10 50
3 10 - 100 100
4 100 - 500 500
5 500 - 1000 800
6 1000 - 10000 1000
7 >10000 10000

10. Требования предъявляемые к ТС ОРМ в части обработки информации хранение, которой осуществляется в информационной системе провайдера хостинга приведены в приложении N 1 к настоящим требованиям.

11. Требования, предъявляемые к интерфейсу взаимодействия между ПУ и ТС ОРМ, приведены в приложении N 2 к настоящим требованиям.

12. Требования к схеме представления информации, хранящейся в ИС (далее - схема данных), и выполнению запросов от ПУ приведены в приложении N 3 к настоящим требованиям.

13. Перечень базовых типов для описания схемы данных приведен в приложении N 4 к настоящим требованиям.

14. Перечень сервисных типов для описания схемы данных приведен в приложении N 5 к настоящим требованиям.

15. Перечень входных объектов для задания параметров поиска приведен в приложении N 6 к настоящим требованиям.

16. Требования, предъявляемые к формату передачи данных на языке GraphQL по протоколу WebSocket, приведены в приложении N 7 к настоящим требованиям.

17. Требования, предъявляемые к запросам о текущей конфигурации оборудования, системного и прикладного программного обеспечения (далее - ПО) ТС ОРМ, а также их состоянии, приведены в приложении N 8 к настоящим требованиям.

18. ТС ОРМ должны обеспечивать:

a) подключение к ПУ в соответствии техническими условиями, согласованными с уполномоченным подразделением органа федеральной службы безопасности;

б) реализацию протокола взаимодействия ТС ОРМ с ПУ в соответствии с приложением N 2 к настоящим требованиям;

в) прием от ПУ поисковых запросов;

г) поиск информации, хранящейся в ИС, в соответствии с поступившими с ПУ поисковыми запросами;

д) передачу на ПУ от ТС ОРМ данных в соответствии с поступившими с ПУ поисковыми запросами;

е) прием от ПУ критериев поиска и передачу на ПУ статистической, текстовой, мультимедийной, звуковой, графической и иной информации в исходном (декодированном) виде, хранящейся в ИС и отбираемой по критериям поиска, без дополнительной обработки (далее - неформатированные данные);

ж) передачу на ПУ схемы данных, в соответствии с поступившим с ПУ специальным запросом (см. приложение N 5 к настоящим требованиям);

з) защиту от несанкционированного доступа со стороны производителей ТС ОРМ, неавторизованных пользователей, технического персонала, третьих лиц как к хранящейся в ТС ОРМ информации, так и информации, непосредственно связанной с проведением ОРМ (информации, поступающей в ТС ОРМ с ПУ, и информации, подготовленной к передаче из ТС ОРМ в ПУ);

и) информирование ПУ о следующих попытках несанкционированного доступа:

1) для варианта исполнения ТС ОРМ в виде отдельного аппаратно-программного комплекса:

доступ к данным, связанным с проведением ОРМ, с использованием команд или сервисных программ;

резервное копирование данных, связанных с проведением ОРМ;

доступ к ТС ОРМ через интерфейсы, не предусмотренные для доступа к ним;

вскрытие корпуса технических средств ОРМ;

2) для варианта исполнения ТС ОРМ в виде отдельного программного модуля в ИС:

доступ к данным, связанным с проведением ОРМ, с использованием команд или сервисных программ;

резервное копирование данных, связанных с проведением ОРМ;

3) для комбинированного варианта исполнения ТС ОРМ:

доступ к данным, связанным с проведением ОРМ, с использованием команд или сервисных программ;

резервное копирование данных, связанных с проведением ОРМ;

доступ к ТС ОРМ через интерфейсы, не предусмотренные для доступа к ним;

вскрытие корпуса технических средств ОРМ;

к) контроль работоспособности и загруженности ТС ОРМ;

л) контроль за соблюдением предоставленных прав доступа к хранящейся в ТС ОРМ информации;

м) круглосуточный удаленный доступ со стороны операторов ПУ к хранящейся в ИС информации по протоколу взаимодействия ПУ и ТС ОРМ, описанному в приложении N 2 к настоящим требованиям;

о) ведение в автоматическом режиме системных журналов, содержащих информацию о работе ТС ОРМ, а также связанных с проведением ОРМ данных:

о сеансах связи с ПУ, а также о попытках установления таких сеансов;

о поисковых запросах;

об ответах на поисковые запросы и;

о текущей конфигурации ТС ОРМ, системного и прикладного ПО;

об изменениях в конфигурации ТС ОРМ, системного и прикладного ПО;

о сбоях в ТС ОРМ, системном и прикладном ПО;

об изменениях схемы данных;

об обращении и доступе обслуживающего технического персонала к ТС ОРМ;

п) доступ уполномоченного технического персонала для обслуживания ТС ОРМ в соответствии с установленными правами доступа;

р) доступ технического персонала к системным файлам и ПО, в соответствии с правами, установленными парольной системой доступа;

с) сохранность и доступность для дальнейшего использования ранее накопленных данных при модернизации ТС ОРМ;

т) автоматическое определение способа выполнения поисковых запросов (в режиме реального времени или в отложенном режиме, см. п. 20 приложения N 2 к настоящим требованиям), поступивших с ПУ, в соответствии с заданными временными параметрами.

19. Функционирование ТС ОРМ не должно оказывать влияние на работоспособность ИС провайдера хостинга.

20. ТС ОРМ не должны иметь иных интерфейсов взаимодействия кроме интерфейсов взаимодействия с ИС и ПУ.

IV. Требования, предъявляемые к ТС ОРМ в части обеспечения временных характеристик обработки запроса и поиска информации

21. Максимальное время предварительной обработки информации с момента ее поступления в ТС ОРМ до момента, когда она становится доступной для выполнения поисковых запросов с ПУ, и максимальное время выполнения поисковых запросов определяется в ходе внедрения ТС ОРМ в информационную систему провайдера хостинга. Также должны быть установлены временные параметры для определения способа выполнения поисковых запросов (в режиме реального времени или в отложенном режиме, см. п. 20 приложения N 2 к настоящим требованиям). Мероприятие по определению указанных временных параметров должно включаться в план мероприятий по внедрению ТС ОРМ и согласовываться с уполномоченным государственным органом.

22. Временные параметры, указанные в п. 21 настоящих требований, могут корректироваться во время эксплуатации ТС ОРМ по согласованию с уполномоченным государственным органом.

Приложение N 1
к Требованиям к вычислительным мощностям, используемым провайдером
хостинга, для проведения уполномоченными государственными органами,
осуществляющими оперативно-розыскную деятельность или обеспечение безопасности
Российской Федерации, мероприятий в целях реализации возложенных на них задач
от __.__.______ N ______

Требования, предъявляемые к ТС ОРМ в части обработки информации хранение, которой осуществляется в информационной системе провайдера хостинга

1. ТС ОРМ должны обрабатывать следующую информацию:

1.1 сведения о пользователях и регистрационных данных, в том числе регистрационных и иных данных, изменениях и дополнениях регистрационных данных, внесенных пользователем:

1) сведения о пользователе, включая идентификатор пользователя в ИС провайдера хостинга;

2) сведения регистрационных данных:

информация о сетевом адресе, с которого осуществлена регистрация пользователя, с указанием времени регистрации;

информация, которая должна вноситься в ИС провайдера хостинга при регистрации пользователя:

а) дата и время регистрации пользователя;

б) номер договора, дата и время заключения договора на обслуживание пользователя провайдером хостинга (при наличии такой информации);

информация, внесенная пользователем (при наличии):

а) фамилия, имя, отчество;

б) псевдоним пользователя;

в) дата рождения;

г) адрес места жительства;

д) реквизиты документа, удостоверяющего личность;

е) внесенные пользователем принадлежащие ему идентификаторы в других средствах электронного взаимодействия, в том числе наименование сервиса и идентификатор;

дата и время последнего обновления пользователем регистрационной информации;

дата и время прекращения регистрации пользователя в ИС провайдера хостинга;

дополнительная информация о пользователе, фиксируемая ИС провайдера хостинга;

1.2 сведения о добавлении (исключении) зарегистрированным пользователем связанных с ним других зарегистрированных идентификаторов:

дата и время;

наименование сервиса и идентификатор;

1.3 сведения о фактах авторизации и выхода из ИС провайдера хостинга, прекращениях регистрации:

дата и время;

идентификатор пользователя ИС провайдера хостинга;

технические идентификаторы пользователя ИС провайдера хостинга, переданные в ИС провайдера хостинга в силу используемых коммуникационных протоколов:

IP-адрес и порт;

номера телефонов пользователя, являющегося абонентом (пользователем) услуг подвижной радиотелефонной связи;

адрес электронной почты;

наименование программы клиента (текстовая строка в произвольном виде, содержащая сведения о наименовании программы, версии, дате обновления, а также иные регистрируемые сведения при передаче);

иная фиксируемая техническая информация;

вид события;

1.4 информацию в ИС провайдера хостинга классифицирующую:

а) виды информационных сервисов, предоставляемых хостинг провайдером для пользователей;

б) виды событий, регистрируемых ИС провайдера хостинга при взаимодействии ИС провайдера хостинга с пользователем;

в) типы информационных ресурсов, создаваемых пользователями в ИС провайдера хостинга;

г) типы пользователей, обслуживаемых ИС провайдера хостинга;

д) виды платежных услуг (платежных сервисов), используемых хостинг провайдером;

1.5 информация, фиксируемая в ИС провайдера хостинга об оказанных пользователям услугах:

а) идентификатор пользователя ИС провайдера хостинга;

б) дата и время;

в) описание оказанной услуги;

г) техническая информация, связанная с оказанной услугой;

д) иная фиксируемая информация о оказанной услуге;

1.6 информацию о фактах взаимодействия пользователей сети "Интернет" с информационными ресурсами, созданными в ИС провайдера хостинга пользователями провайдера хостинга;

1.7 информацию о фактах приема, передачи и (или) обработки голосовой информации, текстовых сообщений, изображений, звуков, видео- или иных электронных сообщений пользователей ИС провайдеров хостинга, фиксируемая информация об организации приема, передачи, доставки и (или) обработки электронных сообщений, осуществляемых с использованием технологий электронных платежных систем, в том числе информация о произведенных денежных операциях (с указанием информации о корреспонденте - идентификаторе платежной системы, валюты, суммы, оплачиваемой услуги или товаров (при наличии), об иных данных, указанных при проведении денежной операции), осуществленных транзакциях (с указанием идентификатора платежной системы, суммы прихода либо расхода, иных данных, указанных при осуществлении транзакции):

а) дата и время события;

в) идентификатор пользователя ИС провайдера хостинга;

г) технические идентификаторы пользователя ИС провайдера хостинга переданные в ИС в силу используемых коммуникационных протоколов:

IP-адрес и порт;

номер телефона (MSISDN) подвижной станции пользователя;

адрес электронной почты;

наименование программы клиента;

иная фиксируемая техническая информация;

д) вид события;

ж) местоположение пользователя в случае его фиксации ИС провайдера хостинга (широта/долгота, иное описание местоположения);

з) текст сообщения и иная служебная коммуникационная информации;

и) техническая информация о платеже:

вид платежной услуги (платежного сервиса);

идентификатор платежа в сервисе;

иная фиксируемая информация о платеже.

.

Приложение N 2
к Требованиям к вычислительным мощностям, используемым провайдером
хостинга, для проведения уполномоченными государственными органами,
осуществляющими оперативно-розыскную деятельность или обеспечение безопасности
Российской Федерации, мероприятий в целях реализации возложенных на них задач
от __.__.______ N ______

Требования, предъявляемые к интерфейсу взаимодействия между ПУ и ТС ОРМ

1. ТС ОРМ подключаются к ПУ в точках подключения выделенными каналами связи.

2. В качестве набора протоколов передачи данных следует использовать набор протоколов TCP/IP.

3. Для организации линий (каналов) связи, соединяющих ТС ОРМ и ПУ, должен быть использован сетевой интерфейс первого уровня.

4. ТС ОРМ должны предусматривать возможность создания виртуальной сети VPN (Virtual Private Network) для туннелирования всего рабочего TCP/IP трафика между ТС ОРМ и ПУ.

5. Взаимодействие ТС ОРМ с оборудованием ПУ на транспортном уровне должен осуществляться по схеме "клиент - сервер":

1) в качестве "сервера" выступают ТС ОРМ;

2) в качестве "клиента" выступает оборудование ПУ.

6. Защита линий (каналов) связи должна осуществляться с использованием сертифицированных средств криптографической защиты информации. Соединение ПУ и ТС ОРМ должно устанавливаться по протоколу TLS версии 1.2 или 1.3 в соответствии с рекомендациями по стандартизации Р 1323565.1.020-2018 "Информационная технология. Криптографическая защита информации. Использование российских криптографических алгоритмов в протоколе безопасности транспортного уровня (TLS 1.2)" или Р 1323565.1.030-2018 "Информационная технология. Криптографическая защита информации. Использование российских криптографических алгоритмов в протоколе безопасности транспортного уровня (TLS 1.3)". При установлении соединения ПУ и ТС ОРМ должны осуществлять взаимную аутентификацию. В случае невозможности аутентифицировать одну из сторон TCP-соединение разрывается. Для аутентификации ПУ и ТС ОРМ используются сертификаты в формате Х.509. Для аутентификации ПУ на разных ТС ОРМ должны быть созданы и использоваться разные сертификаты.

7. Взаимодействие ТС ОРМ с ПУ должно осуществляться по единому каналу передачи данных, предназначенному для передачи:

1) от ПУ в ТС ОРМ поисковых запросов;

2) от ТС ОРМ на ПУ результатов выполнения поисковых запросов;

3) от ПУ в ТС ОРМ запросов на получение неформатированных данных (далее - запросы неформатированных данных);

4) от ТС ОРМ на ПУ ответов на запросы неформатированных данных;

5) от ПУ в ТС ОРМ специальных запросов (см. приложение N 5 к настоящим требованиям) для получения схемы данных, статуса поисковых запросов в отложенном режиме (см. п. 20 настоящего приложения) и сигналов о функционировании ТС ОРМ (см. п. 25 настоящего приложения);

6) от ТС ОРМ на ПУ текущей схемы данных, статуса поисковых запросов в отложенном режиме и сигналов о функционировании ТС ОРМ;

7) от ПУ в ТС ОРМ запросов о текущей конфигурации оборудования, системного и прикладного ПО ТС ОРМ , а также их состоянии (далее - запросы мониторинга);

8) от ТС ОРМ на ПУ ответов на запросы мониторинга.

8. Единый канал передачи данных создается для подключения к ТС ОРМ в виде TCP-соединений. Номер порта может передаваться на ПУ на внешних носителях (по умолчанию - 443). Посредством ТС ОРМ выполняется мониторинг данного порта для создания TCP-соединений с ПУ.

9. ПУ должен осуществлять попытки установления подключения к ТС ОРМ в соответствии с задаваемым интервалом по предоставленному ТС ОРМ ТСР-порту.

10. Обмен данными в едином канале передачи данных на прикладном уровне должен осуществляться по протоколам HTTP 1.1 и WebSocket.

11. ТС ОРМ должны реализовывать четыре конечные точки (endpoints):

1) "/query" - предназначена для получения от ПУ поисковых запросов и специальных запросов (см. приложение N 5 к настоящим требованиям) для получения схемы данных, управления поисковыми запросами в отложенном режиме, а также передачи на ПУ результатов выполнения данных запросов в режиме реального времени (см. п. 20 настоящего приложения).

2) "/subscription" - предназначена для получения от ПУ статуса выполнения поисковых запросов ТС ОРМ, которые выполняются в отложенном режиме (см. п. 20 настоящего приложения) и сигналов о функционировании ТС ОРМ (см. п. 25 настоящего приложения).

3) "/download" - предназначена для получения от ПУ запросов неформатированных данных и передачи на ПУ результатов выполнения данных запросов.

4) "/metric" - предназначена для получения от ПУ запросов мониторинга и передачи на ПУ результатов выполнения данных запросов.

12. Обмен данными для конечных точек "/query", "/download" и "/metric" должен осуществляться по протоколу HTTP 1.1, для конечной точки "/subscription" - по протоколу WebSocket. ПУ и ТС ОРМ для конечной точки "/subscription" должны поддерживать сетевое соединение с помощью механизмов протокола WebSocket.

13. Для запросов ПУ и ответов ТС ОРМ для конечных точек "/query" и "/subscription" должен использоваться язык описания данных и запросов GraphQL в спецификации от 06 октября 2021 г. Для кодирования содержимого запросов и ответов должен применяться формат JSON*(1).

14. Требования, предъявляемые к формату передачи данных на языке GraphQL по протоколу WebSocket для конечной точки "/subscription", приведены в приложении N 6 к настоящим требованиям.

15. Требования, предъявляемые к формату передачи данных для конечной точки "/metric", приведены в приложении N 8 к настоящим требованиям.

16. Для запросов ПУ и ответов ТС ОРМ для конечной точки "/download" должны использоваться стандартные сообщения протокола HTTP 1.1. ТС ОРМ для данной конечной точки должны поддерживать механизм передачи данных по частям (Chunked Transfer Coding)*(2) и механизм частичных запросов (Range Requests)*(3).

17. Если результаты выполнения поисковых запросов для конечных точек "/query" и "/subscription" содержат неформатированные данные (файлы), то ответ ТС ОРМ должен содержать вместо непосредственно неформатированных данных (файлов) соответствующие ссылки (HTTP URI в полном формате согласно RFC7230 http(s)://<IP-адрес или доменное имя ТС ОРМ >:<порт>/download/<уникальный путь к файлу>) для каждого файла для конечной точки "/download". ТС ОРМ должны формировать уникальную ссылку для каждого файла.

18. Для получения неформатированных данных, ссылки на которые содержатся в ответе ТС ОРМ на поисковый запрос, ПУ для каждого файла должен направлять на конечную точку "/download" отдельные (от поисковых запросов) запросы получения неформатированных данных (HTTP GET-запросы) в ТС ОРМ , содержащие ссылку на запрашиваемые данные.

19. Для получения текущей схемы данных (см. приложение N 3 к настоящим требованиям) ПУ необходимо направить специальный запрос "_service" (см. приложение N 5 к настоящим требованиями) на конечную точку "/query". В ответ ТС ОРМ должны направить схему данных, описанную на языке SDL GraphQL.

20. Поисковые запросы должны выполняться в ТС ОРМ в двух режимах: режиме реального времени и отложенном режиме (далее - отложенный поисковый запрос). Режим выполнения поисковых запросов определяется ТС ОРМ в соответствии с установленными временными параметрами согласно п. 21 настоящих требований, а также с учетом характера (количества запрашиваемых полей и критериев поиска) запроса, количества данных, хранящихся в ИС, и производительностью ТС ОРМ . Изначально все поисковые запросы от ПУ должны направляться на конечную точку "/query".

21. В режиме реального времени ТС ОРМ должны поддерживать (не разрывать) сетевое соединение, по которому поступил запрос от ПУ, и результаты выполнения запроса должны передаваться от ТС ОРМ на ПУ по тому же сетевому соединению, не позднее установленных временных параметров согласно п. 21 настоящих требований.

22. Отложенный поисковый запрос выполняется по следующему сценарию:

1) ПУ направляет поисковый запрос ТС ОРМ на конечную точку "/query".

2) ТС ОРМ принимают решение о выполнении запроса в отложенном режиме.

3) ТС ОРМ назначают поисковому запросу уникальный в рамках данной ТС ОРМ идентификатор.

4) ТС ОРМ возвращают ПУ идентификатор отложенного поискового запроса и информацию о том, что запрос выполняется в отложенном режиме.

5) ПУ отправляет запрос "_statusOfflineRequest" (запрос Subscription языка GraphQL), содержащий полученный от ТС ОРМ идентификатор отложенного поискового запроса, на конечную точку "/subscription" по протоколу WebSocket (см. приложение N 5 к настоящим требованиями). ТС ОРМ в непрерывном режиме (без дополнительных запросов от ПУ) уведомляют ПУ об изменениях статуса выполнения отложенного поискового запроса. Возможные статусы выполнения отложенного запроса:

- NOTSTARTED - запрос получен, но не запущен на выполнение;

- RUNNING - запрос получен и в настоящее время выполняется;

- READY - выполнение запроса завершено, результирующие данные готовы;

- ABORTED - выполнение запроса прервано (на стороне сервера - ТС ОРМ);

- CANCELED - запрос отменен клиентом (ПУ).

6) Когда ПУ получает от ТС ОРМ уведомление о завершении выполнения отложенного поискового запроса (статус "READY"), то ПУ направляет специальный запрос "_getOfflineRequest" (см. приложение N 5 к настоящим требованиями) на конечную точку "/query" с указанием идентификатора запроса.

7) В ответ на полученный специальный запрос ТС ОРМ начинают передавать на ПУ результаты выполнения отложенного поискового запроса в режиме реального времени в форматe JSON*(4).

8) В момент выполнения отложенного запроса (от момента получения идентификатора запроса от ТС ОРМ до получения статуса выполнения запроса "READY") ПУ может прервать данную операцию, направив специальный запрос "_cancelOfflineRequest" (см. приложение N 5 к настоящим требованиями) на конечную точку "/query" с указанием идентификатора запроса. В ответ ТС ОРМ должны направить результат выполнения данного специального запроса.

9) Для удаления результатов выполнения отложенного поискового запроса на ТС ОРМ, ПУ необходимо направить специальный запрос "_delOfflineRequest" (см. приложение N 5 к настоящим требованиями) на конечную точку "/query" с указанием идентификатора запроса. В ответ ТС ОРМ должны направить результат выполнения данного специального запроса.

23. ТС ОРМ должны обеспечивать контроль функционирования собственных параметров и передачу на ПУ следующих сигналов:

1) "Перезапуск ПО" (RESTARTDB);

2) "Попытка несанкционированного доступа" (UNAUTHORIZEDACCESS);

3) "Критическая ошибка ПО, потеря данных, дальнейшая работа невозможна" (CRITICALERROR);

4) "Серьезная ошибка ПО, потеря данных, но дальнейшая работа возможна" (MAJORERROR);

5) "Незначительная ошибка ПО, данные не потеряны, дальнейшая работа возможна" (MINORERROR);

6) "Изменение схемы данных" (SCHEMACHANGED);

7) "Предупреждение о проблеме с контролируемыми параметрами (метриками)" (METRICALERTS). Для данного сигнала ТС ОРМ должны возвращать дополнительную информацию о предупреждениях (см. приложение N 5 к настоящим требованиями). Список контролируемых метрик и предупреждений о проблемах с ними определяется разработчиком ТС ОРМ и согласовывается с уполномоченным государственным органом.

Для получения сигналов ПУ необходимо отправить специальный запрос "_trap" (запрос Subscription языка GraphQL) на конечную точку "/subscription" по протоколу WebSocket (см. приложение N 5 к настоящим требованиями). ТС ОРМ в непрерывном режиме (без дополнительных запросов от ПУ) отправляет ПУ сигналы сразу после их возникновения на ТС ОРМ. Если в момент получения специального запроса "_trap" на ТС ОРМ есть сигналы, которые не были отправлены ранее ПУ (по причине разрыва соединения или по иным причинам), то ТС ОРМ должны сразу передать на ПУ все данные сигналы.

24. Все запросы мониторинга и неформатированных данных должны выполняться в режиме реального времени.

Приложение N 3
к Требованиям к вычислительным мощностям, используемым провайдером
хостинга, для проведения уполномоченными государственными органами,
осуществляющими оперативно-розыскную деятельность или обеспечение безопасности
Российской Федерации, мероприятий в целях реализации возложенных на них задач
от __.__.______ N ______

Требования, предъявляемые к схеме данных ТС ОРМ и выполнению запросов от ПУ

1. Данные, хранящиеся в ИС, должны быть описаны с помощью схемы данных на языке SDL GraphQL.

2. Схема данных должна полностью описывать данные, хранящиеся в ИС.

3. Произвольный тип "А" в схеме данных имеет связь с произвольным типом "В", если тип "А" содержит поле типа "В" или поле, являющееся списком типа "В".

4. Произвольный тип "А" в схеме данных имеет двухстороннюю связь с произвольным типом "В", если тип "А" связан с типом "В" и тип "В" связан с типом "А".

5. Для схемы данных определяется перечень базовых типов. Базовым типом называется тип данных на языке GraphQL, содержащий информацию, которая может быть доступна для поиска в ТС ОРМ по запросам ПУ. Перечень базовых типов отражает перечень идентифицирующих признаков объектов физического мира (например, номер паспорта, номер телефона, банковские реквизиты, государственный регистрационный номер транспортного средства и т. д.). Перечень базовых типов и их определения на языке GraphQL приведены в приложении N 4 к настоящим требованиям.

6. Для схемы данных определяется перечень сервисных типов. Сервисным типом называется тип данных на языке GraphQL, отражающий информацию о схеме данных, или описывающий HTTP URI для неформатированных данных, или предназначенный для получения статуса отложенных поисковых запросов или сигналов о функционировании ТС ОРМ. Перечень сервисных типов, их определения и запросы для доступа к информации на языке GraphQL приведены в приложении N 4 к настоящим требованиям.

7. Пользовательским типом называется тип данных на языке GraphQL, не являющийся базовым, сервисным типом или встроенным (build-in) типом языка GraphQL. Пользовательские типы предназначены для описания данных, содержащихся в ИС и отличных от данных, описываемых базовыми типами. Требования к пользовательским типам определены в пункте 8 настоящего приложения.

8. Схема данных в части базовых, пользовательских и сервисных типов должна удовлетворять следующим требованиям:

1) Каждое поле пользовательского типа, которое отражает идентифицирующий признак объекта физического мира и будет доступно в качестве критерия поиска в ТС ОРМ по запросам ПУ, должно представляться базовым типом (или его списком).

2) Поля пользовательского типа, которые представляют собой ссылки (HTTP URI) на неформатированные данные (файлы), должны представляться сервисным типом "Media", определенным в приложении N 5 к настоящим требованиям.

3) Остальные поля пользовательских типов (т. е. за исключением указанных в подпунктах 1 и 2 настоящего пункта) должны представляться встроенными типами языка GraphQL или любыми другими пользовательскими типами, определенными в схеме данных.

4) Для каждого пользовательского типа, имеющего хотя бы одно поле базового типа, или связанного с другим пользовательским типом, имеющим хотя бы одно поле базового типа, должен быть определен входной объект языка GraphQL для задания параметров поиска (далее - входной объект 1-к-1). Для описания данных входных объектов разрешается использовать встроенные типы языка GraphQL.

5) Каждый входной объект 1-к-1 должен иметь следующую структуру:

Имя поля Тип поля
and список исходных входных объектов 1-к-1
or список исходных входных объектов 1-к-1
not исходный входной объект 1-к-1
все имена полей пользовательского типа, представленные базовыми типами соответствующие входные объекты 1-к-1 для базовых типов, определенные в приложении N 6 к настоящим требованиям. Если поле пользовательского типа представлено списком базового типа, то должен использоваться соответствующий входной объект 1-ко-многим для базового типа, содержащий в своем имени слово "Many"
все имена полей пользовательского типа, представленные другими пользовательскими типами, имеющими хотя бы одно поле базового типа входной объект 1-к-1 соответствующий другому пользовательскому типу. Если поле исходного пользовательского типа представлено списком другого пользовательского типа, то должен использоваться соответствующий входной объект 1-ко-многим (см. подпункт 6 настоящего пункта)

Шаблон входного объекта 1-к-1 для пользовательского типа:

input {{UserTypeFilterInput}} {

and: [{{UserTypeFilterInput}}]

or: [{{UserTypeFilterInput}}]

not: {{UserTypeFilterInput}}

{{baseField1}}: {{BaseFilterInput1}}

...

{{baseFieldN}}: {{BaseFilterInputN}}

{{baseArrayField1}}: {{BaseManyFilterInput1}}

...

{{baseArrayFieldN}}: {{BaseManyFilterInputN}}

{{userTypeField1}}: {{UserTypeFilterInput1}}

...

{{userTypeFieldN}}: {{UserTypeFilterInputN}}

{{userTypeArrayField1}}: {{UserTypeManyFilterInput1}}

...

{{userTypeArrayFieldN}}: {{UserTypeManyFilterInputN}}

}

{{UserTypeFilterInput}} - произвольное имя входного объекта 1-к-1,

{{baseField1}...{{baseFieldN}} - поля пользовательского типа, представленные одним из базовых типов,

{{baseFilterInput1}}...{{baseFilterInputN}} - входные объекты 1-к-1 для базовых типов, определенные в приложении N 6 к настоящим требованиям,

{{baseArrayField1}}...{{baseArrayFieldN}} - поля пользовательского типа, представленные списком одного из базовых типов,

{{BaseManyFilterInput1}}...{{BaseManyFilterInputN}} - входные объекты 1-ко-многим для базовых типов, определенные в приложении N 6 к настоящим требованиям,

{{userTypeField1}}...{{userTypeFieldN}} - поля пользовательского типа, представленные другими пользовательскими типами с полями базовых типов,

{{UserTypeFilterInput1}}...{{UserTypeFilterInputN}} - входные объекты 1-к-1, соответствующие другим пользовательским типам,

{{userTypeArrayField1}}...{{userTypeArrayFieldN}} - поля пользовательского типа, представленные списком других пользовательских типов с полями базовых типов,

{{UserTypeManyFilterInput1}}...{{UserTypeManyFilterInputN}} - входные объекты 1-ко-многим, соответствующие другим пользовательским типам.

6) Для каждого входного объекта 1-к-1 из подпункта 5 настоящего пункта должен быть определен другой входной объект языка GraphQL (далее - входной объект 1-ко-многим) для задания параметров поиска, когда поле пользовательского типа представлено списком другого пользовательского типа.

7) Каждый входной объект 1-ко-многим должен иметь следующую структуру:

Имя поля Тип поля
every исходных входной объект 1-к-1
some исходных входной объект 1-к-1
none исходных входной объект 1-к-1

Шаблон входного объекта 1-ко-многим для пользовательского типа:

input {{UserTypeManyFilterInput}} {

every: {{UserTypeFilterInput}}

some: {{UserTypeFilterInput}}

none: {{UserTypeFilterInput}}

}

{{UserTypeManyFilterInput}} - произвольное имя входного объекта 1-ко-многим,

{{UserTypeFilterInput}} - имя соответствующего входного объекта 1-к-1.

Роль полей "every", "some" и "none" при выполнении запросов ТС ОРМ аналогична одноименным полям для входных объектов базовых типов (см. п. 4 приложении N 6 к настоящим требованиям).

8) Все пользовательские типы, их поля и аргументы должны иметь описание на русском языке.

9) Связь между двумя произвольными пользовательскими типами должна быть двухсторонней за исключением случаев, если один из пользовательских типов не имеет ни одного поля базового типа.

10) Схема данных должна содержать все сервисные типы из перечня, определенного в приложении N 5 к настоящим требованиям.

9. Схема данных в части стандартных типов Query, Subscription (определяют доступные данные и параметры для поисковых запросов) языка GraphQL должна удовлетворять следующим требованиям:

1) Тип Query должен иметь поле "request" для задания поисковых запросов:

request: Request!

2) В свою очередь тип Request должен иметь следующую структуру:

Имя поля Тип поля
requestID String
offline Boolean
все имена пользовательских типов, имеющие хотя бы одно поле базового типа список пользовательского типа

Каждое поле типа Request, заданное списком пользовательского типа, должно иметь аргумент "filter" (задает параметры поиска), который представляется соответствующим входным объектом 1-к-1 для данного пользовательского типа.

Шаблон типа Request:

type Request {

requestID: String!

offline:Boolean!

{{userType1}}(filter: {{UserTypeFilterInput1}}!):

[{{UserType1}}!]

...

{{userTypeN}}(filter: {{UserTypeFilterInputN}}!):

[{{UserTypeN}}!]

}

{{UserType1}}...{{UserTypeN}} - имена пользовательских типов, имеющих хотя бы одно поле базового типа,

{{UserTypeFilterInput1}}...{{UserTypeFilterInput1}} - входные объекты 1-к-1, соответствующие пользовательским типам.

3) Типы Query и Subscription должны также содержать все запросы, соответствующие сервисным типам, которые приведены в приложении N 5 к настоящим требованиям.

10. ТС ОРМ должны использовать актуальные перечни базовых, сервисных типов и входных объектов для поиска.

11. Использование базовых, сервисных типов и входных объектов для задания параметров поиска, не приведенных в приложениях N 4, N 5, N 6 к настоящим требованиям, не допускается.

12. Именование всех пользовательских типов и их полей должно удовлетворять следующим требованиям:

- использование символа подчеркивания "_" в именах типов и их полей не допускается;

- имена пользовательских типов пишутся с заглавной буквы и могут состоять из нескольких слов, написанных слитно без пробелов, при этом каждое слово с заглавной буквы;

- имена полей пользовательских типов пишутся со строчной буквы и могут состоять из нескольких слов, написанных слитно без пробелов, при этом каждое слово кроме первого с заглавной буквы.

Приложение N 4
к Требованиям к вычислительным мощностям, используемым провайдером
хостинга, для проведения уполномоченными государственными органами,
осуществляющими оперативно-розыскную деятельность или обеспечение безопасности
Российской Федерации, мероприятий в целях реализации возложенных на них задач
от __.__.______ N ______

Перечень базовых типов для описания схемы данных ТС ОРМ

N п/п Описание Базовый тип
1.  Идентификатор мобильного абонента "?"?"? Базовый тип идентификатора мобильного абонента "?"?"? type ImsiBase { "?"?"? Идентификатор мобильного абонента "?"?"? imsi: String! }
2.  Идентификатор мобильной станции "?"?"? Базовый тип идентификатора мобильной станции "?"?"? type ImeiBase { "?"?"? Идентификатор мобильной станции "?"?"? imei: String! }
3.  Номер абонента сети сотовой связи "?"?"? Базовый тип номера абонента сети сотовой связи "?"?"? type MsisdnBase { "?"?"? Номер абонента сети сотовой связи "?"?"? msisdn: String! }
4.  Код страны, в которой находится оператор мобильной связи "?"?"? Базовый тип кода страны, в которой находится оператор связи "?"?"? type MccBase { "?"?"? Код страны "?"?"? mcc: Int! }
5.  Код оператора связи "?"?"? Базовый тип кода оператора связи "?"?"? type MncBase { "?"?"? Код оператора связи "?"?"? mnc: Int! }
6.  Код географической зоны, которая обслуживается одним контроллером базовых станций "?"?"? Базовый тип кода географической зоны, обслуживаемой одним контроллером базовых станций "?"?"? type LacBase { "?"?"? Код географической зоны "?"?"? lac: Int! }
7.  Идентификатор сектора базовой станции "?"?"? Базовый тип идентификатора сектора базовой станции "?"?"? type CellBase { "?"?"? Идентификатор сектора базовой станции "?"?"? cell: Int! }
8.  Адрес электронной почты "?"?"? Базовый тип адреса электронной почты "?"?"? type EmailBase { "?"?"? Адрес электронной почты "?"?"? email: String! }
9.  Адресная информация "?"?"? Базовый тип адресных данных "?"?"? type AddressBase { "?"?"? Неструктурированный адрес "?"?"? address: String "?"?"? Почтовый индекс, zip-код "?"?"? zip: String "?"?"? Страна "?"?"? county: String "?"?"? Область "?"?"? region: String "?"?"? Район, муниципальный округ "?"?"? zone: String "?"?"? Город, посёлок, деревня "?"?"? city: String "?"?"? Улица "?"?"? street: String "?"?"? Дом, строение "?"?"? building: String "?"?"? Корпус "?"?"? buildsect: String "?"?"? Квартира, офис "?"?"? apartment: String }
10.  Паспортные данные "?"?"? Базовый тип паспортных данных "?"?"? type PassportBase { "?"?"? Серия паспорта "?"?"? series: String! "?"?"? Номер паспорта "?"?"? number: String! }
11.  Фамилия, имя, отчество "?"?"? Базовый тип ФИО "?"?"? type PersonBase { "?"?"? Неструктурированная информация о ФИО "?"?"? fullName: String! "?"?"? Имя "?"?"? name: String "?"?"? Отчество "?"?"? middleName: String "?"?"? Фамилия "?"?"? lastName: String }
12.  Номер удостоверения водителя транспортного средства "?"?"? Базовый тип номера удостоверения водителя транспортного средства "?"?"? type DrivingLicenseNumberBase { "?"?"? Номер удостоверения водителя транспортного средства "?"?"? drivingLicenseNumber: String! }
13.  Государственный регистрационный номер транспортного средства "?"?"? Базовый тип государственного регистрационного номера транспортного средства "?"?"? type VehicleGosNumberBase { "?"?"? Государственный регистрационный номер транспортного средства "?"?"? vehicleGosNumber: String! }
14.  Идентификационный номер налогоплательщика "?"?"? Базовый тип идентификационного номера налогоплательщика "?"?"? type InnBase { "?"?"? Идентификационный номер налогоплательщика "?"?"? inn: String! }
15.  Информация о дате и времени "?"?"? Базовый тип информации о дате и времени "?"?"? type DateTimeBase { "?"?"? Информация о дате и времени в расширенном формате местного времени с разницей со Всемирным координированным временем (UTC) в соответствии с ГОСТ Р 7.0.64-2018 (ИСО 8601:2004) YYYY-MM-DDThh:mm:ss±hh:mm "?"?"? utc: String! }
16.  Геометрические пространственно-временные данные: точка, массив точек, информация о месте и времени, полигон, мультиполигон, гео-трек "?"?"? Базовый тип пространственной информации: точка "?"?"? type PointBase { "?"?"? Долгота "?"?"? longitude: Float! "?"?"? Широта "?"?"? latitude: Float! } "?"?"? Базовый тип пространственной информации: последовательность точек (линия) "?"?"? type LineBase { "?"?"? Линия - последовательность точек в пространстве. "?"?"? points: [PointBase!]! } "?"?"? Базовый тип пространственно-временной информации: точка в пространстве с привязкой к дате и времени "?"?"? type PointTimeBase { "?"?"? Точка в пространстве "?"?"? point: PointBase! "?"?"? Информация о дате и времени "?"?"? time: DateTimeBase! } "?"?"? Базовый тип пространственной информации: полигон "?"?"? type PolygonBase { "?"?"? Последовательность линий "?"?"? lines: [LineBase!]! } "?"?"? Базовый тип пространственной информации: мультиполигон "?"?"? type MultiPolygonBase { "?"?"? Последовательность полигонов "?"?"? polygons: [PolygonBase!]! } "?"?"? Базовый тип пространственно-временной информации: трек "?"?"? type GeoTrackBase { "?"?"? Последовательность точек в пространстве с привязкой к дате и времени "?"?"? pointsInTime: [PointTimeBase!]! }
17.  Сведения о юридических лицах и индивидуальных предпринимателях "?"?"? Базовый тип сведений о юридических лицах и индивидуальных предпринимателях "?"?"? type OrganizationInfoBase { "?"?"? Полное наименование "?"?"? nameFull: String "?"?"? Сокращенное наименование "?"?"? nameSmall: String "?"?"? Государственный регистрационный номер ОГРН и ОГРНИП "?"?"? grn: GRNBase! "?"?"? Идентификационный номер налогоплательщика "?"?"? inn: InnBase "?"?"? Информация о банковских данных "?"?"? bankInfo: BankAccountInfoBase "?"?"? Адрес (место нахождения) "?"?"? address: AddressBase "?"?"? Информация о номере телефона "?"?"? msisdn: [MsisdnBase!] "?"?"? Web-сайт "?"?"? webSite: URLBase "?"?"? Электронная почта "?"?"? email: EmailBase "?"?"? Дата регистрации "?"?"? dateRegistration: DateTimeBase! "?"?"? Сведения о лице, имеющем право без доверенности действовать от имени юридического лица "?"?"? representative: OrganizationRepresentativeBase! "?"?"? ОКВЭД "?"?"? okved: [String!] "?"?"? ЕГРЮЛ "?"?"? egrul: String "?"?"? ЕГРИП "?"?"? egrip: String }     "?"?"? Базовый тип государственного регистрационного номера ОГРН и ОГРНИП "?"?"? type GRNBase { "?"?"? Государственный регистрационный номер - ОГРН и ОГРНИП "?"?"? grn: String! }     "?"?"? Базовый тип сведений об учредителях (участниках) юридического лица, лицах, имеющих право без доверенности действовать от имени юридического лица "?"?"? type OrganizationRepresentativeBase { "?"?"? Фамилия, имя, отчество представителя "?"?"? name: PersonBase! "?"?"? Идентификационный номер налогоплательщика "?"?"? inn: InnBase! "?"?"? Должность "?"?"? position: String! }
18.  Банковские данные "?"?"? Базовый тип банковских данных "?"?"? type BankAccountInfoBase { "?"?"? Наименование банка "?"?"? bankName: String "?"?"? Номер счёта "?"?"? account: String "?"?"? Корреспондентский счет "?"?"? corrAccount: String "?"?"? Номер карты "?"?"? cardNumber: String! "?"?"? Адрес банка "?"?"? bankAddress: AddressBase "?"?"? Банковский идентификационный код "?"?"? rcbic: String "?"?"? Код причины постановки на учет кредитной организации предназначен для идентификации юридического лица, которое является налогоплательщиком "?"?"? kpp: String }     "?"?"? Базовый тип банковских переводов "?"?"? type BankTransferInfoBase { "?"?"? Сумма перевода "?"?"? amount: String! "?"?"? Отправитель перевода "?"?"? from: BankAccountInfoBase "?"?"? Получатель перевода "?"?"? to: BankAccountInfoBase "?"?"? Дата и время перевода "?"?"? data: DateTimeBase! }
19.  IP-адрес "?"?"? Базовый тип IP-адреса "?"?"? type IpAddressBase { "?"?"? IP-адрес "?"?"? ip: String! "?"?"? Маска подсети в виде префикса "?"?"? mask: Int "?"?"? Тип IP-адреса: ipv4, ipv6 "?"?"? type: IpType! }     enum IpType { IPV4 IPV6 }
20.  Информация об участнике сетевого соединения "?"?"? Базовый тип информации об участнике сетевого соединения "?"?"? type NetworkPeerBase { "?"?"? Информация о IP-адресе "?"?"? ip: IpAddressBase! "?"?"? Номер порта "?"?"? port: Int! "?"?"? Номер протокола согласно RFC3232 "?"?"? protocolNumber: Int }
21.  URL-адрес "?"?"? Базовый тип URL-адреса "?"?"? type URLBase { "?"?"? URL-адрес "?"?"? url: String! }
22.  Доменное имя "?"?"? Базовый тип доменного имени "?"?"? type DomainNameBase { "?"?"? Доменное имя "?"?"? domainName: String! }
23.  Имя/идентификатор пользователя "?"?"? Базовый тип имени/идентификатора пользователя "?"?"? type LoginBase { "?"?"? Имя/идентификатор пользователя "?"?"? login: String! }

Приложение N 5
к Требованиям к вычислительным мощностям, используемым провайдером
хостинга, для проведения уполномоченными государственными органами,
осуществляющими оперативно-розыскную деятельность или обеспечение безопасности
Российской Федерации, мероприятий в целях реализации возложенных на них задач
от __.__.______ N ______

Перечень сервисных типов и соответствующих им запросов для описания схемы данных ТС ОРМ

N п/п Описание типа Сервисный тип Запрос Описание запроса
1 Схема данных, описанная на языке SDL "?"?" Сервисный тип для схемы данных "?"?"? type _Service { "?"?" Схемы данных "?"?"? sdl: String } type Query { "?"?" Запрос схемы данных "?"?" _service: _Service! } Запрос схемы данных, описанной на языке SDL GraphQL
2 Идентификатор отложенного запроса Отсутствует type Query { "?"?" Запрос результата выполнения отложенного запроса "?"?" _getOfflineRequest(requestID: String!): Request! } Запрос результата выполнения отложенного запроса по его идентификатору. Ответом являются данные (результат выполнения запроса), представленные в формате JSON в соответствии с изначальным GraphQL запросом. Если отложенный запрос с указанным идентификатором не найден, либо еще не выполнен или результаты его выполнения уже удалены, то должно быть возвращено сообщение об ошибке.
type Query { "?"?" Удаление результатов отложенного запроса "?"?" _delOfflineRequest(requestID: String!): String! } Удаление результатов отложенного запроса по его идентификатору. Ответом является сообщение "done", если удаление произошло успешно. В ином случае - сообщение об ошибке.
type Query { "?"?" Отмена выполнения отложенного запроса "?"?" _cancelOfflineRequest(requestID: String!): String! } Прерывание (отмена) выполнения отложенного запроса по его идентификатору. Ответом является сообщение "done", если прерывание произошло успешно. В ином случае - сообщение об ошибке.
3 Информация о статусе выполнения отложенного запроса "?"?" Сервисный тип для информации о статусе выполнения отложенного запроса "?"?"? type _RequestInfo { "?"?" Идентификатор отложенного запроса "?"?" requestID: String! "?"?" Статус отложенного запроса "?"?" status: _RequestStatus "?"?" Дата и время начала выполнения отложенного запроса "?"?" startsAt: DateTimeBase }     "?"?" Возможные статусы выполнения отложенного запроса "?"?"? enum _RequestStatus { "?"?" Запрос еще не выполняется "?"?" NOTSTARTED "?"?" Запрос выполняется "?"?" RUNNING "?"?" Запрос выполнен "?"?" READY "?"?" Выполнение запрос прервано ТС ОРМ "?"?" ABORTED "?"?" Запрос отменен ПУ "?"?" CANCELED } type Subscription { "?"?" Запрос статуса отложенного запроса "?"?" _statusOfflineRequest(requestID: String!): _RequestInfo! } Запрос статуса отложенного запроса по его идентификатору. Ответом является сообщение типа _RequestInfo. Если отложенный запрос с указанным идентификатором не найден, то должно быть возвращено сообщение об ошибке.
4 HTTP URI для неформатированных данных "?"?" Сервисный тип для неформатированных данных "?"?"? type Media { "?"?" HTTP URI для неформатированных данных в полном формате согласно RFC7230 http(s)://<IP-адрес или доменное имя ТС ОРМ >:<порт>/download/<уникальный путь к файлу> "?"?"? link: String! } Отсутствует Отсутствует
5 Сигналы о функционировании ТС ОРМ "?"?" Сервисный тип для сигналов о функционировании ТС ОРМ "?"?"? type _Trap { "?"?" Тип сигнала "?"?" type: _TrapType! "?"?" Описание сигнала "?"?" message: String "?"?" Дата и время возникновения сигнала "?"?" startsAt: DateTimeBase! "?"?" Дополнительная информация о предупреждениях для контролируемых метрик. Только для сигнала типа METRICALERTS "?"?" metricalerts: _MetricAlerts }     "?"?" Возможные типы сигналов "?"?"? enum _TrapType { "?"?" Перезапуск ПО "?"?" RESTARTDB "?"?" Попытка несанкционированного доступа "?"?" UNAUTHORIZEDACCESS "?"?" Критическая ошибка ПО "?"?" CRITICALERROR "?"?" Серьезная ошибка ПО "?"?" MAJORERROR "?"?" Незначительная ошибка ПО "?"?" MINORERROR "?"?" Изменение схемы данных "?"?" SCHEMACHANGED "?"?" Предупреждение о проблеме с контролируемой метрикой "?"?" METRICALERTS }     "?"?" Дополнительная информация о предупреждении "?"?" type _MetricAlerts { "?"?" Ключ, определяющий группу предупреждений "?"?" groupKey: String! "?"?" Статус предупреждения "?"?" status: _AlertStatus! "?"?" Определяет получателя предупреждения "?"?" receiver: String! "?"?" Метки, по которым сгруппированы предупреждения "?"?" groupLabels: [_KeyValueRef!]! "?"?" Общие метки для всех предупреждений "?"?" commonLabels: [_KeyValueRef!]! "?"?" Общие описания для всех предупреждений "?"?" commonAnnotations: [_KeyValueRef!]! "?"?" URL менеджера предупреждений "?"?" externalURL: String! "?"?" Список предупреждений "?"?" alerts: [_Alert!]! }     "?"?" Возможные статусы предупреждений "?"?"? enum _AlertStatus { "?"?" Проблема решена "?"?" RESOLVED "?"?" Проблема не решена "?"?" FIRING }     "?"?" Предупреждение о проблеме с контролируемой метрикой "?"?" type _Alert { "?"?" Статус предупреждения "?"?" status: _AlertStatus! "?"?" Метки для предупреждения "?"?" labels: [_KeyValueRef!]! "?"?" Описания для предупреждения "?"?" annotations: [_KeyValueRef!]! "?"?" Дата и время возникновения предупреждения "?"?" startsAt: DateTimeBase! "?"?" Дата и время решения проблемы, в результате которой возникло предупреждение "?"?" endsAt: DateTimeBase! "?"?" URL сущности, в которой возникла проблема "?"?" generatorURL: String! "?"?" Идентификатор предупреждения "?"?" fingerprint: String! }     "?"?" Ключ-значение "?"?" type _KeyValueRef { "?"?" Ключ "?"?" key: String! "?"?" Значение "?"?" value: String! } type Subscription { "?"?" Запрос получения сигналов о функционировании ТС ОРМ "?"?" _trap: _Trap! } Запрос получения сигналов о функционировании ТС ОРМ. Ответом является сообщение типа _Trap. Если тип сигнала "Предупреждение о проблеме с контролируемыми параметрами (METRICALERTS)", то ТС ОРМ должны возвращать дополнительную информацию о предупреждениях в поле metricalerts.

Приложение N 6
к Требованиям к вычислительным мощностям, используемым провайдером
хостинга, для проведения уполномоченными государственными органами,
осуществляющими оперативно-розыскную деятельность или обеспечение безопасности
Российской Федерации, мероприятий в целях реализации возложенных на них задач
от __.__.______ N ______

Перечень входных объектов для задания параметров поиска

1. В схеме данных для задания параметров поиска должны быть описаны входные объекты (Input Objects) на языке GraphQL для каждого пользовательского типа, имеющего хотя бы одно поле базового типа, или связанного с другим пользовательским типом, имеющим хотя бы одно поле базового типа.

2. Для описания входных объектов, соответствующих пользовательским типам, должны использоваться входные объекты для базовых типов, приведенные в настоящем приложении.

3. Каждый входной объект 1-к-1 для базового типа содержит поля "and", "or" и "not" (соответствуют логическим функциям "И", "ИЛИ", "НЕ"), а также может содержать поля для соответствующих функций, приведенных в таблице N 1 настоящего приложения. В случае, если числовая функция применяется к строкам, то на множестве строк подразумевается лексикографический порядок.

4. Каждый входной объект 1-ко-многим для базового типа содержит три поля: "every", "some" и "none". "every" - условие выполняется, когда все элементы списка удовлетворяют заданному условию, "some" - условие выполняется, когда хотя бы один элемент списка удовлетворяет заданному условию, "none" - условие выполняется, когда ни один элемент списка не удовлетворяет заданному условию.

5. Перечень входных объектов 1-к-1 и 1-ко-многим для базовых типов и доступные для них функции приведены в таблице N 2 настоящего приложения.

Таблица N 1.

N п/п Функция Пример использования Описание
1 Операции сравнения lt Для целочисленных значений: lt: 999     Для дробный значений: lt: 999.99     Для строковых значений: lt: "999" Меньше, чем
2 le le: 999 Меньше либо равно
3 eq eq: 999 Равно
4 in in: [0, 999] В [списке]
5 between between: { min: 0, max: 999 } Между значениями min и max
6 ge ge: 999 Больше либо равно
7 gt gt: 999 Больше
8 Регулярные выражения regexp regexp: "\\d\\d/\\d\\d/\\d{4}" Регулярное выражение в формате POSIX Basic Regular Expression
9 Поиск по тексту allofterms allofterms: "Москва, Тверская" Соответствие строкам, содержащим все указанные термы в произвольном порядке, без учета регистра
10 anyofterms anyofterms: "Москва, Тверская" Соответствие строкам, содержащим любой из указанных термов в произвольном порядке, без учета регистра
11 alloftext alloftext: "Москва, Тверская" Полнотекстовый поиск по всему полю
12 anyoftext anyoftext: "Москва, Тверская" Полнотекстовый поиск по любой части поля
13 Геопоиск near near: { distance: 1000.0, point: { longitude: 55.7506539, latitude: 37.6195138 } } Соответствие объектам, в которых предикат находится не более, чем на расстоянии distance метров от точки point
14 within within: { polygon: { lines: [ { points: [ { longitude: 55.0, latitude: 37.0 }, { longitude: 56.0, latitude: 37.0 }, { longitude: 56.0, latitude: 33.0 }, { longitude: 55.0, latitude: 38.0 } ] } ] } } Соответствие объектам, предикат которых находится в пределах полигона, заданного в качестве аргумента
15 contains contains: { polygon: { lines: [ { points: [ { longitude: 55.0, latitude: 37.0 }, { longitude: 56.0, latitude: 37.0 }, { longitude: 56.0, latitude: 33.0 }, { longitude: 55.0, latitude: 38.0 } ] } ] } } Соответствует объектам, предикат которых содержит указанные точку или полигон
16 intersects intersects: { polygon: { lines: [ { points: [ { longitude: 55.0, latitude: 37.0 }, { longitude: 56.0, latitude: 37.0 }, { longitude: 56.0, latitude: 33.0 }, { longitude: 55.0, latitude: 38.0 } ] } ] } } Соответствует объектам, предикат которых имеет непустое пересечение с указанным полигоном или мультиполигоном
17 Геопоиск с учетом времени события, используется для геотрека. nearTime     nearTime: { distance: 1000.0, point: { longitude: 55.7506539, latitude: 37.6195138 }, time: { utc: { between: { min: { utc: "2020-12-19T16:30:00+03:00" } max: { utc: "2020-12-19T16:40:00+03:00" } } } } } Соответствие объектам, в которых предикат находится не более, чем на расстоянии distance от точки point, при этом время, в которое предикат находился в данной области, ограничено соответствующим фильтром по времени
18 withinTime withinTime: { polygon: { lines: [ { points: [ { longitude: 55.0, latitude: 37.0 }, { longitude: 56.0, latitude: 37.0 }, { longitude: 56.0, latitude: 33.0 }, { longitude: 55.0, latitude: 38.0 } ] } ] }, time: { utc: { between: { min: { utc: "2020-12-19T16:30:00+03:00" } max: { utc: "2020-12-19T16:40:00+03:00" } } } } } Соответствие объектам, предикат которых находится в пределах полигона, заданного в качестве аргумента, при этом время, в которое предикат находился в данной области, ограничено соответствующим фильтром по времени
19 intersectsTime intersectsTime: { polygon: { lines: [ { points: [ { longitude: 55.0, latitude: 37.0 }, { longitude: 56.0, latitude: 37.0 }, { longitude: 56.0, latitude: 33.0 }, { longitude: 55.0, latitude: 38.0 } ] } ] }, time: { utc: { between: { min: { utc: "2020-12-19T16:30:00+03:00" } max: { utc: "2020-12-19T16:40:00+03:00" } } } } } Соответствует объектам, предикат которых имеет непустое пересечение с заданным полигоном или мультиполигоном, при этом время, в которое предикат находился в данной области, ограничено соответствующим фильтром по времени
20 intersectsTrack intersectsTrack: { geotrack: { pointsInTime: [ { point: { longitude:55.7506539, latitude: 37.6195138 }, time: { utc: "2020-12-19T16:50:00+03:00" } }, { point: { longitude:55.8224554, latitude: 37.7201284 }, time: { utc: "2020-12-19T16:40:00+03:00" } } ] }, deltaTime: { second: 600 }, distance: 1000.0 } Соответствует объектам, предикат которых имеет непустое пересечение с заданным геотреком с точностью по времени deltatime секунд и точностью по расстоянию distance метров

Таблица N 2.

N п/п Базовый тип/скалярный тип Входные объекты 1-к-1 и 1-ко-многим для задания параметров поиска
1 type ImsiBase "?"?" Входной объект: фильтр 1-к-1 для базового типа идентификатора мобильного абонента "?"?"? input ImsiBaseFilter { "?"?" Фильтр для идентификатора мобильного абонента "?"?"? imsi: StringRegExpExactFilter and: [ImsiBaseFilter] or: [ImsiBaseFilter] not: ImsiBaseFilter }     "?"?"? Входной объект: фильтр 1-ко-многим для базового типа идентификатора мобильного абонента "?"?"? input ImsiManyBaseFilter { every:  ImsiBaseFilter some:  ImsiBaseFilter none: ImsiBaseFilter }
2 type ImeiBase "?"?" Входной объект: фильтр 1-к-1 для базового типа идентификатора мобильной станции "?"?"? input ImeiBaseFilter { "?"?" Фильтр для идентификатора мобильной станции "?"?"? imei: StringRegExpExactFilter and: [ImeiBaseFilter] or: [ImeiBaseFilter] not: ImeiBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа идентификатора мобильной станции "?"?"? input ImeiManyBaseFilter { every:  ImeiBaseFilter some:  ImeiBaseFilter none: ImeiBaseFilter }
3 type MsisdnBase "?"?" Входной объект: фильтр 1-к-1 для базового типа номера абонента сети сотовой связи "?"?"? input MsisdnBaseFilter { "?"?" Фильтр для номера абонента сети сотовой связи "?"?"? msisdn: StringRegExpExactFilter and: [MsisdnBaseFilter] or: [MsisdnBaseFilter] not: MsisdnBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа номера абонента сети сотовой связи "?"?"? input MsisdnManyBaseFilter { every:  MsisdnBaseFilter some:  MsisdnBaseFilter none: MsisdnBaseFilter }
4 type MccBase "?"?" Входной объект: фильтр 1-к-1 для базового типа кода страны, в которой находится оператор связи "?"?"? input MccBaseFilter { "?"?" Фильтр для кода страны, в которой находится оператор связи "?"?"? mcc: IntFilter and: [MccBaseFilter] or: [MccBaseFilter] not: MccBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа кода страны, в которой находится оператор связи "?"?"? input MccManyBaseFilter { every:  MccBaseFilter some:  MccBaseFilter none: MccBaseFilter }
5 type MncBase "?"?" Входной объект: фильтр 1-к-1 для базового типа кода оператора связи "?"?"? input MncBaseFilter { "?"?" Фильтр для кода оператора связи "?"?"? mnc: IntFilter and: [MncBaseFilter] or: [MncBaseFilter] not: MncBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа кода оператора связи "?"?"? input MncManyBaseFilter { every:  MncBaseFilter some:  MncBaseFilter none: MncBaseFilter }
6 type LacBase "?"?" Входной объект: фильтр 1-к-1 для базового типа кода географической зоны, обслуживаемой одним контроллером базовых станций "?"?"? input LacBaseFilter { "?"?" Фильтр для кода географической зоны, обслуживаемой одним контроллером базовых станций "?"?"? lac: IntFilter and: [LacBaseFilter] or: [LacBaseFilter] not: LacBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа кода географической зоны, обслуживаемой одним контроллером базовых станций "?"?"? input LacManyBaseFilter { every:  LacBaseFilter some:  LacBaseFilter none: LacBaseFilter }
7 type CellBase "?"?" Входной объект: фильтр 1-к-1 для базового типа идентификатора сектора базовой станции "?"?"? input CellBaseFilter { "?"?" Фильтр для идентификатора сектора базовой станции "?"?"? cell: IntFilter and: [CellBaseFilter] or: [CellBaseFilter] not: CellBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа идентификатора сектора базовой станции "?"?"? input CellManyBaseFilter { every:  CellBaseFilter some:  CellBaseFilter none: CellBaseFilter }
8 type EmailBase "?"?" Входной объект: фильтр 1-к-1 для базового типа адреса электронной почты "?"?"? input EmailBaseFilter { "?"?" Фильтр для адреса электронной почты "?"?"?  email: StringRegExpExactFilter and: [EmailBaseFilter] or: [EmailBaseFilter] not: EmailBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа адреса электронной почты "?"?"? input EmailManyBaseFilter { every:  EmailBaseFilter some:  EmailBaseFilter none: EmailBaseFilter }
9 type AddressBase "?"?" Входной объект: фильтр 1-к-1 для базового типа структурированных адресных данных "?"?"? input AddressBaseFilter { "?"?" Фильтр для неструктурированного адреса "?"?"? address: StringRegExpFullTextFilter "?"?" Фильтр для почтового индекса, zip-кода "?"?"? zip: StringExactFilter "?"?" Фильтр для страны "?"?"? county: StringExactFilter "?"?" Фильтр для области "?"?"? region: StringExactFilter "?"?" Фильтр для района, муниципального округа "?"?"? zone: StringExactFilter "?"?" Фильтр для города, посёлка, деревни "?"?"? city: StringExactFilter "?"?" Фильтр для улицы "?"?"? street: StringExactFilter "?"?" Фильтр для дома, строения "?"?"? building: StringExactFilter "?"?" Фильтр для корпуса "?"?"? buildsect: StringExactFilter "?"?" Фильтр для квартиры, офиса "?"?"? apartment: StringExactFilter and: [AddressBaseFilter] or: [AddressBaseFilter] not: AddressBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа структурированных адресных данных "?"?"? input AddressManyBaseFilter { every:  AddressBaseFilter some:  AddressBaseFilter none: AddressBaseFilter }
10 type PassportBase "?"?" Входной объект: фильтр 1-к-1 для базового типа паспортных данных "?"?"? input PassportBaseFilter { "?"?" Фильтр для номера паспорта "?"?"? number: StringRegExpExactFilter "?"?" Фильтр для серии паспорта "?"?"? series: StringRegExpExactFilter and: [PassportBaseFilter] or: [PassportBaseFilter] not: PassportBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа паспортных данных "?"?"? input PassportManyBaseFilter { every:  PassportBaseFilter some:  PassportBaseFilter none: PassportBaseFilter }
11 type PersonBase "?"?" Входной объект: фильтр 1-к-1 для базового типа ФИО "?"?"? input PersonBaseFilter { "?"?" Фильтр для неструктурированной информации о ФИО "?"?"? fullName: StringTermFullTextFilter "?"?" Фильтр для имени "?"?"? name: StringTermExactFilter "?"?" Фильтр для отчества "?"?"? middleName: StringTermExactFilter "?"?" Фильтр для фамилии "?"?"? lastName: StringTermExactFilter and: [PersonBaseFilter] or: [PersonBaseFilter] not: PersonBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа ФИО "?"?"? input PersonBaseManyilter { every:  PersonBaseFilter some:  PersonBaseFilter none: PersonBaseFilter }
12 type DrivingLicenseNumberBase "?"?" Входной объект: фильтр 1-к-1 для базового типа номера удостоверения водителя транспортного средства "?"?"? input DrivingLicenseNumberBaseFilter { "?"?" Фильтр для номера удостоверения водителя транспортного средства "?"?"? drivingLicenseNumber: StringTermExactFilter and: [DrivingLicenseNumberBaseFilter] or: [DrivingLicenseNumberBaseFilter] not: DrivingLicenseNumberBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа номера удостоверения водителя транспортного средства "?"?"? input DrivingLicenseNumberBaseManyFilter { every:  DrivingLicenseNumberBaseFilter some:  DrivingLicenseNumberBaseFilter none: DrivingLicenseNumberBaseFilter }
13 type VehicleGosNumberBase "?"?" Входной объект: фильтр 1-к-1 для базового типа государственного регистрационного номера транспортного средства "?"?"? input VehicleGosNumberBaseFilter { "?"?" Фильтр для государственного регистрационного номера транспортного средства "?"?"? vehicleGosNumber: StringTermExactFilter and: [VehicleGosNumberBaseFilter] or: [VehicleGosNumberBaseFilter] not: VehicleGosNumberBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа государственного регистрационного номера транспортного средства "?"?"? input VehicleGosNumberManyBaseFilter { every:  VehicleGosNumberBaseFilter some:  VehicleGosNumberBaseFilter none: VehicleGosNumberBaseFilter }
14 type InnBase "?"?" Входной объект: фильтр 1-к-1 для базового типа идентификационного номера налогоплательщика "?"?"? input InnBaseFilter { "?"?" Фильтр для значения идентификационного номера налогоплательщика "?"?"? inn: StringTermExactFilter and: [InnBaseFilter] or: [InnBaseFilter] not: InnBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа идентификационного номера налогоплательщика "?"?"? input InnManyBaseFilter { every:  InnBaseFilter some:  InnBaseFilter none: InnBaseFilter }
15 type DateTimeBase "?"?" Входной объект: фильтр 1-к-1 для базового типа информации о дате и времени "?"?"? input DateTimeBaseFilter { "?"?" Фильтр для информации о дате и времени в расширенном формате местного времени с разницей со Всемирным координированным временем (UTC) в соответствии с ГОСТ Р 7.0.64-2018 (ИСО 8601:2004) YYYY-MM-DDThh:mm:ss±hh:mm "?"?"? utc: DateTimeStringFilter and: [DateTimeBaseFilter] or: [DateTimeBaseFilter] not: DateTimeBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа информации о дате и времени "?"?"? input DateTimeManyBaseFilter { every:  DateTimeBaseFilter some:  DateTimeBaseFilter none: DateTimeBaseFilter } "?"?"? Входной объект: информация о дате и времени для использования в операциях сравнения "?"?"? input DateTimeRef { utc: String! }     "?"?"? Входной объект: используемые операции сравнения для информации о дате и времени "?"?"? input DateTimeStringFilter { eq:  DateTimeRef in: [DateTimeRef] le:  DateTimeRef lt:  DateTimeRef ge:  DateTimeRef gt: DateTimeRef between: DateTimeRange } "?"?"? Входной объект: информация о временном промежутке для использования в операциях сравнения "?"?"? input DateTimeRange { min: DateTimeRef! max: DateTimeRef! }
16 type PointBase "?"?" Входной объект: фильтр 1-к-1 для базового типа пространственной информации: точки "?"?"? input PointBaseFilter { "?"?" Фильтр для точек в пространстве: нахождение около аргумента фильтра в заданных пределах "?"?"? near: NearFilter "?"?" Фильтр для точек в пространстве: нахождение внутри заданного полигона "?"?"? within: WithinFilter and: [PointBaseFilter] or: [PointBaseFilter] not: PointBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа пространственной информации: точки "?"?"? input PointManyBaseFilter { every:  PointBaseFilter some:  PointBaseFilter none: PointBaseFilter } "?"?"? Входной объект: пространственный фильтр нахождения около заданной точки в указанных пределах "?"?"? input NearFilter { "?"?" Дистанция в метрах до используемой точки в пространстве в фильтре "?"?"? distance: Float! "?"?" Точка в пространстве, по дистанции до которой происходит фильтрация "?"?"? point: PointRef! } "?"?"? Входной объект: пространственный фильтр нахождения внутри заданного полигона "?"?"? input WithinFilter { "?"?" Полигон в пространстве, по нахождению в котором происходит фильтрация "?"?"? polygon: PolygonRef! } "?"?"? Входной объект: точка в пространстве для использования в фильтрах. "?"?"? input PointRef { "?"?" Долгота в градусах "?"?"? longitude: Float! "?"?" Широта в градусах "?"?"? latitude: Float! }
17 type LineBase "?"?" Входной объект: фильтр 1-к-1 для базового типа пространственной информации: последовательности точек (линии) "?"?"? input LineBaseFilter { "?"?" Фильтр для последовательности точек в пространстве: нахождение около аргумента фильтра в заданных пределах "?"?"? near: NearFilter "?"?" Фильтр для последовательности точек в пространстве: нахождение внутри заданного полигона "?"?"? within: WithinFilter "?"?" Фильтр для последовательности точек в пространстве: пересечение с заданным полигоном "?"?"? intersects: IntersectsFilter and: [LineBaseFilter] or: [LineBaseFilter] not: LineBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа пространственной информации: последовательности точек (линии) "?"?"? input LineManyBaseFilter { every:  LineBaseFilter some:  LineBaseFilter none: LineBaseFilter } "?"?"? Входной объект: пространственный фильтр пересечения с заданным полигоном "?"?"? input IntersectsFilter { "?"?" Полигон в пространстве, по пересечению с которым происходит фильтрация "?"?"? polygon: PolygonRef } "?"?"? Входной объект: последовательность точек в пространстве для использования в фильтрах. "?"?"? input LineRef { points: [PointRef!]! }
18 type PointTimeBase "?"?" Входной объект: фильтр 1-к-1 для базового типа пространственно-временной информации: точки в пространстве с привязкой к дате и времени "?"?"? input PointTimeBaseFilter { "?"?" Фильтр для пространственной информации "?"?"? point: PointBaseFilter "?"?" Фильтр для временной информации "?"?"? time: DateTimeBaseFilter and: [PointTimeBaseFilter] or: [PointTimeBaseFilter] not: PointTimeBaseFilter } "?"?" Входной объект: фильтр 1-ко-многим для базового типа пространственно-временной информации: точки в пространстве с привязкой к дате и времени "?"?"?     input PointTimeManyBaseFilter { every:  PointTimeBaseFilter some:  PointTimeBaseFilter none: PointTimeBaseFilter } "?"?"? Входной объект: точки в пространстве с привязкой к дате и времени для использования в фильтрах. "?"?"? input PointTimeRef { point: PointRef! time: DateTimeRef! }
19 type PolygonBase "?"?" Входной объект: фильтр 1-к-1 для базового типа пространственной информации: полигона "?"?"? input PolygonBaseFilter { "?"?" Фильтр для полигона: нахождение около аргумента фильтра в заданных пределах "?"?"? near: NearFilter "?"?" Фильтр для полигона: нахождение внутри заданного полигона "?"?"? within: WithinFilter "?"?" Фильтр для полигона: содержание заданных точки или полигона "?"?"? contains: ContainsFilter "?"?" Фильтр для полигона: пересечение с заданным полигоном "?"?"? intersects: IntersectsFilter and: [PolygonBaseFilter] or: [PolygonBaseFilter] not: PolygonBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа пространственной информации: полигона "?"?"? input PolygonManyBaseFilter { every:  PolygonBaseFilter some:  PolygonBaseFilter none: PolygonBaseFilter } "?"?"? Входной объект: пространственный фильтр включения заданной точки или полигона "?"?"? input ContainsFilter { "?"?" Точка в пространстве, по включению которой в исходный полигон происходит фильтрация "?"?"? point: PointRef "?"?" Полигон в пространстве, по включению которого в исходный полигон происходит фильтрация "?"?"? polygon: PolygonRef } "?"?"? Входной объект: полигон в пространстве для использования в фильтрах "?"?"? input PolygonRef { lines: [LineRef!]! }
20 type MultiPolygonBase "?"?" Входной объект: фильтр 1-к-1 для базового типа пространственной информации: мультиполигона "?"?"? input MultiPolygonBaseFilter { "?"?" Фильтр для мультиполигона: нахождение около аргумента фильтра в заданных пределах "?"?"? near: NearFilter "?"?" Фильтр для мультиполигона: нахождение внутри заданного полигона "?"?"? within: WithinFilter "?"?" Фильтр для мультиполигона: содержание заданных точки или полигона "?"?"? contains: ContainsFilter "?"?" Фильтр для мультиполигона: пересечение с заданным полигоном "?"?"? intersects: IntersectsFilter and: [MultiPolygonBaseFilter] or: [MultiPolygonBaseFilter] not: MultiPolygonBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа пространственной информации: мультиполигона "?"?"? input MultiPolygonManyBaseFilter { every:  MultiPolygonBaseFilter some:  MultiPolygonBaseFilter none: MultiPolygonBaseFilter }
21 type GeoTrackBase "?"?" Входной объект: фильтр 1-к-1 для базового типа пространственно-временной информации: трек "?"?"? input GeoTrackBaseFilter { "?"?" Фильтр для временной информации: прохождение маршрута в указанное время "?"?" time: DateTimeBaseFilter "?"?" Фильтр для пространственной информации: нахождение около аргумента фильтра в заданных пределах "?"?"? near: NearFilter! "?"?" Фильтр для пространственно-временной информации: нахождение около аргумента фильтра в заданных пределах в указанное время "?"?" nearTime: NearTimeFilter! "?"?" Фильтр для пространственной информации: нахождение внутри заданного полигона "?""?? within: WithinFilter! "?"?" Фильтр для пространственно-временной информации: нахождение внутри заданного полигона в указанное время "?"?" withinTime: WithinTimeFilter! "?"?" Фильтр для пространственной информации: пересечение с заданным полигоном "?"?"? intersects: IntersectsFilter! "?"?" Фильтр для пространственно-временной информации: пересечение с заданным полигоном в указанное время "?"?"? intersectsTime: IntersectsTimeFilter! "?"?" Фильтр для пространственно-временной информации: пересечение с заданным треком в указанных промежутках времени и расстояния "?"?"? intersectsTrack: IntersectsTrackFilter! and: [GeoTrackBaseFilter] or: [GeoTrackBaseFilter] not: GeoTrackBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа пространственно-временной информации: трек "?"?"? input GeoTrackManyBaseFilter { every: GeoTrackBaseFilter some: GeoTrackBaseFilter none: GeoTrackBaseFilter } "?"?"? Входной объект: пространственно-временной фильтр нахождения около заданной точки в указанных пределах в заданное время "?"?"? input NearTimeFilter { distance: Float! point: PointRef! time: DateTimeBaseFilter! } "?"?"? Входной объект: пространственно-временной фильтр нахождения внутри заданного полигона в указанное время "?"?"? input WithinTimeFilter { polygon: PolygonRef! time: DateTimeBaseFilter! } "?"?"? Входной объект: пространственно-временной фильтр пересечения с заданным полигоном в указанное время "?"?"? input IntersectsTimeFilter { polygon: PolygonRef time: DateTimeBaseFilter! } "?"?"? Входной объект: пространственно-временной фильтр пересечения с заданным треком в указанных интервалах расстояния и времени "?"?"? input IntersectsTrackFilter { geotrack: GeoTrackRef! deltaTime: DeltaTimeRef! distance: Float! } "?"?"? Входной объект: период времени в секундах "?"?"? input DeltaTimeRef { second: Int! } "?"?"? Входной объект: трек для использования в фильтрах "?"?"? input GeoTrackRef { pointsInTime: [PointTimeRef]! }
22 type BankAccountInfoBase "?"?" Входной объект: фильтр 1-к-1 для базового типа банковских данных "?"?"? input BankAccountInfoBaseFilter { "?"?" Фильтр для имени банка "?"?" bankName: StringRegExpExactFilter "?"?" Фильтр для номера счета "?"?" account: StringRegExpExactFilter "?"?" Фильтр для номера корреспондентского счета "?"?" corrAccount: StringRegExpExactFilter "?"?" Фильтр для номера карты "?"?" cardNumber: StringRegExpExactFilter "?"?" Фильтр для банковского идентификационного кода "?"?" rcbic: StringRegExpExactFilter "?"?" Фильтр для КПП "?"?" kpp: StringRegExpExactFilter and: [BankAccountInfoBaseFilter] or: [BankAccountInfoBaseFilter] not: BankAccountInfoBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа банковских данных "?"?"? input BankAccountInfoManyBaseFilter { every:  BankAccountInfoBaseFilter some:  BankAccountInfoBaseFilter none: BankAccountInfoBaseFilter }
23 type BankTransferInfoBase "?"?" Входной объект: фильтр 1-к-1 для базового типа банковских переводов "?"?"? input BankTransferInfoBaseFilter { "?"?" Фильтр для отправителя "?"?" from: BankAccountInfoBaseFilter "?"?" Фильтр для получателя "?"?" to: BankAccountInfoBaseFilter "?"?" Фильтр для суммы перевода "?"?" amount: StringRegExpExactFilter "?"?" Фильтр для даты и времени перевода "?"?" data: DateTimeBaseFilter and: [BankTransferInfoBaseFilter] or: [BankTransferInfoBaseFilter] not: BankTransferInfoBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа банковских переводов "?"?"? input BankTransferInfoManyBaseFilter { every:  BankTransferInfoBaseFilter some:  BankTransferInfoBaseFilter none: BankTransferInfoBaseFilter }
24 type OrganizationInfoBase "?"?" Входной объект: фильтр 1-к-1 для базового типа сведений о юридических лицах и индивидуальных предпринимателях "?"?"? input OrganizationInfoBaseFilter { "?"?" Фильтр для полного наименования организации "?"?" nameFull: StringRegExpExactFilter "?"?" Фильтр для сокращенного наименования организации "?"?" nameSmall: StringRegExpExactFilter "?"?" Фильтр для ГРН организации "?"?" grn: GRNBaseFilter "?"?" Фильтр для ИНН организации "?"?" inn: InnBaseFilter "?"?" Фильтр для банковских данных организации "?"?" bankInfo: BankAccountInfoBaseFilter "?"?" Фильтр для номера телефона организации "?"?" msisdn: MsisdnBaseFilter "?"?" Фильтр для web-сайта организации "?"?" webSite: URLBaseFilter "?"?" Фильтр для электронной почты организации "?"?" email: EmailBaseFilter "?"?" Фильтр для даты регистрации организации "?"?" dataRegistration: DateTimeBaseFilter "?"?" Фильтр для неструктурированного адреса организации "?"?" address: AddressUnstructureBaseFilter "?"?" Фильтр для представителя организации "?"?" representative: OrganizationRepresentativeBaseFilter "?"?" Фильтр для ОКВЭД организации "?"?" okved: StringRegExpExactFilter "?"?" Фильтр для ЕГРЮЛ "?"?" egrul: StringRegExpExactFilter "?"?" Фильтр для ЕГРИП "?"?" egrip: StringRegExpExactFilter and: [OrganizationInfoBaseFilter] or: [OrganizationInfoBaseFilter] not: OrganizationInfoBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа сведений о юридических лицах и индивидуальных предпринимателях "?"?"? input OrganizationInfoManyBaseFilter { every:  OrganizationInfoBaseFilter some:  OrganizationInfoBaseFilter none: OrganizationInfoBaseFilter } "?"?" Входной объект: фильтр 1-к-1 для базового типа государственного регистрационного номера ОГРН и ОГРНИП "?"?"? input GRNBaseFilter { "?"?" Фильтр для государственного регистрационного номера - ОГРН и ОГРНИП "?"?"? grn: StringExactFilter and: [GRNBaseFilter] or: [GRNBaseFilter] not: GRNBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа государственного регистрационного номера ОГРН и ОГРНИП "?"?"? input GRNManyBaseFilter { every:  GRNBaseFilter some:  GRNBaseFilter none: GRNBaseFilter }
25 type OrganizationRepresentativeBase "?"?" Входной объект: фильтр 1-к-1 для базового типа сведений об учредителях (участниках) юридического лица, лицах, имеющих право без доверенности действовать от имени юридического лица "?"?"? input OrganizationRepresentativeBaseFilter { "?"?" Фильтр для должности "?"?" position: StringRegExpExactFilter "?"?" Фильтр для ИНН лица "?"?" inn: InnBaseFilter "?"?" Фильтр для ФИО "?"?" name: PersonBaseFilter and: [OrganizationRepresentativeBaseFilter] or: [OrganizationRepresentativeBaseFilter] not: OrganizationRepresentativeBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа сведений об учредителях (участниках) юридического лица, лицах, имеющих право без доверенности действовать от имени юридического лица "?"?"? input OrganizationRepresentativeManyBaseFilter { every:  OrganizationRepresentativeBaseFilter some:  OrganizationRepresentativeBaseFilter none: OrganizationRepresentativeBaseFilter }
26 type IpAddressBase "?"?" Входной объект: фильтр 1-к-1 для базового типа IP-адреса "?"?"? input IpAddressBaseFilter { "?"?" Фильтр для IP-адреса "?"?" ip: StringRegExpExactFilter "?"?"? Фильтр для маски подсети "?"?"? mask: IntFilter "?"?"? Фильтра для типа IP-адреса: ipv4, ipv6 "?"?"? type: IpType and: [IpAddressBaseFilter] or: [IpAddressBaseFilter] not: IpAddressBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа IP-адреса "?"?"? input IpAddressManyBaseFilter { every: IpAddressBaseFilter some:  IpAddressBaseFilter none: IpAddressBaseFilter }
27 type NetworkPeerBase "?"?" Входной объект: фильтр 1-к-1 для базового типа информации об участнике сетевого соединения "?"?"? input NetworkPeerBaseFilter { "?"?"? Фильтр для IP-адреса "?"?"? ip: IpAddressBaseFilter "?"?"? Фильтр для порта "?"?"? port: IntFilter "?"?"? Фильтр для номера протокола "?"?"? protocolNumber: IntFilter and: [NetworkPeerBaseFilter] or: [NetworkPeerBaseFilter] not: NetworkPeerBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа информации об участнике сетевого соединения "?"?"? input NetworkPeerManyBaseFilter { every:  NetworkPeerBaseFilter some:  NetworkPeerBaseFilter none: NetworkPeerBaseFilter }
28 type URLBase "?"?" Входной объект: фильтр 1-к-1 для базового типа URL-адреса "?"?"? input URLBaseFilter { "?"?" Фильтр для URL-адреса "?"?" url: StringRegExpExactFilter and: [URLBaseFilter] or: [URLBaseFilter] not: URLBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа URL-адреса "?"?"? input URLManyBaseFilter { every: URLBaseFilter some:  URLBaseFilter none: URLBaseFilter }
29 type DomainNameBase "?"?" Входной объект: фильтр 1-к-1 для базового типа доменного имени "?"?"? input DomainNameBaseFilter { "?"?" Фильтр для доменного имени "?"?" domainName: StringRegExpExactFilter and: [DomainNameBaseFilter] or: [DomainNameBaseFilter] not: DomainNameBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа доменного имени "?"?"? input DomainNameManyBaseFilter { every: DomainNameBaseFilter some:  DomainNameBaseFilter none: DomainNameBaseFilter }
30 type LoginBase "?"?" Входной объект: фильтр 1-к-1 для базового типа имени/идентификатора пользователя "?"?"? input LoginBaseFilter { "?"?" Фильтр для имени/идентификатора пользователя "?"?" login: StringRegExpExactFilter and: [LoginBaseFilter] or: [LoginBaseFilter] not: LoginBaseFilter } "?"?"? Входной объект: фильтр 1-ко-многим для базового типа имени/идентификатора пользователя "?"?"? input LoginManyBaseFilter { every:  LoginBaseFilter some:  LoginBaseFilter none: LoginBaseFilter }
31 scalar Int "?"?"? Входной объект: используемые функции для фильтрации значений типа Int "?"?"? input IntFilter { "?"?" Равно "?"?" eq: Int "?"?" В [списке] "?"?" in: [Int] "?"?" Меньше либо равно "?"?" le: Int "?"?" Меньше, чем "?"?" lt: Int "?"?" Больше либо равно "?"?" ge: Int "?"?" Больше, чем "?"?" gt: Int "?"?" В промежутке "?"?" between: IntRange } "?"?"? Входной объект: промежуток типа Int для использования в фильтрах "?"?"? input IntRange { min: Int! max: Int! }
32 scalar Float "?"?"? Входной объект: используемые функции для фильтрации значений типа Float "?"?"? input FloatFilter { "?"?" Равно "?"?" eq: Float "?"?" В [списке] "?"?" in: [Float] "?"?" Меньше либо равно "?"?" le: Float "?"?" Меньше, чем "?"?" lt: Float "?"?" Больше либо равно "?"?" ge: Float "?"?" Больше, чем "?"?" gt: Float "?"?" В промежутке "?"?" between: FloatRange } "?"?"? Входной объект: промежуток типа Float для использования в фильтрах "?"?"? input FloatRange { min: Float! max: Float! }
33 scalar String "?"?"? Входной объект: комбинация используемых функций для фильтрации значений типа String "?"?"? input StringExactFilter { "?"?" Равно "?"?" eq: String "?"?" В [списке] "?"?" in: [String] "?"?" Меньше либо равно "?"?" le: String "?"?" Меньше, чем "?"?" lt: String "?"?" Больше либо равно "?"?" ge: String "?"?" Больше, чем "?"?" gt: String "?"?" В промежутке "?"?" between: StringRange } "?"?"? Входной объект: промежуток типа String для использования в фильтрах "?"?"? input StringRange { min: String! max: String! } "?"?"? Входной объект: комбинация используемых функций для фильтрации значений типа String "?"?"? input StringFullTextFilter { "?"?" Полнотекстовый поиск, соответствующий всему заданному тексту "?"?" alloftext: String "?"?" Полнотекстовый поиск, соответствующий любому набору из заданного текста "?"?" anyoftext: String } "?"?"? Входной объект: комбинация используемых функций для фильтрации значений типа String "?"?"? input StringRegExpFilter { "?"?" Регулярное выражение в формате POSIX Basic Regular Expression "?"?" regexp: String } "?"?"? Входной объект: комбинация используемых функций для фильтрации значений типа String "?"?"? input StringTermFilter { "?"?" Соответствие строкам, содержащим все указанные термы в любом порядке; без учета регистра "?"?" allofterms: String "?"?" Соответствие строкам, содержащим любой из указанных термов в произвольном порядке; без учета регистра "?"?" anyofterms: String } "?"?"? Входной объект: комбинация используемых функций для фильтрации значений типа String "?"?"? input StringRegExpExactFilter { "?"?" Регулярное выражение в формате POSIX Basic Regular Expression "?"?" regexp: String "?"?" Равно "?"?" eq: String "?"?" В [списке] "?"?" in: [String] "?"?" Меньше либо равно "?"?" le: String "?"?" Меньше, чем "?"?" lt: String "?"?" Больше либо равно "?"?" ge: String "?"?" Больше, чем "?"?" gt: String "?"?" В промежутке "?"?" between: StringRange } "?"?"? Входной объект: комбинация используемых функций для фильтрации значений типа String "?"?"? input StringRegExpFullTextFilter { "?"?" Регулярное выражение в формате POSIX Basic Regular Expression "?"?" regexp: String "?"?" Полнотекстовый поиск, соответствующий всему заданному тексту "?"?" alloftext: String "?"?" Полнотекстовый поиск, соответствующий любому набору из заданного текста "?"?" anyoftext: String } "?"?"? Входной объект: комбинация используемых функции для фильтрации значений типа String "?"?"? input StringTermExactFilter {     allofterms: String "?"?" Соответствие строкам, содержащим любой из указанных термов в произвольном порядке; без учета регистра "?"?" anyofterms: String "?"?" Равно "?"?" eq: String "?"?" В [списке] "?"?" in: [String] "?"?" Меньше либо равно "?"?" le: String "?"?" Меньше, чем "?"?" lt: String "?"?" Больше либо равно "?"?" ge: String "?"?" Больше, чем "?"?" gt: String "?"?" В промежутке "?"?" between: StringRange } "?"?"? Входной объект: комбинация используемых функций для фильтрации значений типа String "?"?"? input StringTermFullTextFilter { "?"?" Соответствие строкам, содержащим все указанные термы в любом порядке; без учета регистра "?"?" allofterms: String "?"?" Соответствие строкам, содержащим любой из указанных термов в произвольном порядке; без учета регистра "?"?" anyofterms: String "?"?" Полнотекстовый поиск, соответствующий всему заданному тексту "?"?" alloftext: String "?"?" Полнотекстовый поиск, соответствующий любому набору из заданного текста "?"?" anyoftext: String }

Приложение N 7
к Требованиям к вычислительным мощностям, используемым провайдером
хостинга, для проведения уполномоченными государственными органами,
осуществляющими оперативно-розыскную деятельность или обеспечение безопасности
Российской Федерации, мероприятий в целях реализации возложенных на них задач
от __.__.______ N ______

Требования, предъявляемые к формату передачи данных на языке GraphQL по протоколу WebSocket

1. ТС ОРМ и ПУ для передачи данных на языке GraphQL по протоколу WebSocket должны использовать подпротокол graphql-transport-ws.

2. ТС ОРМ и ПУ взаимодействую по протоколу WebSocket посредствам сообщений. Для кодирования сообщений применяется формат JSON.

3. Все сообщения должны содержать поле "type", определяющее тип сообщения. Сообщение в зависимости от типа также может содержать дополнительные поля:

"id" - идентификатор запроса, использующийся для последующего определения ответов ТС ОРМ и привязки их к запросам ПУ;

"payload" - дополнительные данные для некоторых типов сообщений.

4. В любой момент времени ТС ОРМ должны позволять выполнять несколько запросов ПУ с уникальными идентификаторами. При этом передача сообщений, относящихся к различным запросам, может чередоваться.

5. ТС ОРМ должны закрывать соединение по протоколу WebSocket при возникновении критической ошибки (сбое в работе) и тем самым уведомлять ПУ о данной ситуации.

6. ПУ может корректно закрывать соединение по протоколу WebSocket с кодом 1000 и причиной закрытия "Normal Closure".

7. ПУ перед отправкой запросов на языке GraphQL должен открыть сессию (см. подпункт 1 п. 8 настоящего приложения) поверх протокола WebSocket.

8. ТС ОРМ и ПУ взаимодействуют по протоколу WebSocket с использованием следующих типов сообщений:

1) Сообщение "ConnectionInit". Данное сообщение направляется ПУ в адрес ТС ОРМ для открытия сессии. ПУ может передавать дополнительную информацию о сессии в поле "payload". ТС ОРМ должны получить данное сообщение в течение заданного периода времени (определяется во время внедрения ТС ОРМ и согласовывается с уполномоченным государственным органом). Если ПУ не отправило данное сообщение в течение заданного периода времени, то ТС ОРМ должны закрыть соединение по протоколу WebSocket с кодом 4408 и причиной закрытия "Connection initialization timeout". Если ТС ОРМ получили более одного сообщения "ConnectionInit", то они должны закрыть соединение по протоколу WebSocket с кодом 4429 и причиной закрытия "Too many initialization requests".

Формат сообщения "ConnectionInit" (поле "payload" опциональное):

{

"type": "connection_init",

"payload": "string"

}

2) Сообщение "ConnectionAck". Данное сообщение подтверждает успешное создание сессии и направляется ТС ОРМ в адрес ПУ в ответ на сообщение "ConnectionInit". ТС ОРМ могут передавать дополнительную информацию о сессии в поле "payload". ПУ после получения данного сообщения может отправлять запросы на языке GraphQL с помощью сообщений "Subscribe" (см. подпункт 3 п. 8 настоящего приложения).

Формат сообщения "ConnectionAck" (поле "payload" опциональное):

{

"type": "connection_ack",

"payload": "string"

}

3) Сообщение "Subscribe". Данное сообщение направляется ПУ в адрес ТС ОРМ и содержит запрос на языке GraphQL в поле "query" поля "payload". Поле "id" содержит уникальный идентификатор запроса, формируемый ПУ. Если запрос с таким идентификатором уже выполняется, то ТС ОРМ должны закрыть соединение по протоколу WebSocket с кодом 4409 и причиной закрытия "Subscriber for <unique-operation-id> already exists". Разрешается повторное использование идентификатора после завершения выполнения запроса на стороне ТС ОРМ. Если ПУ отправил данное сообщение до получения сообщения "ConnectionAck", то ТС ОРМ должны закрыть соединение по протоколу WebSocket с кодом 4401 и причиной закрытия "Unauthorized".

Формат сообщения "Subscribe" (поля "operationName", "variables", "extensions" опциональные):

{

"id": "<unique-operation-id>",

"type": "subscribe",

"payload": {

"operationName": "string",

"query": "string",

"variables": "string",

"extensions": "string"

}

}

4) Сообщение "Next". Данное сообщение направляется ТС ОРМ в адрес ПУ и содержит полные или частичные результаты выполнения запроса, ранее направленного ПУ в сообщении "Subscribe". Поле "id" содержит уникальный идентификатор запроса, ранее сформированный ПУ. Поле "payload" содержит результаты выполнения запроса в формате аналогичном для конечной точки "/query" согласно спецификации языка GraphQL.

Формат сообщения "Next:

{

"id": "<unique-operation-id>",

"type": "next",

"payload": "ExecutionResult"

}

5) Сообщение "Error". Данное сообщение направляется ТС ОРМ в адрес ПУ и содержит информацию об ошибке в ходе выполнения запроса, ранее направленного ПУ в сообщении "Subscribe". Поле "id" содержит уникальный идентификатор запроса, ранее сформированный ПУ. Поле "payload" содержит информацию об ошибке в формате согласно спецификации языка GraphQL. Ошибка может возникнуть как на начальном этапе выполнения запроса (например, ошибка валидации запроса), так и в ходе выполнения запроса. После возникновения ошибки ТС ОРМ прекращают выполнение запроса и не направляют в сторону ПУ больше никаких сообщений.

Формат сообщения "Error":

{

"id": "<unique-operation-id>",

"type": "error",

"payload": "GraphQLError"

}

6) Сообщение "Complete". Данное сообщение может направляться в обоих направлениях. Поле "id" содержит уникальный идентификатор запроса, ранее сформированный ПУ. Отправка данного сообщения от ТС ОРМ в адрес ПУ означает завершение выполнения запроса с соответствующим идентификатором. Если ранее ТС ОРМ отправили сообщение "Error", то данное сообщение не отправляется. Отправка данного сообщения от ПУ в адрес ТС ОРМ означает, что ПУ хочет прервать выполнение запроса с соответствующим идентификатором и с данного момента не принимает результаты его выполнения.

Формат сообщения "Complete:

{

"id": "<unique-operation-id>",

"type": "complete"

}

9. Получение ПУ или ТС ОРМ иных сообщений, отличных от указанных в п. 8 настоящего приложения, должно приводить к закрытию соединения по протоколу WebSocket с кодом 4400 и причиной закрытия, содержащей описание ошибки в типе или формате сообщения.

Приложение N 8
к Требованиям к вычислительным мощностям, используемым провайдером
хостинга, для проведения уполномоченными государственными органами,
осуществляющими оперативно-розыскную деятельность или обеспечение безопасности
Российской Федерации, мероприятий в целях реализации возложенных на них задач
от __.__.______ N ______

Требования, предъявляемые к запросам мониторинга и формату их передачи по интерфейсу взаимодействия между ПУ и ТС ОРМ

1. ТС ОРМ должны обеспечивать получение ПУ следующей информации о структуре и функционировании ТС ОРМ по запросу ПУ:

1) о структуре и составе ТС ОРМ, составе и состоянии интерфейса взаимодействия ТС ОРМ с ПУ;

2) об установленном в ТС ОРМ общесистемном ПО, перечне и состоянии программных модулей в составе ПО ТС ОРМ ;

3) о точках подключения ТС ОРМ к ИС и интерфейсах ввода информации в ТС ОРМ .

2. ТС ОРМ по запросу ПУ должны предоставлять следующую информацию в части структуры и состава ТС ОРМ , состава и состояния интерфейса взаимодействия ТС ОРМ с ПУ:

1) перечень коммутационного и серверного оборудования, средств хранения данных с его идентификацией;

2) идентификацию интерфейсов подключения оборудования ТС ОРМ друг к другу;

3) параметры для серверного оборудования:

общий и занятый объем оперативной памяти;

количество сетевых интерфейсов с их идентификацией, нагрузку;

общее количество процессоров, загрузку;

общий объем дискового пространства, объем свободного пространства;

4) параметры технических средств хранения данных:

перечень модулей, составляющих средства хранения данных с их идентификацией;

для каждого входящего в состав средств хранения данных модуля: общий объем дискового пространства, объем свободного дискового пространства и состояние модуля (штатное функционирование, сбой, не функционирует), текстовую расшифровку сбоя.

3. ТС ОРМ по запросу ПУ должны предоставлять информацию в части точек подключения ТС ОРМ к ИС, интерфейсов ввода информации в ТС ОРМ , содержащую:

1) перечень точек подключения к ИС провайдера хостингаи точек ввода информации в ТС ОРМ с их идентификацией;

2) для каждой точки подключения предоставляет информацию о:

состоянии точки подключения (ввода информации) (штатное функционирование, сбой, не функционирует), текстовую расшифровку сбоя;

объеме информации, поступающей в секунду;

периоде времени, в течение которого на точку подключения/ввода информации в ТС ОРМ не поступала информация.

4. ТС ОРМ по запросу ПУ должны предоставлять следующую информацию в части состава ПО ТС ОРМ и его состояния:

1) перечень установленного общесистемного ПО с его идентификацией;

2) информацию для общесистемного ПО:

идентификатор ТС ОРМ, на котором установлено ПО;

наименование ПО;

состояние ПО (штатное функционирование, сбой, не функционирует), текстовую расшифровку сбоя;

3) перечень установленного ПО ТС ОРМ с его идентификацией;

4) информацию для ПО ТС ОРМ:

идентификатор ТС ОРМ, на котором установлено ПО;

назначение (определяется разработчиком ТС ОРМ);

состояние (штатное функционирование, сбой, не функционирует), текстовую расшифровку сбоя;

список контролируемых параметров (определяется разработчиком ТС ОРМ).

5. Информация о функционировании и состоянии ТС ОРМ, указанная в п. 1-4 настоящего приложения, должна быть представлена в виде временных рядов (далее - метрик).

6. Метрики должны иметь следующий обязательный набор меток (пара ключ-значение):

systemtype - относится ли метрика к оборудованию или ПО. Может принимать одно из значений: "hardware" или "software";

moduleid - идентификатор модуля;

modulename - наименование модуля;

moduletype - тип модуля;

blocknumber - номер блока оборудования;

groupname - наименование группы метрик;

softwareparentmoduleid - идентификатор модуля ПО, в состав которого входит модуль с данной метрикой;

hardwareparentmoduleid - идентификатор модуля оборудования, в состав которого входит модуль с данной метрикой.

7. Для метрик также должны быть заданы единицы измерения и описания их назначения на русском языке.

8. Для получения значений метрик ПУ направляет ТС ОРМ запросы мониторинга на конечную точку "/metric".

9. Для кодирования содержимого запросов мониторинга и ответов должен применяться формат JSON.

10. ТС ОРМ при успешном выполнении запросов мониторинга должны возвращать HTTP код 2xx.

11. ТС ОРМ при возникновении ошибки во время выполнения запросов мониторинга должны в ответе возвращать поле "error" с информацией об ошибке и следующие HTTP коды:

400 Bad Request - в запросе отсутствуют или некорректно заданы параметры;

422 Unprocessable Entity - неправильный формат запроса на языке PromQL (см. п. 13 настоящего приложения);

503 Service Unavailable - выполнение запроса прервано на стороне ТС ОРМ.

12. Ответы на запросы мониторинга должны иметь следующий формат:

{

"status": "success" | "error",

"data": <data>,

"errorType": "<string>",

"error": "<string>",

"warnings": ["<string>"]

}

Поле "status" - статус выполнения запроса, может принимать одно из двух значений: "success" или "error".

Поле "data" - результат выполнения запроса, структура поля зависит от конечной точки, на которую был отправлен запрос (см. п. 13 настоящего приложения).

Поля "errorType" и "error" - соответственно тип и описание ошибки, возникшей при выполнении запроса. Данные поля должны быть задана только, если поле "status" имеет значение "error".

Поле "warnings" - незначительные ошибки (предупреждения), возникшие во время выполнения запроса, но существенно не повлиявшие на его выполнение. При этом поле "data" может содержать частичные результаты выполнения запроса.

13. ТС ОРМ должны реализовывать внутри конечной точки "/metric" следующие дополнительные конечные точки:

1) "/api/v1/query" - предназначена для приема запросов мониторинга от ПУ в целях получения метрик для конкретного значения времени, а также передачи на ПУ результатов выполнения данных запросов. Данная конечная точка должна поддерживать HTTP методы GET и POST.

Принимаемые параметры:

"query" - запрос на языке PromQL;

"time" (опционально) - дата и время в формате согласно RFC3339 или Unix-время;

"duration" (опционально) - период времени в формате согласно Time Durations языка PromQL.

Поле "data" для ответа на запросы мониторинга для данной конечной точки должно иметь следующий вид:

{

"resultType": "matrix" | "vector" | "scalar" | "string",

"result": <value>

}

Формат поля "result" зависит от значения поля "resultType". См. п. 14 настоящего приложения.

2) "/api/v1/query_range" - предназначена для приема запросов мониторинга от ПУ в целях получения метрик для диапазона времени, а также передачи на ПУ результатов выполнения данных запросов. Данная конечная точка должна поддерживать HTTP методы GET и POST.

Принимаемые параметры:

"query" - запрос на языке PromQL;

"start" - дата и время начала диапазона в формате согласно RFC3339 или Unix-время;

"end" - дата и время конца диапазона в формате согласно RFC3339 или Unix-время;

"step" - временной шаг запроса в формате согласно Time Durations языка PromQL или число с плавающей точкой;

"duration" (опционально) - период времени в формате согласно Time Durations языка PromQL.

Поле "data" для ответа на запросы мониторинга для данной конечной точки должно иметь следующий вид:

{

"resultType": "matrix",

"result": <value>

}

Формат поля "result" представлен в подпункте 1 п. 14 настоящего приложения.

3) "/api/v1/series" - предназначена для приема запросов мониторинга от ПУ в целях получения списка метрик, которые имеют заданный набор меток, а также передачи на ПУ результатов выполнения данных запросов. Данная конечная точка должна поддерживать HTTP методы GET и POST.

Принимаемые параметры:

"match[]" - перечень запрашиваемых меток в формате Time series Selectors языка PromQL;

"start" - дата и время начала диапазона в формате согласно RFC3339 или Unix-время;

"end" - дата и время конца диапазона в формате согласно RFC3339 или Unix-время.

Поле "data" для ответа на запросы мониторинга для данной конечной точки должно содержать перечень метрик (представляются перечнем их меток (пара ключ-значение)), удовлетворяющих критериям запроса.

4) "/api/v1/labels" - предназначена для приема запросов мониторинга от ПУ в целях получения списка меток, которые имеют заданный набор метрик, а также передачи на ПУ результатов выполнения данных запросов. Данная конечная точка должна поддерживать HTTP методы GET и POST.

Принимаемые параметры:

"match[]" (опционально) - перечень запрашиваемых метрик в формате Time series Selectors языка PromQL;

"start" (опционально) - дата и время начала диапазона в формате согласно RFC3339 или Unix-время;

"end" (опционально) - дата и время конца диапазона в формате согласно RFC3339 или Unix-время.

Поле "data" для ответа на запросы мониторинга для данной конечной точки должно содержать перечень названий меток, удовлетворяющих критериям запроса.

5) "/api/v1/label/<label_name>/values" - предназначена для приема запросов мониторинга от ПУ в целях получения значений заданных меток, а также передачи на ПУ результатов выполнения данных запросов. Данная конечная точка должна поддерживать HTTP метод GET.

Принимаемые параметры:

"match[]" (опционально) - перечень запрашиваемых метрик в формате Time series Selectors языка PromQL;

"start" (опционально) - дата и время начала диапазона в формате согласно RFC3339 или Unix-время;

"end" (опционально) - дата и время конца диапазона в формате согласно RFC3339 или Unix-время.

Поле "data" для ответа на запросы мониторинга для данной конечной точки должно содержать перечень значений меток, удовлетворяющих критериям запроса.

14. Поле "result" в ответах на запросы мониторинга может иметь один из следующих форматов:

1) Если поле "resultType" имеет значение "matrix", то поле "result" должно иметь следующий формат:

[

{

"metric": {"<label_name>": "<label_value>", ... },

"values": [[<unix_time>, "<sample_value>"], ... ],

"histograms": [[<unix_time>, <histogram>], ... ]

},

...

]

2) Если поле "resultType" имеет значение "vector", то поле "result" должно иметь следующий формат:

[

{

"metric": {"<label_name>": "<label_value>", ... },

"value": [<unix_time>, "<sample_value>"],

"histogram": [<unix_time>, <histogram>],

},

...

]

3) Если поле "resultType" имеет значение "scalar", то поле "result" должно иметь следующий формат:

[<unix_time>, "<scalar_value>"]

4) Если поле "resultType" имеет значение "string", то поле "result" должно иметь следующий формат:

[<unix_time>, "<string_value>"]

-------------------------------------------

*(1) https://datatracker.ietf.org/doc/html/rfc8259

*(2) https://datatracker.ietf.org/doc/html/rfc7230#section-4.1

*(3) https://datatracker.ietf.org/doc/html/rfc7233

*(4) https://datatracker.ietf.org/doc/html/rfc8259

Обзор документа


Провайдеров хостинга обязали взаимодействовать с органами ФСБ. В связи с этим Минцифры предлагает установить требования к вычислительной мощности, используемой провайдером хостинга, для проведения оперативно-разыскных мероприятий и мероприятий по обеспечению безопасности.

Для просмотра актуального текста документа и получения полной информации о вступлении в силу, изменениях и порядке применения документа, воспользуйтесь поиском в Интернет-версии системы ГАРАНТ: