diff options
-rw-r--r-- | lib/banzai/filter/inline_metrics_filter.rb | 6 | ||||
-rw-r--r-- | lib/gitlab/metrics/dashboard/url.rb | 17 | ||||
-rw-r--r-- | spec/lib/gitlab/metrics/dashboard/url_spec.rb | 7 |
3 files changed, 20 insertions, 10 deletions
diff --git a/lib/banzai/filter/inline_metrics_filter.rb b/lib/banzai/filter/inline_metrics_filter.rb index 29f526d3421..e54136f776e 100644 --- a/lib/banzai/filter/inline_metrics_filter.rb +++ b/lib/banzai/filter/inline_metrics_filter.rb @@ -34,11 +34,7 @@ module Banzai def query_params(params) return {} unless params['query'] - CGI.parse(params['query'][1..-1]).map do |key, value| - target = value.length == 1 ? value.first : value - - [key.to_sym, target] - end.to_h + Gitlab::Metrics::Dashboard::Url.parse_query(params['query'][1..-1]) end # Search params for selecting metrics links. A few diff --git a/lib/gitlab/metrics/dashboard/url.rb b/lib/gitlab/metrics/dashboard/url.rb index 83d0a1cdf49..0324135f284 100644 --- a/lib/gitlab/metrics/dashboard/url.rb +++ b/lib/gitlab/metrics/dashboard/url.rb @@ -21,14 +21,27 @@ module Gitlab \/(?<environment>\d+) \/metrics (?<query> - \?[%.+a-zA-Z0-9_=-]+ - (&[%.+a-zA-Z0-9_=-]+)* + \?[a-zA-Z0-9%.()+_=-]+ + (&[a-zA-Z0-9%.()+_=-]+)* )? (?<anchor>\#[a-z0-9_-]+)? ) }x end + # Parses query params out from full string into hash. + # If multiple values are given for a parameter, they + # will be captured in an array. + # + # Ex) 'title=Title&group=Group' --> { title: 'Title', group: Group } + def parse_query(query_string) + CGI.parse(query_string).map do |key, value| + target = value.length == 1 ? value.first : value + + [key.to_sym, target] + end.to_h + end + # Builds a metrics dashboard url based on the passed in arguments def build_dashboard_url(*args) Gitlab::Routing.url_helpers.metrics_dashboard_namespace_project_environment_url(*args) diff --git a/spec/lib/gitlab/metrics/dashboard/url_spec.rb b/spec/lib/gitlab/metrics/dashboard/url_spec.rb index edd11bf8023..e0dc6d98efc 100644 --- a/spec/lib/gitlab/metrics/dashboard/url_spec.rb +++ b/spec/lib/gitlab/metrics/dashboard/url_spec.rb @@ -13,8 +13,9 @@ describe Gitlab::Metrics::Dashboard::Url do 'foo', 'bar', 1, - start: 123345456, - dashboard: 'config%2Fprometheus%2Fcommon_metrics.yml', + start: '2019-08-02T05:43:09.000Z', + dashboard: 'config/prometheus/common_metrics.yml', + group: 'awesome group', anchor: 'title' ) @@ -23,7 +24,7 @@ describe Gitlab::Metrics::Dashboard::Url do 'namespace' => 'foo', 'project' => 'bar', 'environment' => '1', - 'query' => '?dashboard=config%252Fprometheus%252Fcommon_metrics.yml&start=123345456', + 'query' => '?dashboard=config%2Fprometheus%2Fcommon_metrics.yml&group=awesome+group&start=2019-08-02T05%3A43%3A09.000Z', 'anchor' => '#title' } |