diff --git a/tools/dashboard/package.json b/tools/dashboard/package.json
index 30803e93e20..47c5712e182 100644
--- a/tools/dashboard/package.json
+++ b/tools/dashboard/package.json
@@ -10,34 +10,33 @@
},
"private": true,
"dependencies": {
- "@angular/animations": "^4.2.2",
+ "@angular/animations": "^4.2.6",
"@angular/cdk": "github:angular/cdk-builds",
- "@angular/common": "^4.2.2",
- "@angular/compiler": "^4.2.2",
- "@angular/core": "^4.2.2",
- "@angular/forms": "^4.2.2",
- "@angular/http": "^4.2.2",
+ "@angular/common": "^4.2.6",
+ "@angular/compiler": "^4.2.6",
+ "@angular/core": "^4.2.6",
+ "@angular/forms": "^4.2.6",
+ "@angular/http": "^4.2.6",
"@angular/material": "github:angular/material2-builds",
- "@angular/platform-browser": "^4.2.2",
- "@angular/platform-browser-dynamic": "^4.2.2",
- "@angular/router": "^4.2.2",
- "@swimlane/ngx-charts": "^5.3.1",
+ "@angular/platform-browser": "^4.2.6",
+ "@angular/platform-browser-dynamic": "^4.2.6",
+ "@angular/router": "^4.2.6",
+ "@swimlane/ngx-charts": "^6.0.0",
"angularfire2": "^4.0.0-rc.1",
"core-js": "^2.4.1",
"d3": "^4.9.1",
- "firebase": "^4.1.2",
- "rxjs": "^5.1.0",
+ "firebase": "^4.1.3",
+ "rxjs": "^5.4.2",
"zone.js": "^0.8.12"
},
"devDependencies": {
- "@angular/cli": "1.1.1",
- "@angular/compiler-cli": "^4.2.2",
- "@angular/language-service": "^4.2.2",
+ "@angular/cli": "^1.2.0",
+ "@angular/compiler-cli": "^4.2.6",
+ "@angular/language-service": "^4.2.6",
"@types/jasmine": "2.5.45",
"@types/node": "~6.0.60",
"firebase-tools": "^3.9.1",
"ts-node": "~3.0.4",
- "tslint": "~5.3.2",
- "typescript": "~2.3.3"
+ "typescript": "^2.4.1"
}
}
diff --git a/tools/dashboard/src/app/dashboard-app.css b/tools/dashboard/src/app/dashboard-app.css
index 17b4b6497cb..97e74af3105 100644
--- a/tools/dashboard/src/app/dashboard-app.css
+++ b/tools/dashboard/src/app/dashboard-app.css
@@ -1,3 +1,8 @@
.dashboard-content {
- margin: 16px;
+ padding: 16px;
+}
+
+.payload-size-card {
+ width: 100%;
+ max-width: 700px;
}
diff --git a/tools/dashboard/src/app/dashboard-app.html b/tools/dashboard/src/app/dashboard-app.html
index 7d15d5f449a..727af508f05 100644
--- a/tools/dashboard/src/app/dashboard-app.html
+++ b/tools/dashboard/src/app/dashboard-app.html
@@ -3,5 +3,10 @@
-
+
+ Payload Size Chart
+
+
+
+
diff --git a/tools/dashboard/src/app/dashboard-module.ts b/tools/dashboard/src/app/dashboard-module.ts
index a2992a0643d..84d5f0e8c1e 100644
--- a/tools/dashboard/src/app/dashboard-module.ts
+++ b/tools/dashboard/src/app/dashboard-module.ts
@@ -4,14 +4,16 @@ import {AngularFireDatabaseModule} from 'angularfire2/database';
import {NgModule} from '@angular/core';
import {DashboardApp} from './dashboard-app';
import {environment} from '../environments/environment';
-import {MdToolbarModule} from '@angular/material';
+import {MdCardModule, MdProgressSpinnerModule, MdToolbarModule} from '@angular/material';
import {NgxChartsModule} from '@swimlane/ngx-charts';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {PayloadChart} from './payload-chart/payload-chart';
@NgModule({
exports: [
- MdToolbarModule
+ MdCardModule,
+ MdToolbarModule,
+ MdProgressSpinnerModule
]
})
export class DashboardMaterialModule {}
diff --git a/tools/dashboard/src/app/payload-chart/payload-chart.html b/tools/dashboard/src/app/payload-chart/payload-chart.html
index a2e715b74e2..067e2492f6b 100644
--- a/tools/dashboard/src/app/payload-chart/payload-chart.html
+++ b/tools/dashboard/src/app/payload-chart/payload-chart.html
@@ -1,4 +1,5 @@
+
+
+
diff --git a/tools/dashboard/src/app/payload-chart/payload-chart.scss b/tools/dashboard/src/app/payload-chart/payload-chart.scss
new file mode 100644
index 00000000000..c7f42c0a507
--- /dev/null
+++ b/tools/dashboard/src/app/payload-chart/payload-chart.scss
@@ -0,0 +1,20 @@
+$payload-chart-loading-size: 50px;
+
+:host {
+ display: block;
+ position: relative;
+
+ height: 400px;
+ width: 100%;
+ max-width: 700px;
+}
+
+.payload-chart-loading {
+ position: absolute;
+
+ top: calc(50% - #{$payload-chart-loading-size});
+ left: calc(50% - #{$payload-chart-loading-size});
+
+ height: $payload-chart-loading-size;
+ width: $payload-chart-loading-size;
+}
diff --git a/tools/dashboard/src/app/payload-chart/payload-chart.ts b/tools/dashboard/src/app/payload-chart/payload-chart.ts
index 05727d7b913..bb662efbcc1 100644
--- a/tools/dashboard/src/app/payload-chart/payload-chart.ts
+++ b/tools/dashboard/src/app/payload-chart/payload-chart.ts
@@ -5,6 +5,7 @@ import {NgxChartItem, NgxChartResult} from './ngx-definitions';
@Component({
selector: 'payload-chart',
templateUrl: './payload-chart.html',
+ styleUrls: ['./payload-chart.scss'],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class PayloadChart {
@@ -29,6 +30,26 @@ export class PayloadChart {
this.chartData = this.createChartResults(value);
}
+ /** Remove duplicate payload results for similar days. */
+ private filterDuplicateDays(data: PayloadResult[]) {
+ const filteredData = new Map();
+
+ data.forEach(result => {
+ // Parse the timestamp from the payload results as a date.
+ const date = new Date(result.timestamp);
+
+ // Ignore hours, minutes, seconds and milliseconds from the date to allow comparisons
+ // only of the day.
+ date.setHours(0, 0, 0, 0);
+
+ // Store the ISO string of the date in a Map to overwrite the previous payload result for
+ // the same day.
+ filteredData.set(date.toISOString(), result);
+ });
+
+ return Array.from(filteredData.values());
+ }
+
/** Creates a list of ngx-chart results of the Payload results. */
private createChartResults(data: PayloadResult[]) {
if (!data) {
@@ -39,6 +60,11 @@ export class PayloadChart {
// manually sort the results by their timestamp.
data = data.sort((a, b) => a.timestamp < b.timestamp ? -1 : 1);
+ // It can happen that there will be multiple payload results for the same day. This happens
+ // when multiple Pull Requests are merged in the same day. For the charts we only want to
+ // have the last payload result of a day (for performance and value correctness)
+ data = this.filterDuplicateDays(data);
+
const materialChartItems: NgxChartItem[] = [];
const cdkChartItems: NgxChartItem[] = [];
diff --git a/tools/dashboard/src/theme.scss b/tools/dashboard/src/theme.scss
index 2e01b0d5832..3d31a884153 100644
--- a/tools/dashboard/src/theme.scss
+++ b/tools/dashboard/src/theme.scss
@@ -8,3 +8,5 @@ $dashboard-light-theme: mat-light-theme($dashboard-primary, $dashboard-accent);
// Only include the theme of the components that are used.
@include mat-toolbar-theme($dashboard-light-theme);
+@include mat-progress-spinner-theme($dashboard-light-theme);
+@include mat-card-theme($dashboard-light-theme);