debian-mirror-gitlab/app/models/performance_monitoring/prometheus_dashboard.rb

63 lines
1.9 KiB
Ruby
Raw Normal View History

2020-03-13 15:44:24 +05:30
# frozen_string_literal: true
module PerformanceMonitoring
class PrometheusDashboard
include ActiveModel::Model
2020-06-23 00:09:42 +05:30
attr_accessor :dashboard, :panel_groups, :path, :environment, :priority, :templating, :links
2020-03-13 15:44:24 +05:30
validates :dashboard, presence: true
validates :panel_groups, presence: true
2020-04-22 19:07:51 +05:30
class << self
def from_json(json_content)
2020-06-23 00:09:42 +05:30
build_from_hash(json_content).tap(&:validate!)
2020-04-22 19:07:51 +05:30
end
def find_for(project:, user:, path:, options: {})
2020-06-23 00:09:42 +05:30
template = { path: path, environment: options[:environment] }
rsp = Gitlab::Metrics::Dashboard::Finder.find(project, user, options.merge(dashboard_path: path))
case rsp[:http_status] || rsp[:status]
when :success
new(template.merge(rsp[:dashboard] || {})) # when there is empty dashboard file returned rsp is still a success
when :unprocessable_entity
new(template) # validation error
else
nil # any other error
end
end
private
def build_from_hash(attributes)
return new unless attributes.is_a?(Hash)
2020-04-22 19:07:51 +05:30
new(
2020-06-23 00:09:42 +05:30
dashboard: attributes['dashboard'],
panel_groups: attributes['panel_groups']&.map { |group| PrometheusPanelGroup.from_json(group) }
2020-04-22 19:07:51 +05:30
)
end
2020-03-13 15:44:24 +05:30
end
def to_yaml
2020-04-22 19:07:51 +05:30
self.as_json(only: yaml_valid_attributes).to_yaml
2020-03-13 15:44:24 +05:30
end
2020-06-23 00:09:42 +05:30
# This method is planned to be refactored as a part of https://gitlab.com/gitlab-org/gitlab/-/issues/219398
# implementation. For new existing logic was reused to faster deliver MVC
def schema_validation_warnings
self.class.from_json(self.as_json)
nil
rescue ActiveModel::ValidationError => exception
exception.model.errors.map { |attr, error| "#{attr}: #{error}" }
end
2020-03-13 15:44:24 +05:30
private
2020-04-22 19:07:51 +05:30
def yaml_valid_attributes
2020-03-13 15:44:24 +05:30
%w(panel_groups panels metrics group priority type title y_label weight id unit label query query_range dashboard)
end
end
end