Skip to content

Code Quality Improvement Plan #1882

@zeitlinger

Description

@zeitlinger

This issue tracks code quality improvements for the Prometheus Java Client library. Work through these items incrementally.

Remaining Items

Add SpotBugs (Medium Priority)

  • Add spotbugs-maven-plugin to pom.xml
  • Configure with appropriate rule set
  • Note: Deferred due to Java 25 compatibility issues

Refactor Large Classes (Lower Priority)

  • prometheus-metrics-core/src/main/java/.../Histogram.java (978 lines) - consider extracting native histogram logic

Document Configuration Classes (Lower Priority)

  • PrometheusPropertiesLoader - add JavaDoc
  • ExporterProperties and related classes - add JavaDoc
  • ExporterOpenTelemetryProperties - add JavaDoc (noted in TODO)

Consolidate Servlet Exporter Duplication (Lower Priority)

  • Extract common logic from servlet-jakarta and servlet-javax into exporter-common

Add Mutation Testing (Lower Priority)

  • Add Pitest (pitest-maven) for critical modules
  • Start with prometheus-metrics-core and prometheus-metrics-model

Completed Items

  • Add Missing Test Coverage for Exporter Modules — Added 55 tests across 4 modules: exporter-common (22), servlet-jakarta (14), servlet-javax (14), otel-agent-resources (5).
  • Eliminate Dropwizard Module Duplication — Created AbstractDropwizardExports base class with generics. Reduced both modules by ~30%.
  • Address Technical Debt (TODOs) — Completed all 6 TODO items: JavaDoc for ExporterOpenTelemetryProperties, Histogram reset interval tests, environment variable support in PrometheusPropertiesLoader, OpenTelemetry filter documentation, Summary exemplars documentation, SlidingWindow synchronization documentation.
  • Improve Exception Handling — Replaced broad catch (Exception e) with specific exception types in 6 locations.
  • Add Branch Coverage to JaCoCo — Added BRANCH counter check with 50% minimum threshold.
  • Raise Minimum Coverage Thresholds — Raised 4 modules to consistent 60% line coverage.
  • Narrow Checkstyle Suppressions — Replaced global Javadoc suppression with targeted rules for internal/example/benchmark/test packages.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions