diff --git a/CHANGELOG.md b/CHANGELOG.md index 276ecb6e..61e1bbdc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - be gentle to http routes, don't leave gaps in the array [#246](https://github.com/tarantool/metrics/issues/246) +- allow to create summary without observations [#265](https://github.com/tarantool/metrics/issues/265) ### Added - `tnt_clock_delta` metric to compute clock difference on instances diff --git a/metrics/collectors/summary.lua b/metrics/collectors/summary.lua index 00096659..6841c670 100644 --- a/metrics/collectors/summary.lua +++ b/metrics/collectors/summary.lua @@ -17,9 +17,11 @@ function Summary:new(name, help, objectives, params) obj.age_buckets_count = params.age_buckets_count or 1 obj.observations = {} - obj.quantiles = {} - for q, _ in pairs(objectives) do - table.insert(obj.quantiles, q) + if obj.objectives then + obj.quantiles = {} + for q, _ in pairs(objectives) do + table.insert(obj.quantiles, q) + end end return obj end diff --git a/test/collectors/summary_test.lua b/test/collectors/summary_test.lua index 383ad7c5..08d33021 100644 --- a/test/collectors/summary_test.lua +++ b/test/collectors/summary_test.lua @@ -163,6 +163,22 @@ g.test_summary_wrong_label = function() instance.observe, instance, 1, {quantile = 0.5}) end +g.test_create_summary_without_observations = function() + local ok, summary = pcall(metrics.summary, 'plain_summary') + t.assert(ok, summary) + summary:observe(0) + + local summary_metrics = utils.find_metric('plain_summary_count', metrics.collect()) + t.assert_equals(#summary_metrics, 1) + + summary_metrics = utils.find_metric('plain_summary_sum', metrics.collect()) + t.assert_equals(#summary_metrics, 1) + + summary_metrics = utils.find_metric('plain_summary', metrics.collect()) + t.assert_not(summary_metrics) + +end + local test_data_wrong_input = { objectives = {error = 'Invalid value for objectives', input = {'summary', nil, {0.5, 0.9, 0.99}}}, max_age = {error = 'Max age must be positive', input = {'summary', nil, {[0.5]=0.01}, {max_age_time = -1}}},