Average number of approval metrics failing in Service Ping for Gitlab.com
Problem
One of the metrics introduced with !90089 (merged) is failing in the Service Ping generated for GitLab.com for %15.2:
usage_activity_by_stage_monthly.release.protected_environments_average_required_approvals
Below is the error stacktrace:
Traceback (most recent call last):
16: from lib/gitlab/usage/service_ping/instrumented_payload.rb:18:in `map'
15: from lib/gitlab/usage/service_ping/instrumented_payload.rb:19:in `block in build'
14: from lib/gitlab/usage/service_ping/instrumented_payload.rb:36:in `compute_instrumental_value'
13: from lib/gitlab/usage/service_ping/instrumented_payload.rb:36:in `call'
12: from lib/gitlab/usage/metric.rb:21:in `with_value'
11: from lib/gitlab/usage/metric.rb:37:in `with_availability'
10: from lib/gitlab/usage/metric.rb:21:in `block in with_value'
9: from lib/gitlab/usage/metrics/instrumentations/database_metric.rb:68:in `value'
8: from lib/gitlab/usage/metrics/instrumentations/database_metric.rb:68:in `call'
7: from lib/gitlab/utils/usage_data.rb:108:in `average'
6: from lib/gitlab/utils/usage_data.rb:48:in `with_duration'
5: from lib/gitlab/utils/usage_data.rb:109:in `block in average'
4: from lib/gitlab/database/batch_count.rb:47:in `batch_average'
3: from lib/gitlab/database/batch_counter.rb:57:in `count'
2: from lib/gitlab/database/batch_counter.rb:85:in `merge_results'
1: from lib/gitlab/database/batch_counter.rb:85:in `+'
TypeError (nil can't be coerced into BigDecimal)
Looking at the error, it seems that the SQL executed by average operation (passed here to the merge_results method) is returning nil, which results in an error because nil cannot be coerced into a BigDecimal for the addition taking place in line #85.
See this, and this for more information about the failure.
Proposal
Update the batch counter class to handle nil value for object in merge_results method without throwing errors. Additionally, it might be worth investigating why the SQL query had returned a nil result to begin with.
Edited by Ahmed Hemdan