diff options
author | syasonik <syasonik@gitlab.com> | 2019-02-15 19:36:59 +0800 |
---|---|---|
committer | syasonik <syasonik@gitlab.com> | 2019-02-15 19:47:30 +0800 |
commit | 2ddc8aa51cdc9fe9f36e024347f7bdc43c9e59ac (patch) | |
tree | 26458bde01705129bc8e7e972a8f479a30658ad6 | |
parent | 44542b4505d5b0a8d14e2d1aaec369703860b51c (diff) | |
download | gitlab-ce-import-multiple-queries.tar.gz |
Migrate queries and support importing to tableimport-multiple-queries
-rw-r--r-- | app/models/prometheus_metric.rb | 23 | ||||
-rw-r--r-- | db/importers/common_metrics_importer.rb | 56 | ||||
-rw-r--r-- | db/migrate/20190215071340_backfill_prometheus_queries.rb | 21 | ||||
-rw-r--r-- | db/schema.rb | 2 |
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" |