/Документация

Обзор SDK


О SDK

Enma.Sdk — это .NET-библиотека с буферизованной пакетной отправкой событий, автоматическими повторами, конвейером middleware и интеграцией с ASP.NET Core. Целевая платформа — .NET Standard 2.1, без внешних зависимостей.

Установка

dotnet add package Enma.Sdk

Требуется .NET Standard 2.1+ (.NET Core 3.0+, .NET 5+).

Быстрый пример

using Enma.Sdk.Core;

await using var enma = new EnmaClient(o =>
{
    o.ApiToken       = "sdk_your_token";
    o.OrganizationId = Guid.Parse("your-org-id");
    o.ProjectId      = Guid.Parse("your-project-id");
    o.SdkClientId    = Guid.Parse("your-app-id");
});

// Fire-and-forget
enma.Track("page.viewed", e =>
{
    e.Actor.UserId = "user-42";
    e.Payload = new { page = "/dashboard" };
});

// Ожидание подтверждения доставки
await enma.TrackAsync("order.created", e =>
{
    e.Actor.UserId = "user-42";
    e.Payload = new { Amount = 99.99 };
    e.Tag("region", "eu-west");
});

await enma.FlushAsync();

Как это работает

Track() ──► Channel<T> queue ──► Background loop ──► HTTP POST (batch)
              (lock-free)         (flush by timer       (retry on 5xx)
                                   or batch size)
  1. Track() помещает событие в ограниченную очередь (System.Threading.Channels).
  2. Фоновый цикл читает события и группирует в пакеты.
  3. Пакеты отправляются автоматически каждые FlushInterval (5с) или при заполнении пакета.
  4. HTTP-запрос повторяется при 5xx/сетевых ошибках (1с → 2с → 4с).
  5. При DisposeAsync() или FlushAsync() все оставшиеся события отправляются.

Ключевые возможности

  • Автоматическая группировка — события собираются в пакеты (по умолчанию 50, максимум 200).
  • Автоматические повторы — экспоненциальная задержка при ошибках 5xx и сетевых сбоях.
  • Конвейер middleware — обогащение и фильтрация событий перед отправкой.
  • Lock-free очередь — на основе System.Threading.Channels.
  • ASP.NET Core — DI и корректное завершение через IHostedService.
  • Без зависимостей — только стандартные типы .NET.

Исходный код

SDK с открытым исходным кодом: enma-repos/enma-sdk

Следующие шаги