uknmr / gas-webpagetest

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Add column name

azu opened this issue · comments

commented

spreadsheetのカラム名の入力を自動化したいです。

Proposal

  • 値に対応するようにカラム名の情報を持つように実装する

次のようなカラム名と値の対応を持つイメージ

export function columnNames() {
    return tupleNameAndValue().map(item => {
        return item.name;
    });
}

// resultはリクエストの結果とかのオブジェクト
export function getResultValue(result) {
    return tupleNameAndValue().map(item => {
        return item.value(result);
    });
}

export function tupleNameAndValue() {
    return [
        // カラム名 : 値 の対応を近くに置くためむりやりな実装
        { name: "カラム名", value: (result: Result) => result.completed },
        { name: "カラム名", value: (result: Result) => Utilities.formatDate(result.date, 'GMT+9', 'yyyyMMddHH') },
        { name: "カラム名", value: (result: Result) => Utilities.formatDate(result.date, 'GMT+9', 'yyyyMMdd') },
        { name: "カラム名", value: (result: Result) => Utils.transform(result.firstByte) },
        { name: "カラム名", value: (result: Result) => Utils.transform(result.firstLayout) },
        { name: "カラム名", value: (result: Result) => Utils.transform(result.firstPaint) },
        { name: "カラム名", value: (result: Result) => Utils.transform(result.firstContentfulPaint) },
        { name: "カラム名", value: (result: Result) => Utils.transform(result.firstMeaningfulPaint) },
        { name: "カラム名", value: (result: Result) => Utils.transform(result.speedIndex) },
        { name: "カラム名", value: (result: Result) => Utils.transform(result.domInteractive) },
        { name: "カラム名", value: (result: Result) => Utils.transform(result.loadTime) },
        { name: "カラム名", value: (result: Result) => Utils.transform(result.visualComplete) },
        { name: "カラム名", value: (result: Result) => Utils.transform(result.fullyLoaded) },
        { name: "カラム名", value: (result: Result) => Utils.transform(result.timeToInteractive) },
        { name: "カラム名", value: (result: Result) => Utils.transform(result.breakdown.html.bytes, 1) },
        { name: "カラム名", value: (result: Result) => result.breakdown.html.requests },
        { name: "カラム名", value: (result: Result) => Utils.transform(result.breakdown.js.bytes, 1) },
        { name: "カラム名", value: (result: Result) => breakdown.js.requests },
        { name: "カラム名", value: (result: Result) => Utils.transform(result.breakdown.css.bytes, 1) },
        { name: "カラム名", value: (result: Result) => result.breakdown.css.requests },
        { name: "カラム名", value: (result: Result) => Utils.transform(result.breakdown.image.bytes, 1) },
        { name: "カラム名", value: (result: Result) => breakdown.image.requests },
        { name: "カラム名", value: (result: Result) => Utils.transform(result.breakdown.font.bytes, 1) },
        { name: "カラム名", value: (result: Result) => result.breakdown.font.requests },
        { name: "カラム名", value: (result: Result) => Utils.transform(result.breakdown.other.bytes, 1) },
        { name: "カラム名", value: (result: Result) => result.breakdown.other.requests },
        { name: "カラム名", value: (result: Result) => result.summary },
    ]

}
  • 定義したカラム名をSpreadSheetの先頭のRowに追加する

課題

  • 固定Rowとして追加する方法は存在する?
  • 既存のRowがある場合にどうするか
    • 先頭のcellはtestIdなので、この1:1が"testId"なら更新、そうでなければ先頭に追加みたいな実装になる?
  • どのタイミングでカラムを追加/更新するか

固定 Row ってどんなイメージですか?

commented

@uknmr これですね。
多分1行目を固定化するという実装なきがするので、spread sheetに固定rowという領域自体は存在しない気もしてきました。調べた感じでは、1行目に追加 -> 固定する という感じでやる必要があって、固定rowとして追加みたいに一発で追加/更新できるAPIがあると便利そうだなーと。

image

commented

実装してみたところ、

  • 1:1が"testId"でないなら、1行目に空のRowを追加 -> 1行目を新しいColumn名で更新
  • 1:1が"testId"なら、1行目を新しいColumn名で更新

みたいな感じで、カラムのタイトル部分だけ更新できそうでした。

commented

既存の項目の名前は次のような感じにしようと思います。
completed だけだとわかりにくいので TimeStampとつけるのがいいのかな…

[
      {
        name: 'completedTimeStamp',
        value: (result: TestResult) => result.completed,
      },
      {
        name: 'yyyyMMddHH',
        value: (result: TestResult) => Utilities.formatDate(result.date, 'GMT+9', 'yyyyMMddHH'),
      },
      {
        name: 'yyyyMMdd',
        value: (result: TestResult) => Utilities.formatDate(result.date, 'GMT+9', 'yyyyMMdd'),
      },
      {
        name: 'firstByte',
        value: (result: TestResult) => Utils.transform(result.firstByte),
      },
      {
        name: 'firstLayout',
        value: (result: TestResult) => Utils.transform(result.firstLayout),
      },
      {
        name: 'firstPaint',
        value: (result: TestResult) => Utils.transform(result.firstPaint),
      },
      {
        name: 'firstContentfulPaint',
        value: (result: TestResult) => Utils.transform(result.firstContentfulPaint),
      },
      {
        name: 'firstMeaningfulPaint',
        value: (result: TestResult) => Utils.transform(result.firstMeaningfulPaint),
      },
      {
        name: 'speedIndex',
        value: (result: TestResult) => Utils.transform(result.speedIndex),
      },
      {
        name: 'domInteractive',
        value: (result: TestResult) => Utils.transform(result.domInteractive),
      },
      {
        name: 'loadTime',
        value: (result: TestResult) => Utils.transform(result.loadTime),
      },
      {
        name: 'visualComplete',
        value: (result: TestResult) => Utils.transform(result.visualComplete),
      },
      {
        name: 'fullyLoaded',
        value: (result: TestResult) => Utils.transform(result.fullyLoaded),
      },
      {
        name: 'timeToInteractive',
        value: (result: TestResult) => Utils.transform(result.timeToInteractive),
      },
      {
        name: 'html.bytes',
        value: (result: TestResult) => Utils.transform(result.breakdown.html.bytes, 1),
      },
      {
        name: 'html.requests',
        value: (result: TestResult) => result.breakdown.html.requests,
      },
      {
        name: 'js.bytes',
        value: (result: TestResult) => Utils.transform(result.breakdown.js.bytes, 1),
      },
      {
        name: 'js.requests',
        value: (result: TestResult) => result.breakdown.js.requests,
      },
      {
        name: 'css.bytes',
        value: (result: TestResult) => Utils.transform(result.breakdown.css.bytes, 1),
      },
      {
        name: 'css.requests',
        value: (result: TestResult) => result.breakdown.css.requests,
      },
      {
        name: 'image.bytes',
        value: (result: TestResult) => Utils.transform(result.breakdown.image.bytes, 1),
      },
      {
        name: 'image.requests',
        value: (result: TestResult) => result.breakdown.image.requests,
      },
      {
        name: 'font.bytes',
        value: (result: TestResult) => Utils.transform(result.breakdown.font.bytes, 1),
      },
      {
        name: 'font.requests',
        value: (result: TestResult) => result.breakdown.font.requests,
      },
      {
        name: 'other.bytes',
        value: (result: TestResult) => Utils.transform(result.breakdown.other.bytes, 1),
      },
      {
        name: 'other.requests',
        value: (result: TestResult) => result.breakdown.other.requests,
      },
      {
        name: 'summary',
        value: (result: TestResult) => result.summary,
      },
    ]