Commit eaaad702 authored by Pawel Chojnacki's avatar Pawel Chojnacki

Additional metrics test using multiple groups

parent ae5268ce
...@@ -2,6 +2,7 @@ require 'spec_helper' ...@@ -2,6 +2,7 @@ require 'spec_helper'
describe Gitlab::Prometheus::Queries::AdditionalMetricsQuery, lib: true do describe Gitlab::Prometheus::Queries::AdditionalMetricsQuery, lib: true do
include Prometheus::AdditionalMetricsQueryHelper include Prometheus::AdditionalMetricsQueryHelper
include Prometheus::MetricBuilders
let(:metric_group_class) { Gitlab::Prometheus::MetricGroup } let(:metric_group_class) { Gitlab::Prometheus::MetricGroup }
let(:metric_class) { Gitlab::Prometheus::Metric } let(:metric_class) { Gitlab::Prometheus::Metric }
...@@ -11,6 +12,9 @@ describe Gitlab::Prometheus::Queries::AdditionalMetricsQuery, lib: true do ...@@ -11,6 +12,9 @@ describe Gitlab::Prometheus::Queries::AdditionalMetricsQuery, lib: true do
subject(:query_result) { described_class.new(client).query(environment.id) } subject(:query_result) { described_class.new(client).query(environment.id) }
around do |example|
Timecop.freeze { example.run }
end
context 'with one group where two metrics is found' do context 'with one group where two metrics is found' do
before do before do
...@@ -18,31 +22,99 @@ describe Gitlab::Prometheus::Queries::AdditionalMetricsQuery, lib: true do ...@@ -18,31 +22,99 @@ describe Gitlab::Prometheus::Queries::AdditionalMetricsQuery, lib: true do
allow(client).to receive(:label_values).and_return(metric_names) allow(client).to receive(:label_values).and_return(metric_names)
end end
context 'some querie return results' do context 'some queries return results' do
before do before do
expect(client).to receive(:query_range).with('query_range_a', any_args).and_return(query_range_result) expect(client).to receive(:query_range).with('query_range_a', any_args).and_return(query_range_result)
expect(client).to receive(:query_range).with('query_range_b', any_args).and_return(query_range_result) expect(client).to receive(:query_range).with('query_range_b', any_args).and_return(query_range_result)
expect(client).to receive(:query_range).with('query_range_empty', any_args).and_return([]) expect(client).to receive(:query_range).with('query_range_empty', any_args).and_return([])
end end
it 'return results only for queries with results' do
expected = [
{
group: 'name',
priority: 1,
metrics: [
{
title: 'title', weight: nil, y_label: 'Values', queries: [
{ query_range: 'query_range_a', result: query_range_result },
{ query_range: 'query_range_b', label: 'label', unit: 'unit', result: query_range_result }
]
}
]
}
]
expect(query_result).to eq(expected)
end
end
end
context 'with two groups with one metric each' do
let(:metrics) { [simple_metric(queries: [simple_query])] }
before do
allow(metric_group_class).to receive(:all).and_return(
[
simple_metric_group('group_a', [simple_metric(queries: [simple_query])]),
simple_metric_group('group_b', [simple_metric(title: 'title_b', queries: [simple_query('b')])])
])
allow(client).to receive(:label_values).and_return(metric_names)
end
context 'some queries return results' do
before do
expect(client).to receive(:query_range).with('query_range_a', any_args).and_return(query_range_result)
expect(client).to receive(:query_range).with('query_range_b', any_args).and_return(query_range_result)
end
it 'return results only for queries with results' do it 'return results only for queries with results' do
puts query_result puts query_result
expected = { expected = [
group: 'name', {
priority: 1, group: 'group_a',
metrics: priority: 1,
[ metrics: [
{
title: 'title',
weight: nil,
y_label: 'Values',
queries: [
{
query_range: 'query_range_a',
result: [
{
metric: {},
values: [[1488758662.506, '0.00002996364761904785'], [1488758722.506, '0.00003090239047619091']] }
]
}
]
}
]
},
{
group: 'group_b',
priority: 1,
metrics: [
{ {
title: 'title', weight: nil, y_label: 'Values', queries: title: 'title_b',
[ weight: nil,
{ query_range: 'query_range_a', result: query_range_result }, y_label: 'Values',
{ query_range: 'query_range_b', label: 'label', unit: 'unit', result: query_range_result } queries: [
{
query_range: 'query_range_b', result: [
{
metric: {},
values: [[1488758662.506, '0.00002996364761904785'], [1488758722.506, '0.00003090239047619091']]
}
]
}
] ]
} }
] ]
} }
]
expect(query_result).to eq([expected]) expect(query_result).to eq(expected)
end end
end end
end end
......
...@@ -4,26 +4,6 @@ module Prometheus ...@@ -4,26 +4,6 @@ module Prometheus
%w{metric_a metric_b} %w{metric_a metric_b}
end end
def simple_queries
[{ query_range: 'query_range_a' }, { query_range: 'query_range_b', label: 'label', unit: 'unit' }]
end
def simple_query(suffix = 'a')
[{ query_range: "query_range_#{suffix}" }]
end
def simple_metrics
[
Gitlab::Prometheus::Metric.new('title', %w(metric_a metric_b), nil, nil, simple_queries),
Gitlab::Prometheus::Metric.new('title', %w{metric_a}, nil, nil, simple_query('empty')),
Gitlab::Prometheus::Metric.new('title', %w{metric_c}, nil, nil)
]
end
def simple_metric_group(name = 'name', metrics = simple_metrics)
Gitlab::Prometheus::MetricGroup.new(name, 1, metrics)
end
def query_result def query_result
[ [
{ {
......
module Prometheus
module MetricBuilders
def simple_query(suffix = 'a', **opts)
{ query_range: "query_range_#{suffix}" }.merge(opts)
end
def simple_queries
[simple_query, simple_query('b', label: 'label', unit: 'unit')]
end
def simple_metric(title: 'title', required_metrics: [], queries: [])
Gitlab::Prometheus::Metric.new(title, required_metrics, nil, nil, queries)
end
def simple_metrics
[
simple_metric(required_metrics: %w(metric_a metric_b), queries: simple_queries),
simple_metric(required_metrics: %w{metric_a}, queries: [simple_query('empty')]),
simple_metric(required_metrics: %w{metric_c})
]
end
def simple_metric_group(name = 'name', metrics = simple_metrics)
Gitlab::Prometheus::MetricGroup.new(name, 1, metrics)
end
end
end
\ No newline at end of file
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