Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • C competence search
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • Deployments
    • Deployments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Container Registry
    • Terraform modules
  • Monitor
    • Monitor
    • Metrics
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar
  • 240 Поисковик компетенций
  • competence search
  • Wiki
  • Руководство разработчика

Руководство разработчика · Changes

Page history
1 done authored May 12, 2021 by Григорий Хромов's avatar Григорий Хромов
Hide whitespace changes
Inline Side-by-side
Руководство-разработчика.md
View page @ 44823a89
......@@ -21,6 +21,12 @@
## 1.3 Описание алгоритма и принципа работы модулей системы
>>>
:warning: **Внимание!** :warning:
Все ссылки с учетом строк приведены для программы на момент следующего [коммита](240/competence-search@c911531e19c93a1f7a0dc6b70b70c419284db23d). В будущем номера строк **могут быть смещены** в следствие редактирования исходного кода!
>>>
### 1.3.1 Описание алгоритма и принципа работы микросервисов-обработчиков
Алгоритм работы микросервисов-обработчиков представлен на рисунке.
......@@ -37,12 +43,6 @@
- [`W`](https://git.miem.hse.ru/240/competence-search/-/tree/master/wiki) - ссылка на код из обработчика данных **МИЭМ Wiki**;
- [`C`](https://git.miem.hse.ru/240/competence-search/-/tree/master/cabinet) - ссылка на код из обработчика данных ***Личный Кабинет МИЭМ**;
>>>
:warning: **Внимание!** :warning:
Все ссылки с учетом строк приведены для программы на момент следующего [коммита](240/competence-search@c911531e19c93a1f7a0dc6b70b70c419284db23d). В будущем номера строк **могут быть смещены** в следствие редактирования исходного кода!
>>>
Каждый обработчик в начале своей работы запускает **два** параллельных процесса ([`Z`](https://git.miem.hse.ru/240/competence-search/-/blob/c911531e19c93a1f7a0dc6b70b70c419284db23d/zulip/src/main.py#L20), [`W`](https://git.miem.hse.ru/240/competence-search/-/blob/c911531e19c93a1f7a0dc6b70b70c419284db23d/wiki/src/main.py#L20), [`C`](https://git.miem.hse.ru/240/competence-search/-/blob/c911531e19c93a1f7a0dc6b70b70c419284db23d/cabinet/src/main.py#L20)). Точкой входа для запуска процессов является строчка с ключом `command` в конфигурации запуска в файле [`docker-compose.yml`](https://git.miem.hse.ru/240/competence-search/-/blob/master/docker-compose.yml) или [`docker-compose.prod.yml`](https://git.miem.hse.ru/240/competence-search/-/blob/master/docker-compose.prod.yml).
Слева изображен **процесс-сервер**. Большую часть времени сервер ожидает получения запроса. Как только запрос был отправлен, сервер принимает его и определяет тип запроса. Если запрос является поисковым, сервер использует обученную модель обработки данных для формирования ответа на поисковой запрос (метод `GET` **/users** [`Z`](https://git.miem.hse.ru/240/competence-search/-/blob/c911531e19c93a1f7a0dc6b70b70c419284db23d/zulip/src/server/server.py#L66), [`W`](https://git.miem.hse.ru/240/competence-search/-/blob/c911531e19c93a1f7a0dc6b70b70c419284db23d/wiki/src/server/server.py#L39), [`C`](https://git.miem.hse.ru/240/competence-search/-/blob/c911531e19c93a1f7a0dc6b70b70c419284db23d/cabinet/src/server/server.py#L37)). В случае, если модель обработки данных не загружена в оперативную память (это происходит при первом запуске или при перезагрузке контейнера в случае сбоя), модель сначала загружается программой, затем формируется ответ. В конце ответ на запрос отправляется клиенту. `HTTP` статус запроса – `200` («Ok», «Успешно»). Если запрос является запросом на обновление модели (метод `PATCH` **/handler** [`Z`](https://git.miem.hse.ru/240/competence-search/-/blob/c911531e19c93a1f7a0dc6b70b70c419284db23d/zulip/src/server/server.py#L36), [`W`](https://git.miem.hse.ru/240/competence-search/-/blob/c911531e19c93a1f7a0dc6b70b70c419284db23d/wiki/src/server/server.py#L25), [`C`](https://git.miem.hse.ru/240/competence-search/-/blob/c911531e19c93a1f7a0dc6b70b70c419284db23d/cabinet/src/server/server.py#L23)), программа загружает из файла модель и отправляет клиенту сообщение с `HTTP` статусом `200` («Ok», «Успешно»). Все остальные запросы являются не валидными и клиенту возвращается сообщение с ошибкой и статусом HTTP `404` («Not found», «Не найден»).
......@@ -61,45 +61,87 @@
```json
{
"data": {
"user_1": {
"<имя>_score": 9.3
},
"user_2": {
"<имя>_score": 6.4
}
"data": {
"user_1": {
"<имя>_score": 9.3
},
"message": "Сообщение"
"user_2": {
"<имя>_score": 6.4
}
},
"message": "Сообщение"
}
```
Ключами корневого объекта `JSON` являются `data` и `message`. Ключ `message` является опциональным и служит для передачи служебных сообщений (например, если запрос был выполнен, но часть данных не была загружена). По ключу `data` находится объект, хранящий префиксы почты пользователей в виде ключей объекта. Значениями этих ключей являются объекты, содержащие как минимум один ключ – имя модели (или обрабатываемого сервиса), нижнее подчеркивание и слово `score`. Значением является оценка релевантности пользователя **моделей обработки данных**. В объектах пользователей также может быть представлена любая другая дополнительная информация (например, имя пользователя в корпоративном чате **Zulip**), если в параметрах запроса был указан параметр `more` со значением `true`.
### 1.3.2 Описание алгоритма и принципа работы главного микросервиса
Алгоритм работы микросервиса «Competence Search» можно описать следующей последовательностью действий:
1) Ожидание поискового запроса;
2) Получение запроса, асинхронная отправка копий текстового запроса всем микросервисам-обработчикам, хранящемся в списке обработчиков;
3) Асинхронный сбор ответов микросервисов-обработчиков, суммирование оценки с заранее проставленными весами для получения итоговой оценки, сортировка списка кандидатов по убыванию итоговой оценки релевантности;
4) Отправка ответа на запрос клиенту.
Список публичных REST API запросов, на которые может отвечать данные сервис представлен в таблице 2.
Алгоритм работы микросервиса **Competence Search** можно описать следующей последовательностью действий:
1. Ожидание поискового запроса;
2. Получение запроса, **асинхронная** отправка копий текстового запроса всем _микросервисам-обработчикам_ ([код](https://git.miem.hse.ru/240/competence-search/-/blob/c911531e19c93a1f7a0dc6b70b70c419284db23d/competence_search/src/main.py#L48)), хранящемся в списке обработчиков ([код](https://git.miem.hse.ru/240/competence-search/-/blob/c911531e19c93a1f7a0dc6b70b70c419284db23d/competence_search/src/services.py#L8));
3. Асинхронный сбор ответов микросервисов-обработчиков ([код](https://git.miem.hse.ru/240/competence-search/-/blob/c911531e19c93a1f7a0dc6b70b70c419284db23d/competence_search/src/services.py#L75)), суммирование оценки с заранее проставленными весами для получения итоговой оценки и сортировка списка кандидатов по убыванию итоговой оценки релевантности ([код](https://git.miem.hse.ru/240/competence-search/-/blob/c911531e19c93a1f7a0dc6b70b70c419284db23d/competence_search/src/services.py#L36));
4. Отправка ответа на запрос клиенту.
Список публичных `REST API` запросов, на которые может отвечать данные сервис:
| URL и метод запроса | Описание |
| ------ | ------ |
| /ping (GET) | Описание |
| /help (GET) | Запрос на получение справочной информации. Возвращает информацию в виде JSON строки, где по ключу «message» находится строка со справочной информацией. HTTP статус ответа – 200 («Ok», «Успешно»). |
| /users (GET) | Запрос на поиск кандидатов. В параметрах запроса должно быть задано ключевое слово «query» со значением в виде строки (поисковой запрос). Опционально можно передать параметр «more». Если его значение равно «true», запрос вернет дополнительную информацию. В случае отсутствия параметра «query» возвращает ответ с HTTP статусом 400 («Bad request», «Неправильный, некорректный запрос»). Иначе возвращает JSON ответ с HTTP статусом 200 («Ok», «Успешно»). |
| /feedback (POST) | Запрос, сохраняющий обратную связь. В теле запроса должна находиться JSON строка с ключами «bot_answer», «user_answer» и «user_info». Перенаправляет всю информацию на метод /feedback микросервиса «Gtable» и возвращает те же сообщения, что и микросервис с обратной связью. |
| `GET` **/ping** ([код](https://git.miem.hse.ru/240/competence-search/-/blob/c911531e19c93a1f7a0dc6b70b70c419284db23d/competence_search/src/main.py#L28))| Запрос, возвращающий `JSON` строку, содержащей все ответы модулей-обработчиков на запрос `GET` **/ping**. Используется в отладочных целях. Возвращает ответ `HTTP` со статусом `200` («Ok», «Успешно»). |
| `GET` **/help** ([код](https://git.miem.hse.ru/240/competence-search/-/blob/c911531e19c93a1f7a0dc6b70b70c419284db23d/competence_search/src/main.py#L34)) | Запрос на получение справочной информации. Возвращает информацию в виде `JSON` строки, где по ключу `message` находится строка со справочной информацией. `HTTP` статус ответа – `200` («Ok», «Успешно»). |
| `GET` **/users** ([код](https://git.miem.hse.ru/240/competence-search/-/blob/c911531e19c93a1f7a0dc6b70b70c419284db23d/competence_search/src/main.py#L39)) | Запрос на поиск кандидатов. В параметрах запроса должно быть задано ключевое слово `query` со значением в виде строки (поисковой запрос). Опционально можно передать параметр `more`. Если его значение равно `true`, запрос вернет дополнительную информацию. В случае отсутствия параметра `query` возвращает ответ с `HTTP` статусом `400` («Bad request», «Неправильный, некорректный запрос»). Иначе возвращает `JSON` ответ с `HTTP` статусом `200` («Ok», «Успешно»). |
| `POST` **/feedback** ([код](https://git.miem.hse.ru/240/competence-search/-/blob/c911531e19c93a1f7a0dc6b70b70c419284db23d/competence_search/src/main.py#L54)) | Запрос, сохраняющий обратную связь. В теле запроса должна находиться `JSON` строка с ключами `bot_answer`, `user_answer` и `user_info`. Перенаправляет всю информацию на метод `POST` **/feedback** микросервиса **Gtable** и возвращает те же сообщения, что и микросервис с обратной связью. |
Формат `JSON` ответа на запрос `GET` **/ping**:
```json
{
"cabinet": {
"alert_message": "Could not connect to the service container.",
"status_code": 503
},
"wiki" : {
"status_code": 200
},
"zulip": {
"status_code": 200
}
}
```
Формат JSON ответа на запрос GET /ping представлен на рисунке.
В возвращаемом объекте `JSON` представлены ответы всех модулей-обработчиков данных на запрос `GET` **/ping**. Если значение поля `status_code` внутри объектов по ключу с именем сервиса равно `200` («Ok», «Успешно»), обработчик доступен поисковику. Иначе модуль-обработчик не доступен поисковику и его данные не будут использованы для выполнения запроса.
![image](uploads/c457342245cfb1d18dd08f57b747bd48/image.png)
Формат `JSON` ответа на запрос `GET` **/users**:
Формат JSON ответа на запрос GET /users представлен на рисунке.
```json
{
"data": [
{
"email_prefix": "user_1",
"total_score": 1.0,
"wiki_score": 0.7,
"zulip_score": 4.3
},
{
"email_prefix": "user_2",
"total_score": 0.8,
"wiki_score": 0.4,
"zulip_score": 6.2
},
],
"cabinet": {
"alert_message": "Could not connect to the service container.",
"status_code": 503
}
}
```
![image](uploads/93c09d5323539d33569ccc6b3b277aed/image.png)
Обязательным ключом корневого объекта `JSON` является ключ `data`. Он содержит массив, отсортированный по убыванию значения `total_score` (итоговой оценки релевантности).
Обязательным ключом корневого объекта JSON является ключ «data». Он содержит массив, отсортированный по убыванию значения «total_score» (итоговой оценки релевантности). Элементами массива являются объекты, содержащие префикс корпоративной почты пользователя, оценку релевантности каждой модели обработки данных, суммарную оценку релевантности пользователя и дополнительную информацию (если в параметрах запроса был указан параметр «more» со значением «true»). В случае, если микросервис-обработчик не смог обработать запрос, к корневому объекту JSON добавляется ключ с названием сервиса. В нем хранится объект, содержащий сообщение-предупреждение, а также HTTP статус ошибки 503 – «Service unavailable», «Сервис недоступен».
Элементами массива являются объекты, содержащие префикс корпоративной почты пользователя, оценку релевантности каждого модуля-обработчика, суммарную оценку релевантности пользователя и дополнительную информацию (если в параметрах запроса был указан параметр `more` со значением `true`).
В случае, если модуль-обработчик не смог обработать запрос, к корневому объекту `JSON` добавляется ключ с названием сервиса. В нем хранится объект, содержащий сообщение-предупреждение, а также `HTTP` статус ошибки `503` – «Service unavailable», «Сервис недоступен».
# 2 Интерфейс общения с пользователем и обратная связь
## 2.1 Описание работы микросервисов обратной связи и чат-бота
......
Clone repository
  • Home
  • Архитектура проекта
  • Руководство администратора
  • Руководство разработчика