Skip to content

Commit ccf89ac

Browse files
committed
expand Namespaces:: and refactoring yaml parsing out of MetricGroup class
1 parent c7a1da8 commit ccf89ac

16 files changed

+282
-239
lines changed

app/models/environment.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ def metrics
159159

160160
def additional_metrics
161161
if has_additional_metrics?
162-
project.monitoring_service.reactive_query(Gitlab::Prometheus::Queries::AdditionalMetricsQuery.name, self.id, &:itself)
162+
project.monitoring_service.reactive_query(Gitlab::Prometheus::Queries::AdditionalMetricsEnvironmentQuery.name, self.id, &:itself)
163163
end
164164
end
165165

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
module Gitlab
2+
module Prometheus
3+
module AdditionalMetricsParser
4+
extend self
5+
6+
def load_groups_from_yaml
7+
additional_metrics_raw.map(&method(:new))
8+
end
9+
10+
private
11+
12+
def metrics_from_list(list)
13+
list.map { |entry| metric_from_entry(entry) }
14+
end
15+
16+
def metric_from_entry(entry)
17+
missing_fields = [:title, :required_metrics, :weight, :queries].select { |key| !entry.has_key?(key) }
18+
raise ParsingError.new("entry missing required fields #{missing_fields}") unless missing_fields.empty?
19+
20+
Metric.new(entry[:title], entry[:required_metrics], entry[:weight], entry[:y_label], entry[:queries])
21+
end
22+
23+
def group_from_entry(entry)
24+
missing_fields = [:group, :priority, :metrics].select { |key| !entry.has_key?(key) }
25+
raise ParsingError.new("entry missing required fields #{missing_fields}") unless missing_fields.empty?
26+
27+
group = MetricGroup.new(entry[:group], entry[:priority])
28+
group.tap { |g| g.metrics = Metric.metrics_from_list(entry[:metrics]) }
29+
end
30+
31+
def additional_metrics_raw
32+
@additional_metrics_raw ||= YAML.load_file(Rails.root.join('config/additional_metrics.yml'))&.map(&:deep_symbolize_keys).freeze
33+
end
34+
end
35+
end
36+
end

lib/gitlab/prometheus/metric.rb

+12-21
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,15 @@
1-
module Gitlab::Prometheus
2-
class Metric
3-
attr_reader :group, :title, :required_metrics, :weight, :y_label, :queries
4-
5-
def initialize(title, required_metrics, weight, y_label, queries = [])
6-
@title = title
7-
@required_metrics = required_metrics
8-
@weight = weight
9-
@y_label = y_label || 'Values'
10-
@queries = queries
11-
end
12-
13-
def self.metric_from_entry(entry)
14-
missing_fields = [:title, :required_metrics, :weight, :queries].select { |key| !entry.has_key?(key) }
15-
raise ParsingError.new("entry missing required fields #{missing_fields}") unless missing_fields.empty?
16-
17-
Metric.new(entry[:title], entry[:required_metrics], entry[:weight], entry[:y_label], entry[:queries])
18-
end
19-
20-
def self.metrics_from_list(list)
21-
list.map { |entry| metric_from_entry(entry) }
1+
module Gitlab
2+
module Prometheus
3+
class Metric
4+
attr_reader :group, :title, :required_metrics, :weight, :y_label, :queries
5+
6+
def initialize(title, required_metrics, weight, y_label, queries = [])
7+
@title = title
8+
@required_metrics = required_metrics
9+
@weight = weight
10+
@y_label = y_label || 'Values'
11+
@queries = queries
12+
end
2213
end
2314
end
2415
end

lib/gitlab/prometheus/metric_group.rb

+13-28
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,18 @@
1-
module Gitlab::Prometheus
2-
class MetricGroup
3-
attr_reader :priority, :name
4-
attr_accessor :metrics
1+
module Gitlab
2+
module Prometheus
3+
class MetricGroup
4+
attr_reader :priority, :name
5+
attr_accessor :metrics
56

6-
def initialize(name, priority, metrics = [])
7-
@name = name
8-
@priority = priority
9-
@metrics = metrics
10-
end
11-
12-
def self.all
13-
load_groups_from_yaml
14-
end
15-
16-
def self.load_groups_from_yaml
17-
additional_metrics_raw.map(&method(:group_from_entry))
18-
end
19-
20-
def self.group_from_entry(entry)
21-
missing_fields = [:group, :priority, :metrics].select { |key| !entry.has_key?(key) }
22-
raise ParsingError.new("entry missing required fields #{missing_fields}") unless missing_fields.empty?
23-
24-
group = MetricGroup.new(entry[:group], entry[:priority])
25-
group.metrics = Metric.metrics_from_list(entry[:metrics])
26-
group
27-
end
7+
def initialize(name:, priority:, metrics: [])
8+
@name = name
9+
@priority = priority
10+
@metrics = metrics
11+
end
2812

29-
def self.additional_metrics_raw
30-
@additional_metrics_raw ||= YAML.load_file(Rails.root.join('config/additional_metrics.yml'))&.map(&:deep_symbolize_keys).freeze
13+
def self.all
14+
AdditionalMetricsParser.load_groups_from_yaml
15+
end
3116
end
3217
end
3318
end
+4-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1-
module Gitlab::Prometheus
2-
ParsingError = Class.new(StandardError)
1+
module Gitlab
2+
module Prometheus
3+
ParsingError = Class.new(StandardError)
4+
end
35
end
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
1-
module Gitlab::Prometheus::Queries
2-
class AdditionalMetricsDeploymentQuery < AdditionalMetricsQuery
3-
def query(deployment_id)
4-
deployment = Deployment.find_by(id: deployment_id)
5-
query_context = {
6-
environment_slug: deployment.environment.slug,
7-
environment_filter: %{container_name!="POD",environment="#{deployment.environment.slug}"},
8-
timeframe_start: (deployment.created_at - 30.minutes).to_f,
9-
timeframe_end: (deployment.created_at + 30.minutes).to_f
10-
}
1+
module Gitlab
2+
module Prometheus
3+
module Queries
4+
class AdditionalMetricsDeploymentQuery < BaseQuery
5+
include QueryAdditionalMetrics
116

12-
query_metrics(query_context)
7+
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+
}
15+
16+
query_metrics(query_context)
17+
end
18+
end
1319
end
1420
end
1521
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
module Gitlab
2+
module Prometheus
3+
module Queries
4+
class AdditionalMetricsEnvironmentQuery < BaseQuery
5+
include QueryAdditionalMetrics
6+
7+
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+
}
15+
16+
query_metrics(query_context)
17+
end
18+
end
19+
end
20+
end
21+
end

lib/gitlab/prometheus/queries/additional_metrics_query.rb

-82
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,30 @@
1-
module Gitlab::Prometheus::Queries
2-
class DeploymentQuery < BaseQuery
3-
def query(deployment_id)
4-
deployment = Deployment.find_by(id: deployment_id)
5-
environment_slug = deployment.environment.slug
1+
module Gitlab
2+
module Prometheus
3+
module Queries
4+
class DeploymentQuery < BaseQuery
5+
def query(deployment_id)
6+
deployment = Deployment.find_by(id: deployment_id)
7+
environment_slug = deployment.environment.slug
68

7-
memory_query = raw_memory_usage_query(environment_slug)
8-
memory_avg_query = %{avg(avg_over_time(container_memory_usage_bytes{container_name!="POD",environment="#{environment_slug}"}[30m]))}
9-
cpu_query = raw_cpu_usage_query(environment_slug)
10-
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}
1113

12-
timeframe_start = (deployment.created_at - 30.minutes).to_f
13-
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
1416

15-
{
16-
memory_values: client_query_range(memory_query, start: timeframe_start, stop: timeframe_end),
17-
memory_before: client_query(memory_avg_query, time: deployment.created_at.to_f),
18-
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),
1921

20-
cpu_values: client_query_range(cpu_query, start: timeframe_start, stop: timeframe_end),
21-
cpu_before: client_query(cpu_avg_query, time: deployment.created_at.to_f),
22-
cpu_after: client_query(cpu_avg_query, time: timeframe_end)
23-
}
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
27+
end
2428
end
2529
end
2630
end
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
1-
module Gitlab::Prometheus::Queries
2-
class EnvironmentQuery < BaseQuery
3-
def query(environment_id)
4-
environment = Environment.find_by(id: environment_id)
5-
environment_slug = environment.slug
6-
timeframe_start = 8.hours.ago.to_f
7-
timeframe_end = Time.now.to_f
1+
module Gitlab
2+
module Prometheus
3+
module Queries
4+
class EnvironmentQuery < BaseQuery
5+
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
810

9-
memory_query = raw_memory_usage_query(environment_slug)
10-
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)
1113

12-
{
13-
memory_values: client_query_range(memory_query, start: timeframe_start, stop: timeframe_end),
14-
memory_current: client_query(memory_query, time: timeframe_end),
15-
cpu_values: client_query_range(cpu_query, start: timeframe_start, stop: timeframe_end),
16-
cpu_current: client_query(cpu_query, time: timeframe_end)
17-
}
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
21+
end
1822
end
1923
end
2024
end

0 commit comments

Comments
 (0)