summaryrefslogtreecommitdiff
path: root/gae/frontend/src/app/menu/job/job.component.html
diff options
context:
space:
mode:
Diffstat (limited to 'gae/frontend/src/app/menu/job/job.component.html')
-rw-r--r--gae/frontend/src/app/menu/job/job.component.html192
1 files changed, 192 insertions, 0 deletions
diff --git a/gae/frontend/src/app/menu/job/job.component.html b/gae/frontend/src/app/menu/job/job.component.html
new file mode 100644
index 0000000..634402d
--- /dev/null
+++ b/gae/frontend/src/app/menu/job/job.component.html
@@ -0,0 +1,192 @@
+<!-- Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<div class="statistics-table" [ngStyle]="{'opacity': (loading) ? 0.2 : 1 }">
+ <mat-table [dataSource]="statDataSource">
+ <ng-container matColumnDef="hours">
+ <mat-header-cell *matHeaderCellDef>Stats</mat-header-cell>
+ <mat-cell *matCellDef="let stat"> {{stat.hours}} </mat-cell>
+ </ng-container>
+
+ <ng-container matColumnDef="created">
+ <mat-header-cell *matHeaderCellDef>Created</mat-header-cell>
+ <mat-cell *matCellDef="let stat"> {{stat.created}} </mat-cell>
+ </ng-container>
+
+ <ng-container matColumnDef="completed">
+ <mat-header-cell *matHeaderCellDef>Completed</mat-header-cell>
+ <mat-cell *matCellDef="let stat"> {{stat.completed}} ({{stat.created > 0 ? (stat.completed/stat.created*100 | number:'1.0-2') : 0}})% </mat-cell>
+ </ng-container>
+
+ <ng-container matColumnDef="running">
+ <mat-header-cell *matHeaderCellDef>Running/Ready</mat-header-cell>
+ <mat-cell *matCellDef="let stat"> {{stat.running}} ({{stat.created > 0 ? (stat.running/stat.created*100 | number:'1.0-2') : 0}})% </mat-cell>
+ </ng-container>
+
+ <ng-container matColumnDef="bootup_err">
+ <mat-header-cell *matHeaderCellDef>Boot-up Error</mat-header-cell>
+ <mat-cell *matCellDef="let stat"> {{stat.bootup_err}} ({{stat.created > 0 ? (stat.bootup_err/stat.created*100 | number:'1.0-2') : 0}})% </mat-cell>
+ </ng-container>
+
+ <ng-container matColumnDef="infra_err">
+ <mat-header-cell *matHeaderCellDef>Infra Error</mat-header-cell>
+ <mat-cell *matCellDef="let stat"> {{stat.infra_err}} ({{stat.created > 0 ? (stat.infra_err/stat.created*100 | number:'1.0-2') : 0}})% </mat-cell>
+ </ng-container>
+
+ <ng-container matColumnDef="expired">
+ <mat-header-cell *matHeaderCellDef>Expired</mat-header-cell>
+ <mat-cell *matCellDef="let stat"> {{stat.expired}} ({{stat.created > 0 ? (stat.expired/stat.created*100 | number:'1.0-2') : 0}})% </mat-cell>
+ </ng-container>
+
+ <mat-header-row *matHeaderRowDef="statColumnTitles"></mat-header-row>
+ <mat-row *matRowDef="let row; columns: statColumnTitles;"></mat-row>
+ </mat-table>
+</div>
+<div class="entity-filter">
+ <app-filter (applyFilters)="applyFilters($event)" [disabled]="loading"></app-filter>
+</div>
+<div class="mat-elevation-z2 entity-table" [ngStyle]="{'opacity': (loading) ? 0.2 : 1 }">
+ <mat-table [dataSource]="dataSource" matSort matSortActive="timestamp" matSortDirection="desc">
+ <!-- Index Column -->
+ <ng-container matColumnDef="_index">
+ <mat-header-cell *matHeaderCellDef>No.</mat-header-cell>
+ <mat-cell *matCellDef="let i = index"> {{i+1+pageSize*pageIndex}} </mat-cell>
+ </ng-container>
+
+ <!-- Test Type Column -->
+ <ng-container matColumnDef="test_type">
+ <mat-header-cell *matHeaderCellDef>Test Type</mat-header-cell>
+ <mat-cell *matCellDef="let job"> {{getTestTypeText(job.test_type)}} </mat-cell>
+ </ng-container>
+
+ <!-- Test Name Column -->
+ <ng-container matColumnDef="test_name">
+ <mat-header-cell *matHeaderCellDef>Test Name</mat-header-cell>
+ <mat-cell *matCellDef="let job"> {{job.test_name}} </mat-cell>
+ </ng-container>
+
+ <!-- Host Name Column -->
+ <ng-container matColumnDef="hostname">
+ <mat-header-cell *matHeaderCellDef>Hostname</mat-header-cell>
+ <mat-cell *matCellDef="let job"> {{job.hostname}} </mat-cell>
+ </ng-container>
+
+ <!-- Device Column -->
+ <ng-container matColumnDef="device">
+ <mat-header-cell *matHeaderCellDef>Device</mat-header-cell>
+ <mat-cell *matCellDef="let job"> {{job.device}} </mat-cell>
+ </ng-container>
+
+ <!-- Serial Column -->
+ <ng-container matColumnDef="serial">
+ <mat-header-cell *matHeaderCellDef>Serial</mat-header-cell>
+ <mat-cell *matCellDef="let job"> {{job.serial ? job.serial.join('\n') : ""}} </mat-cell>
+ </ng-container>
+
+ <!-- Device Branch Column -->
+ <ng-container matColumnDef="manifest_branch">
+ <mat-header-cell *matHeaderCellDef>Device Branch</mat-header-cell>
+ <mat-cell *matCellDef="let job"> {{job.manifest_branch}} </mat-cell>
+ </ng-container>
+
+ <!-- Device Build Target Column -->
+ <ng-container matColumnDef="build_target">
+ <mat-header-cell *matHeaderCellDef>Device Build Target</mat-header-cell>
+ <mat-cell *matCellDef="let job"> {{job.build_target}} </mat-cell>
+ </ng-container>
+
+ <!-- Device Build ID Column -->
+ <ng-container matColumnDef="build_id">
+ <mat-header-cell *matHeaderCellDef>Device Build ID</mat-header-cell>
+ <mat-cell *matCellDef="let job"> {{job.build_id}} </mat-cell>
+ </ng-container>
+
+ <!-- GSI Branch Column -->
+ <ng-container matColumnDef="gsi_branch">
+ <mat-header-cell *matHeaderCellDef>GSI Branch</mat-header-cell>
+ <mat-cell *matCellDef="let job"> {{job.gsi_branch}} </mat-cell>
+ </ng-container>
+
+ <!-- GSI Build Target Column -->
+ <ng-container matColumnDef="gsi_build_target">
+ <mat-header-cell *matHeaderCellDef>GSI Build Target</mat-header-cell>
+ <mat-cell *matCellDef="let job"> {{job.gsi_build_target}} </mat-cell>
+ </ng-container>
+
+ <!-- Device Build ID Column -->
+ <ng-container matColumnDef="gsi_build_id">
+ <mat-header-cell *matHeaderCellDef>GSI Build ID</mat-header-cell>
+ <mat-cell *matCellDef="let job"> {{job.gsi_build_id}} </mat-cell>
+ </ng-container>
+
+ <!-- Test Branch Column -->
+ <ng-container matColumnDef="test_branch">
+ <mat-header-cell *matHeaderCellDef>Test Branch</mat-header-cell>
+ <mat-cell *matCellDef="let job"> {{job.test_branch}} </mat-cell>
+ </ng-container>
+
+ <!-- Test Build Target Column -->
+ <ng-container matColumnDef="test_build_target">
+ <mat-header-cell *matHeaderCellDef>Test Build Target</mat-header-cell>
+ <mat-cell *matCellDef="let job"> {{job.test_build_target}} </mat-cell>
+ </ng-container>
+
+ <!-- Test Build ID Column -->
+ <ng-container matColumnDef="test_build_id">
+ <mat-header-cell *matHeaderCellDef>Test Build ID</mat-header-cell>
+ <mat-cell *matCellDef="let job"> {{job.test_build_id}} </mat-cell>
+ </ng-container>
+
+ <!-- Status Column -->
+ <ng-container matColumnDef="status">
+ <mat-header-cell *matHeaderCellDef>Status</mat-header-cell>
+ <mat-cell *matCellDef="let job"> {{jobStatusEnum[job.status]}} </mat-cell>
+ </ng-container>
+
+ <!-- Timestamp Column -->
+ <ng-container matColumnDef="timestamp">
+ <mat-header-cell *matHeaderCellDef mat-sort-header disabled>Timestamp</mat-header-cell>
+ <mat-cell *matCellDef="let job"> {{getRelativeTime(job.timestamp)}} </mat-cell>
+ </ng-container>
+
+ <!-- Heartbeat stamp Column -->
+ <ng-container matColumnDef="heartbeat_stamp">
+ <mat-header-cell *matHeaderCellDef>Heartbeat</mat-header-cell>
+ <mat-cell *matCellDef="let job"> {{getRelativeTime(job.heartbeat_stamp)}} </mat-cell>
+ </ng-container>
+
+ <mat-header-row *matHeaderRowDef="columnTitles"></mat-header-row>
+ <mat-row *matRowDef="let row; columns: columnTitles;"
+ matRipple
+ class="element-row"
+ [appCdkDetailRow]="row" [appCdkDetailRowTpl]="job_detail"></mat-row>
+ </mat-table>
+ <mat-paginator [length]="count"
+ [pageSize]="pageSize"
+ [pageSizeOptions]="pageSizeOptions"
+ [pageIndex]="pageIndex"
+ (page)="pageEvent = onPageEvent($event)">
+ </mat-paginator>
+</div>
+<ng-template #job_detail let-job>
+ <div class="mat-row div-expandable" [@detailExpand] style="overflow: hidden">
+ <a href="{{job.infra_log_url}}" download><button mat-raised-button [disabled]="(!job.infra_log_url)">Download Infra Log</button></a>
+ <button mat-raised-button (click)="onShowDetailsClicked(job)">
+ Show Details
+ </button>
+ </div>
+</ng-template>
+<div class="loading-spinner" *ngIf="loading">
+ <mat-spinner color="primary"></mat-spinner>
+</div>