{{title "Client " (or model.name model.shortId)}}

{{or model.name model.shortId}} {{model.id}} {{copy-button clipboardText=model.id}}

Client Details Status {{model.status}} Address {{model.httpAddr}} Draining {{#if model.isDraining}} true {{else}} false {{/if}} Eligibility {{#if model.isEligible}} {{model.schedulingEligibility}} {{else}} {{model.schedulingEligibility}} {{/if}} Datacenter {{model.datacenter}} Drivers {{#if model.unhealthyDrivers.length}} {{x-icon "warning" class="is-text is-warning"}} {{model.unhealthyDrivers.length}} of {{model.detectedDrivers.length}} {{pluralize "driver" model.detectedDrivers.length}} unhealthy {{else}} All healthy {{/if}}
{{#if model.drainStrategy}}
Drain Strategy Deadline {{#if model.drainStrategy.isForced}} Forced Drain {{else if model.drainStrategy.hasNoDeadline}} No deadline {{else}} {{format-duration model.drainStrategy.deadline}} {{/if}} {{#if model.drainStrategy.forceDeadline}} Forced Deadline {{format-ts model.drainStrategy.forceDeadline}} ({{moment-from-now model.drainStrategy.forceDeadline interval=1000}}) {{/if}} Ignore System Jobs? {{if model.drainStrategy.ignoreSystemJobs "Yes" "No"}}
{{/if}}
Resource Utilization
{{primary-metric resource=model metric="cpu"}}
{{primary-metric resource=model metric="memory"}}
Allocations {{#if preemptions.length}} {{/if}}
{{search-box searchTerm=(mut searchTerm) onChange=(action resetPagination) placeholder="Search allocations..." class="is-inline pull-right" inputClass="is-compact"}}
{{#list-pagination source=sortedAllocations size=pageSize page=currentPage as |p|}} {{#list-table source=p.list sortProperty=sortProperty sortDescending=sortDescending class="with-foot" as |t|}} {{#t.head}} {{#t.sort-by prop="shortId"}}ID{{/t.sort-by}} {{#t.sort-by prop="modifyIndex" title="Modify Index"}}Modified{{/t.sort-by}} {{#t.sort-by prop="createIndex" title="Create Index"}}Created{{/t.sort-by}} {{#t.sort-by prop="statusIndex"}}Status{{/t.sort-by}} {{#t.sort-by prop="job.name"}}Job{{/t.sort-by}} {{#t.sort-by prop="jobVersion"}}Version{{/t.sort-by}} CPU Memory {{/t.head}} {{#t.body as |row|}} {{allocation-row allocation=row.model context="node" onClick=(action "gotoAllocation" row.model) data-test-allocation=row.model.id}} {{/t.body}} {{/list-table}}
{{/list-pagination}}
Client Events
{{#list-table source=sortedEvents class="is-striped" as |t|}} {{#t.head}} Time Subsystem Message {{/t.head}} {{#t.body as |row|}} {{format-ts row.model.time}} {{row.model.subsystem}} {{#if row.model.message}} {{#if row.model.driver}} {{row.model.driver}} {{/if}} {{row.model.message}} {{else}} No message {{/if}} {{/t.body}} {{/list-table}}
Driver Status
{{#list-accordion source=sortedDrivers key="name" as |a|}} {{#a.head buttonLabel="details" isExpandable=a.item.detected}}
{{a.item.name}}
{{#if a.item.detected}} {{if a.item.healthy "Healthy" "Unhealthy"}} {{/if}}
Detected {{if a.item.detected "Yes" "No"}} Last Updated {{moment-from-now a.item.updateTime interval=1000}}
{{/a.head}} {{#a.body}}

{{a.item.healthDescription}}

{{capitalize a.item.name}} Attributes
{{#if a.item.attributes.attributesStructured}}
{{attributes-table attributes=a.item.attributesShort class="attributes-table"}}
{{else}}

No Driver Attributes

{{/if}}
{{/a.body}} {{/list-accordion}}
Attributes
{{attributes-table data-test-attributes attributes=model.attributes.attributesStructured class="attributes-table"}}
Meta
{{#if model.meta.attributesStructured}}
{{attributes-table data-test-meta attributes=model.meta.attributesStructured class="attributes-table"}}
{{else}}

No Meta Attributes

This client is configured with no meta attributes.

{{/if}}