github.com/GoogleCloudPlatform/testgrid@v0.0.174/web/src/gen/pb/summary/summary.ts (about)

     1  // @generated by protobuf-ts 2.8.3 with parameter long_type_string
     2  // @generated from protobuf file "pb/summary/summary.proto" (package "testgrid.summary", syntax proto3)
     3  // tslint:disable
     4  //
     5  // Summary info for TestGrid tests, dashboard tabs, and dashboards.
     6  // Stored in GCS as "dashboard-<normalized dashboard name>".
     7  //
     8  import type { BinaryWriteOptions } from "@protobuf-ts/runtime";
     9  import type { IBinaryWriter } from "@protobuf-ts/runtime";
    10  import { WireType } from "@protobuf-ts/runtime";
    11  import type { BinaryReadOptions } from "@protobuf-ts/runtime";
    12  import type { IBinaryReader } from "@protobuf-ts/runtime";
    13  import { UnknownFieldHandler } from "@protobuf-ts/runtime";
    14  import type { PartialMessage } from "@protobuf-ts/runtime";
    15  import { reflectionMergePartial } from "@protobuf-ts/runtime";
    16  import { MESSAGE_TYPE } from "@protobuf-ts/runtime";
    17  import { MessageType } from "@protobuf-ts/runtime";
    18  import { Timestamp } from "../../google/protobuf/timestamp";
    19  /**
    20   * Summary of a failing test.
    21   *
    22   * @generated from protobuf message testgrid.summary.FailingTestSummary
    23   */
    24  export interface FailingTestSummary {
    25      /**
    26       * Display name of the test.
    27       *
    28       * @generated from protobuf field: string display_name = 1;
    29       */
    30      displayName: string;
    31      /**
    32       * Name of the test. E.g., the target for tests in Sponge.
    33       *
    34       * @generated from protobuf field: string test_name = 2;
    35       */
    36      testName: string;
    37      /**
    38       * First build ID at which the test failed.
    39       *
    40       * @generated from protobuf field: string fail_build_id = 3;
    41       */
    42      failBuildId: string;
    43      /**
    44       * Timestamp for the first cycle in which the test failed.
    45       *
    46       * @generated from protobuf field: double fail_timestamp = 4;
    47       */
    48      failTimestamp: number;
    49      /**
    50       * Last build ID at which the test passed.
    51       *
    52       * @generated from protobuf field: string pass_build_id = 5;
    53       */
    54      passBuildId: string;
    55      /**
    56       * Timestamp for the last cycle in which the test passed.
    57       *
    58       * @generated from protobuf field: double pass_timestamp = 6;
    59       */
    60      passTimestamp: number;
    61      /**
    62       * Number of times the test has failed.
    63       *
    64       * @generated from protobuf field: int32 fail_count = 7;
    65       */
    66      failCount: number;
    67      /**
    68       * Link to search for build changes.
    69       *
    70       * @generated from protobuf field: string build_link = 8;
    71       */
    72      buildLink: string;
    73      /**
    74       * Text for option to search for build changes.
    75       *
    76       * @generated from protobuf field: string build_link_text = 9;
    77       */
    78      buildLinkText: string;
    79      /**
    80       * Text to display for link to search for build changes.
    81       *
    82       * @generated from protobuf field: string build_url_text = 10;
    83       */
    84      buildUrlText: string;
    85      /**
    86       * Text for failure statuses associated with this test.
    87       *
    88       * @generated from protobuf field: string failure_message = 11;
    89       */
    90      failureMessage: string;
    91      /**
    92       * List of bug IDs for bugs associated with this test.
    93       *
    94       * @generated from protobuf field: repeated string linked_bugs = 12;
    95       */
    96      linkedBugs: string[];
    97      /**
    98       * A link to the first build in which the test failed.
    99       *
   100       * @generated from protobuf field: string fail_test_link = 13;
   101       */
   102      failTestLink: string;
   103      /**
   104       * A link to the latest build in which the test failed.
   105       *
   106       * @generated from protobuf field: string latest_fail_test_link = 17;
   107       */
   108      latestFailTestLink: string;
   109      /**
   110       * The test ID for the latest test failure. (Does not indicate the failure is
   111       * 'over', just the latest test failure we found.)
   112       *
   113       * @generated from protobuf field: string latest_fail_build_id = 14;
   114       */
   115      latestFailBuildId: string;
   116      /**
   117       * Maps (property name):(property value) for arbitrary alert properties.
   118       *
   119       * @generated from protobuf field: map<string, string> properties = 15;
   120       */
   121      properties: {
   122          [key: string]: string;
   123      };
   124      /**
   125       * A list of IDs for issue hotlists related to this failure.
   126       *
   127       * @generated from protobuf field: repeated string hotlist_ids = 16;
   128       */
   129      hotlistIds: string[];
   130      /**
   131       * Dynamic email list, route email alerts to these instead of the configured
   132       * defaults.
   133       *
   134       * @generated from protobuf field: repeated string email_addresses = 18;
   135       */
   136      emailAddresses: string[];
   137  }
   138  /**
   139   * Metrics about a specific test, i.e. passes, fails, total runs, etc.
   140   * Next ID: 12
   141   *
   142   * @generated from protobuf message testgrid.summary.TestInfo
   143   */
   144  export interface TestInfo {
   145      /**
   146       * The display name of the test, typically what is shown for each row in
   147       * TestGrid
   148       *
   149       * @generated from protobuf field: string display_name = 1;
   150       */
   151      displayName: string;
   152      /**
   153       * The total number of test runs not including runs failed due to
   154       * infrastructure failures.
   155       *
   156       * @generated from protobuf field: int32 total_non_infra_runs = 2;
   157       */
   158      totalNonInfraRuns: number;
   159      /**
   160       * The number of passed test runs not including runs failed due to
   161       * infrastructure failures.
   162       *
   163       * @generated from protobuf field: int32 passed_non_infra_runs = 3;
   164       */
   165      passedNonInfraRuns: number;
   166      /**
   167       * The number of failed test runs not including runs failed due to
   168       * infrastructure failures.
   169       *
   170       * @generated from protobuf field: int32 failed_non_infra_runs = 4;
   171       */
   172      failedNonInfraRuns: number;
   173      /**
   174       * The number of failed test runs specifically due to infrastructure
   175       * failures.
   176       *
   177       * @generated from protobuf field: int32 failed_infra_runs = 5;
   178       */
   179      failedInfraRuns: number;
   180      /**
   181       * The total number of all runs, including failures due to infrastructure
   182       *
   183       * @generated from protobuf field: int32 total_runs_with_infra = 6;
   184       */
   185      totalRunsWithInfra: number;
   186      /**
   187       * Any other type of runs not included above.
   188       *
   189       * @generated from protobuf field: int32 other_runs = 7;
   190       */
   191      otherRuns: number;
   192      /**
   193       * The flakiness of the test, measured out of 100
   194       *
   195       * @generated from protobuf field: float flakiness = 8;
   196       */
   197      flakiness: number;
   198      /**
   199       * The flakiness of the test from previous intervals
   200       *
   201       * @generated from protobuf field: repeated float previous_flakiness = 10;
   202       */
   203      previousFlakiness: number[];
   204      /**
   205       * The change of flakiness based on the last interval's flakiness
   206       * e.g. if last interval the flakiness was 50, and now it's 75, the
   207       * trend is UP. A trend of NO_CHANGE means last week and this week were
   208       * exactly the same. The interval is set by each tab's config, with
   209       * a default of 7 days.
   210       *
   211       * @generated from protobuf field: testgrid.summary.TestInfo.Trend change_from_last_interval = 9;
   212       */
   213      changeFromLastInterval: TestInfo_Trend;
   214      /**
   215       * A map of infra failure name to the count of that failure for the interval.
   216       *
   217       * @generated from protobuf field: map<string, int32> infra_failures = 11;
   218       */
   219      infraFailures: {
   220          [key: string]: number;
   221      };
   222  }
   223  /**
   224   * @generated from protobuf enum testgrid.summary.TestInfo.Trend
   225   */
   226  export enum TestInfo_Trend {
   227      /**
   228       * @generated from protobuf enum value: UNKNOWN = 0;
   229       */
   230      UNKNOWN = 0,
   231      /**
   232       * @generated from protobuf enum value: NO_CHANGE = 1;
   233       */
   234      NO_CHANGE = 1,
   235      /**
   236       * @generated from protobuf enum value: UP = 2;
   237       */
   238      UP = 2,
   239      /**
   240       * @generated from protobuf enum value: DOWN = 3;
   241       */
   242      DOWN = 3
   243  }
   244  /**
   245   * Summary of the flakiness and overall healthiness of a dashboard tab
   246   *
   247   * @generated from protobuf message testgrid.summary.HealthinessInfo
   248   */
   249  export interface HealthinessInfo {
   250      /**
   251       * The start of the time frame that the analysis was run for.
   252       * Represents the lower bound but does not guarantee that the earliest
   253       * test occurred at start
   254       *
   255       * @generated from protobuf field: google.protobuf.Timestamp start = 1;
   256       */
   257      start?: Timestamp;
   258      /**
   259       * The end of the time frame that the analysis was run for.
   260       * Same caveat as above but for upper bound.
   261       *
   262       * @generated from protobuf field: google.protobuf.Timestamp end = 2;
   263       */
   264      end?: Timestamp;
   265      /**
   266       * A list of test entries associated with this tab + timeframe.
   267       *
   268       * @generated from protobuf field: repeated testgrid.summary.TestInfo tests = 3;
   269       */
   270      tests: TestInfo[];
   271      /**
   272       * The flakiness out of 100 (think percentage but drop the sign)
   273       *
   274       * @generated from protobuf field: float average_flakiness = 4;
   275       */
   276      averageFlakiness: number;
   277      /**
   278       * The average flakiness for previous intervals
   279       *
   280       * @generated from protobuf field: repeated float previous_flakiness = 5;
   281       */
   282      previousFlakiness: number[];
   283  }
   284  /**
   285   * Information about alerts that have been sent
   286   *
   287   * @generated from protobuf message testgrid.summary.AlertingData
   288   */
   289  export interface AlertingData {
   290      /**
   291       * Seconds since epoch at which an email was last sent
   292       *
   293       * @generated from protobuf field: google.protobuf.Timestamp last_email_time = 1;
   294       */
   295      lastEmailTime?: Timestamp;
   296  }
   297  /**
   298   * Summary of a dashboard tab.
   299   *
   300   * @generated from protobuf message testgrid.summary.DashboardTabSummary
   301   */
   302  export interface DashboardTabSummary {
   303      /**
   304       * The name of the dashboard.
   305       *
   306       * @generated from protobuf field: string dashboard_name = 1;
   307       */
   308      dashboardName: string;
   309      /**
   310       * The name of the dashboard tab.
   311       *
   312       * @generated from protobuf field: string dashboard_tab_name = 2;
   313       */
   314      dashboardTabName: string;
   315      /**
   316       * Any top-level alert on this dashboard tab.
   317       *
   318       * @generated from protobuf field: string alert = 3;
   319       */
   320      alert: string;
   321      /**
   322       * List of failing test summary information.
   323       *
   324       * @generated from protobuf field: repeated testgrid.summary.FailingTestSummary failing_test_summaries = 4;
   325       */
   326      failingTestSummaries: FailingTestSummary[];
   327      /**
   328       * Seconds since epoch at which the test group was last updated.
   329       *
   330       * @generated from protobuf field: double last_update_timestamp = 5;
   331       */
   332      lastUpdateTimestamp: number;
   333      /**
   334       * A summary of the status of this dashboard tab.
   335       *
   336       * @generated from protobuf field: string status = 6;
   337       */
   338      status: string;
   339      /**
   340       * The overall status for this dashboard tab.
   341       *
   342       * @generated from protobuf field: testgrid.summary.DashboardTabSummary.TabStatus overall_status = 7;
   343       */
   344      overallStatus: DashboardTabSummary_TabStatus;
   345      /**
   346       * The ID for the latest passing build.
   347       *
   348       * @generated from protobuf field: string latest_green = 8;
   349       */
   350      latestGreen: string;
   351      /**
   352       * Seconds since epoch at which tests last ran.
   353       *
   354       * @generated from protobuf field: double last_run_timestamp = 9;
   355       */
   356      lastRunTimestamp: number;
   357      /**
   358       * String indicating the URL for linking to a bug.
   359       *
   360       * @generated from protobuf field: string bug_url = 10;
   361       */
   362      bugUrl: string;
   363      /**
   364       * Metrics for the recent healthiness of a tab
   365       *
   366       * @generated from protobuf field: testgrid.summary.HealthinessInfo healthiness = 12;
   367       */
   368      healthiness?: HealthinessInfo;
   369      /**
   370       * All the issue IDs linked to this tab.
   371       *
   372       * @generated from protobuf field: repeated string linked_issues = 13;
   373       */
   374      linkedIssues: string[];
   375      /**
   376       * Metrics about alerts sent with respect to this summary
   377       * Maintained by alerter; does not need to be populated by summarizer
   378       *
   379       * @generated from protobuf field: testgrid.summary.AlertingData alerting_data = 14;
   380       */
   381      alertingData?: AlertingData;
   382      /**
   383       * DEPRECATED: now part of the TabStatus.
   384       *
   385       * @deprecated
   386       * @generated from protobuf field: bool acceptably_flaky = 15 [deprecated = true];
   387       */
   388      acceptablyFlaky: boolean;
   389      /**
   390       * Additional metrics provided for the dashboard tab
   391       *
   392       * @generated from protobuf field: testgrid.summary.DashboardTabSummaryMetrics summary_metrics = 16;
   393       */
   394      summaryMetrics?: DashboardTabSummaryMetrics;
   395  }
   396  /**
   397   * @generated from protobuf enum testgrid.summary.DashboardTabSummary.TabStatus
   398   */
   399  export enum DashboardTabSummary_TabStatus {
   400      /**
   401       * @generated from protobuf enum value: NOT_SET = 0;
   402       */
   403      NOT_SET = 0,
   404      /**
   405       * @generated from protobuf enum value: UNKNOWN = 1;
   406       */
   407      UNKNOWN = 1,
   408      /**
   409       * @generated from protobuf enum value: PASS = 2;
   410       */
   411      PASS = 2,
   412      /**
   413       * @generated from protobuf enum value: FAIL = 3;
   414       */
   415      FAIL = 3,
   416      /**
   417       * @generated from protobuf enum value: FLAKY = 4;
   418       */
   419      FLAKY = 4,
   420      /**
   421       * @generated from protobuf enum value: STALE = 5;
   422       */
   423      STALE = 5,
   424      /**
   425       * @generated from protobuf enum value: BROKEN = 6;
   426       */
   427      BROKEN = 6,
   428      /**
   429       * @generated from protobuf enum value: PENDING = 7;
   430       */
   431      PENDING = 7,
   432      /**
   433       * @generated from protobuf enum value: ACCEPTABLE = 8;
   434       */
   435      ACCEPTABLE = 8
   436  }
   437  /**
   438   * Most recent summary metrics for the tab calculated over columns (not individual tests)
   439   *
   440   * @generated from protobuf message testgrid.summary.DashboardTabSummaryMetrics
   441   */
   442  export interface DashboardTabSummaryMetrics {
   443      /**
   444       * Number of total columns analyzed by summarizer
   445       *
   446       * @generated from protobuf field: int32 completed_columns = 1;
   447       */
   448      completedColumns: number;
   449      /**
   450       * Number of columns with all tests passing
   451       *
   452       * @generated from protobuf field: int32 passing_columns = 2;
   453       */
   454      passingColumns: number;
   455      /**
   456       * Number of ignored columns
   457       *
   458       * @generated from protobuf field: int32 ignored_columns = 3;
   459       */
   460      ignoredColumns: number;
   461  }
   462  /**
   463   * Summary state of a dashboard.
   464   *
   465   * @generated from protobuf message testgrid.summary.DashboardSummary
   466   */
   467  export interface DashboardSummary {
   468      /**
   469       * Summary of a dashboard tab; see config.proto.
   470       *
   471       * @generated from protobuf field: repeated testgrid.summary.DashboardTabSummary tab_summaries = 1;
   472       */
   473      tabSummaries: DashboardTabSummary[];
   474  }
   475  // @generated message type with reflection information, may provide speed optimized methods
   476  class FailingTestSummary$Type extends MessageType<FailingTestSummary> {
   477      constructor() {
   478          super("testgrid.summary.FailingTestSummary", [
   479              { no: 1, name: "display_name", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
   480              { no: 2, name: "test_name", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
   481              { no: 3, name: "fail_build_id", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
   482              { no: 4, name: "fail_timestamp", kind: "scalar", T: 1 /*ScalarType.DOUBLE*/ },
   483              { no: 5, name: "pass_build_id", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
   484              { no: 6, name: "pass_timestamp", kind: "scalar", T: 1 /*ScalarType.DOUBLE*/ },
   485              { no: 7, name: "fail_count", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
   486              { no: 8, name: "build_link", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
   487              { no: 9, name: "build_link_text", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
   488              { no: 10, name: "build_url_text", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
   489              { no: 11, name: "failure_message", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
   490              { no: 12, name: "linked_bugs", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },
   491              { no: 13, name: "fail_test_link", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
   492              { no: 17, name: "latest_fail_test_link", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
   493              { no: 14, name: "latest_fail_build_id", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
   494              { no: 15, name: "properties", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "scalar", T: 9 /*ScalarType.STRING*/ } },
   495              { no: 16, name: "hotlist_ids", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },
   496              { no: 18, name: "email_addresses", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }
   497          ]);
   498      }
   499      create(value?: PartialMessage<FailingTestSummary>): FailingTestSummary {
   500          const message = { displayName: "", testName: "", failBuildId: "", failTimestamp: 0, passBuildId: "", passTimestamp: 0, failCount: 0, buildLink: "", buildLinkText: "", buildUrlText: "", failureMessage: "", linkedBugs: [], failTestLink: "", latestFailTestLink: "", latestFailBuildId: "", properties: {}, hotlistIds: [], emailAddresses: [] };
   501          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
   502          if (value !== undefined)
   503              reflectionMergePartial<FailingTestSummary>(this, message, value);
   504          return message;
   505      }
   506      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: FailingTestSummary): FailingTestSummary {
   507          let message = target ?? this.create(), end = reader.pos + length;
   508          while (reader.pos < end) {
   509              let [fieldNo, wireType] = reader.tag();
   510              switch (fieldNo) {
   511                  case /* string display_name */ 1:
   512                      message.displayName = reader.string();
   513                      break;
   514                  case /* string test_name */ 2:
   515                      message.testName = reader.string();
   516                      break;
   517                  case /* string fail_build_id */ 3:
   518                      message.failBuildId = reader.string();
   519                      break;
   520                  case /* double fail_timestamp */ 4:
   521                      message.failTimestamp = reader.double();
   522                      break;
   523                  case /* string pass_build_id */ 5:
   524                      message.passBuildId = reader.string();
   525                      break;
   526                  case /* double pass_timestamp */ 6:
   527                      message.passTimestamp = reader.double();
   528                      break;
   529                  case /* int32 fail_count */ 7:
   530                      message.failCount = reader.int32();
   531                      break;
   532                  case /* string build_link */ 8:
   533                      message.buildLink = reader.string();
   534                      break;
   535                  case /* string build_link_text */ 9:
   536                      message.buildLinkText = reader.string();
   537                      break;
   538                  case /* string build_url_text */ 10:
   539                      message.buildUrlText = reader.string();
   540                      break;
   541                  case /* string failure_message */ 11:
   542                      message.failureMessage = reader.string();
   543                      break;
   544                  case /* repeated string linked_bugs */ 12:
   545                      message.linkedBugs.push(reader.string());
   546                      break;
   547                  case /* string fail_test_link */ 13:
   548                      message.failTestLink = reader.string();
   549                      break;
   550                  case /* string latest_fail_test_link */ 17:
   551                      message.latestFailTestLink = reader.string();
   552                      break;
   553                  case /* string latest_fail_build_id */ 14:
   554                      message.latestFailBuildId = reader.string();
   555                      break;
   556                  case /* map<string, string> properties */ 15:
   557                      this.binaryReadMap15(message.properties, reader, options);
   558                      break;
   559                  case /* repeated string hotlist_ids */ 16:
   560                      message.hotlistIds.push(reader.string());
   561                      break;
   562                  case /* repeated string email_addresses */ 18:
   563                      message.emailAddresses.push(reader.string());
   564                      break;
   565                  default:
   566                      let u = options.readUnknownField;
   567                      if (u === "throw")
   568                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
   569                      let d = reader.skip(wireType);
   570                      if (u !== false)
   571                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
   572              }
   573          }
   574          return message;
   575      }
   576      private binaryReadMap15(map: FailingTestSummary["properties"], reader: IBinaryReader, options: BinaryReadOptions): void {
   577          let len = reader.uint32(), end = reader.pos + len, key: keyof FailingTestSummary["properties"] | undefined, val: FailingTestSummary["properties"][any] | undefined;
   578          while (reader.pos < end) {
   579              let [fieldNo, wireType] = reader.tag();
   580              switch (fieldNo) {
   581                  case 1:
   582                      key = reader.string();
   583                      break;
   584                  case 2:
   585                      val = reader.string();
   586                      break;
   587                  default: throw new globalThis.Error("unknown map entry field for field testgrid.summary.FailingTestSummary.properties");
   588              }
   589          }
   590          map[key ?? ""] = val ?? "";
   591      }
   592      internalBinaryWrite(message: FailingTestSummary, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
   593          /* string display_name = 1; */
   594          if (message.displayName !== "")
   595              writer.tag(1, WireType.LengthDelimited).string(message.displayName);
   596          /* string test_name = 2; */
   597          if (message.testName !== "")
   598              writer.tag(2, WireType.LengthDelimited).string(message.testName);
   599          /* string fail_build_id = 3; */
   600          if (message.failBuildId !== "")
   601              writer.tag(3, WireType.LengthDelimited).string(message.failBuildId);
   602          /* double fail_timestamp = 4; */
   603          if (message.failTimestamp !== 0)
   604              writer.tag(4, WireType.Bit64).double(message.failTimestamp);
   605          /* string pass_build_id = 5; */
   606          if (message.passBuildId !== "")
   607              writer.tag(5, WireType.LengthDelimited).string(message.passBuildId);
   608          /* double pass_timestamp = 6; */
   609          if (message.passTimestamp !== 0)
   610              writer.tag(6, WireType.Bit64).double(message.passTimestamp);
   611          /* int32 fail_count = 7; */
   612          if (message.failCount !== 0)
   613              writer.tag(7, WireType.Varint).int32(message.failCount);
   614          /* string build_link = 8; */
   615          if (message.buildLink !== "")
   616              writer.tag(8, WireType.LengthDelimited).string(message.buildLink);
   617          /* string build_link_text = 9; */
   618          if (message.buildLinkText !== "")
   619              writer.tag(9, WireType.LengthDelimited).string(message.buildLinkText);
   620          /* string build_url_text = 10; */
   621          if (message.buildUrlText !== "")
   622              writer.tag(10, WireType.LengthDelimited).string(message.buildUrlText);
   623          /* string failure_message = 11; */
   624          if (message.failureMessage !== "")
   625              writer.tag(11, WireType.LengthDelimited).string(message.failureMessage);
   626          /* repeated string linked_bugs = 12; */
   627          for (let i = 0; i < message.linkedBugs.length; i++)
   628              writer.tag(12, WireType.LengthDelimited).string(message.linkedBugs[i]);
   629          /* string fail_test_link = 13; */
   630          if (message.failTestLink !== "")
   631              writer.tag(13, WireType.LengthDelimited).string(message.failTestLink);
   632          /* string latest_fail_test_link = 17; */
   633          if (message.latestFailTestLink !== "")
   634              writer.tag(17, WireType.LengthDelimited).string(message.latestFailTestLink);
   635          /* string latest_fail_build_id = 14; */
   636          if (message.latestFailBuildId !== "")
   637              writer.tag(14, WireType.LengthDelimited).string(message.latestFailBuildId);
   638          /* map<string, string> properties = 15; */
   639          for (let k of Object.keys(message.properties))
   640              writer.tag(15, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k).tag(2, WireType.LengthDelimited).string(message.properties[k]).join();
   641          /* repeated string hotlist_ids = 16; */
   642          for (let i = 0; i < message.hotlistIds.length; i++)
   643              writer.tag(16, WireType.LengthDelimited).string(message.hotlistIds[i]);
   644          /* repeated string email_addresses = 18; */
   645          for (let i = 0; i < message.emailAddresses.length; i++)
   646              writer.tag(18, WireType.LengthDelimited).string(message.emailAddresses[i]);
   647          let u = options.writeUnknownFields;
   648          if (u !== false)
   649              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
   650          return writer;
   651      }
   652  }
   653  /**
   654   * @generated MessageType for protobuf message testgrid.summary.FailingTestSummary
   655   */
   656  export const FailingTestSummary = new FailingTestSummary$Type();
   657  // @generated message type with reflection information, may provide speed optimized methods
   658  class TestInfo$Type extends MessageType<TestInfo> {
   659      constructor() {
   660          super("testgrid.summary.TestInfo", [
   661              { no: 1, name: "display_name", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
   662              { no: 2, name: "total_non_infra_runs", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
   663              { no: 3, name: "passed_non_infra_runs", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
   664              { no: 4, name: "failed_non_infra_runs", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
   665              { no: 5, name: "failed_infra_runs", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
   666              { no: 6, name: "total_runs_with_infra", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
   667              { no: 7, name: "other_runs", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
   668              { no: 8, name: "flakiness", kind: "scalar", T: 2 /*ScalarType.FLOAT*/ },
   669              { no: 10, name: "previous_flakiness", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 2 /*ScalarType.FLOAT*/ },
   670              { no: 9, name: "change_from_last_interval", kind: "enum", T: () => ["testgrid.summary.TestInfo.Trend", TestInfo_Trend] },
   671              { no: 11, name: "infra_failures", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "scalar", T: 5 /*ScalarType.INT32*/ } }
   672          ]);
   673      }
   674      create(value?: PartialMessage<TestInfo>): TestInfo {
   675          const message = { displayName: "", totalNonInfraRuns: 0, passedNonInfraRuns: 0, failedNonInfraRuns: 0, failedInfraRuns: 0, totalRunsWithInfra: 0, otherRuns: 0, flakiness: 0, previousFlakiness: [], changeFromLastInterval: 0, infraFailures: {} };
   676          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
   677          if (value !== undefined)
   678              reflectionMergePartial<TestInfo>(this, message, value);
   679          return message;
   680      }
   681      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TestInfo): TestInfo {
   682          let message = target ?? this.create(), end = reader.pos + length;
   683          while (reader.pos < end) {
   684              let [fieldNo, wireType] = reader.tag();
   685              switch (fieldNo) {
   686                  case /* string display_name */ 1:
   687                      message.displayName = reader.string();
   688                      break;
   689                  case /* int32 total_non_infra_runs */ 2:
   690                      message.totalNonInfraRuns = reader.int32();
   691                      break;
   692                  case /* int32 passed_non_infra_runs */ 3:
   693                      message.passedNonInfraRuns = reader.int32();
   694                      break;
   695                  case /* int32 failed_non_infra_runs */ 4:
   696                      message.failedNonInfraRuns = reader.int32();
   697                      break;
   698                  case /* int32 failed_infra_runs */ 5:
   699                      message.failedInfraRuns = reader.int32();
   700                      break;
   701                  case /* int32 total_runs_with_infra */ 6:
   702                      message.totalRunsWithInfra = reader.int32();
   703                      break;
   704                  case /* int32 other_runs */ 7:
   705                      message.otherRuns = reader.int32();
   706                      break;
   707                  case /* float flakiness */ 8:
   708                      message.flakiness = reader.float();
   709                      break;
   710                  case /* repeated float previous_flakiness */ 10:
   711                      if (wireType === WireType.LengthDelimited)
   712                          for (let e = reader.int32() + reader.pos; reader.pos < e;)
   713                              message.previousFlakiness.push(reader.float());
   714                      else
   715                          message.previousFlakiness.push(reader.float());
   716                      break;
   717                  case /* testgrid.summary.TestInfo.Trend change_from_last_interval */ 9:
   718                      message.changeFromLastInterval = reader.int32();
   719                      break;
   720                  case /* map<string, int32> infra_failures */ 11:
   721                      this.binaryReadMap11(message.infraFailures, reader, options);
   722                      break;
   723                  default:
   724                      let u = options.readUnknownField;
   725                      if (u === "throw")
   726                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
   727                      let d = reader.skip(wireType);
   728                      if (u !== false)
   729                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
   730              }
   731          }
   732          return message;
   733      }
   734      private binaryReadMap11(map: TestInfo["infraFailures"], reader: IBinaryReader, options: BinaryReadOptions): void {
   735          let len = reader.uint32(), end = reader.pos + len, key: keyof TestInfo["infraFailures"] | undefined, val: TestInfo["infraFailures"][any] | undefined;
   736          while (reader.pos < end) {
   737              let [fieldNo, wireType] = reader.tag();
   738              switch (fieldNo) {
   739                  case 1:
   740                      key = reader.string();
   741                      break;
   742                  case 2:
   743                      val = reader.int32();
   744                      break;
   745                  default: throw new globalThis.Error("unknown map entry field for field testgrid.summary.TestInfo.infra_failures");
   746              }
   747          }
   748          map[key ?? ""] = val ?? 0;
   749      }
   750      internalBinaryWrite(message: TestInfo, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
   751          /* string display_name = 1; */
   752          if (message.displayName !== "")
   753              writer.tag(1, WireType.LengthDelimited).string(message.displayName);
   754          /* int32 total_non_infra_runs = 2; */
   755          if (message.totalNonInfraRuns !== 0)
   756              writer.tag(2, WireType.Varint).int32(message.totalNonInfraRuns);
   757          /* int32 passed_non_infra_runs = 3; */
   758          if (message.passedNonInfraRuns !== 0)
   759              writer.tag(3, WireType.Varint).int32(message.passedNonInfraRuns);
   760          /* int32 failed_non_infra_runs = 4; */
   761          if (message.failedNonInfraRuns !== 0)
   762              writer.tag(4, WireType.Varint).int32(message.failedNonInfraRuns);
   763          /* int32 failed_infra_runs = 5; */
   764          if (message.failedInfraRuns !== 0)
   765              writer.tag(5, WireType.Varint).int32(message.failedInfraRuns);
   766          /* int32 total_runs_with_infra = 6; */
   767          if (message.totalRunsWithInfra !== 0)
   768              writer.tag(6, WireType.Varint).int32(message.totalRunsWithInfra);
   769          /* int32 other_runs = 7; */
   770          if (message.otherRuns !== 0)
   771              writer.tag(7, WireType.Varint).int32(message.otherRuns);
   772          /* float flakiness = 8; */
   773          if (message.flakiness !== 0)
   774              writer.tag(8, WireType.Bit32).float(message.flakiness);
   775          /* repeated float previous_flakiness = 10; */
   776          if (message.previousFlakiness.length) {
   777              writer.tag(10, WireType.LengthDelimited).fork();
   778              for (let i = 0; i < message.previousFlakiness.length; i++)
   779                  writer.float(message.previousFlakiness[i]);
   780              writer.join();
   781          }
   782          /* testgrid.summary.TestInfo.Trend change_from_last_interval = 9; */
   783          if (message.changeFromLastInterval !== 0)
   784              writer.tag(9, WireType.Varint).int32(message.changeFromLastInterval);
   785          /* map<string, int32> infra_failures = 11; */
   786          for (let k of Object.keys(message.infraFailures))
   787              writer.tag(11, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k).tag(2, WireType.Varint).int32(message.infraFailures[k]).join();
   788          let u = options.writeUnknownFields;
   789          if (u !== false)
   790              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
   791          return writer;
   792      }
   793  }
   794  /**
   795   * @generated MessageType for protobuf message testgrid.summary.TestInfo
   796   */
   797  export const TestInfo = new TestInfo$Type();
   798  // @generated message type with reflection information, may provide speed optimized methods
   799  class HealthinessInfo$Type extends MessageType<HealthinessInfo> {
   800      constructor() {
   801          super("testgrid.summary.HealthinessInfo", [
   802              { no: 1, name: "start", kind: "message", T: () => Timestamp },
   803              { no: 2, name: "end", kind: "message", T: () => Timestamp },
   804              { no: 3, name: "tests", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => TestInfo },
   805              { no: 4, name: "average_flakiness", kind: "scalar", T: 2 /*ScalarType.FLOAT*/ },
   806              { no: 5, name: "previous_flakiness", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 2 /*ScalarType.FLOAT*/ }
   807          ]);
   808      }
   809      create(value?: PartialMessage<HealthinessInfo>): HealthinessInfo {
   810          const message = { tests: [], averageFlakiness: 0, previousFlakiness: [] };
   811          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
   812          if (value !== undefined)
   813              reflectionMergePartial<HealthinessInfo>(this, message, value);
   814          return message;
   815      }
   816      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: HealthinessInfo): HealthinessInfo {
   817          let message = target ?? this.create(), end = reader.pos + length;
   818          while (reader.pos < end) {
   819              let [fieldNo, wireType] = reader.tag();
   820              switch (fieldNo) {
   821                  case /* google.protobuf.Timestamp start */ 1:
   822                      message.start = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.start);
   823                      break;
   824                  case /* google.protobuf.Timestamp end */ 2:
   825                      message.end = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.end);
   826                      break;
   827                  case /* repeated testgrid.summary.TestInfo tests */ 3:
   828                      message.tests.push(TestInfo.internalBinaryRead(reader, reader.uint32(), options));
   829                      break;
   830                  case /* float average_flakiness */ 4:
   831                      message.averageFlakiness = reader.float();
   832                      break;
   833                  case /* repeated float previous_flakiness */ 5:
   834                      if (wireType === WireType.LengthDelimited)
   835                          for (let e = reader.int32() + reader.pos; reader.pos < e;)
   836                              message.previousFlakiness.push(reader.float());
   837                      else
   838                          message.previousFlakiness.push(reader.float());
   839                      break;
   840                  default:
   841                      let u = options.readUnknownField;
   842                      if (u === "throw")
   843                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
   844                      let d = reader.skip(wireType);
   845                      if (u !== false)
   846                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
   847              }
   848          }
   849          return message;
   850      }
   851      internalBinaryWrite(message: HealthinessInfo, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
   852          /* google.protobuf.Timestamp start = 1; */
   853          if (message.start)
   854              Timestamp.internalBinaryWrite(message.start, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
   855          /* google.protobuf.Timestamp end = 2; */
   856          if (message.end)
   857              Timestamp.internalBinaryWrite(message.end, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
   858          /* repeated testgrid.summary.TestInfo tests = 3; */
   859          for (let i = 0; i < message.tests.length; i++)
   860              TestInfo.internalBinaryWrite(message.tests[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();
   861          /* float average_flakiness = 4; */
   862          if (message.averageFlakiness !== 0)
   863              writer.tag(4, WireType.Bit32).float(message.averageFlakiness);
   864          /* repeated float previous_flakiness = 5; */
   865          if (message.previousFlakiness.length) {
   866              writer.tag(5, WireType.LengthDelimited).fork();
   867              for (let i = 0; i < message.previousFlakiness.length; i++)
   868                  writer.float(message.previousFlakiness[i]);
   869              writer.join();
   870          }
   871          let u = options.writeUnknownFields;
   872          if (u !== false)
   873              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
   874          return writer;
   875      }
   876  }
   877  /**
   878   * @generated MessageType for protobuf message testgrid.summary.HealthinessInfo
   879   */
   880  export const HealthinessInfo = new HealthinessInfo$Type();
   881  // @generated message type with reflection information, may provide speed optimized methods
   882  class AlertingData$Type extends MessageType<AlertingData> {
   883      constructor() {
   884          super("testgrid.summary.AlertingData", [
   885              { no: 1, name: "last_email_time", kind: "message", T: () => Timestamp }
   886          ]);
   887      }
   888      create(value?: PartialMessage<AlertingData>): AlertingData {
   889          const message = {};
   890          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
   891          if (value !== undefined)
   892              reflectionMergePartial<AlertingData>(this, message, value);
   893          return message;
   894      }
   895      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AlertingData): AlertingData {
   896          let message = target ?? this.create(), end = reader.pos + length;
   897          while (reader.pos < end) {
   898              let [fieldNo, wireType] = reader.tag();
   899              switch (fieldNo) {
   900                  case /* google.protobuf.Timestamp last_email_time */ 1:
   901                      message.lastEmailTime = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.lastEmailTime);
   902                      break;
   903                  default:
   904                      let u = options.readUnknownField;
   905                      if (u === "throw")
   906                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
   907                      let d = reader.skip(wireType);
   908                      if (u !== false)
   909                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
   910              }
   911          }
   912          return message;
   913      }
   914      internalBinaryWrite(message: AlertingData, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
   915          /* google.protobuf.Timestamp last_email_time = 1; */
   916          if (message.lastEmailTime)
   917              Timestamp.internalBinaryWrite(message.lastEmailTime, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
   918          let u = options.writeUnknownFields;
   919          if (u !== false)
   920              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
   921          return writer;
   922      }
   923  }
   924  /**
   925   * @generated MessageType for protobuf message testgrid.summary.AlertingData
   926   */
   927  export const AlertingData = new AlertingData$Type();
   928  // @generated message type with reflection information, may provide speed optimized methods
   929  class DashboardTabSummary$Type extends MessageType<DashboardTabSummary> {
   930      constructor() {
   931          super("testgrid.summary.DashboardTabSummary", [
   932              { no: 1, name: "dashboard_name", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
   933              { no: 2, name: "dashboard_tab_name", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
   934              { no: 3, name: "alert", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
   935              { no: 4, name: "failing_test_summaries", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => FailingTestSummary },
   936              { no: 5, name: "last_update_timestamp", kind: "scalar", T: 1 /*ScalarType.DOUBLE*/ },
   937              { no: 6, name: "status", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
   938              { no: 7, name: "overall_status", kind: "enum", T: () => ["testgrid.summary.DashboardTabSummary.TabStatus", DashboardTabSummary_TabStatus] },
   939              { no: 8, name: "latest_green", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
   940              { no: 9, name: "last_run_timestamp", kind: "scalar", T: 1 /*ScalarType.DOUBLE*/ },
   941              { no: 10, name: "bug_url", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
   942              { no: 12, name: "healthiness", kind: "message", T: () => HealthinessInfo },
   943              { no: 13, name: "linked_issues", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },
   944              { no: 14, name: "alerting_data", kind: "message", T: () => AlertingData },
   945              { no: 15, name: "acceptably_flaky", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
   946              { no: 16, name: "summary_metrics", kind: "message", T: () => DashboardTabSummaryMetrics }
   947          ]);
   948      }
   949      create(value?: PartialMessage<DashboardTabSummary>): DashboardTabSummary {
   950          const message = { dashboardName: "", dashboardTabName: "", alert: "", failingTestSummaries: [], lastUpdateTimestamp: 0, status: "", overallStatus: 0, latestGreen: "", lastRunTimestamp: 0, bugUrl: "", linkedIssues: [], acceptablyFlaky: false };
   951          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
   952          if (value !== undefined)
   953              reflectionMergePartial<DashboardTabSummary>(this, message, value);
   954          return message;
   955      }
   956      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DashboardTabSummary): DashboardTabSummary {
   957          let message = target ?? this.create(), end = reader.pos + length;
   958          while (reader.pos < end) {
   959              let [fieldNo, wireType] = reader.tag();
   960              switch (fieldNo) {
   961                  case /* string dashboard_name */ 1:
   962                      message.dashboardName = reader.string();
   963                      break;
   964                  case /* string dashboard_tab_name */ 2:
   965                      message.dashboardTabName = reader.string();
   966                      break;
   967                  case /* string alert */ 3:
   968                      message.alert = reader.string();
   969                      break;
   970                  case /* repeated testgrid.summary.FailingTestSummary failing_test_summaries */ 4:
   971                      message.failingTestSummaries.push(FailingTestSummary.internalBinaryRead(reader, reader.uint32(), options));
   972                      break;
   973                  case /* double last_update_timestamp */ 5:
   974                      message.lastUpdateTimestamp = reader.double();
   975                      break;
   976                  case /* string status */ 6:
   977                      message.status = reader.string();
   978                      break;
   979                  case /* testgrid.summary.DashboardTabSummary.TabStatus overall_status */ 7:
   980                      message.overallStatus = reader.int32();
   981                      break;
   982                  case /* string latest_green */ 8:
   983                      message.latestGreen = reader.string();
   984                      break;
   985                  case /* double last_run_timestamp */ 9:
   986                      message.lastRunTimestamp = reader.double();
   987                      break;
   988                  case /* string bug_url */ 10:
   989                      message.bugUrl = reader.string();
   990                      break;
   991                  case /* testgrid.summary.HealthinessInfo healthiness */ 12:
   992                      message.healthiness = HealthinessInfo.internalBinaryRead(reader, reader.uint32(), options, message.healthiness);
   993                      break;
   994                  case /* repeated string linked_issues */ 13:
   995                      message.linkedIssues.push(reader.string());
   996                      break;
   997                  case /* testgrid.summary.AlertingData alerting_data */ 14:
   998                      message.alertingData = AlertingData.internalBinaryRead(reader, reader.uint32(), options, message.alertingData);
   999                      break;
  1000                  case /* bool acceptably_flaky = 15 [deprecated = true];*/ 15:
  1001                      message.acceptablyFlaky = reader.bool();
  1002                      break;
  1003                  case /* testgrid.summary.DashboardTabSummaryMetrics summary_metrics */ 16:
  1004                      message.summaryMetrics = DashboardTabSummaryMetrics.internalBinaryRead(reader, reader.uint32(), options, message.summaryMetrics);
  1005                      break;
  1006                  default:
  1007                      let u = options.readUnknownField;
  1008                      if (u === "throw")
  1009                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  1010                      let d = reader.skip(wireType);
  1011                      if (u !== false)
  1012                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  1013              }
  1014          }
  1015          return message;
  1016      }
  1017      internalBinaryWrite(message: DashboardTabSummary, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  1018          /* string dashboard_name = 1; */
  1019          if (message.dashboardName !== "")
  1020              writer.tag(1, WireType.LengthDelimited).string(message.dashboardName);
  1021          /* string dashboard_tab_name = 2; */
  1022          if (message.dashboardTabName !== "")
  1023              writer.tag(2, WireType.LengthDelimited).string(message.dashboardTabName);
  1024          /* string alert = 3; */
  1025          if (message.alert !== "")
  1026              writer.tag(3, WireType.LengthDelimited).string(message.alert);
  1027          /* repeated testgrid.summary.FailingTestSummary failing_test_summaries = 4; */
  1028          for (let i = 0; i < message.failingTestSummaries.length; i++)
  1029              FailingTestSummary.internalBinaryWrite(message.failingTestSummaries[i], writer.tag(4, WireType.LengthDelimited).fork(), options).join();
  1030          /* double last_update_timestamp = 5; */
  1031          if (message.lastUpdateTimestamp !== 0)
  1032              writer.tag(5, WireType.Bit64).double(message.lastUpdateTimestamp);
  1033          /* string status = 6; */
  1034          if (message.status !== "")
  1035              writer.tag(6, WireType.LengthDelimited).string(message.status);
  1036          /* testgrid.summary.DashboardTabSummary.TabStatus overall_status = 7; */
  1037          if (message.overallStatus !== 0)
  1038              writer.tag(7, WireType.Varint).int32(message.overallStatus);
  1039          /* string latest_green = 8; */
  1040          if (message.latestGreen !== "")
  1041              writer.tag(8, WireType.LengthDelimited).string(message.latestGreen);
  1042          /* double last_run_timestamp = 9; */
  1043          if (message.lastRunTimestamp !== 0)
  1044              writer.tag(9, WireType.Bit64).double(message.lastRunTimestamp);
  1045          /* string bug_url = 10; */
  1046          if (message.bugUrl !== "")
  1047              writer.tag(10, WireType.LengthDelimited).string(message.bugUrl);
  1048          /* testgrid.summary.HealthinessInfo healthiness = 12; */
  1049          if (message.healthiness)
  1050              HealthinessInfo.internalBinaryWrite(message.healthiness, writer.tag(12, WireType.LengthDelimited).fork(), options).join();
  1051          /* repeated string linked_issues = 13; */
  1052          for (let i = 0; i < message.linkedIssues.length; i++)
  1053              writer.tag(13, WireType.LengthDelimited).string(message.linkedIssues[i]);
  1054          /* testgrid.summary.AlertingData alerting_data = 14; */
  1055          if (message.alertingData)
  1056              AlertingData.internalBinaryWrite(message.alertingData, writer.tag(14, WireType.LengthDelimited).fork(), options).join();
  1057          /* bool acceptably_flaky = 15 [deprecated = true]; */
  1058          if (message.acceptablyFlaky !== false)
  1059              writer.tag(15, WireType.Varint).bool(message.acceptablyFlaky);
  1060          /* testgrid.summary.DashboardTabSummaryMetrics summary_metrics = 16; */
  1061          if (message.summaryMetrics)
  1062              DashboardTabSummaryMetrics.internalBinaryWrite(message.summaryMetrics, writer.tag(16, WireType.LengthDelimited).fork(), options).join();
  1063          let u = options.writeUnknownFields;
  1064          if (u !== false)
  1065              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  1066          return writer;
  1067      }
  1068  }
  1069  /**
  1070   * @generated MessageType for protobuf message testgrid.summary.DashboardTabSummary
  1071   */
  1072  export const DashboardTabSummary = new DashboardTabSummary$Type();
  1073  // @generated message type with reflection information, may provide speed optimized methods
  1074  class DashboardTabSummaryMetrics$Type extends MessageType<DashboardTabSummaryMetrics> {
  1075      constructor() {
  1076          super("testgrid.summary.DashboardTabSummaryMetrics", [
  1077              { no: 1, name: "completed_columns", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  1078              { no: 2, name: "passing_columns", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
  1079              { no: 3, name: "ignored_columns", kind: "scalar", T: 5 /*ScalarType.INT32*/ }
  1080          ]);
  1081      }
  1082      create(value?: PartialMessage<DashboardTabSummaryMetrics>): DashboardTabSummaryMetrics {
  1083          const message = { completedColumns: 0, passingColumns: 0, ignoredColumns: 0 };
  1084          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  1085          if (value !== undefined)
  1086              reflectionMergePartial<DashboardTabSummaryMetrics>(this, message, value);
  1087          return message;
  1088      }
  1089      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DashboardTabSummaryMetrics): DashboardTabSummaryMetrics {
  1090          let message = target ?? this.create(), end = reader.pos + length;
  1091          while (reader.pos < end) {
  1092              let [fieldNo, wireType] = reader.tag();
  1093              switch (fieldNo) {
  1094                  case /* int32 completed_columns */ 1:
  1095                      message.completedColumns = reader.int32();
  1096                      break;
  1097                  case /* int32 passing_columns */ 2:
  1098                      message.passingColumns = reader.int32();
  1099                      break;
  1100                  case /* int32 ignored_columns */ 3:
  1101                      message.ignoredColumns = reader.int32();
  1102                      break;
  1103                  default:
  1104                      let u = options.readUnknownField;
  1105                      if (u === "throw")
  1106                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  1107                      let d = reader.skip(wireType);
  1108                      if (u !== false)
  1109                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  1110              }
  1111          }
  1112          return message;
  1113      }
  1114      internalBinaryWrite(message: DashboardTabSummaryMetrics, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  1115          /* int32 completed_columns = 1; */
  1116          if (message.completedColumns !== 0)
  1117              writer.tag(1, WireType.Varint).int32(message.completedColumns);
  1118          /* int32 passing_columns = 2; */
  1119          if (message.passingColumns !== 0)
  1120              writer.tag(2, WireType.Varint).int32(message.passingColumns);
  1121          /* int32 ignored_columns = 3; */
  1122          if (message.ignoredColumns !== 0)
  1123              writer.tag(3, WireType.Varint).int32(message.ignoredColumns);
  1124          let u = options.writeUnknownFields;
  1125          if (u !== false)
  1126              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  1127          return writer;
  1128      }
  1129  }
  1130  /**
  1131   * @generated MessageType for protobuf message testgrid.summary.DashboardTabSummaryMetrics
  1132   */
  1133  export const DashboardTabSummaryMetrics = new DashboardTabSummaryMetrics$Type();
  1134  // @generated message type with reflection information, may provide speed optimized methods
  1135  class DashboardSummary$Type extends MessageType<DashboardSummary> {
  1136      constructor() {
  1137          super("testgrid.summary.DashboardSummary", [
  1138              { no: 1, name: "tab_summaries", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => DashboardTabSummary }
  1139          ]);
  1140      }
  1141      create(value?: PartialMessage<DashboardSummary>): DashboardSummary {
  1142          const message = { tabSummaries: [] };
  1143          globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
  1144          if (value !== undefined)
  1145              reflectionMergePartial<DashboardSummary>(this, message, value);
  1146          return message;
  1147      }
  1148      internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DashboardSummary): DashboardSummary {
  1149          let message = target ?? this.create(), end = reader.pos + length;
  1150          while (reader.pos < end) {
  1151              let [fieldNo, wireType] = reader.tag();
  1152              switch (fieldNo) {
  1153                  case /* repeated testgrid.summary.DashboardTabSummary tab_summaries */ 1:
  1154                      message.tabSummaries.push(DashboardTabSummary.internalBinaryRead(reader, reader.uint32(), options));
  1155                      break;
  1156                  default:
  1157                      let u = options.readUnknownField;
  1158                      if (u === "throw")
  1159                          throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
  1160                      let d = reader.skip(wireType);
  1161                      if (u !== false)
  1162                          (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
  1163              }
  1164          }
  1165          return message;
  1166      }
  1167      internalBinaryWrite(message: DashboardSummary, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
  1168          /* repeated testgrid.summary.DashboardTabSummary tab_summaries = 1; */
  1169          for (let i = 0; i < message.tabSummaries.length; i++)
  1170              DashboardTabSummary.internalBinaryWrite(message.tabSummaries[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
  1171          let u = options.writeUnknownFields;
  1172          if (u !== false)
  1173              (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
  1174          return writer;
  1175      }
  1176  }
  1177  /**
  1178   * @generated MessageType for protobuf message testgrid.summary.DashboardSummary
  1179   */
  1180  export const DashboardSummary = new DashboardSummary$Type();