summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJongmok Hong <jongmok@google.com>2018-11-22 02:00:31 +0900
committerJongmok Hong <jongmok@google.com>2018-12-13 12:35:52 +0900
commita4f234f12c0b3528a64b432c39834cb9a418c119 (patch)
tree67150ab746533fa3550856964c41615d08ebaaa1
parent331fa9ff692c513fbda43a62ad6ada878114463a (diff)
downloadtest_serving-a4f234f12c0b3528a64b432c39834cb9a418c119.tar.gz
Display schedule status.
Test: go/vtslab-schedule-prod/redirect/20181122t014855-dot-vtslab-schedule-prod Bug: 119866072 Change-Id: I98a5675d770b609c5f48d42314b53b9691b35ead
-rw-r--r--gae/frontend/src/app/menu/menu_base.ts10
-rw-r--r--gae/frontend/src/app/menu/schedule/schedule.component.html9
-rw-r--r--gae/frontend/src/app/menu/schedule/schedule.component.ts1
-rw-r--r--gae/frontend/src/app/model/schedule.ts1
-rw-r--r--gae/webapp/src/proto/model.py3
5 files changed, 23 insertions, 1 deletions
diff --git a/gae/frontend/src/app/menu/menu_base.ts b/gae/frontend/src/app/menu/menu_base.ts
index 9282fe5..4d68f03 100644
--- a/gae/frontend/src/app/menu/menu_base.ts
+++ b/gae/frontend/src/app/menu/menu_base.ts
@@ -56,6 +56,16 @@ export abstract class MenuBaseClass {
moment.tz(timeString, 'YYYY-MM-DDThh:mm:ss', 'UTC').fromNow() : '---');
}
+ /** Checks whether timeString is expired from current time. */
+ isExpired(timeString, hours=72) {
+ let currentTime = moment.tz(timeString, 'YYYY-MM-DDThh:mm:ss', 'UTC');
+ if (!currentTime.isValid()) { return false; }
+
+ let diff = moment().diff(currentTime);
+ let duration = moment.duration(diff);
+ return duration.asHours() > hours;
+ }
+
/** Displays a snackbar notification. */
showSnackbar(message = 'Error', duration = 5000) {
this.loading = false;
diff --git a/gae/frontend/src/app/menu/schedule/schedule.component.html b/gae/frontend/src/app/menu/schedule/schedule.component.html
index e260325..910d45b 100644
--- a/gae/frontend/src/app/menu/schedule/schedule.component.html
+++ b/gae/frontend/src/app/menu/schedule/schedule.component.html
@@ -77,6 +77,15 @@
<mat-cell *matCellDef="let schedule"> {{schedule.period}}</mat-cell>
</ng-container>
+ <!-- Status Column -->
+ <ng-container matColumnDef="status">
+ <mat-header-cell *matHeaderCellDef>Status</mat-header-cell>
+ <mat-cell *matCellDef="let schedule"
+ [ngStyle]="{color: (schedule.suspended || isExpired(schedule.timestamp)) ? '#FF0000' : '#000000'}">
+ {{schedule.suspended ? "Suspended" : (isExpired(schedule.timestamp) ? "Expired" : "Active")}}
+ </mat-cell>
+ </ng-container>
+
<!-- Timestamp Column -->
<ng-container matColumnDef="timestamp">
<mat-header-cell *matHeaderCellDef>Timestamp</mat-header-cell>
diff --git a/gae/frontend/src/app/menu/schedule/schedule.component.ts b/gae/frontend/src/app/menu/schedule/schedule.component.ts
index 6c72343..5c1740e 100644
--- a/gae/frontend/src/app/menu/schedule/schedule.component.ts
+++ b/gae/frontend/src/app/menu/schedule/schedule.component.ts
@@ -51,6 +51,7 @@ export class ScheduleComponent extends MenuBaseClass implements OnInit {
'test_branch',
'test_build_target',
'period',
+ 'status',
'timestamp',
];
dataSource = new MatTableDataSource<Schedule>();
diff --git a/gae/frontend/src/app/model/schedule.ts b/gae/frontend/src/app/model/schedule.ts
index 5046f2f..9115a97 100644
--- a/gae/frontend/src/app/model/schedule.ts
+++ b/gae/frontend/src/app/model/schedule.ts
@@ -60,6 +60,7 @@ export class Schedule {
timestamp = void 0;
owner: string[] = void 0;
+ error_count: number = void 0;
suspended: boolean = void 0;
urlsafe_key: string = void 0;
}
diff --git a/gae/webapp/src/proto/model.py b/gae/webapp/src/proto/model.py
index 375dcc4..7682ca1 100644
--- a/gae/webapp/src/proto/model.py
+++ b/gae/webapp/src/proto/model.py
@@ -115,7 +115,7 @@ class ScheduleControlInfoMessage(messages.Message):
class ScheduleInfoMessage(messages.Message):
"""A message for representing an individual schedule entry."""
- # Next ID = 38
+ # Next ID = 39
# schedule name for green build schedule, optional.
name = messages.StringField(16)
schedule_type = messages.StringField(19)
@@ -165,6 +165,7 @@ class ScheduleInfoMessage(messages.Message):
suspended = messages.BooleanField(36)
urlsafe_key = messages.StringField(37)
+ error_count = messages.IntegerField(38)
class LabModel(ndb.Model):