Kacper Noniewicz
← Projects

Public / Go / MIT

Pularis

A small Go service that polls HTTP APIs on a schedule, transforms the responses into structured events, and publishes them to Redis. It owns no storage and no state.

View on GitHub →

What it does

  • Polls HTTP endpoints at configurable intervals
  • Extracts fields from JSON responses using gjson paths
  • Conditionally publishes events based on expr rules
  • Tracks session transitions automatically (created/ended)
  • Emits events to Redis channels for downstream consumers

Why I built it

I kept writing the same adapter code for every new API I wanted to ingest: polling loop, auth wiring, JSON extraction, event publishing. Pularis turns that into configuration. You write a TOML file describing the source, and Pularis handles the rest.

How it works

name = "example_source" endpoint = "https://api.example.com/status" poll_interval_seconds = 15 [[events]] name = "activity" is_session = true on_changed_fields = ["state"] publish_when = "state != ''" [events.transform] user_id = "data.user.id" state = "data.session.state"

Auth credentials live in a companion .auth.json file next to the TOML config. Header values reference auth keys with placeholders.

Stack

GoRedisgjsonexpr

Status

Public and usable. I run it as part of my personal infrastructure to ingest data from several external APIs. MIT licensed.