Skip to content
6 changes: 5 additions & 1 deletion lib/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ class PWMetrics {
this.displayOutput(results.median);
} else if (this.flags.submit) {
const sheets = new Sheets(this.sheets, this.clientSecret);
await sheets.appendResults(results.runs);
await sheets.appendResults(results.runs, this.flags.upload);
}
}
return results;
Expand Down Expand Up @@ -174,6 +174,10 @@ class PWMetrics {

if (this.flags.upload) {
const driveResponse = await upload(data, this.clientSecret);

preparedData.fileId = driveResponse.id;
preparedData.fileName = driveResponse.name;

this.view(driveResponse.id);
}

Expand Down
2 changes: 2 additions & 0 deletions lib/metrics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ function prepareData(res: LighthouseResults): MetricsResults {
});

return {
fileId: '',
fileName: '',
timings,
timestamps,
generatedTime: res.generatedTime,
Expand Down
16 changes: 12 additions & 4 deletions lib/sheets/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const metricsIds = require('../metrics').ids;
const SHEET_TYPES = {
'GOOGLE_SHEETS': 'GOOGLE_SHEETS'
};
const VIEWER_URL_PREFIX = 'https://chromedevtools.github.io/timeline-viewer/?loadTimelineFromURL=drive://';

class Sheets {
constructor(public config: SheetsConfig, public clientSecret: AuthorizeCredentials) {
Expand All @@ -38,18 +39,24 @@ class Sheets {
}
}

appendResults(results: Array<MetricsResults>) {
appendResults(results: Array<MetricsResults>, upload: boolean) {
switch (this.config.type) {
case SHEET_TYPES.GOOGLE_SHEETS:
return this.appendResultsToGSheets(results);
return this.appendResultsToGSheets(results, upload);
}
}

async appendResultsToGSheets(results: Array<MetricsResults>) {
async appendResultsToGSheets(results: Array<MetricsResults>, upload: boolean) {
let valuesToAppend: Array<GSheetsValuesToAppend> = [];
results.forEach(data => {
const getTiming = (key: string) => data.timings.find(t => t.id === key).timing;
const dateObj = new Date(data.generatedTime);
let viewerUrl = '';

if(upload && typeof data.fileId !== 'undefined') {
viewerUrl = VIEWER_URL_PREFIX + data.fileId;
}

// order matters
valuesToAppend.push([
data.lighthouseVersion,
Expand All @@ -62,7 +69,8 @@ class Sheets {
getTiming(metricsIds.VC100),
getTiming(metricsIds.TTFI),
getTiming(metricsIds.TTCI),
getTiming(metricsIds.VC85)
getTiming(metricsIds.VC85),
viewerUrl
]);
});

Expand Down
2 changes: 2 additions & 0 deletions types/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ interface FeatureFlags {
}

interface MetricsResults {
fileName: string,
fileId: string,
timestamps: Timestamp[];
timings: Timing[];
generatedTime: string;
Expand Down