github.com/aminovpavel/nomad@v0.11.8/ui/app/templates/allocations/allocation/task/index.hbs (about)

     1  {{title "Task " model.name}}
     2  {{task-subnav task=model}}
     3  <section class="section">
     4    {{#if error}}
     5      <div data-test-inline-error class="notification is-danger">
     6        <div class="columns">
     7          <div class="column">
     8            <h3 data-test-inline-error-title class="title is-4">{{error.title}}</h3>
     9            <p data-test-inline-error-body>{{error.description}}</p>
    10          </div>
    11          <div class="column is-centered is-minimum">
    12            <button data-test-inline-error-close class="button is-danger" onclick={{action onDismiss}}>Okay</button>
    13          </div>
    14        </div>
    15      </div>
    16    {{/if}}
    17  
    18    <h1 class="title with-flex" data-test-title>
    19      <div>
    20        {{model.name}}
    21        {{#if model.isConnectProxy}}
    22          {{proxy-tag class="bumper-left"}}
    23        {{/if}}
    24        <span class="{{unless model.isConnectProxy "bumper-left"}} tag {{model.stateClass}}" data-test-state>{{model.state}}</span>
    25      </div>
    26      <div>
    27        {{#if model.isRunning}}
    28          <div class="two-step-button">
    29            {{exec/open-button
    30              job=model.task.taskGroup.job
    31              taskGroup=model.task.taskGroup
    32              allocation=model.allocation
    33              task=model.task}}
    34          </div>
    35          {{two-step-button
    36            data-test-restart
    37            alignRight=true
    38            idleText="Restart"
    39            cancelText="Cancel"
    40            confirmText="Yes, Restart"
    41            confirmationMessage="Are you sure? This will restart the task in-place."
    42            awaitingConfirmation=restartTask.isRunning
    43            disabled=restartTask.isRunning
    44            onConfirm=(perform restartTask)}}
    45        {{/if}}
    46      </div>
    47    </h1>
    48  
    49    <div class="boxed-section is-small">
    50      <div class="boxed-section-body inline-definitions">
    51        <span class="label">Task Details</span>
    52        <span class="pair" data-test-started-at>
    53          <span class="term">Started At</span>
    54          {{format-ts model.startedAt}}
    55        </span>
    56        {{#if model.finishedAt}}
    57          <span class="pair">
    58            <span class="term">Finished At</span>
    59            {{format-ts model.finishedAt}}
    60          </span>
    61        {{/if}}
    62        <span class="pair">
    63          <span class="term">Driver</span>
    64          {{model.task.driver}}
    65        </span>
    66        <span class="pair">
    67          <span class="term">Lifecycle</span>
    68          <span data-test-lifecycle>{{model.task.lifecycleName}}</span>
    69        </span>
    70      </div>
    71    </div>
    72  
    73    <div class="boxed-section">
    74      <div class="boxed-section-head is-hollow">
    75        Resource Utilization
    76      </div>
    77      <div class="boxed-section-body">
    78        {{#if model.isRunning}}
    79          <div class="columns">
    80            <div class="column">
    81              {{primary-metric resource=model metric="cpu"}}
    82            </div>
    83            <div class="column">
    84              {{primary-metric resource=model metric="memory"}}
    85            </div>
    86          </div>
    87        {{else}}
    88          <div data-test-resource-error class="empty-message">
    89            <h3 data-test-resource-error-headline class="empty-message-headline">Task isn't running</h3>
    90            <p class="empty-message-body">Only running tasks utilize resources.</p>
    91          </div>
    92        {{/if}}
    93      </div>
    94    </div>
    95  
    96    {{#if (and (not model.task.lifecycle) prestartTaskStates)}}
    97      <div class="boxed-section" data-test-prestart-tasks>
    98        <div class="boxed-section-head">
    99          Prestart Tasks
   100        </div>
   101        <div class="boxed-section-body is-full-bleed">
   102          {{#list-table source=prestartTaskStates as |t|}}
   103            {{#t.head}}
   104              <th class="is-narrow"></th>
   105              <th>Task</th>
   106              <th>State</th>
   107              <th>Lifecycle</th>
   108            {{/t.head}}
   109            {{#t.body as |row|}}
   110              <tr data-test-prestart-task>
   111                <td class="is-narrow">
   112                  {{#if (and row.model.isRunning (eq row.model.task.lifecycleName "prestart"))}}
   113                    <span class="tooltip text-center" role="tooltip" aria-label="Lifecycle constraints not met">
   114                      {{x-icon "warning" class="is-warning"}}
   115                    </span>
   116                  {{/if}}
   117                </td>
   118                <td data-test-name>{{row.model.task.name}}</td>
   119                <td data-test-state>{{row.model.state}}</td>
   120                <td data-test-lifecycle>{{row.model.task.lifecycleName}}</td>
   121              </tr>
   122            {{/t.body}}
   123          {{/list-table}}
   124        </div>
   125      </div>
   126    {{/if}}
   127  
   128    {{#if network.ports.length}}
   129      <div class="boxed-section" data-test-task-addresses>
   130        <div class="boxed-section-head">
   131          Addresses
   132        </div>
   133        <div class="boxed-section-body is-full-bleed">
   134          {{#list-table source=network.ports as |t|}}
   135            {{#t.head}}
   136              <th class="is-1">Dynamic?</th>
   137              <th class="is-2">Name</th>
   138              <th>Address</th>
   139            {{/t.head}}
   140            {{#t.body as |row|}}
   141              <tr data-test-task-address>
   142                <td data-test-task-address-is-dynamic>{{if row.model.isDynamic "Yes" "No"}}</td>
   143                <td data-test-task-address-name>{{row.model.name}}</td>
   144                <td data-test-task-address-address>
   145                  <a href="http://{{network.ip}}:{{row.model.port}}" target="_blank" rel="noopener noreferrer">
   146                    {{network.ip}}:{{row.model.port}}
   147                  </a>
   148                </td>
   149              </tr>
   150            {{/t.body}}
   151          {{/list-table}}
   152        </div>
   153      </div>
   154    {{/if}}
   155  
   156    {{#if model.task.volumeMounts.length}}
   157      <div data-test-volumes class="boxed-section">
   158        <div class="boxed-section-head">
   159          Volumes
   160        </div>
   161        <div class="boxed-section-body is-full-bleed">
   162          {{#list-table source=model.task.volumeMounts as |t|}}
   163            {{#t.head}}
   164              <th>Name</th>
   165              <th>Destination</th>
   166              <th>Permissions</th>
   167              <th>Client Source</th>
   168            {{/t.head}}
   169            {{#t.body as |row|}}
   170              <tr data-test-volume>
   171                <td data-test-volume-name>
   172                  {{#if row.model.isCSI}}
   173                    {{#link-to "csi.volumes.volume" row.model.volume (query-params volumeNamespace=row.model.namespace.id)}}
   174                      {{row.model.volume}}
   175                    {{/link-to}}
   176                  {{else}}
   177                    {{row.model.volume}}
   178                  {{/if}}
   179                </td>
   180                <td data-test-volume-destination><code>{{row.model.destination}}</code></td>
   181                <td data-test-volume-permissions>{{if row.model.readOnly "Read" "Read/Write"}}</td>
   182                <td data-test-volume-client-source>{{row.model.source}}</td>
   183              </tr>
   184            {{/t.body}}
   185          {{/list-table}}
   186        </div>
   187      </div>
   188    {{/if}}
   189  
   190    <div class="boxed-section">
   191      <div class="boxed-section-head">
   192        Recent Events
   193      </div>
   194      <div class="boxed-section-body is-full-bleed">
   195        {{#list-table source=(reverse model.events) class="is-striped" as |t|}}
   196          {{#t.head}}
   197            <th class="is-3">Time</th>
   198            <th class="is-1">Type</th>
   199            <th>Description</th>
   200          {{/t.head}}
   201          {{#t.body as |row|}}
   202            <tr data-test-task-event>
   203              <td data-test-task-event-time>{{format-ts row.model.time}}</td>
   204              <td data-test-task-event-type>{{row.model.type}}</td>
   205              <td data-test-task-event-message>
   206                {{#if row.model.message}}
   207                  {{row.model.message}}
   208                {{else}}
   209                  <em>No message</em>
   210                {{/if}}
   211              </td>
   212            </tr>
   213          {{/t.body}}
   214        {{/list-table}}
   215      </div>
   216    </div>
   217  </section>