module Kennel::TemplateVariables
Public Class Methods
included(base)
click to toggle source
# File lib/kennel/template_variables.rb, line 4 def self.included(base) base.settings :template_variables base.defaults(template_variables: -> { [] }) end
Private Instance Methods
render_template_variables()
click to toggle source
# File lib/kennel/template_variables.rb, line 11 def render_template_variables (template_variables || []).map do |v| v.is_a?(String) ? { default: "*", prefix: v, name: v } : v end end
validate_template_variables(data)
click to toggle source
check for queries that do not use the variables and would be misleading TODO: do the same check for apm_query and their group_by
# File lib/kennel/template_variables.rb, line 19 def validate_template_variables(data) variables = (data[:template_variables] || []).map { |v| "$#{v.fetch(:name)}" } return if variables.empty? queries = data[:widgets].flat_map do |widget| ([widget] + (widget.dig(:definition, :widgets) || [])).flat_map { |w| widget_queries(w) } end.compact matches = variables.map { |v| Regexp.new "#{Regexp.escape(v)}\\b" } queries.reject! { |q| matches.all? { |m| q.match? m } } return if queries.empty? invalid!( "queries #{queries.join(", ")} must use the template variables #{variables.join(", ")}\n" \ "If that is not possible, add `validate: -> { false } # query foo in bar does not have baz tag`" ) end
widget_queries(widget)
click to toggle source
# File lib/kennel/template_variables.rb, line 37 def widget_queries(widget) requests = widget.dig(:definition, :requests) || [] return requests.values.map { |r| r[:q] } if requests.is_a?(Hash) # hostmap widgets have hash requests requests.flat_map { |r| r[:q] || r[:queries]&.map { |q| q[:query] } } # old format with q: or queries: [{query:}] end