github.com/blixtra/nomad@v0.7.2-0.20171221000451-da9a1d7bb050/ui/app/templates/jobs/job/index.hbs (about)

     1  {{#global-header class="page-header"}}
     2    {{#each breadcrumbs as |breadcrumb|}}
     3      {{#link-to params=breadcrumb.args class="breadcrumb"}}{{breadcrumb.label}}{{/link-to}}
     4    {{/each}}
     5  {{/global-header}}
     6  {{#gutter-menu class="page-body" onNamespaceChange=(action "gotoJobs")}}
     7    {{partial "jobs/job/subnav"}}
     8    <section class="section">
     9      <h1 class="title">
    10        {{model.name}}
    11        <span class="bumper-left tag {{model.statusClass}}">{{model.status}}</span>
    12        {{#if model.periodic}}
    13          <span class="tag is-hollow">periodic</span>
    14        {{else if model.parameterized}}
    15          <span class="tag is-hollow">parameterized</span>
    16        {{/if}}
    17      </h1>
    18  
    19      <div class="boxed-section job-stats">
    20        <div class="boxed-section-body">
    21          <span><strong>Type:</strong> {{model.type}} | </span>
    22          <span><strong>Priority:</strong> {{model.priority}} </span>
    23          {{#if (and model.namespace system.shouldShowNamespaces)}}
    24            <span> | <strong>Namespace:</strong> {{model.namespace.name}}</span>
    25          {{/if}}
    26        </div>
    27      </div>
    28  
    29      <div class="boxed-section">
    30        <div class="boxed-section-head">
    31          <div>Allocation Status <span class="badge is-white">{{taskGroups.length}}</span></div>
    32        </div>
    33        <div class="boxed-section-body">
    34          {{#allocation-status-bar allocationContainer=model class="split-view" as |chart|}}
    35            <ol class="legend">
    36              {{#each chart.data as |datum index|}}
    37                <li class="{{datum.className}} {{if (eq datum.index chart.activeDatum.index) "is-active"}} {{if (eq datum.value 0) "is-empty"}}">
    38                  <span class="color-swatch {{if datum.className datum.className (concat "swatch-" index)}}" />
    39                  <span class="value">{{datum.value}}</span>
    40                  <span class="label">
    41                    {{datum.label}}
    42                  </span>
    43                </li>
    44              {{/each}}
    45            </ol>
    46          {{/allocation-status-bar}}
    47        </div>
    48      </div>
    49  
    50      {{#if model.hasPlacementFailures}}
    51        <div class="boxed-section is-danger placement-failures">
    52          <div class="boxed-section-head">
    53            Placement Failures
    54          </div>
    55          <div class="boxed-section-body">
    56            {{#each model.taskGroups as |taskGroup|}}
    57              {{#if taskGroup.placementFailures}}
    58                {{#with taskGroup.placementFailures as |failures|}}
    59                    <h3 class="title is-5">
    60                      {{taskGroup.name}}
    61                      <span class="badge is-light">{{inc failures.coalescedFailures}} unplaced</span>
    62                    </h3>
    63                    <ul class="simple-list">
    64                      {{#if (eq failures.nodesEvaluated 0)}}
    65                        <li>No nodes were eligible for evaluation</li>
    66                      {{/if}}
    67                      {{#each-in failures.nodesAvailable as |datacenter available|}}
    68                        {{#if (eq available 0)}}
    69                          <li>No nodes are available in datacenter {{datacenter}}</li>
    70                        {{/if}}
    71                      {{/each-in}}
    72                      {{#each-in failures.classFiltered as |class count|}}
    73                        <li>Class {{class}} filtered {{count}} {{pluralize "node" count}}</li>
    74                      {{/each-in}}
    75                      {{#each-in failures.constraintFiltered as |constraint count|}}
    76                        <li>Constraint <code>{{constraint}}</code> filtered {{count}} {{pluralize "node" count}}</li>
    77                      {{/each-in}}
    78                      {{#if failures.nodesExhausted}}
    79                        <li>Resources exhausted on {{failures.nodesExhausted}} {{pluralize "node" failures.nodesExhausted}}</li>
    80                      {{/if}}
    81                      {{#each-in failures.classExhausted as |class count|}}
    82                        <li>Class {{class}} exhausted on {{count}} {{pluralize "node" count}}</li>
    83                      {{/each-in}}
    84                      {{#each-in failures.dimensionExhausted as |dimension count|}}
    85                        <li>Dimension {{dimension}} exhausted on {{count}} {{pluralize "node" count}}</li>
    86                      {{/each-in}}
    87                      {{#each-in failures.quotaExhausted as |quota dimension|}}
    88                        <li>Quota limit hit {{dimension}}</li>
    89                      {{/each-in}}
    90                      {{#each-in failures.scores as |name score|}}
    91                        <li>Score {{name}} = {{score}}</li>
    92                      {{/each-in}}
    93                    </ul>
    94                {{/with}}
    95              {{/if}}
    96            {{/each}}
    97          </div>
    98        </div>
    99      {{/if}}
   100  
   101      {{#if model.runningDeployment}}
   102        <div class="boxed-section is-info active-deployment">
   103          <div class="boxed-section-head">
   104            <div class="boxed-section-row">
   105              Active Deployment
   106              <span class="badge is-white is-subtle bumper-left">{{model.runningDeployment.shortId}}</span>
   107              {{#if model.runningDeployment.version.submitTime}}
   108                <span class="pull-right submit-time">{{moment-from-now model.runningDeployment.version.submitTime}}</span>
   109              {{/if}}
   110            </div>
   111            <div class="boxed-section-row">
   112              <span class="tag is-info is-outlined">Running</span>
   113              {{#if model.runningDeployment.requiresPromotion}}
   114                <span class="tag bumper-left is-warning no-text-transform">Deployment is running but requires promotion</span>
   115              {{/if}}
   116            </div>
   117          </div>
   118          <div class="boxed-section-body with-foot">
   119            {{#job-deployment-details deployment=model.runningDeployment as |d|}}
   120              {{d.metrics}}
   121              {{#if isShowingDeploymentDetails}}
   122                {{d.taskGroups}}
   123                {{d.allocations}}
   124              {{/if}}
   125            {{/job-deployment-details}}
   126          </div>
   127          <div class="boxed-section-foot">
   128            <a class="pull-right active-deployment-details-toggle" {{action (toggle "isShowingDeploymentDetails" this)}}>
   129              {{if isShowingDeploymentDetails "Hide" "Show"}} deployment task groups and allocations
   130            </a>
   131          </div>
   132        </div>
   133      {{/if}}
   134  
   135      <div class="boxed-section">
   136        <div class="boxed-section-head">
   137          Task Groups
   138        </div>
   139        <div class="boxed-section-body is-full-bleed">
   140          {{#list-pagination
   141            source=sortedTaskGroups
   142            sortProperty=sortProperty
   143            sortDescending=sortDescending as |p|}}
   144            {{#list-table
   145              source=p.list
   146              sortProperty=sortProperty
   147              sortDescending=sortDescending as |t|}}
   148              {{#t.head}}
   149                {{#t.sort-by prop="name"}}Name{{/t.sort-by}}
   150                {{#t.sort-by prop="count"}}Count{{/t.sort-by}}
   151                {{#t.sort-by prop="queuedOrStartingAllocs" class="is-3"}}Allocation Status{{/t.sort-by}}
   152                {{#t.sort-by prop="reservedCPU"}}Reserved CPU{{/t.sort-by}}
   153                {{#t.sort-by prop="reservedMemory"}}Reserved Memory{{/t.sort-by}}
   154                {{#t.sort-by prop="reservedEphemeralDisk"}}Reserved Disk{{/t.sort-by}}
   155              {{/t.head}}
   156              {{#t.body as |row|}}
   157                {{task-group-row taskGroup=row.model onClick=(action "gotoTaskGroup" row.model)}}
   158              {{/t.body}}
   159            {{/list-table}}
   160          {{/list-pagination}}
   161        </div>
   162      </div>
   163  
   164      <div class="boxed-section">
   165        <div class="boxed-section-head">
   166          Evaluations
   167        </div>
   168        <div class="boxed-section-body is-full-bleed evaluations">
   169          {{#list-table source=sortedEvaluations as |t|}}
   170            {{#t.head}}
   171              <th>ID</th>
   172              <th>Priority</th>
   173              <th>Triggered By</th>
   174              <th>Status</th>
   175              <th>Placement Failures</th>
   176            {{/t.head}}
   177            {{#t.body as |row|}}
   178              <tr>
   179                <td>{{row.model.shortId}}</td>
   180                <td>{{row.model.priority}}</td>
   181                <td>{{row.model.triggeredBy}}</td>
   182                <td>{{row.model.status}}</td>
   183                <td>
   184                  {{#if (eq row.model.status "blocked")}}
   185                    N/A - In Progress
   186                  {{else if row.model.hasPlacementFailures}}
   187                    True
   188                  {{else}}
   189                    False
   190                  {{/if}}
   191                </td>
   192              </tr>
   193            {{/t.body}}
   194          {{/list-table}}
   195        </div>
   196      </div>
   197    </section>
   198  {{/gutter-menu}}