elixir-golos
7 лет назадРелиз ExGolos v0.8: улучшенный пайплайн ивентов
На связи @ontofractal. GenStage продюсеры теперь создают ивенты с следующей формой: %Golos.Event{data: ..., metadata: ...}` где данные соответствуют стракту нового блока или операции, а метаданные включают информацию о времени, блоке, источнике, блокчейне, была ли операция обработана и т.д.
Продюсер структурированных операций соответствует спецификации GenStage, что позволяет подключиться к пайплайну ивентов на любом этапе: блоки, операции или munged операции.
Репозитории и документация
Changelog
В этом релизе много обратно несовместимых изменений.
- форма ивентов изменена с tuple на map с ключами
data
иmetadata
- во всех ответах API ключи изменены на атомы вместо строк
- добавлен стракт %Golos.Block{}
- добавлен стракт %Golos.Event{}
- Golos.Stages.Ops.ProducerConsumer -> Golos.Stages.RawOps
- Golos.Stages.StructuredOps.ProducerConsumer -> Golos.Stages.MungedOps
- строки timestamp теперь парсятся в NaiveDateTime
- обновлен пример для новой формы ивентов
Пример GenStage потребителя ивентов
defmodule Golos.Stage.MungedOps.ExampleConsumer do
use GenStage
alias Golos.MungedOps
require Logger
def start_link(args, options \\ []) do
GenStage.start_link(__MODULE__, args, options)
end
def init(state) do
Logger.info("Golos example consumer is initializing...")
{:consumer, state, subscribe_to: state[:subscribe_to]}
end
def handle_events(events, _from, state) do
for op <- events do
process_event(op)
end
{:noreply, [], state}
end
def process_event(%{data: %MungedOps.Reblog{} = op_data, metadata: op_metadata = %{block_height: h, timestamp: t}}) do
Logger.info """
Новый реблог:
#{inspect op_data} в блоке #{h}, время: #{t}
"""
end
def process_event(%{data: op_data, metadata: %{block_height: h, timestamp: t} = op_metadata}) do
Logger.info """
Новая операция:
#{inspect op_data} в блоке #{h}, время: #{t}
"""
end
end
Дорожная карта
ExGolos находится в активной разработке.
- Улучшить документацию
- Добавить оставшиеся стракты
- Добавить возможность броадкаста транзакций
Больше об Elixir
Elixir -- функциональный язык программирования созданный на основе Erlang/OTP. Его основные преимущества: удобные примитивы параллелизации и одновременности(concurrency) вычислений, устойчивость к сбоям и относительно простое создание распределенных кластеров.