github.com/emate/nomad@v0.8.2-wo-binpacking/ui/app/models/deployment.js (about)

     1  import { alias } from '@ember/object/computed';
     2  import { computed } from '@ember/object';
     3  import Model from 'ember-data/model';
     4  import attr from 'ember-data/attr';
     5  import { belongsTo, hasMany } from 'ember-data/relationships';
     6  import { fragmentArray } from 'ember-data-model-fragments/attributes';
     7  import shortUUIDProperty from '../utils/properties/short-uuid';
     8  import sumAggregation from '../utils/properties/sum-aggregation';
     9  
    10  export default Model.extend({
    11    shortId: shortUUIDProperty('id'),
    12  
    13    job: belongsTo('job'),
    14    versionNumber: attr('number'),
    15  
    16    // If any task group is not promoted yet requires promotion and the deployment
    17    // is still running, the deployment needs promotion.
    18    requiresPromotion: computed('taskGroupSummaries.@each.promoted', function() {
    19      return (
    20        this.get('status') === 'running' &&
    21        this.get('taskGroupSummaries')
    22          .toArray()
    23          .some(summary => summary.get('requiresPromotion') && !summary.get('promoted'))
    24      );
    25    }),
    26  
    27    status: attr('string'),
    28    statusDescription: attr('string'),
    29    taskGroupSummaries: fragmentArray('task-group-deployment-summary'),
    30    allocations: hasMany('allocations'),
    31  
    32    version: computed('versionNumber', 'job.versions.content.@each.number', function() {
    33      return (this.get('job.versions') || []).findBy('number', this.get('versionNumber'));
    34    }),
    35  
    36    // Dependent keys can only go one level past an @each so an alias is needed
    37    versionSubmitTime: alias('version.submitTime'),
    38  
    39    placedCanaries: sumAggregation('taskGroupSummaries', 'placedCanaries'),
    40    desiredCanaries: sumAggregation('taskGroupSummaries', 'desiredCanaries'),
    41    desiredTotal: sumAggregation('taskGroupSummaries', 'desiredTotal'),
    42    placedAllocs: sumAggregation('taskGroupSummaries', 'placedAllocs'),
    43    healthyAllocs: sumAggregation('taskGroupSummaries', 'healthyAllocs'),
    44    unhealthyAllocs: sumAggregation('taskGroupSummaries', 'unhealthyAllocs'),
    45  
    46    statusClass: computed('status', function() {
    47      const classMap = {
    48        running: 'is-running',
    49        successful: 'is-primary',
    50        paused: 'is-light',
    51        failed: 'is-error',
    52        cancelled: 'is-cancelled',
    53      };
    54  
    55      return classMap[this.get('status')] || 'is-dark';
    56    }),
    57  });