Skip to content
CAI
Software that uses CAICheck a score

shinyscorpion/wobserver

37.8

Weak · 23 September 2026

3k

lines of production code

Elixir

with JavaScript

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Wobserver is a web-based monitoring and metrics interface for Erlang/OTP systems, providing real-time visibility into system health and application state. It aggregates data on CPU, memory, processes, and schedulers, exposing this information through a dynamic web dashboard and a Prometheus-compatible API. The system supports distributed monitoring by connecting to remote nodes and offers extensibility through custom pages and metrics.

Features

Add Prometheus metrics formatter

Users can now export metrics in Prometheus format. A new \Wobserver.Util.Metrics.Formatter\ module provides a pluggable interface for formatting metrics, with \Wobserver.Util.Metrics.Prometheus\ added as the default formatter. This allows users to view and scrape metrics using Prometheus-compatible output.

lib/wobserver/util/metrics · medium confidence

Add system monitoring capabilities for info, memory, scheduler, and statistics

Users can now access detailed system information including architecture, CPU, and Erlang/OTP versions via the new Wobserver.System.Info module. Memory usage across categories like atom, binary, code, ETS, and processes is available through Wobserver.System.Memory. The Wobserver.System.Scheduler module provides per-scheduler utilization metrics, while Wobserver.System.Statistics exposes system uptime, process counts, and I/O statistics. These additions expand the observability of the host system within the Wobserver tool.

lib/wobserver/system · high confidence

Added Chart.js and Treant.js libraries

Added Chart.js (version 1.0.2) and Treant.js to the project's external JavaScript dependencies, enabling the use of charting and tree diagram visualizations in the application.

src/js/external · high confidence

Added Mix tasks for code analysis and build automation

Two new Mix tasks have been introduced to streamline development and quality assurance. The \analyze\ task runs static analysis tools (Credo, Dialyzer, and code coverage checks) and exits if errors are found. The \build\ task automates the full build process, which now includes baking web assets (HTML, CSS, JS, and LICENSE) into a generated \Wobserver.Assets\ module, alongside compilation, documentation, and packaging steps.

lib/mix · high confidence

Added node discovery and remote node handling

Added Wobserver.Util.Node.Discovery to support discovering other nodes via DNS or custom functions, and introduced Wobserver.Util.Node.Remote to handle metrics, API calls, and WebSocket connections to remote nodes.

lib/wobserver/util/node · medium confidence

Added utility modules for memory, application, process, port, table, and metrics management

Added new utility modules to the Wobserver library: Wobserver.Allocator for listing memory allocator details, Wobserver.Util.Application for listing running applications and their hierarchy, Wobserver.Util.Process for detailed process information and summaries, Wobserver.Port for port status and links, Wobserver.Table for ETS table information and data, and Wobserver.Util.Metrics for managing custom metrics and generators. These modules provide the underlying data collection and formatting logic for the Wobserver dashboard.

lib/wobserver/util · high confidence

Initial configuration for Wobserver application

Added the initial configuration file for the Wobserver application, setting up the Mix.Config module and defining the 'assets' configuration key.

config · high confidence

Initial project structure and CI configuration

The repository was initialized with the core project files, including the Elixir build configuration (mix.exs), a Travis CI build script (.travis.yml) for automated testing, and a CHANGELOG.md tracking version history. The project also includes a README.md with usage and installation instructions, a coveralls.json for code coverage settings, and a .gitignore file to exclude generated assets and build artifacts.

(repo-wide) · high confidence

Initial release of Wobserver: a web-based metrics and monitoring interface

The \wobserver\ library is introduced as a new component providing a web-based interface for system metrics, monitoring, and observer tools. It includes a configurable HTTP port (defaulting to 4001) and supports two startup modes: \:standalone\ (launches a Cowboy server) and \:plug\ (returns the metric storage PID for integration into existing applications). The release adds a \Page\ system for registering and managing custom web pages and API routes, alongside a \System\ module that aggregates architecture, CPU, memory, and scheduler utilization data. An \about\ endpoint exposes version, license, and link information for the library.

lib/wobserver · high confidence

Introduce Gulp build system with CSS, JS, and HTML tasks

The project now includes a Gulp-based build system that automates the compilation of CSS (via Sass and Autoprefixer), JavaScript (via Browserify, Babel, and Uglify), and HTML (via htmlmin). The configuration file defines separate tasks for development and production builds, with source maps enabled for debugging. A watch task is also configured to monitor source files and trigger the appropriate build tasks automatically.

gulpfile.js · high confidence

Introduce WebSocket client, proxy, and security layer

Adds new modules to handle WebSocket connections and remote node proxying. The \Client\ module implements the core WebSocket command handling (e.g., :hello, :ping, :system, :about, :application, :process, :ports, :allocators, :table, :custom). A \ClientProxy\ module is added to proxy WebSocket requests to remote nodes. A \ClientSocket\ module provides the low-level WebSocket handler and callback interface. Additionally, a \Security\ module is introduced to handle basic WebSocket authentication via cookies, with support for configurable security modules.

lib/wobserver/web · high confidence

Introduce WebSocket-based real-time monitoring with automatic fallback

The web interface now establishes a persistent WebSocket connection to the backend for live data updates, with an automatic fallback to a JSON API if the WebSocket connection fails. This change introduces new JavaScript modules (Wobserver, WobserverClient, WobserverApiFallback) that handle connection state, reconnection logic, and message routing, enabling the UI to display real-time system metrics, process details, and charts with reduced latency compared to the previous polling or static rendering approach.

src/js · high confidence

Introduce new CSS library for UI components

Added a new set of SCSS files in src/css/lib to define styles for buttons, menus, content areas, footers, graphs, popups, and tables. This includes a theme configuration with specific color palettes (e.g., \#58229a for primary), typography settings, and layout rules for interactive elements like selection popups and process charts.

src/css/lib · high confidence

New interface components for process, table, and chart visualization

The interface now includes new modules for displaying process details, table data, and dynamic charts. Process details show metadata, memory usage, and state in a popup. Table details display row data in a popup, including an empty state message when no data is present. A new chart module supports real-time line charts with timestamped data updates. Additionally, node selection allows users to switch between remote nodes, and process names are displayed without the 'Elixir.' prefix.

src/js/interface · high confidence

New modular router structure with API, metrics, and static assets

The web router has been restructured into distinct modules: a new API router providing endpoints for nodes, applications, processes, ports, and custom pages; a metrics router exposing system and node performance data; a static router serving the frontend assets (HTML, CSS, JS) with configurable security authentication; and a system router for detailed system information. A shared base module and helper utilities were added to support these changes.

lib/wobserver/web/router · high confidence

Behavioural changes

Add mobile device settings to HTML

The HTML entry point for the Wobserver web application has been updated to include mobile-specific meta tags. These additions, such as 'apple-mobile-web-app-capable' and 'theme-color', improve the user experience on mobile devices by enabling full-screen app-like behavior and customizing the browser's status bar color.

src/html · high confidence

New chart and about page styling

Added new SCSS files to style the web interface. The new \_chart.scss file defines styles for a chart component, including layout, canvas margins, and a legend with inline-block list items and colored indicators. The new main.scss file imports the chart styles and adds styling for an 'about' page section, specifically formatting tables with bold headers and a colon suffix.

src/css · high confidence

Test coverage

Added router tests for API, root, metrics, and 404 handling; Added test coverage for Wobserver core functionality; Added test coverage for system info, memory, scheduler, and statistics modules; Added tests for Wobserver application, page, and system modules; Added tests for node discovery and remote node interactions; Added tests for the Wobserver web router components; Added tests for the new metrics formatting and Prometheus integration; Added unit tests for Wobserver utility modules.

Dependencies

Initial project setup with Elixir and Node.js dependencies

The project is initialized with \mix.exs\ and \mix.lock\ defining Elixir dependencies (including Cowboy, HTTPoison, and Plag) and a \package.json\ establishing Node.js build tools (Gulp, Babel, etc.) for the web component. This establishes the foundational build and runtime requirements for the Wobserver application.

(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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 42 → 38 (-4.5)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 34 → 38 (+4.0)
  • Architecture 100 → 92 (-7.7)
  • Maturity 47 → 41 (-5.6)
  • Readiness 31 → 28 (-3.5)
  • Security 94 → 76 (-17.7)
  • Accessibility 52 (new)

Resolved (10)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • High CVE: [GHSA redacted] (mix.lock)
  • High CVE: [GHSA redacted] (mix.lock)
  • High CVE: [GHSA redacted] (mix.lock)
  • Medium CVE: [GHSA redacted] (mix.lock)
  • Medium: security finding (details withheld)
  • No exposed public API
  • Test reliability not included
  • dormant codebase — no living knowledge left to concentrate

New (16)

  • Documentation: no installation or build instructions (README.md)
  • High CVE: [GHSA redacted] (mix.lock)
  • High CVE: [GHSA redacted] (mix.lock)
  • High CVE: [GHSA redacted] (mix.lock)
  • Medium CVE: [GHSA redacted] (mix.lock)
  • No ADRs found
  • No SBOM
  • No artifact signing
  • No build provenance
  • No dependency advisory monitoring
  • Outdated: ex_doc
  • Outdated: excoveralls
  • Outdated: plug
  • Outdated: websocket_client
  • getInnerText (cognitive 18) (src/js/external/sorttable.js)
  • makeSortable (cyclomatic 24) (src/js/external/sorttable.js)

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

Survey your own repository

shinyscorpion/wobserver 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 23 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 7c6186ba8a90d9406d2b79351081373a52baffdf — 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-955b9cee9818.