Skip to content

feat(metrics/family): 🍭 len() returns the number of metrics - #246

Merged
mxinden merged 1 commit into
prometheus:masterfrom
cratelyn:family-len
Jan 29, 2026
Merged

feat(metrics/family): 🍭 len() returns the number of metrics#246
mxinden merged 1 commit into
prometheus:masterfrom
cratelyn:family-len

Conversation

@cratelyn

Copy link
Copy Markdown
Contributor

this commit introduces a len() method to Family<S, M, C>, which returns the number of series within a metric family.

see also #245, which allows callers to check if a family contains() a given label set.

@cratelyn cratelyn changed the title feat(metrics/family): len() returns the number of metrics Nov 18, 2024
@cratelyn

cratelyn commented Sep 2, 2025

Copy link
Copy Markdown
Contributor Author

my understanding is that this could be added behind the test-util flag proposed in #283.

@mxinden mxinden left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me. Thanks. Once #242 is merged, we can proceed here.

Comment thread src/metrics/family.rs
Comment thread CHANGELOG.md

@mxinden mxinden left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks.

Comment thread CHANGELOG.md Outdated
@mxinden

mxinden commented Jan 23, 2026

Copy link
Copy Markdown
Member

@cratelyn can you resolve the merge conflict? A bit tricky via GitHub UI.

this commit introduces a `len()` method to `Family<S, M, C>`, which
returns the number of series within a metric family.

see also prometheus#245, which allows callers to check if a family `contains()` a
given label set.

```shell
$ cargo clippy --all-features --all-targets --tests
   Compiling prometheus-client v0.23.0 (/path/to/prometheus-client)
warning: struct `Family` has a public `len` method, but no `is_empty` method
   --> src/metrics/family.rs:309:5
    |
309 |     pub fn len(&self) -> usize {
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty
    = note: `#[warn(clippy::len_without_is_empty)]` on by default

warning: `prometheus-client` (lib) generated 1 warning
warning: `prometheus-client` (lib test) generated 1 warning (1 duplicate)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.63s
```

Signed-off-by: katelyn martin <git@katelyn.world>
Comment thread CHANGELOG.md
@cratelyn

Copy link
Copy Markdown
Contributor Author

@cratelyn can you resolve the merge conflict? A bit tricky via GitHub UI.

yes, of course!

i've rebased this on master, and pushed a clean commit. thank you for spotting the changelog typo as well.

@mxinden
mxinden added this pull request to the merge queue Jan 29, 2026
Merged via the queue into prometheus:master with commit 3942d06 Jan 29, 2026
10 checks passed
eleboucher pushed a commit to eleboucher/towonel that referenced this pull request Apr 18, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [prometheus-client](https://github.com/prometheus/client_rust) | workspace.dependencies | minor | `0.22` → `0.24` |

---

### Release Notes

<details>
<summary>prometheus/client_rust (prometheus-client)</summary>

### [`v0.24.1`](https://github.com/prometheus/client_rust/blob/HEAD/CHANGELOG.md#0241)

[Compare Source](prometheus/client_rust@v0.24.0...v0.24.1)

##### Added

- `EncodeGaugeValue` is implemented for `usize` and `isize`, and
  `EncodeCounterValue` is implemented for `usize`. See [PR 282].

##### Fixed

- `EncodeGaugeValue`, `EncodeCounterValue` and `EncodeExemplarValue` now use
  fewer `as` casts in their implementation. This caught an issue where
  `EncodeGaugeValue` would not error when encoding some `u64`s that don't fit
  in a `i64`. See [PR 281].
- Filter out empty metric families, to match the go client. See [PR 279].
- `Histogram` now exposes `count()` and `sum()` methods when the `test-util`
  feature is enabled. See [PR 242].
- `Family` now exposes a `contains()` method when the `test-util` feature
  is enabled. See [PR 245].
- `Family` now exposes `len()` and `is_empty()` methods when the
  `test-util` feature is enabled. See [PR 246].

[PR 279]: prometheus/client_rust#279

[PR 281]: prometheus/client_rust#281

[PR 242]: prometheus/client_rust#242

[PR 245]: prometheus/client_rust#245

[PR 246]: prometheus/client_rust#246

[PR 281]: prometheus/client_rust#281

[PR 282]: prometheus/client_rust#282

### [`v0.24.0`](https://github.com/prometheus/client_rust/blob/HEAD/CHANGELOG.md#0240)

[Compare Source](prometheus/client_rust@v0.23.1...v0.24.0)

##### Added

- `EncodeLabelSet` is now implemented for tuples `(A: EncodeLabelSet, B: EncodeLabelSet)`.
  See [PR 257].

- `Family::get_or_create_owned` can access a metric in a labeled family. This
  method avoids the risk of runtime deadlocks at the expense of creating an
  owned type. See [PR 244].

- `impl<T: Collector> Collector for std::sync::Arc<T>`.
  See [PR 273].

[PR 244]: prometheus/client_rust#244

[PR 257]: prometheus/client_rust#257

[PR 273]: prometheus/client_rust#273

##### Changed

- `EncodeLabelSet::encode()` now accepts a mutable reference to its encoder parameter.
- Exemplar timestamps can now be passed, which are required for `convert_classic_histograms_to_nhcb: true`
  in Prometheus scraping. See [PR 276].

[PR 276]: prometheus/client_rust#276

### [`v0.23.1`](https://github.com/prometheus/client_rust/blob/HEAD/CHANGELOG.md#0231)

[Compare Source](prometheus/client_rust@v0.23.0...v0.23.1)

##### Changed

- `Histogram::new` now accepts an `IntoIterator` argument, rather than an `Iterator`.
  See [PR 243].

[PR 243]: prometheus/client_rust#243

### [`v0.23.0`](https://github.com/prometheus/client_rust/blob/HEAD/CHANGELOG.md#0230)

[Compare Source](prometheus/client_rust@v0.22.3...v0.23.0)

##### Changed

- `ConstCounter::new` now requires specifying the type of literal arguments, like this: `ConstCounter::new(42u64);`.
  See [PR 173].

- Update `prost` dependencies to `v0.12`.
  See [PR 198].

- Implement `Atomic<u64>` for `AtomicU64` for gauges.
  See [PR 226].

- Implement `EnableLabelValue` for `bool`.
  See [PR 237]

[PR 173]: prometheus/client_rust#173

[PR 198]: prometheus/client_rust#198

[PR 226]: prometheus/client_rust#226

[PR 237]: prometheus/client_rust#237

##### Added

- Support `i32`/`f32` for `Gauge` and `u32`/`f32` for `Counter`/`CounterWithExemplar`.
  See [PR 173] and [PR 216].

- Supoort `Arc<String>` for `EncodeLabelValue`.
  See [PR 217].

- Add `histogram::exponential_buckets_range`.
  See [PR 233].

- Added `get` method to `Family`.
  See [PR 234].

[PR 173]: prometheus/client_rust#173

[PR 216]: prometheus/client_rust#216

[PR 217]: prometheus/client_rust#217

[PR 233]: prometheus/client_rust#233

[PR 234]: prometheus/client_rust#234

##### Fixed

- Don't prepend `,` when encoding empty family label set.
  See [PR 175].

[PR 175]: prometheus/client_rust#175

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJ0eXBlL21pbm9yIl19-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/towonel/pulls/7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants