/** * Copyright (c) HashiCorp, Inc. * SPDX-License-Identifier: MPL-2.0 */ import { computed } from '@ember/object'; import Model from '@ember-data/model'; import { attr, belongsTo, hasMany } from '@ember-data/model'; export default class Volume extends Model { @attr('string') plainId; @attr('string') name; @belongsTo('namespace') namespace; @belongsTo('plugin') plugin; @hasMany('allocation') writeAllocations; @hasMany('allocation') readAllocations; @computed('writeAllocations.[]', 'readAllocations.[]') get allocations() { return [ ...this.writeAllocations.toArray(), ...this.readAllocations.toArray(), ]; } @attr('number') currentWriters; @attr('number') currentReaders; @computed('currentWriters', 'currentReaders') get allocationCount() { return this.currentWriters + this.currentReaders; } @attr('string') externalId; @attr() topologies; @attr('string') accessMode; @attr('string') attachmentMode; @attr('boolean') schedulable; @attr('string') provider; @attr('string') version; @attr('boolean') controllerRequired; @attr('number') controllersHealthy; @attr('number') controllersExpected; @computed('plainId') get idWithNamespace() { return `${this.plainId}@${this.belongsTo('namespace').id()}`; } @computed('controllersHealthy', 'controllersExpected') get controllersHealthyProportion() { return this.controllersHealthy / this.controllersExpected; } @attr('number') nodesHealthy; @attr('number') nodesExpected; @computed('nodesHealthy', 'nodesExpected') get nodesHealthyProportion() { return this.nodesHealthy / this.nodesExpected; } @attr('number') resourceExhausted; @attr('number') createIndex; @attr('number') modifyIndex; }