Skip to content
CAI
Software that uses CAICheck a score

mirego/telemetry_ui

58.4

Adequate · 18 September 2026

4.7k

lines of production code

Elixir

with TypeScript

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

TelemetryUI is a Phoenix-based library for visualizing and managing application telemetry metrics. It provides a web interface with interactive, Vega-Lite-based charts and aggregates, backed by a configurable PostgreSQL storage layer. The system supports advanced features such as shareable filtered views, automated Slack digests, and internal health monitoring.

Features

Add digest worker with Slack service powered by Oban

Users can now schedule automated telemetry digests to be sent to Slack. This change introduces a new Oban-based worker that generates metric images and page links based on configurable time ranges and filters, then posts them to a specified Slack webhook. The implementation includes validation for share URLs and keys, and supports customizing the Slack message appearance via configuration.

_lib/telemetry\ui/digest · high confidence

Add index and not-found page templates for the telemetry UI

The telemetry UI now includes dedicated HEEx templates for the main dashboard and the empty-state scenario. The index template renders the shared or full header, page navigation, and a grid of metric components based on the current page's configuration. The not-found template displays a user-friendly message guiding users to add metrics via configuration, including a link to the documentation.

_lib/telemetry\ui/web/templates · high confidence

Introduce Ecto-based PostgreSQL backend for TelemetryUI

The TelemetryUI backend now supports persisting and querying metrics via PostgreSQL using Ecto. This change introduces a new \TelemetryUI.Backend\ protocol and an \EctoPostgres\ implementation that handles event insertion (including min/max tracking and conflict resolution), metric data fetching with time-based bucketing and comparison windows, and automatic data pruning. Users can now configure the backend with options such as flush intervals, buffer sizes, and pruner thresholds to manage storage and performance.

_lib/telemetry\ui/backend · high confidence

New Vega-Lite based metric visualization components

The telemetry UI now includes a suite of new Elixir components for rendering metrics using Vega-Lite: \Buckets\ (histogram-style charts with tag-based color encoding and legend filtering), \CompareAggregate\ (calculates and displays percentage change with directional icons and color-coded text), \Stat\ (displays a large aggregate value with a small area/line trend and comparison overlay), \StatList\ (horizontal bar charts for tag-grouped aggregates), \StatValue\ (simple large-value display with date range tooltips), and \TimeSeries\ (time-based area/line charts with summary text and comparison metrics). These components replace previous rendering logic with a consistent, declarative Vega-Lite specification approach, enabling features like tag-based legend selection, compare-percentage calculations, and formatted aggregate text overlays.

_lib/telemetry\ui/web/components · high confidence

New basic example with Ecto/Postgres backend and Vega Lite integration

The examples directory now includes a new basic example (examples/basic.exs) that demonstrates a Phoenix LiveView counter application backed by a PostgreSQL database via Ecto. This example integrates the TelemetryUI library for metrics visualization and explicitly depends on vega\_lite\_convert version 1.0, reflecting the updated dependency stack mentioned in the commit.

examples · high confidence

New metric visualization components for average, count, distribution, and more

The telemetry UI now includes a comprehensive set of new metric components (average, average\_list, average\_over\_time, count\_list, count\_over\_time, counter, counter\_value, distribution, last\_value, median, median\_over\_time, sum, and title) that render telemetry data using VegaLite. These components support various aggregation strategies (such as average, sum, median, and argmax) and display modes (stat, stat list, time series, and buckets), allowing users to visualize metric trends and distributions directly in the interface.

_lib/telemetry\ui/metrics · high confidence

Shareable metric views with encrypted filters and CSP adjustments

Users can now generate and view shareable URLs that preserve specific metric filters and page selections. This feature introduces a new \TelemetryUI.Web.Share\ plug to handle shared views, utilizing a new \TelemetryUI.Web.Crypto\ module for AES-128-CBC encryption of filter data. The \TelemetryUI.Web.Filter\ module has been refactored to support arbitrary time ranges (custom \from\/\to\ dates) alongside standard presets, and the main web plug now supports fetching individual metric data as JSON. To support the rendering of shared content and component images, the Content-Security-Policy header is explicitly deleted for these routes, and the main view now includes a script integrity hash (SHA-512) for the bundled JavaScript.

_lib/telemetry\ui/web · high confidence

Removals

Removal of TelemetryUI adapter and value display components

The \TelemetryUI.Adapter\ module and its \EctoPostgres\ implementation have been removed, eliminating the built-in support for persisting telemetry events to a PostgreSQL database via Ecto. Additionally, the \TelemetryUI.Web.Component.Value\ component, responsible for rendering metric values with formatting and unit display in the UI, has been deleted. Users relying on these specific storage and display features will need to provide their own implementations or use alternative components.

_lib/telemetry\_ui/adapter, lib/telemetry\ui/web/component/value · high confidence

Removal of the Chart component implementation

The Chart component, previously responsible for rendering telemetry visualizations via Plotly.js, has been removed from the application. This change deletes the Elixir component definition, the JavaScript logic that parsed data and initialized the chart, and the associated CSS styles, meaning chart rendering is no longer available in this part of the UI.

_lib/telemetry\ui/web/component/chart · high confidence

Behavioural changes

Linting configuration modernized and Tailwind config removed

The assets directory has updated its development tooling: the legacy .eslintrc file was replaced with a new flat-config eslint.config.mjs and a renamed .eslintrc.json, while the .eslintignore file was deleted and its ignore patterns moved into the new JSON config. Additionally, the tailwind.config.js file was removed entirely, indicating a shift away from the previous Tailwind setup in this area.

assets · high confidence

Major refactoring of TelemetryUI module structure and configuration

The TelemetryUI module has been significantly restructured to improve usability and organization. The main entry point now includes comprehensive documentation and supports a new configuration format via a \:config\ function option, allowing for more flexible setup. A new \Page\ struct has been introduced to manage metric grouping, titles, and UI options, replacing the previous \Section\ and \Theme\ modules. The supervision tree initialization has been updated to support conditional disabling via application environment, and the metric casting logic has been refactored to handle various metric types more robustly. These changes simplify integration and provide better control over how metrics are displayed and configured.

lib · high confidence

Migrate to Tailwind CSS v4 and enhance Vega-Lite metric styling

The application's CSS has been updated to use the Tailwind CSS v4 import syntax and plugin system, replacing the previous v3 base/components/utilities imports. This change includes new source configurations for Elixir/HEEx templates and TypeScript files, along with inline utility definitions. Visually, the diff introduces specific styling for Vega-Lite metrics, including dark mode support for chart actions and tooltips, fixes for pointer events on chart elements, and a new loading animation. Additionally, the header filter dropdown now adapts its icon color for dark mode.

assets/css · high confidence

Postgres schema migration to v5 with min/max values and unlogged table

The Ecto Postgres backend migrations have been updated to version 5, introducing several structural changes to the \telemetry\_ui\_events\ table. Migration v02 adds \min\_value\ and \max\_value\ columns to store event ranges. Migration v03 removes the \report\_as\ column and updates the unique index to exclude it. Migration v04 changes the \count\ column type from integer to bigint to prevent overflow. Finally, migration v05 sets the table to unlogged mode for improved write performance. The module has also been renamed from \TelemetryUI.Adapter.EctoPostres.Migrations\ to \TelemetryUI.Backend.EctoPostgres.Migrations\.

_lib/telemetry\_ui/backend/ecto\postgres · high confidence

Refactored Vega-Lite chart rendering and spec generation

The Vega-Lite visualization components have been refactored to improve integration and styling. A new \TelemetryUI.Web.VegaLite.Spec\ module now handles the generation of Vega-Lite specifications, explicitly targeting the v6 JSON schema and applying consistent dark/light theme colors for axes and grids. The \TelemetryUI.Web.VegaLite\ module provides a unified HEEx template for rendering charts, which includes dedicated UI states for loading, empty data, and a new fullscreen toggle button. This change also updates the underlying Vega-Lite conversion library to version 1.0.

_lib/telemetry\_ui/web/vega\lite · high confidence

Removal of distributed CSS and JavaScript assets

The pre-built \app.css\ and \app.js\ files in the \dist\ directory have been removed. This eliminates the static styles and client-side scripts (including the telemetry form submission handler and dynamic script loader) that were previously served from this location, likely shifting the build or serving strategy to a different output path or method.

dist · high confidence

Replace legacy script loader with Vega-based interactive charting

The application's JavaScript foundation has been refactored to remove the legacy \app.js\ file, which previously handled simple form submissions and a generic dynamic script loader. In its place, a new \app.ts\ module introduces interactive data visualization capabilities using the Vega and vega-embed libraries. This change enables users to view charts with a custom legend that supports multi-select filtering (via Shift+click) and automatic domain buffering, replacing the previous static or non-interactive rendering approach with a dynamic, signal-driven UI.

assets/js · high confidence

TelemetryUI rewritten with new architecture and internal metrics

The TelemetryUI library has been significantly refactored, introducing a new configuration system via \TelemetryUI.Config\ and a dedicated \TelemetryUI.Theme\ module for customizing the UI (primary color, title, logo, share keys). A new \TelemetryUI.InternalMetrics\ module now provides built-in, hidden metrics to monitor the library's own event storage and pruning status. The core data handling has changed: the \Reporter\ and \WriteBuffer\ now use a \cast\_value\ function for flexible metric processing, and the \Pruner\ has been updated to use a more robust datetime shifting mechanism. Additionally, a new \TelemetryUI.JSON\ module allows configuring the JSON library (defaulting to Elixir's built-in JSON on 1.18+ or Jason), and a \TelemetryUI.Reloader\ Plug enables hot-reloading of the UI.

_lib/telemetry\ui · high confidence

TelemetryUI v5.4.0 release notes and development environment overhaul

The CHANGELOG.md introduces v5.4.0, adding a \counter\_value\ metric type with a \StatValue\ component, improving internal metrics queries, fixing compare aggregate percentage formatting, and pretty-formatting float values. The repository's development environment has been significantly refactored: the legacy \dev.exs\ script is removed in favor of \dev/server.exs\, the Credo linter's ABC size threshold is raised to 80, and the \.formatter.exs\ is updated to include HEEx files and new plugins. Additionally, the project's toolchain is upgraded to Elixir 1.18, Erlang 27, and Node.js 22, and the Makefile now uses \mix assets.deploy\ and \mix test\ for standard checks.

(repo-wide) · high confidence

Updated build tool versions and refined environment-specific configuration

The application now uses esbuild version 0.17.11 and Tailwind CSS version 4.1.14 for asset compilation, replacing the previous versions (0.14.41 and 3.1.6 respectively). The build arguments have been adjusted, such as changing the output directory for esbuild to \../priv/static/assets\ and removing minification from the default Tailwind configuration. Additionally, logger output is now explicitly set to warning level in all environments, and specific database and endpoint configurations for the test environment have been added to support the test repository and endpoint.

config · high confidence

Test coverage

Added test suite for TelemetryUI components; Added test support infrastructure for connection and data testing.

Dependencies

Telemetry UI v5.5.0: Major dependency and runtime upgrades

The Telemetry UI package has been upgraded to version 5.5.0, requiring Elixir 1.17 and introducing significant dependency updates. The backend now supports Phoenix 1.8, Phoenix Live View 1.0, and Phoenix HTML 4.0, while removing the Timex dependency in favor of the Elixir standard library Duration module. Frontend assets have been migrated from Plotly.js to the Vega/Vega-Lite ecosystem, and the Node.js runtime requirement has been raised to version 22.12. Additional tooling includes the introduction of the Styler formatter, ExDoc for documentation generation, and optional support for Oban-based digest workers.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 58.

Lenses

  • Code Health 99
  • Architecture 80
  • Maturity 61
  • Readiness 48
  • Security 63

Changes since last survey

  • 188 commits — 139 feature/other, 49 fixes

By area

  • (root) — 88 commits
  • lib/telemetry_ui — 61 commits
  • (repo) — 14 commits
  • .github/workflows — 13 commits
  • guides/slack-digest.md — 2 commits
  • lib/telemetry_ui.ex — 2 commits
  • assets/css — 1 commit
  • assets/tailwind.config.js — 1 commit
  • dist/app.css — 1 commit
  • guides/complex-config.md — 1 commit
  • guides/testing.md — 1 commit
  • native/vegaliteconvert — 1 commit
  • test/support — 1 commit
  • test/telemetry_ui — 1 commit

Notable commits

  • fix: Add counter_value metric, fix compare percentage, pretty float and internal metrics queries
  • fix: Add format heex and fix map ordering test
  • fix: Add new metrics, fix theme primary color, update libs
  • fix: Add reloader and fix compare aggregate
  • fix: Fix Cross.toml
  • fix: Fix JSON decode in test
  • fix: Fix JSON in test
  • fix: Fix JSON on elixir 1.17
  • fix: Fix Makefile
  • fix: Fix README
  • fix: Fix always summary metric in UI
  • fix: Fix buckets in id and fill buckets in distribution metric
  • fix: Fix buckets vega lite title
  • fix: Fix compare icon and fix workflow needs
  • fix: Fix custom metric definition
  • fix: Fix date bin and not grouped events
  • fix: Fix disabled mark pointer event
  • fix: Fix docs
  • fix: Fix duplicate code and list guides
  • fix: Fix eslint
  • …and 168 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

mirego/telemetry_ui was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 18 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 41de37a48c355d3217a1058783c18c0617614eec — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-5d04157a340d.