From c72cb2ee4ffb3a760b4163b6ff3a46d2e899f909 Mon Sep 17 00:00:00 2001 From: Michael Lange Date: Tue, 28 Nov 2017 17:21:56 -0800 Subject: [PATCH] Models evaluation data --- ui/app/models/evaluation.js | 27 +++++++++++++++++++++++++++ ui/app/models/placement-failure.js | 20 ++++++++++++++++++++ ui/app/serializers/evaluation.js | 27 +++++++++++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 ui/app/models/evaluation.js create mode 100644 ui/app/models/placement-failure.js create mode 100644 ui/app/serializers/evaluation.js diff --git a/ui/app/models/evaluation.js b/ui/app/models/evaluation.js new file mode 100644 index 000000000..8afdf15ae --- /dev/null +++ b/ui/app/models/evaluation.js @@ -0,0 +1,27 @@ +import Ember from 'ember'; +import Model from 'ember-data/model'; +import attr from 'ember-data/attr'; +import { belongsTo } from 'ember-data/relationships'; +import { fragmentArray } from 'ember-data-model-fragments/attributes'; +import shortUUIDProperty from '../utils/properties/short-uuid'; + +const { computed } = Ember; + +export default Model.extend({ + shortId: shortUUIDProperty('id'), + priority: attr('number'), + type: attr('string'), + triggeredBy: attr('string'), + status: attr('string'), + statusDescription: attr('string'), + failedTGAllocs: fragmentArray('placement-failure', { defaultValue: () => [] }), + + hasPlacementFailures: computed.bool('failedTGAllocs.length'), + + // TEMPORARY: https://github.com/emberjs/data/issues/5209 + originalJobId: attr('string'), + + job: belongsTo('job'), + + modifyIndex: attr('number'), +}); diff --git a/ui/app/models/placement-failure.js b/ui/app/models/placement-failure.js new file mode 100644 index 000000000..d711166b1 --- /dev/null +++ b/ui/app/models/placement-failure.js @@ -0,0 +1,20 @@ +import attr from 'ember-data/attr'; +import Fragment from 'ember-data-model-fragments/fragment'; + +export default Fragment.extend({ + name: attr('string'), + + coalescedFailures: attr('number'), + + nodesEvaluated: attr('number'), + nodesExhausted: attr('number'), + + // Maps keyed by relevant dimension (dc, class, constraint, etc) with count values + nodesAvailable: attr(), + classFiltered: attr(), + constraintFiltered: attr(), + classExhausted: attr(), + dimensionExhausted: attr(), + quotaExhausted: attr(), + scores: attr(), +}); diff --git a/ui/app/serializers/evaluation.js b/ui/app/serializers/evaluation.js new file mode 100644 index 000000000..76a2b9b3c --- /dev/null +++ b/ui/app/serializers/evaluation.js @@ -0,0 +1,27 @@ +import Ember from 'ember'; +import ApplicationSerializer from './application'; + +const { inject, get, assign } = Ember; + +export default ApplicationSerializer.extend({ + system: inject.service(), + + normalize(typeHash, hash) { + hash.FailedTGAllocs = Object.keys(hash.FailedTGAllocs || {}).map(key => { + return assign({ Name: key }, get(hash, `FailedTGAllocs.${key}`) || {}); + }); + + hash.PlainJobId = hash.JobID; + hash.Namespace = + hash.Namespace || + get(hash, 'Job.Namespace') || + this.get('system.activeNamespace.id') || + 'default'; + hash.JobID = JSON.stringify([hash.JobID, hash.Namespace]); + + // TEMPORARY: https://github.com/emberjs/data/issues/5209 + hash.OriginalJobId = hash.JobID; + + return this._super(typeHash, hash); + }, +});