PRISM-SERVICE является сервисом дисперсии данных блокчейна CyberWay, которые после вторичной обработки другими микросервисами могут быть использованы в golos.io и приложениях.
- Установить
docker
иdocker-compose
- Установить необходимые ENV-переменные в
.env
файл (шаблон есть в.env.example
) - Скопировать и переименовать нужный docker-compose файл в
docker-compose.yml
. - Вызвать команду
docker-compose up -d --build
в корне проекта
Существует два варианта запуска сервиса:
- одно-нодовый (
docker-compose.dev.yml
) где процесс обработки новых блоков происходит в том же процессе что и выдача данных; - двух-нодовый (
docker-compose.multi-node.yml
) где процессы обработки блоков и обработка API разделены на два независимых процесса, рекомендованно для запуска на продакшене.
API JSON-RPC:
search: // Поиск по данным из призмы
type <string>('matchPrefix') // Тип поиска. Принимает значения "matchPrefix" и "match"
[
match // Ищет по вхождениям слов. Например, на запрос `app` найдет только `app`
| matchPrefix // Ищет по вхождениям частей слов. Например, на запрос `app` найдет и `app`, и `apple`
]
where <string>('all') // Модель, в которой нужно искать
[
all // Ищет везде
| comment // Ищет только в комментах
| post // Ищет только в постах
]
text <string> // Текст, который требуется найти
field <string>('all') // Поле, по которому требуется выполнить поиск
[
all // Ищет по всем полям
| title // Ищет только в `title` (доступно для `comments` и `posts`)
| preview // Ищет только в `preview` (доступно для `comments` и `posts`)
| raw // Ищет только в `raw` (доступно для `comments` и `posts`)
| full // Ищет только в `full` (доступно для `comments` и `posts`)
| permlink // Ищет только в `permlink` (доступно для `comments` и `posts`)
]
limit <number>(10) // Ограничение на размер найденных результатов
offset <number>(0) // Количество результатов, которое надо "пропустить"
getProfile: // Получение профиля пользователя
requestedUserId <string> // Идентификатор пользователя
username <string> // Имя пользователя относительно домена
user <string> // Любое из имен выше
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
@deprecated
type <string>('cyber') // Тип профиля (устарело)
[
cyber // CyberWay
| gls // Golos
]
getChargers: // Получение батареек пользователя
userId <string> // Идентификатор пользователя
getPost: // Получение конкретного поста
currentUserId <string/null> // Идентификатор текущего пользователя
requestedUserId <string> // Идетификатор запрошенного пользователя
username <string> // Имя пользователя относительно домена
user <string> // Любое из имен выше
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
permlink <string> // Пермлинк поста
contentType <string>('web') // Определить тип получаемого контента
[
web // Контент, пригодный для веб-клиентов
| mobile // Контент, пригодный для мобильных устройств
| raw // Сырой контент без обработки
]
getComment: // Получение конкретного комментария
currentUserId <string/null> // Идентификатор текущего пользователя
requestedUserId <string/null> // Идетификатор запрошенного пользователя
username <string> // Имя пользователя относительно домена
user <string> // Любое из имен выше
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
permlink <string> // Пермлинк поста
contentType <string>('web') // Определить тип получаемого контента
[
web // Контент, пригодный для веб-клиентов
| mobile // Контент, пригодный для мобильных устройств
| raw // Сырой контент без обработки
]
getFeed: // Получение ленты постов
type <string>('community') // Тип ленты
[
community // Лента комьюнити, требует communityId
| subscriptions // Лента подписок пользователя, требует requestedUserId
| byUser // Лента постов самого пользователя, требует requestedUserId
]
sortBy <string>('time') // Способ сортировки
[
time // Сначала старые, потом новые
| timeDesc // Сначала новые, потом старые
| popular // По популярности (только для community)
]
timeframe <string>('day') // Область выборки сортировки (только для community + popular)
[
day // За день
| week // За неделю
| month // За месяц
| year // За год
| all // За всё время
| WilsonHot // Aлгоритм Вилсона, актуальный контент сейчас
| WilsonTrending // Aлгоритм Вилсона, в целом популярный контент
]
sequenceKey <string/null> // Идентификатор пагинации для получения следующего контента
limit <number> // Количество элементов
currentUserId <string/null> // Идентификатор текущего пользователя
requestedUserId <string/null> // Идетификатор запрошенного пользователя
communityId <string/null> // Идентификатор комьюнити
tags <string[]/null> // Теги для фильтрации (только для community и сортировкой по времени)
contentType <string>('web') // Определить тип получаемого контента
[
web // Контент, пригодный для веб-клиентов
| mobile // Контент, пригодный для мобильных устройств
| raw // Сырой контент без обработки
]
username <string> // Имя пользователя относительно домена
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
getComments: // Получение ленты комментариев
sortBy <string>('time') // Способ сортировки
[
time // Сначала старые, потом новые
| timeDesc // Сначала новые, потом старые
]
sequenceKey <string/null> // Идентификатор пагинации для получения следующего контента
limit <number>(10) // Количество элементов
type <string>('post') // Тип ленты
[
user // Получить комментарии пользователя, требует requestedUserId
| post // Получить комментарии для поста, требует requestedUserId, permlink
| replies // Получить комментарии, которые были оставлены пользователю, требует userId
]
currentUserId <string/null> // Идентификатор текущего пользователя
requestedUserId <string/null> // Идетификатор запрошенного пользователя
permlink <string/null> // Пермлинк поста
contentType <string>('web') // Определить тип получаемого контента
[
web // Контент, пригодный для веб-клиентов
| mobile // Контент, пригодный для мобильных устройств
| raw // Сырой контент без обработки
]
username <string> // Имя пользователя относительно домена
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
getNotifyMeta: // Получение мета-данных для отображения нотификации
userId <string> // Получить данные пользователя по идентификатору
communityId <string> // Получить данные комьюнити по идентификатору
postId: // Получить данные поста по идентификатору
userId <string> // Идентификатор пользователя-автора
permlink <string> // Пермлинк контента
commentId: // Получить данные комментария по идентификатору
userId <string> // Идентификатор пользователя-автора
permlink <string> // Пермлинк контента
contentId: // Получить данные поста/комментария по идентификатору
userId <string> // Идентификатор пользователя-автора
permlink <string> // Пермлинк контента
getPostVotes: // Получение списка голосов за пост
sequenceKey <string/null> // Идентификатор пагинации для получения следующего контента
limit <number>(10) // Количество элементов
userId <string> // Идентификатор пользователя
permlink <string> // Пермлинк поста
type <string> // Тип запрашиваемых голосов
[
like // Лайки
| dislike // Дизлайка
]
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
getCommentVotes: // Получение списка голосов за коммент
sequenceKey <string/null> // Идентификатор пагинации для получения следующего контента
limit <number>(10) // Количество элементов
userId <string> // Идентификатор пользователя
permlink <string> // Пермлинк комментария
type <string> // Тип запрашиваемых голосов
[
like // Лайки
| dislike // Дизлайка
]
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
resolveProfile: // Резолв идентификатора пользователя и аватара по имени с доменом
username <string> // Имя пользователя относительно домена
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
getSubscriptions: // Получить подписки пользователя
userId <string> // Идентификатор пользователя
type <string>('user') // Тип подписки
[
user // Подписчики-пользователи
| community // Подписчики-сообщества
]
sequenceKey <string/null> // Идентификатор пагинации для получения следующего контента
limit <number>(10) // Количество элементов
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
getSubscribers: // Получить подписчиков пользователя
userId <string> // Идентификатор пользователя
type <string>('user') // Тип подписки
[
user // Подписчики-пользователи
| community // Подписчики-сообщества
]
sequenceKey <string/null> // Идентификатор пагинации для получения следующего контента
limit <number>(10) // Количество элементов
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
getHashTagTop: // Получение топа хеш-тегов
communityId <string> // Идентификатор комьюнити
limit <number>(10) // Количество элементов
sequenceKey <string/null> // Идентификатор пагинации для получения следующего контента
getLeadersTop: // Получить топ лидеров
currentUserId <string/null> // Идентификатор текущего пользователя
communityId <string> // Идентификатор комьюнити
sequenceKey <string/null> // Идентификатор пагинации для получения следующего контента
limit <number>(10) // Количество элементов
query <string> // Префиксный поиск по имени аккаунта
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
getProposals: // Получить список предлагаемых изменений параметров сообществ
communityId <string> // Идентификатор комьюнити
sequenceKey <string/null> // Идентификатор пагинации для получения следующего контента
limit <number>(10) // Количество элементов
app <string>('cyber') // Тип приложения / домена
[
cyber // CyberWay
| gls // Golos
]
waitForBlock // Дождаться и получить ответ когда призма обработает указанный блок
blockNum <number> // Номер блока
waitForTransaction // Дождаться и получить ответ когда призма обработает указанную транзакцию
transactionId <string> // Идентификатор транзакции
Возможные переменные окружения ENV
:
-
GLS_CONNECTOR_HOST
(обязательно) - адрес, который будет использован для входящих подключений связи микросервисов.
Дефолтное значение -127.0.0.1
-
GLS_CONNECTOR_PORT
(обязательно) - адрес порта, который будет использован для входящих подключений связи микросервисов.
Дефолтное значение -3000
-
GLS_METRICS_HOST
(обязательно) - адрес хоста для метрик StatsD.
Дефолтное значение -127.0.0.1
-
GLS_METRICS_PORT
(обязательно) - адрес порта для метрик StatsD.
Дефолтное значение -8125
-
GLS_MONGO_CONNECT
- строка подключения к базе MongoDB.
Дефолтное значение -mongodb://mongo/admin
-
GLS_DAY_START
- время начала нового дня в часах относительно UTC.
Дефолтное значение -3
(день начинается в 00:00 по Москве) -
GLS_MAX_FEED_LIMIT
- максимальное количество постов отдаваемое в ленту на 1 запрос за 1 раз.
Дефолтное значение -100
-
GLS_FEED_CACHE_INTERVAL
- интервал перерассчета кешей для кешируемых типов лент (но полное удаление старого происходит поGLS_FEED_CACHE_TTL
).
Дефолтное значение -300000
(5 минут) -
GLS_FEED_CACHE_TTL
- время жизни каждого кеша ленты.
Дефолтное значение -28800000
(8 часов) -
GLS_FEED_CACHE_MAX_ITEMS
- максимальное количество элементов, кешированных для каждого типа ленты. Дефолтное значение -10000
(10 000) -
GLS_FACADE_CONNECT
(обязательно) - адрес подключения к микросервису фасаду. -
GLS_META_CONNECT
(обязательно) - адрес подключения к микросервису мета. -
GLS_MAX_HASH_TAG_SIZE
- максимальный размер хеш-тега для контента.
Дефолтное значение -32
-
GLS_RECENT_TRANSACTION_ID_TTL
- интервал хранения идентификаторов обработанных транзакций.
Дефолтное значение -180000
(3 минуты) -
GLS_MAX_WAIT_FOR_BLOCKCHAIN_TIMEOUT
- максимальное время, которое может ждатьwaitForBlock
и подобные методы API.
Дефолтное значение -20000
(20 секунд) -
GLS_SEARCH_SYNC_TIMEOUT
- интеравал синхронизации новых записей в призме с поисковым индексом. Дефолтное значение -1000
(1 секунда) -
GLS_SEARCH_DELETE_TIMEOUT
- интеравал синхронизации удаленных записей из призмы с поисковым индексом. Дефолтное значение -3600000
(1 час) -
GLS_SEARCH_CONNECTION_STRING
(обязательно) - строка подключения к поисковому индексу -
GLS_SEARCH_ENABLED
- определяет, должно ли происходить индексирование для полнотекстого поиска. Дефолтное значение -true
-
GLS_USE_GENESIS
- необходимо ли ожидать загрузки генезис-данных.
Дефолтное значение -true
-
GLS_MAX_QUERY_MEMORY_LIMIT
- лимит памяти для одного запроса, критично для системы кеширования.
Дефолтное значение -536870912
(512 Мб) -
GLS_ENABLE_BLOCK_HANDLE
- включает сбор данных из блокчейна, а также апи ожидания транзакций.
Дефолтное значение -true
-
GLS_ENABLE_PUBLIC_API
- включает выдачу данных по публичному апи, за исключением апи ожидания транзакций.
Дефолтное значение -true
-
GLS_BLOCKCHAIN_BROADCASTER_SERVER_NAME
- имя сервера рассыльщика блоков. -
GLS_BLOCKCHAIN_BROADCASTER_CLIENT_NAME
- имя клиента для подключения к рассыльщику блоков. -
GLS_BLOCKCHAIN_BROADCASTER_CONNECT
- строка подключения к рассыльщику блоков, может содержать авторизацию.