diff --git a/.changelog/23290.txt b/.changelog/23290.txt new file mode 100644 index 000000000..142f57d56 --- /dev/null +++ b/.changelog/23290.txt @@ -0,0 +1,3 @@ +```release-note:improvement +ui: shorten client/node metadata/attributes display and make parent-terminal attributes show up +``` diff --git a/ui/app/components/job-page/parts/stats-box.js b/ui/app/components/job-page/parts/stats-box.js index ee1b7dbec..a6dd61dfa 100644 --- a/ui/app/components/job-page/parts/stats-box.js +++ b/ui/app/components/job-page/parts/stats-box.js @@ -8,4 +8,23 @@ import { inject as service } from '@ember/service'; export default class StatsBox extends Component { @service system; + + get packDetails() { + let packMeta = this.args.job?.meta?.structured.root.children.pack; + if (!packMeta) { + return null; + } else { + return packMeta.files + .map((file) => { + return { + key: file.name, + value: file.variable.value, + }; + }) + .reduce((acc, file) => { + acc[file.key] = file.value; + return acc; + }, {}); + } + } } diff --git a/ui/app/models/node-driver.js b/ui/app/models/node-driver.js index a41a4e192..30ee81a84 100644 --- a/ui/app/models/node-driver.js +++ b/ui/app/models/node-driver.js @@ -5,7 +5,7 @@ import classic from 'ember-classic-decorator'; import Fragment from 'ember-data-model-fragments/fragment'; -import { get, computed } from '@ember/object'; +import { computed } from '@ember/object'; import { attr } from '@ember-data/model'; import { fragmentOwner } from 'ember-data-model-fragments/attributes'; import { fragment } from 'ember-data-model-fragments/attributes'; @@ -18,8 +18,10 @@ export default class NodeDriver extends Fragment { @computed('name', 'attributes.structured') get attributesShort() { - const attributes = this.get('attributes.structured'); - return get(attributes, `driver.${this.name}`); + const attributes = this.get( + `attributes.structured.root.children.driver.children.${this.name}` + ); + return attributes; } @attr('string') name; diff --git a/ui/app/models/structured-attributes.js b/ui/app/models/structured-attributes.js index 6dc5b4df9..9708918ad 100644 --- a/ui/app/models/structured-attributes.js +++ b/ui/app/models/structured-attributes.js @@ -7,9 +7,7 @@ import { set } from '@ember/object'; import { get, computed } from '@ember/object'; import { attr } from '@ember-data/model'; import Fragment from 'ember-data-model-fragments/fragment'; -import flat from 'flat'; - -const { unflatten } = flat; +import PathTree from 'nomad-ui/utils/path-tree'; export default class StructuredAttributes extends Fragment { @attr() raw; @@ -26,14 +24,17 @@ export default class StructuredAttributes extends Fragment { return undefined; } - // `unflatten` doesn't sort keys before unflattening, so manual preprocessing is necessary. const attrs = Object.keys(original) .sort() .reduce((obj, key) => { obj[key] = original[key]; return obj; }, {}); - return unflatten(attrs, { overwrite: true }); + let pathValueArray = Object.entries(attrs).map(([path, value]) => { + return { path, value }; + }); + let pathTree = new PathTree(pathValueArray, { delimiter: '.' }); + return pathTree; } unknownProperty(key) { diff --git a/ui/app/styles/core/table.scss b/ui/app/styles/core/table.scss index b98f82cc3..549fdd116 100644 --- a/ui/app/styles/core/table.scss +++ b/ui/app/styles/core/table.scss @@ -290,7 +290,7 @@ } .is-faded { - color: $grey-light; + color: darken($grey-light, 10%); } } diff --git a/ui/app/templates/clients/client/index.hbs b/ui/app/templates/clients/client/index.hbs index 8958cca16..bea905f4e 100644 --- a/ui/app/templates/clients/client/index.hbs +++ b/ui/app/templates/clients/client/index.hbs @@ -793,7 +793,7 @@ {{capitalize a.item.name}} Attributes - {{#if a.item.attributes.structured}} + {{#if a.item.attributesShort}}