diff options
Diffstat (limited to 'lib/gitlab/metrics/dashboard/url.rb')
-rw-r--r-- | lib/gitlab/metrics/dashboard/url.rb | 133 |
1 files changed, 0 insertions, 133 deletions
diff --git a/lib/gitlab/metrics/dashboard/url.rb b/lib/gitlab/metrics/dashboard/url.rb deleted file mode 100644 index e7b901861ef..00000000000 --- a/lib/gitlab/metrics/dashboard/url.rb +++ /dev/null @@ -1,133 +0,0 @@ -# frozen_string_literal: true - -# Manages url matching for metrics dashboards. -module Gitlab - module Metrics - module Dashboard - class Url - class << self - include Gitlab::Utils::StrongMemoize - - QUERY_PATTERN = '(?<query>\?[a-zA-Z0-9%.()+_=-]+(&[a-zA-Z0-9%.()+_=-]+)*)?' - ANCHOR_PATTERN = '(?<anchor>\#[a-z0-9_-]+)?' - DASH_PATTERN = '(?:/-)' - - # Matches dashboard urls for a Grafana embed. - # - # EX - https://<host>/<namespace>/<project>/grafana/metrics_dashboard - def grafana_regex - strong_memoize(:grafana_regex) do - regex_for_project_metrics( - %r{ - #{DASH_PATTERN}? - /grafana - /metrics_dashboard - }xo - ) - end - end - - # Matches dashboard urls for a metric chart embed - # for cluster metrics. - # This regex needs to match the dashboard URL as well, not just the trigger URL. - # The inline_metrics_redactor_filter.rb uses this regex to match against - # the dashboard URL. - # - # EX - https://<host>/<namespace>/<project>/-/clusters/<cluster_id>/?group=Cluster%20Health&title=Memory%20Usage&y_label=Memory%20(GiB) - # dashboard URL - https://<host>/<namespace>/<project>/-/clusters/<cluster_id>/metrics_dashboard?group=Cluster%20Health&title=Memory%20Usage&y_label=Memory%20(GiB) - def clusters_regex - strong_memoize(:clusters_regex) do - regex_for_project_metrics( - %r{ - #{DASH_PATTERN}? - /clusters - /(?<cluster_id>\d+) - /? - ( (/metrics) | ( /metrics_dashboard\.json ) )? - }xo - ) - end - end - - # Matches dashboard urls for a metric chart embed - # for a specifc firing GitLab alert - # - # EX - https://<host>/<namespace>/<project>/prometheus/alerts/<alert_id>/metrics_dashboard - def alert_regex - strong_memoize(:alert_regex) do - regex_for_project_metrics( - %r{ - #{DASH_PATTERN}? - /prometheus - /alerts - /(?<alert>\d+) - /metrics_dashboard(\.json)? - }xo - ) - end - end - - # Parses query params out from full url string into hash. - # - # Ex) 'https://<root>/<project>/<environment>/metrics?title=Title&group=Group' - # --> { title: 'Title', group: 'Group' } - def parse_query(url) - query_string = URI.parse(url).query.to_s - - CGI.parse(query_string) - .transform_values { |value| value.first } - .symbolize_keys - end - - private - - def environment_metrics_regex - %r{ - #{DASH_PATTERN}? - /environments - /(?<environment>\d+) - /(metrics_dashboard|metrics) - }xo - end - - def non_environment_metrics_regex - %r{ - #{DASH_PATTERN} - /metrics - (?= # Lookahead to ensure there is an environment query param - \? - .* - environment=(?<environment>\d+) - .* - ) - }xo - end - - def regex_for_project_metrics(path_suffix_pattern) - %r{ - ^(?<url> - #{gitlab_host_pattern} - #{project_path_pattern} - #{path_suffix_pattern} - #{QUERY_PATTERN} - #{ANCHOR_PATTERN} - )$ - }x - end - - def gitlab_host_pattern - Regexp.escape(gitlab_domain) - end - - def project_path_pattern - "\/#{Project.reference_pattern}" - end - - def gitlab_domain - Gitlab.config.gitlab.url - end - end - end - end - end -end |