Changelog

All notable changes to this project are documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

Added

  • Project skeleton: gemspec, Zeitwerk bootstrap, OpenObserve::Client configuration (env-driven base_url/user/password/organization), single error surface OpenObserve::Client::Error, RSpec suite, RuboCop, CI.
  • Business wrapper over the openobserve-api transport: domain accessors on OpenObserve::Client (search, streams, alerts, destinations, templates, incidents, dashboards).
  • OpenObserve::Search: run/each/all over SQL plus a time window (transparent from/size pagination), around for record context, values for distinct field values. Returns a SearchResult envelope so total and took stay reachable.
  • OpenObserve::Streams (read-only): list, names, schema.
  • OpenObserve::Alerts: list/get/create/update/delete, plus enable, disable and trigger.
  • OpenObserve::Destinations and OpenObserve::Templates: full CRUD, plus the system-prebuilt template listing.
  • OpenObserve::Incidents: list, total, get, stats, update.
  • OpenObserve::Dashboards: CRUD plus find_by_title and sync, an idempotent directory synchronisation for deploys.
  • Value objects Hit, SearchResult, Alert, Destination, Template, Incident, Stream and Dashboard over OpenObserve::Record.
  • OpenObserve::Coerce: microsecond timestamps and relative windows, with an inverted window rejected rather than silently returning nothing.
  • Transport rough edges absorbed: the api sub-client hop, the missing accessors for deeper sub-clients, org_id on every route, Basic credentials handed to the transport as an apiKey, and the v1/v2 alerting split. Transport errors are wrapped as OpenObserve::Client::Error (Unauthorized, Forbidden, NotFound, Conflict) with #cause preserved.