diff options
Diffstat (limited to 'lib/banzai/filter/inline_cluster_metrics_filter.rb')
-rw-r--r-- | lib/banzai/filter/inline_cluster_metrics_filter.rb | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/banzai/filter/inline_cluster_metrics_filter.rb b/lib/banzai/filter/inline_cluster_metrics_filter.rb new file mode 100644 index 00000000000..5ef68388ea9 --- /dev/null +++ b/lib/banzai/filter/inline_cluster_metrics_filter.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +module Banzai + module Filter + class InlineClusterMetricsFilter < ::Banzai::Filter::InlineEmbedsFilter + def embed_params(node) + url = node['href'] + @query_params = query_params(url) + return unless [:group, :title, :y_label].all? do |param| + @query_params.include?(param) + end + + link_pattern.match(url) { |m| m.named_captures }.symbolize_keys + end + + def xpath_search + "descendant-or-self::a[contains(@href,'clusters') and \ + starts-with(@href, '#{::Gitlab.config.gitlab.url}')]" + end + + def link_pattern + ::Gitlab::Metrics::Dashboard::Url.clusters_regex + end + + def metrics_dashboard_url(params) + ::Gitlab::Routing.url_helpers.metrics_dashboard_namespace_project_cluster_url( + params[:namespace], + params[:project], + params[:cluster_id], + # Only Project clusters are supported for now + # admin and group cluster types may be supported in the future + cluster_type: :project, + embedded: true, + format: :json, + **@query_params + ) + end + end + end +end |