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/.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/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..9cc2918c 100644
--- a/lib/meilisearch/index.rb
+++ b/lib/meilisearch/index.rb
@@ -675,10 +675,17 @@ 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 }
+ http_get "/indexes/#{@uid}/stats", params.compact
end
# Get the number of documents in the index.
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)