module Dynflow module Web module ConsoleHelpers def prettify_value(value) YAML.dump(value) end def prettyprint(value) value = prettyprint_references(value) if value pretty_value = prettify_value(value) <<-HTML
#{h(pretty_value)}
HTML else "" end end def prettyprint_references(value) case value when Hash value.reduce({}) do |h, (key, val)| h.update(key => prettyprint_references(val)) end when Array value.map { |val| prettyprint_references(val) } when ExecutionPlan::OutputReference value.inspect else value end end def duration_to_s(duration) h("%0.2fs" % duration) end def load_action(step) world.persistence.load_action(step) end def step_error(step) if step.error ['
',
           "#{h(step.error.message)} (#{h(step.error.exception_class)})\n",
           h(step.error.backtrace.join("\n")),
           '
'].join end end def show_world(world_id) if registered_world = world.coordinator.find_worlds(false, id: world_id).first "%{world_id} %{world_meta}" % { world_id: world_id, world_meta: registered_world.meta.inspect } else world_id end end def show_action_data(label, value) value_html = prettyprint(value) if !value_html.empty? <<-HTML

#{h(label)} #{value_html}

HTML else "" end end def atom_css_classes(atom) classes = ["atom"] step = @plan.steps[atom.step_id] case step.state when :success classes << "success" when :error classes << "error" when :skipped, :skipping classes << "skipped" end return classes.join(" ") end def flow_css_classes(flow, sub_flow = nil) classes = [] case flow when Flows::Sequence classes << "sequence" when Flows::Concurrence classes << "concurrence" when Flows::Atom classes << atom_css_classes(flow) else raise "Unknown run plan #{run_plan.inspect}" end classes << atom_css_classes(sub_flow) if sub_flow.is_a? Flows::Atom return classes.join(" ") end def step_css_class(step) case step.state when :success "success" when :error "important" end end def progress_width(step) if step.state == :error 100 # we want to show the red bar in full width else step.progress_done * 100 end end def step(step_id) @plan.steps[step_id] end def updated_url(new_params) url(request.path_info + "?" + Rack::Utils.build_nested_query(params.merge(new_params.stringify_keys))) end def paginated_url(delta) h(updated_url(page: [0, page + delta].max.to_s)) end def order_link(attr, label) return h(label) unless supported_ordering?(attr) new_ordering_options = { order_by: attr.to_s, desc: false } arrow = "" if ordering_options[:order_by].to_s == attr.to_s arrow = ordering_options[:desc] ? "▼" : "▲" new_ordering_options[:desc] = !ordering_options[:desc] end url = updated_url(new_ordering_options) return %{ #{arrow} #{h(label)}} end def filter_checkbox(field, values) out = "

#{field}: %s

" checkboxes = values.map do |value| field_filter = filtering_options[:filters][field] checked = field_filter && field_filter.include?(value) %{#{value}} end.join(' ') out %= checkboxes return out end end end end