Skip to content
CAI
Software that uses CAICheck a score

Feuerlabs/exometer

56.8

Adequate · 23 September 2026

1.7k

lines of production code

Erlang

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Exometer is a metrics collection and instrumentation framework for Erlang applications. It provides a core system for defining, tracking, and managing various types of metrics, including counters, gauges, histograms, and functions. The system supports exporting collected data to external monitoring platforms via reporters such as Graphite, StatsD, AMQP, and OpenTSDB. Additionally, it offers SNMP integration capabilities, allowing for network-based monitoring and configuration through generated MIBs and agent examples.

Features

Add SNMP agent and manager example implementations

Added example code for integrating with the SNMP subsystem. This includes an SNMP agent configuration and MIB setup in \examples/snmp\_agent/\, along with a corresponding SNMP manager implementation in \examples/snmp\_manager/\ that handles agent communication, user authentication, and value retrieval. Also added simple counter and min/max processing examples (\count\_example.erl\, \minmax\_example.erl\) to demonstrate basic metric handling.

examples · high confidence

Added Exometer MIB for SNMP integration

A new MIB file (EXOMETER-MIB.mib) has been added to support SNMP management of the Exometer system. This includes definitions for a heartbeat interval configuration object and a heartbeat notification, enabling external monitoring and configuration via SNMP.

mibs · high confidence

Added configuration schema and build scripts for Cuttlefish and optional dependencies

The \priv\ directory now contains Cuttlefish schema files (\exometer.schema\, \exometer-reporters.schema\) that map configuration keys to Erlang terms, enabling structured configuration for reporters and subscribers. Additionally, new build scripts (\check\_cover.script\, \check\_edown.script\, \check\_packages.script\, \remove\_deps.script\) were added to the \priv\ directory to handle conditional dependencies, cover spec selection, and documentation generation, allowing the library to be built with optional features like collectd or SNMP support based on the \EXOMETER\_PACKAGES\ environment variable.

priv · high confidence

Comprehensive Exometer documentation overhaul and restructuring

The documentation has been significantly restructured and expanded. A new \README.md\ provides a high-level overview of the Exometer system, including concepts like metrics, data points, and probes. The documentation now includes detailed guides for built-in entries (counters, gauges, histograms, functions), probes, and reporter plugins (Graphite, OpenTSDB, AMQP, SNMP, StatsD). It also covers configuring static subscriptions, setting up reporters, and managing dependencies. The \overview.edoc\ and various module-specific \.md\ files have been updated to reflect the current state of the codebase, including the split into \exometer\_core\ and separate reporter applications.

doc · high confidence

Define core Exometer data structures and shared state atoms

The header file \include/exometer.hrl\ is introduced, defining the fundamental data structures for the Exometer library. This includes the \exometer\_entry\ record, which stores metric metadata such as name, type, status, cache, and value, alongside the \exometer\_event\ record for tracking occurrences. The file also establishes Erlang atoms for shared state, including \exometer\_shared\, \exometer\_entries\, \exometer\_subscriptions\, and \exometer\_reporters\, which are used to manage the system's internal state and component interactions.

include · high confidence

Initial SNMP agent configuration files added

Added configuration files for the SNMP agent, including network settings (port 4000, localhost), community strings, context definitions, notification targets, and access control lists (VACM) to enable basic agent-to-manager communication.

priv/snmp · high confidence

Initial project structure and CI configuration

The repository is initialized with essential build and configuration files, including a Makefile for managing dependencies, compilation, testing, and documentation generation. A .travis.yml file is added to configure continuous integration across multiple Erlang/OTP versions (17.0–18.2.1). The rebar.build system is configured with specific dependencies like exometer\_core and exometer\_collectd, and a rebar.config.script is introduced to handle optional package detection and preprocessing. Additionally, a CONTRIBUTIONS.md file is added to list project contributors, and a .gitignore is updated to exclude generated files and logs.

(repo-wide) · high confidence

Initial release of Exometer metrics collection framework

Exometer is introduced as a code instrumentation and metrics collection package for Erlang. It provides a core framework for managing metrics and includes several built-in reporters for sending data to external systems: AMQP, Graphite, OpenTSDB, SNMP, and StatsD. The package also adds a Netlink probe for collecting network interface statistics and utilizes the Lager library for logging.

src · high confidence

Test coverage

Added test application1 with Exometer integration; Added test data for SNMP MIB generation and histogram exports; Added test suite and configuration for SNMP export functionality.

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

Score

  • CAI 53 → 57 (+3.5)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 93 → 97 (+4.0)
  • Architecture 100 → 100 (+0.0)
  • Maturity 31 → 43 (+12.3)
  • Readiness 47 → 54 (+7.0)
  • Security 95 → 63 (-31.7)
  • Event Sourcing 100 → 100 (+0.0)

Resolved (7)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • No exposed public API
  • Test reliability not included
  • TooManyMethods: exometer_report_snmp (src/exometer_report_snmp.erl)
  • complexity unreadable for .erl, .hrl — churn × complexity hotspots could not be measured
  • dormant codebase — no living knowledge left to concentrate

New (15)

  • Coverage not measured — no coverage collector is wired up
  • Dependency hygiene PARTLY measured — rebar3 pinning read, dependency currency not (no rebar.lock-pinned Hex declaration to grade)
  • Duplicated block (5 lines × 2) (src/exometer_report_amqp.erl)
  • Duplicated block (8 lines × 2) (src/exometer_report_amqp.erl)
  • Duplicated block (8 lines × 4) (src/exometer_report_snmp.erl)
  • Floating source dependency: jiffy
  • Floating source dependency: netlink
  • Members sharing a duplicated core (4 members, 50+ identical tokens) (src/exometer_report_snmp.erl)
  • No SBOM
  • No artifact signing
  • No build provenance
  • No dependency lockfile committed (rebar.config)
  • Rotate the exposed credentials — git history can't be un-committed
  • Secret: generic-api-key (src/exometer_probe_stackdriver.erl)
  • TodoComment (src/exometer_report_amqp.erl)

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

Survey your own repository

Feuerlabs/exometer 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 7a7bd8d2b52de4d90f65aa3f6044b0e988319b9e — 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.