From f2a58c08fb8f8c53f8a9b1d68084d4cb45d6aa02 Mon Sep 17 00:00:00 2001 From: Ariel Eli Date: Mon, 1 Jun 2026 21:52:54 +0300 Subject: [PATCH 1/3] feat(stats): add show_internal_database_sizes and size_format params (v1.44) --- .code-samples.meilisearch.yaml | 4 ++-- lib/meilisearch/client.rb | 13 +++++++++++-- lib/meilisearch/index.rb | 14 ++++++++++++-- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/.code-samples.meilisearch.yaml b/.code-samples.meilisearch.yaml index 8c05c952..2f4ecc95 100644 --- a/.code-samples.meilisearch.yaml +++ b/.code-samples.meilisearch.yaml @@ -240,9 +240,9 @@ reset_displayed_attributes_1: |- compact_index_1: |- client.index('INDEX_UID').compact get_index_stats_1: |- - client.index('movies').stats + client.index('movies').stats(show_internal_database_sizes: true, size_format: 'human') get_indexes_stats_1: |- - client.stats + client.stats(show_internal_database_sizes: true, size_format: 'human') get_health_1: |- client.health get_version_1: |- diff --git a/lib/meilisearch/client.rb b/lib/meilisearch/client.rb index 72da699b..95fd1e5e 100644 --- a/lib/meilisearch/client.rb +++ b/lib/meilisearch/client.rb @@ -305,11 +305,20 @@ def version # Get stats of all indexes in instance. # + # @param show_internal_database_sizes [Boolean] When +true+, each index stat object includes an + # +internalDatabaseSizes+ map. The keys in this map are subject to change. + # @param size_format [String, nil] Controls how size fields are returned. + # Use 'human' for human-readable strings (e.g. "2.3 MiB"), + # or 'raw' (default) for numeric byte counts. # @see Index#stats # @see https://www.meilisearch.com/docs/reference/api/stats#get-stats-of-all-indexes Meilisearch API reference # @return [Hash{String => Object}] see {stats object}[https://www.meilisearch.com/docs/reference/api/stats#stats-object] - def stats - http_get '/stats' + def stats(show_internal_database_sizes: nil, size_format: nil) + params = { + showInternalDatabaseSizes: show_internal_database_sizes, + sizeFormat: size_format + }.compact + http_get '/stats', params end ### DUMPS diff --git a/lib/meilisearch/index.rb b/lib/meilisearch/index.rb index 1cfe0b9c..64794c41 100644 --- a/lib/meilisearch/index.rb +++ b/lib/meilisearch/index.rb @@ -675,10 +675,20 @@ def wait_for_task(task_uid, timeout_in_ms = 5000, interval_in_ms = 50) # Get stats of this index. # + # @param show_internal_database_sizes [Boolean] When +true+, the response includes an + # +internalDatabaseSizes+ map of internal database names to their sizes. + # The keys in this map are subject to change. + # @param size_format [String, nil] Controls how size fields are returned. + # Use 'human' for human-readable strings (e.g. "2.3 MiB"), + # or 'raw' (default) for numeric byte counts. # @return [Hash{String => Object}] # @see https://www.meilisearch.com/docs/reference/api/stats#get-stats-of-an-index Meilisearch API Reference - def stats - http_get "/indexes/#{@uid}/stats" + def stats(show_internal_database_sizes: nil, size_format: nil) + params = { + showInternalDatabaseSizes: show_internal_database_sizes, + sizeFormat: size_format + }.compact + http_get "/indexes/#{@uid}/stats", params end # Get the number of documents in the index. From 255418d65971b9dfdcee2bdf083c2eb8340e8f36 Mon Sep 17 00:00:00 2001 From: Ariel Eli Date: Tue, 2 Jun 2026 21:30:06 +0300 Subject: [PATCH 2/3] test(stats): cover size_format and show_internal_database_sizes params --- spec/meilisearch/client/stats_spec.rb | 16 ++++++++++++++++ spec/meilisearch/index/stats_spec.rb | 12 ++++++++++++ 2 files changed, 28 insertions(+) diff --git a/spec/meilisearch/client/stats_spec.rb b/spec/meilisearch/client/stats_spec.rb index 0df55b6f..ba10499d 100644 --- a/spec/meilisearch/client/stats_spec.rb +++ b/spec/meilisearch/client/stats_spec.rb @@ -13,4 +13,20 @@ response = client.stats expect(response).to have_key('databaseSize') end + + it 'gets stats with human-readable size format' do + response = client.stats(size_format: 'human') + expect(response).to have_key('databaseSize') + expect(response['databaseSize']).to be_a(String) + end + + it 'gets stats with internal database sizes' do + client.create_index('books').await + response = client.stats(show_internal_database_sizes: true) + + expect(response).to have_key('indexes') + response['indexes'].each_value do |index_stats| + expect(index_stats).to have_key('internalDatabaseSizes') + end + end end diff --git a/spec/meilisearch/index/stats_spec.rb b/spec/meilisearch/index/stats_spec.rb index 3cd4fbe8..1360787e 100644 --- a/spec/meilisearch/index/stats_spec.rb +++ b/spec/meilisearch/index/stats_spec.rb @@ -9,6 +9,18 @@ expect(response).not_to be_empty end + it 'returns stats with human-readable size format' do + response = index.stats(size_format: 'human') + expect(response).to have_key('rawDocumentDbSize') + expect(response['rawDocumentDbSize']).to be_a(String) + end + + it 'returns stats with internal database sizes' do + response = index.stats(show_internal_database_sizes: true) + expect(response).to have_key('internalDatabaseSizes') + expect(response['internalDatabaseSizes']).to be_a(Hash) + end + it 'gets the number of documents' do response = index.number_of_documents expect(response).to eq(documents.count) From 0090621150d03b5e25c6fa8b05b58e401bc8ef21 Mon Sep 17 00:00:00 2001 From: Ariel Eli Date: Tue, 2 Jun 2026 21:39:48 +0300 Subject: [PATCH 3/3] style: keep Index#stats compact and bump ClassLength baseline by 1 --- .rubocop_todo.yml | 2 +- lib/meilisearch/index.rb | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index afe832e1..b087be3c 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -14,7 +14,7 @@ Metrics/AbcSize: # Offense count: 4 # Configuration parameters: CountComments, CountAsOne. Metrics/ClassLength: - Max: 541 + Max: 542 # Offense count: 4 # Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns. diff --git a/lib/meilisearch/index.rb b/lib/meilisearch/index.rb index 64794c41..9cc2918c 100644 --- a/lib/meilisearch/index.rb +++ b/lib/meilisearch/index.rb @@ -684,11 +684,8 @@ def wait_for_task(task_uid, timeout_in_ms = 5000, interval_in_ms = 50) # @return [Hash{String => Object}] # @see https://www.meilisearch.com/docs/reference/api/stats#get-stats-of-an-index Meilisearch API Reference def stats(show_internal_database_sizes: nil, size_format: nil) - params = { - showInternalDatabaseSizes: show_internal_database_sizes, - sizeFormat: size_format - }.compact - http_get "/indexes/#{@uid}/stats", params + params = { showInternalDatabaseSizes: show_internal_database_sizes, sizeFormat: size_format } + http_get "/indexes/#{@uid}/stats", params.compact end # Get the number of documents in the index.