Skip to content

Commit 19812e3

Browse files
committed
Make queries not die when underlying data cannot be found
1 parent 15b7b9e commit 19812e3

File tree

5 files changed

+50
-46
lines changed

5 files changed

+50
-46
lines changed

lib/gitlab/prometheus/queries/additional_metrics_deployment_query.rb

+9-8
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,16 @@ class AdditionalMetricsDeploymentQuery < BaseQuery
55
include QueryAdditionalMetrics
66

77
def query(deployment_id)
8-
deployment = Deployment.find_by(id: deployment_id)
9-
query_context = {
10-
environment_slug: deployment.environment.slug,
11-
environment_filter: %{container_name!="POD",environment="#{deployment.environment.slug}"},
12-
timeframe_start: (deployment.created_at - 30.minutes).to_f,
13-
timeframe_end: (deployment.created_at + 30.minutes).to_f
14-
}
8+
Deployment.find_by(id: deployment_id).try do |deployment|
9+
query_context = {
10+
environment_slug: deployment.environment.slug,
11+
environment_filter: %{container_name!="POD",environment="#{deployment.environment.slug}"},
12+
timeframe_start: (deployment.created_at - 30.minutes).to_f,
13+
timeframe_end: (deployment.created_at + 30.minutes).to_f
14+
}
1515

16-
query_metrics(query_context)
16+
query_metrics(query_context)
17+
end
1718
end
1819
end
1920
end

lib/gitlab/prometheus/queries/additional_metrics_environment_query.rb

+9-8
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,16 @@ class AdditionalMetricsEnvironmentQuery < BaseQuery
55
include QueryAdditionalMetrics
66

77
def query(environment_id)
8-
environment = Environment.find_by(id: environment_id)
9-
query_context = {
10-
environment_slug: environment.slug,
11-
environment_filter: %{container_name!="POD",environment="#{environment.slug}"},
12-
timeframe_start: 8.hours.ago.to_f,
13-
timeframe_end: Time.now.to_f
14-
}
8+
Environment.find_by(id: environment_id).try do |environment|
9+
query_context = {
10+
environment_slug: environment.slug,
11+
environment_filter: %{container_name!="POD",environment="#{environment.slug}"},
12+
timeframe_start: 8.hours.ago.to_f,
13+
timeframe_end: Time.now.to_f
14+
}
1515

16-
query_metrics(query_context)
16+
query_metrics(query_context)
17+
end
1718
end
1819
end
1920
end

lib/gitlab/prometheus/queries/deployment_query.rb

+17-16
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,27 @@ module Prometheus
33
module Queries
44
class DeploymentQuery < BaseQuery
55
def query(deployment_id)
6-
deployment = Deployment.find_by(id: deployment_id)
7-
environment_slug = deployment.environment.slug
6+
Deployment.find_by(id: deployment_id).try do |deployment|
7+
environment_slug = deployment.environment.slug
88

9-
memory_query = raw_memory_usage_query(environment_slug)
10-
memory_avg_query = %{avg(avg_over_time(container_memory_usage_bytes{container_name!="POD",environment="#{environment_slug}"}[30m]))}
11-
cpu_query = raw_cpu_usage_query(environment_slug)
12-
cpu_avg_query = %{avg(rate(container_cpu_usage_seconds_total{container_name!="POD",environment="#{environment_slug}"}[30m])) * 100}
9+
memory_query = raw_memory_usage_query(environment_slug)
10+
memory_avg_query = %{avg(avg_over_time(container_memory_usage_bytes{container_name!="POD",environment="#{environment_slug}"}[30m]))}
11+
cpu_query = raw_cpu_usage_query(environment_slug)
12+
cpu_avg_query = %{avg(rate(container_cpu_usage_seconds_total{container_name!="POD",environment="#{environment_slug}"}[30m])) * 100}
1313

14-
timeframe_start = (deployment.created_at - 30.minutes).to_f
15-
timeframe_end = (deployment.created_at + 30.minutes).to_f
14+
timeframe_start = (deployment.created_at - 30.minutes).to_f
15+
timeframe_end = (deployment.created_at + 30.minutes).to_f
1616

17-
{
18-
memory_values: client_query_range(memory_query, start: timeframe_start, stop: timeframe_end),
19-
memory_before: client_query(memory_avg_query, time: deployment.created_at.to_f),
20-
memory_after: client_query(memory_avg_query, time: timeframe_end),
17+
{
18+
memory_values: client_query_range(memory_query, start: timeframe_start, stop: timeframe_end),
19+
memory_before: client_query(memory_avg_query, time: deployment.created_at.to_f),
20+
memory_after: client_query(memory_avg_query, time: timeframe_end),
2121

22-
cpu_values: client_query_range(cpu_query, start: timeframe_start, stop: timeframe_end),
23-
cpu_before: client_query(cpu_avg_query, time: deployment.created_at.to_f),
24-
cpu_after: client_query(cpu_avg_query, time: timeframe_end)
25-
}
22+
cpu_values: client_query_range(cpu_query, start: timeframe_start, stop: timeframe_end),
23+
cpu_before: client_query(cpu_avg_query, time: deployment.created_at.to_f),
24+
cpu_after: client_query(cpu_avg_query, time: timeframe_end)
25+
}
26+
end
2627
end
2728
end
2829
end

lib/gitlab/prometheus/queries/environment_query.rb

+13-12
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,21 @@ module Prometheus
33
module Queries
44
class EnvironmentQuery < BaseQuery
55
def query(environment_id)
6-
environment = Environment.find_by(id: environment_id)
7-
environment_slug = environment.slug
8-
timeframe_start = 8.hours.ago.to_f
9-
timeframe_end = Time.now.to_f
6+
Environment.find_by(id: environment_id).try do |environment|
7+
environment_slug = environment.slug
8+
timeframe_start = 8.hours.ago.to_f
9+
timeframe_end = Time.now.to_f
1010

11-
memory_query = raw_memory_usage_query(environment_slug)
12-
cpu_query = raw_cpu_usage_query(environment_slug)
11+
memory_query = raw_memory_usage_query(environment_slug)
12+
cpu_query = raw_cpu_usage_query(environment_slug)
1313

14-
{
15-
memory_values: client_query_range(memory_query, start: timeframe_start, stop: timeframe_end),
16-
memory_current: client_query(memory_query, time: timeframe_end),
17-
cpu_values: client_query_range(cpu_query, start: timeframe_start, stop: timeframe_end),
18-
cpu_current: client_query(cpu_query, time: timeframe_end)
19-
}
14+
{
15+
memory_values: client_query_range(memory_query, start: timeframe_start, stop: timeframe_end),
16+
memory_current: client_query(memory_query, time: timeframe_end),
17+
cpu_values: client_query_range(cpu_query, start: timeframe_start, stop: timeframe_end),
18+
cpu_current: client_query(cpu_query, time: timeframe_end)
19+
}
20+
end
2021
end
2122
end
2223
end

spec/controllers/projects/deployments_controller_spec.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@
141141
end
142142

143143
it 'returns a empty response 204 response' do
144-
get :additional_metrics, deployment_params(id: deployment.id)
144+
get :additional_metrics, deployment_params(id: deployment.id, format: :json)
145145
expect(response).to have_http_status(204)
146146
expect(response.body).to eq('')
147147
end
@@ -161,7 +161,7 @@
161161
end
162162

163163
it 'returns a metrics JSON document' do
164-
get :additional_metrics, deployment_params(id: deployment.id)
164+
get :additional_metrics, deployment_params(id: deployment.id, format: :json)
165165

166166
expect(response).to be_ok
167167
expect(json_response['success']).to be(true)

0 commit comments

Comments
 (0)