Commit b144a9f1 authored by Ahmad Sherif's avatar Ahmad Sherif

Merge branch 'bjk/null_values' into 'master'

Add validation of metric values

Closes #60

See merge request gitlab-org/gitlab-exporter!102
parents 2d4a7c3f 2f3355b4
Pipeline #135317 passed with stage
in 1 minute and 4 seconds
......@@ -60,7 +60,7 @@ module GitLab
def probe_for_type(type)
collector.run(type).each do |query_name, data|
METRIC_KEYS.each do |key|
metrics.add("gitlab_database_bloat_#{type}_#{key}", data[key], query_name: query_name)
metrics.add("gitlab_database_bloat_#{type}_#{key}", data[key].to_f, query_name: query_name)
end
end
......
......@@ -463,7 +463,7 @@ module GitLab
other_values[key] ||= 0
other_values[key] += metric[:value]
else
add_ci_created_pending_builds(metric_name, metric[:value], metric)
add_ci_created_pending_builds(metric_name, metric[:value].to_f, metric)
end
end
......@@ -479,7 +479,7 @@ module GitLab
end
def ci_stale_builds_metrics
@metrics.add("ci_stale_builds", @results[:stale_builds])
@metrics.add("ci_stale_builds", @results[:stale_builds].to_f)
end
def metrics_per_runner
......@@ -519,19 +519,19 @@ module GitLab
labels[:namespace] = "" unless labels[:namespace]
selected_labels = labels.select { |k, _| allowed_labels.include?(k) }.sort.to_h
@metrics.add(metric_name, value, selected_labels)
@metrics.add(metric_name, value.to_f, selected_labels)
end
def repeated_commands_metrics
@results[:repeated_commands].each do |metric|
value = metric.delete(:value)
@metrics.add("ci_repeated_commands_builds", value, metric)
@metrics.add("ci_repeated_commands_builds", value.to_f, metric)
end
end
def unarchived_traces_metrics
@metrics.add("ci_unarchived_traces", @results[:unarchived_traces])
@metrics.add("ci_unarchived_traces", @results[:unarchived_traces].to_f)
end
end
end
......
......@@ -48,13 +48,13 @@ module GitLab
results.to_a.each do |row|
@metrics.add(
"project_remote_mirror_last_successful_update_time_seconds",
row["last_successful_update_at"].to_i,
row["last_successful_update_at"].to_f,
project_id: row["project_id"],
url: row["url"]
)
@metrics.add(
"project_remote_mirror_last_update_time_seconds",
row["last_update_at"].to_i,
row["last_update_at"].to_f,
project_id: row["project_id"],
url: row["url"]
)
......
......@@ -147,7 +147,7 @@ module GitLab
def probe_db
results = @collector.run
results.each do |key, value|
@metrics.add("gitlab_database_rows", value.to_i, query_name: key.to_s)
@metrics.add("gitlab_database_rows", value.to_f, query_name: key.to_s)
end
self
......
......@@ -35,7 +35,9 @@ module GitLab
result.each do |table_name, tuple_stats|
tuple_stats.each do |column_name, value|
@metrics.add("gitlab_database_stat_table_#{column_name}", value.to_s, table_name: table_name)
@metrics.add("gitlab_database_stat_table_#{column_name}",
value.to_f,
table_name: table_name) unless value.is_a?(Numeric)
end
end
......
......@@ -16,6 +16,8 @@ module GitLab
end
def add(name, value, quantile = false, **labels)
fail "value '#{value}' must be a number" unless value.is_a?(Numeric)
if quantile
@quantiles[{ name: name, labels: labels }] << value
else
......
This diff is collapsed.
......@@ -14,4 +14,13 @@ describe GitLab::Exporter::PrometheusMetrics do
/mymetric{mylabel="x",myotherlabel="y"} 1.3 \d*$/
)
end
it "fails to add a non-numeric metric value" do
expect {
subject.add("mymetric", "1.4", mylabel: "x", myotherlabel: "y").to_s
}.to raise_error(RuntimeError)
expect {
subject.add("mymetric", "invalid", mylabel: "x", myotherlabel: "y").to_s
}.to raise_error(RuntimeError)
end
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment