meerkat-dashboard/meerkat

Clearer attribute selection from a list of icinga objects

Closed this issue · 0 comments

Given a, say, service group consisting of 4 services, the following selections can be made for which attribute could be rendered in a card:

  • name
  • state
  • source.0.attrs.action_url
  • source.0.attrs.display_name
  • ...
  • source.1.attrs.action_url
  • source.1.attrs.display_name
  • ...
  • source.2.attrs.action_url
    ...

You get the idea.
From these options, what is "source.2"?
I know that it's 3rd object (index 2 counted from 0) from the collection of objects from the service group, but that's only because I just wrote the code for it a couple hours ago.
I'll probably forget it soon.

A clearer representation could involve using the optgroup element within the <select> menu.
Instead of the index in a list (source.0) we could use a unique key - the object name - to group attributes in the menu.
Using the example from above:

<select>
	<optgroup label="www.example.com">
		<option>action_url</option>
		<option>display_name</option>
	</optgroup>
	<optgroup label="app.example.org">
		<option>action_url</option>
		<option>display_name</option>
	</optgroup>
	<!-- same for the rest of the objects... -->
</select>

The value of each option element would still need to be that full selector expression e.g. source.0.attrs.action_url so that the frontend can reliably decode which attribute it needs to render. But the displayed text could be the expression with some prefix trimmed, such as attrs.action_url instead of source.0.attrs.action_url.

Some pseudocode:

expr = "source.0.attrs.action_url";
text = trimPrefix(expr, "source.0.");
<optgroup label={source.0.name}>
	<option value={expr}>{text}</option>
	...