summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsyasonik <syasonik@gitlab.com>2019-02-15 19:36:59 +0800
committersyasonik <syasonik@gitlab.com>2019-02-15 19:47:30 +0800
commit2ddc8aa51cdc9fe9f36e024347f7bdc43c9e59ac (patch)
tree26458bde01705129bc8e7e972a8f479a30658ad6
parent44542b4505d5b0a8d14e2d1aaec369703860b51c (diff)
downloadgitlab-ce-import-multiple-queries.tar.gz
Migrate queries and support importing to tableimport-multiple-queries
-rw-r--r--app/models/prometheus_metric.rb23
-rw-r--r--db/importers/common_metrics_importer.rb56
-rw-r--r--db/migrate/20190215071340_backfill_prometheus_queries.rb21
-rw-r--r--db/schema.rb2
4 files changed, 59 insertions, 43 deletions
diff --git a/app/models/prometheus_metric.rb b/app/models/prometheus_metric.rb
index 22b64744fe7..3cbaa870b1d 100644
--- a/app/models/prometheus_metric.rb
+++ b/app/models/prometheus_metric.rb
@@ -95,28 +95,7 @@ class PrometheusMetric < ActiveRecord::Base
end
def queries
- [
- {
- query_range: query,
- unit: unit,
- label: legend,
- series: query_series
- }.compact
- ]
- end
-
- def query_series
- case legend
- when 'Status Code'
- [{
- label: 'status_code',
- when: [
- { value: '2xx', color: 'green' },
- { value: '4xx', color: 'orange' },
- { value: '5xx', color: 'red' }
- ]
- }]
- end
+ prometheus_queries.map(&:to_query_hash)
end
private
diff --git a/db/importers/common_metrics_importer.rb b/db/importers/common_metrics_importer.rb
index deadd653ae9..255f565e4f7 100644
--- a/db/importers/common_metrics_importer.rb
+++ b/db/importers/common_metrics_importer.rb
@@ -17,6 +17,7 @@ module Importers
system: 2
}
+ has_many :prometheus_queries
scope :common, -> { where(common: true) }
GROUP_TITLES = {
@@ -32,6 +33,10 @@ module Importers
}.freeze
end
+ class PrometheusQuery < ActiveRecord::Base
+ belongs_to :prometheus_metric
+ end
+
class CommonMetricsImporter
MissingQueryId = Class.new(StandardError)
@@ -43,10 +48,11 @@ module Importers
def execute
PrometheusMetric.reset_column_information
+ PrometheusQuery.reset_column_information
- process_content do |id, attributes|
- find_or_build_metric!(id)
- .update!(**attributes)
+ process_content do |metric_attributes|
+ find_or_build_metric!(metric_attributes)
+ .update!(**metric_attributes)
end
end
@@ -59,39 +65,49 @@ module Importers
end
def process_group(group, &blk)
- attributes = {
+ metric_attributes = {
group: find_group_title_key(group['group'])
}
group['metrics'].map do |metric|
- process_metric(metric, attributes, &blk)
+ process_metric(metric, metric_attributes, &blk)
end
end
- def process_metric(metric, attributes, &blk)
- attributes = attributes.merge(
- title: metric['title'],
- y_label: metric['y_label'])
-
- metric['queries'].map do |query|
- process_metric_query(query, attributes, &blk)
+ def process_metric(metric, metric_attributes, &blk)
+ queries = metric['queries'].map do |query|
+ process_query(query)
end
+
+ yield metric_attributes.merge(
+ title: metric['title'],
+ y_label: metric['y_label'],
+ prometheus_queries: queries
+ )
end
- def process_metric_query(query, attributes, &blk)
- attributes = attributes.merge(
+ def process_query(query)
+ prometheus_query = find_or_build_query!(query['id'])
+ prometheus_query.assign_attributes(
legend: query['label'],
query: query['query_range'],
- unit: query['unit'])
-
- yield(query['id'], attributes)
+ unit: query['unit']
+ )
+ prometheus_query
end
- def find_or_build_metric!(id)
+ def find_or_build_query!(id)
raise MissingQueryId unless id
- PrometheusMetric.common.find_by(identifier: id) ||
- PrometheusMetric.new(common: true, identifier: id)
+ PrometheusQuery.find_by(identifier: id) ||
+ PrometheusQuery.new(identifier: id)
+ end
+
+ def find_or_build_metric!(metric_attributes)
+ target_attributes = metric_attributes.slice(:group, :title, :y_label)
+
+ PrometheusMetric.common.find_by(target_attributes) ||
+ PrometheusMetric.new(common: true)
end
def find_group_title_key(title)
diff --git a/db/migrate/20190215071340_backfill_prometheus_queries.rb b/db/migrate/20190215071340_backfill_prometheus_queries.rb
new file mode 100644
index 00000000000..814c7e631af
--- /dev/null
+++ b/db/migrate/20190215071340_backfill_prometheus_queries.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class BackfillPrometheusQueries < ActiveRecord::Migration[5.0]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ execute <<~SQL
+ INSERT INTO prometheus_queries (prometheus_metric_id, identifier, query, legend, unit, created_at, updated_at)
+ SELECT id, identifier, query, legend, unit, created_at, updated_at
+ FROM prometheus_metrics;
+ SQL
+ end
+
+ def down
+ execute <<-SQL
+ DELETE FROM prometheus_queries;
+ SQL
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 20cb88d46ab..1b0268da192 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20190213100701) do
+ActiveRecord::Schema.define(version: 20190215071340) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"