github.com/GoogleCloudPlatform/testgrid@v0.0.174/pb/summary/summary.pb.go (about)

     1  /*
     2  Copyright The TestGrid Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  // Summary info for TestGrid tests, dashboard tabs, and dashboards.
    18  // Stored in GCS as "dashboard-<normalized dashboard name>".
    19  
    20  // Code generated by protoc-gen-go. DO NOT EDIT.
    21  // versions:
    22  // 	protoc-gen-go v1.28.0
    23  // 	protoc        v3.21.1
    24  // source: summary.proto
    25  
    26  package summary
    27  
    28  import (
    29  	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
    30  	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
    31  	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
    32  	reflect "reflect"
    33  	sync "sync"
    34  )
    35  
    36  const (
    37  	// Verify that this generated code is sufficiently up-to-date.
    38  	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
    39  	// Verify that runtime/protoimpl is sufficiently up-to-date.
    40  	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
    41  )
    42  
    43  type TestInfo_Trend int32
    44  
    45  const (
    46  	TestInfo_UNKNOWN   TestInfo_Trend = 0
    47  	TestInfo_NO_CHANGE TestInfo_Trend = 1
    48  	TestInfo_UP        TestInfo_Trend = 2
    49  	TestInfo_DOWN      TestInfo_Trend = 3
    50  )
    51  
    52  // Enum value maps for TestInfo_Trend.
    53  var (
    54  	TestInfo_Trend_name = map[int32]string{
    55  		0: "UNKNOWN",
    56  		1: "NO_CHANGE",
    57  		2: "UP",
    58  		3: "DOWN",
    59  	}
    60  	TestInfo_Trend_value = map[string]int32{
    61  		"UNKNOWN":   0,
    62  		"NO_CHANGE": 1,
    63  		"UP":        2,
    64  		"DOWN":      3,
    65  	}
    66  )
    67  
    68  func (x TestInfo_Trend) Enum() *TestInfo_Trend {
    69  	p := new(TestInfo_Trend)
    70  	*p = x
    71  	return p
    72  }
    73  
    74  func (x TestInfo_Trend) String() string {
    75  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
    76  }
    77  
    78  func (TestInfo_Trend) Descriptor() protoreflect.EnumDescriptor {
    79  	return file_summary_proto_enumTypes[0].Descriptor()
    80  }
    81  
    82  func (TestInfo_Trend) Type() protoreflect.EnumType {
    83  	return &file_summary_proto_enumTypes[0]
    84  }
    85  
    86  func (x TestInfo_Trend) Number() protoreflect.EnumNumber {
    87  	return protoreflect.EnumNumber(x)
    88  }
    89  
    90  // Deprecated: Use TestInfo_Trend.Descriptor instead.
    91  func (TestInfo_Trend) EnumDescriptor() ([]byte, []int) {
    92  	return file_summary_proto_rawDescGZIP(), []int{1, 0}
    93  }
    94  
    95  type DashboardTabSummary_TabStatus int32
    96  
    97  const (
    98  	DashboardTabSummary_NOT_SET    DashboardTabSummary_TabStatus = 0
    99  	DashboardTabSummary_UNKNOWN    DashboardTabSummary_TabStatus = 1
   100  	DashboardTabSummary_PASS       DashboardTabSummary_TabStatus = 2
   101  	DashboardTabSummary_FAIL       DashboardTabSummary_TabStatus = 3
   102  	DashboardTabSummary_FLAKY      DashboardTabSummary_TabStatus = 4
   103  	DashboardTabSummary_STALE      DashboardTabSummary_TabStatus = 5
   104  	DashboardTabSummary_BROKEN     DashboardTabSummary_TabStatus = 6
   105  	DashboardTabSummary_PENDING    DashboardTabSummary_TabStatus = 7
   106  	DashboardTabSummary_ACCEPTABLE DashboardTabSummary_TabStatus = 8
   107  )
   108  
   109  // Enum value maps for DashboardTabSummary_TabStatus.
   110  var (
   111  	DashboardTabSummary_TabStatus_name = map[int32]string{
   112  		0: "NOT_SET",
   113  		1: "UNKNOWN",
   114  		2: "PASS",
   115  		3: "FAIL",
   116  		4: "FLAKY",
   117  		5: "STALE",
   118  		6: "BROKEN",
   119  		7: "PENDING",
   120  		8: "ACCEPTABLE",
   121  	}
   122  	DashboardTabSummary_TabStatus_value = map[string]int32{
   123  		"NOT_SET":    0,
   124  		"UNKNOWN":    1,
   125  		"PASS":       2,
   126  		"FAIL":       3,
   127  		"FLAKY":      4,
   128  		"STALE":      5,
   129  		"BROKEN":     6,
   130  		"PENDING":    7,
   131  		"ACCEPTABLE": 8,
   132  	}
   133  )
   134  
   135  func (x DashboardTabSummary_TabStatus) Enum() *DashboardTabSummary_TabStatus {
   136  	p := new(DashboardTabSummary_TabStatus)
   137  	*p = x
   138  	return p
   139  }
   140  
   141  func (x DashboardTabSummary_TabStatus) String() string {
   142  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
   143  }
   144  
   145  func (DashboardTabSummary_TabStatus) Descriptor() protoreflect.EnumDescriptor {
   146  	return file_summary_proto_enumTypes[1].Descriptor()
   147  }
   148  
   149  func (DashboardTabSummary_TabStatus) Type() protoreflect.EnumType {
   150  	return &file_summary_proto_enumTypes[1]
   151  }
   152  
   153  func (x DashboardTabSummary_TabStatus) Number() protoreflect.EnumNumber {
   154  	return protoreflect.EnumNumber(x)
   155  }
   156  
   157  // Deprecated: Use DashboardTabSummary_TabStatus.Descriptor instead.
   158  func (DashboardTabSummary_TabStatus) EnumDescriptor() ([]byte, []int) {
   159  	return file_summary_proto_rawDescGZIP(), []int{4, 0}
   160  }
   161  
   162  // Summary of a failing test.
   163  type FailingTestSummary struct {
   164  	state         protoimpl.MessageState
   165  	sizeCache     protoimpl.SizeCache
   166  	unknownFields protoimpl.UnknownFields
   167  
   168  	// Display name of the test.
   169  	DisplayName string `protobuf:"bytes,1,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
   170  	// Name of the test. E.g., the target for tests in Sponge.
   171  	TestName string `protobuf:"bytes,2,opt,name=test_name,json=testName,proto3" json:"test_name,omitempty"`
   172  	// First build ID at which the test failed.
   173  	FailBuildId string `protobuf:"bytes,3,opt,name=fail_build_id,json=failBuildId,proto3" json:"fail_build_id,omitempty"`
   174  	// Timestamp for the first cycle in which the test failed.
   175  	FailTimestamp float64 `protobuf:"fixed64,4,opt,name=fail_timestamp,json=failTimestamp,proto3" json:"fail_timestamp,omitempty"`
   176  	// Last build ID at which the test passed.
   177  	PassBuildId string `protobuf:"bytes,5,opt,name=pass_build_id,json=passBuildId,proto3" json:"pass_build_id,omitempty"`
   178  	// Timestamp for the last cycle in which the test passed.
   179  	PassTimestamp float64 `protobuf:"fixed64,6,opt,name=pass_timestamp,json=passTimestamp,proto3" json:"pass_timestamp,omitempty"`
   180  	// Number of times the test has failed.
   181  	FailCount int32 `protobuf:"varint,7,opt,name=fail_count,json=failCount,proto3" json:"fail_count,omitempty"`
   182  	// Link to search for build changes.
   183  	BuildLink string `protobuf:"bytes,8,opt,name=build_link,json=buildLink,proto3" json:"build_link,omitempty"`
   184  	// Text for option to search for build changes.
   185  	BuildLinkText string `protobuf:"bytes,9,opt,name=build_link_text,json=buildLinkText,proto3" json:"build_link_text,omitempty"`
   186  	// Text to display for link to search for build changes.
   187  	BuildUrlText string `protobuf:"bytes,10,opt,name=build_url_text,json=buildUrlText,proto3" json:"build_url_text,omitempty"`
   188  	// Text for failure statuses associated with this test.
   189  	FailureMessage string `protobuf:"bytes,11,opt,name=failure_message,json=failureMessage,proto3" json:"failure_message,omitempty"`
   190  	// List of bug IDs for bugs associated with this test.
   191  	LinkedBugs []string `protobuf:"bytes,12,rep,name=linked_bugs,json=linkedBugs,proto3" json:"linked_bugs,omitempty"`
   192  	// A link to the first build in which the test failed.
   193  	FailTestLink string `protobuf:"bytes,13,opt,name=fail_test_link,json=failTestLink,proto3" json:"fail_test_link,omitempty"`
   194  	// A link to the latest build in which the test failed.
   195  	LatestFailTestLink string `protobuf:"bytes,17,opt,name=latest_fail_test_link,json=latestFailTestLink,proto3" json:"latest_fail_test_link,omitempty"`
   196  	// The test ID for the latest test failure. (Does not indicate the failure is
   197  	// 'over', just the latest test failure we found.)
   198  	LatestFailBuildId string `protobuf:"bytes,14,opt,name=latest_fail_build_id,json=latestFailBuildId,proto3" json:"latest_fail_build_id,omitempty"`
   199  	// Maps (property name):(property value) for arbitrary alert properties.
   200  	Properties map[string]string `protobuf:"bytes,15,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
   201  	// A list of IDs for issue hotlists related to this failure.
   202  	HotlistIds []string `protobuf:"bytes,16,rep,name=hotlist_ids,json=hotlistIds,proto3" json:"hotlist_ids,omitempty"`
   203  	// Dynamic email list, route email alerts to these instead of the configured
   204  	// defaults.
   205  	EmailAddresses []string `protobuf:"bytes,18,rep,name=email_addresses,json=emailAddresses,proto3" json:"email_addresses,omitempty"`
   206  	// map of custom column headers
   207  	CustomColumnHeaders map[string]string `protobuf:"bytes,19,rep,name=custom_column_headers,json=customColumnHeaders,proto3" json:"custom_column_headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
   208  }
   209  
   210  func (x *FailingTestSummary) Reset() {
   211  	*x = FailingTestSummary{}
   212  	if protoimpl.UnsafeEnabled {
   213  		mi := &file_summary_proto_msgTypes[0]
   214  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   215  		ms.StoreMessageInfo(mi)
   216  	}
   217  }
   218  
   219  func (x *FailingTestSummary) String() string {
   220  	return protoimpl.X.MessageStringOf(x)
   221  }
   222  
   223  func (*FailingTestSummary) ProtoMessage() {}
   224  
   225  func (x *FailingTestSummary) ProtoReflect() protoreflect.Message {
   226  	mi := &file_summary_proto_msgTypes[0]
   227  	if protoimpl.UnsafeEnabled && x != nil {
   228  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   229  		if ms.LoadMessageInfo() == nil {
   230  			ms.StoreMessageInfo(mi)
   231  		}
   232  		return ms
   233  	}
   234  	return mi.MessageOf(x)
   235  }
   236  
   237  // Deprecated: Use FailingTestSummary.ProtoReflect.Descriptor instead.
   238  func (*FailingTestSummary) Descriptor() ([]byte, []int) {
   239  	return file_summary_proto_rawDescGZIP(), []int{0}
   240  }
   241  
   242  func (x *FailingTestSummary) GetDisplayName() string {
   243  	if x != nil {
   244  		return x.DisplayName
   245  	}
   246  	return ""
   247  }
   248  
   249  func (x *FailingTestSummary) GetTestName() string {
   250  	if x != nil {
   251  		return x.TestName
   252  	}
   253  	return ""
   254  }
   255  
   256  func (x *FailingTestSummary) GetFailBuildId() string {
   257  	if x != nil {
   258  		return x.FailBuildId
   259  	}
   260  	return ""
   261  }
   262  
   263  func (x *FailingTestSummary) GetFailTimestamp() float64 {
   264  	if x != nil {
   265  		return x.FailTimestamp
   266  	}
   267  	return 0
   268  }
   269  
   270  func (x *FailingTestSummary) GetPassBuildId() string {
   271  	if x != nil {
   272  		return x.PassBuildId
   273  	}
   274  	return ""
   275  }
   276  
   277  func (x *FailingTestSummary) GetPassTimestamp() float64 {
   278  	if x != nil {
   279  		return x.PassTimestamp
   280  	}
   281  	return 0
   282  }
   283  
   284  func (x *FailingTestSummary) GetFailCount() int32 {
   285  	if x != nil {
   286  		return x.FailCount
   287  	}
   288  	return 0
   289  }
   290  
   291  func (x *FailingTestSummary) GetBuildLink() string {
   292  	if x != nil {
   293  		return x.BuildLink
   294  	}
   295  	return ""
   296  }
   297  
   298  func (x *FailingTestSummary) GetBuildLinkText() string {
   299  	if x != nil {
   300  		return x.BuildLinkText
   301  	}
   302  	return ""
   303  }
   304  
   305  func (x *FailingTestSummary) GetBuildUrlText() string {
   306  	if x != nil {
   307  		return x.BuildUrlText
   308  	}
   309  	return ""
   310  }
   311  
   312  func (x *FailingTestSummary) GetFailureMessage() string {
   313  	if x != nil {
   314  		return x.FailureMessage
   315  	}
   316  	return ""
   317  }
   318  
   319  func (x *FailingTestSummary) GetLinkedBugs() []string {
   320  	if x != nil {
   321  		return x.LinkedBugs
   322  	}
   323  	return nil
   324  }
   325  
   326  func (x *FailingTestSummary) GetFailTestLink() string {
   327  	if x != nil {
   328  		return x.FailTestLink
   329  	}
   330  	return ""
   331  }
   332  
   333  func (x *FailingTestSummary) GetLatestFailTestLink() string {
   334  	if x != nil {
   335  		return x.LatestFailTestLink
   336  	}
   337  	return ""
   338  }
   339  
   340  func (x *FailingTestSummary) GetLatestFailBuildId() string {
   341  	if x != nil {
   342  		return x.LatestFailBuildId
   343  	}
   344  	return ""
   345  }
   346  
   347  func (x *FailingTestSummary) GetProperties() map[string]string {
   348  	if x != nil {
   349  		return x.Properties
   350  	}
   351  	return nil
   352  }
   353  
   354  func (x *FailingTestSummary) GetHotlistIds() []string {
   355  	if x != nil {
   356  		return x.HotlistIds
   357  	}
   358  	return nil
   359  }
   360  
   361  func (x *FailingTestSummary) GetEmailAddresses() []string {
   362  	if x != nil {
   363  		return x.EmailAddresses
   364  	}
   365  	return nil
   366  }
   367  
   368  func (x *FailingTestSummary) GetCustomColumnHeaders() map[string]string {
   369  	if x != nil {
   370  		return x.CustomColumnHeaders
   371  	}
   372  	return nil
   373  }
   374  
   375  // Metrics about a specific test, i.e. passes, fails, total runs, etc.
   376  // Next ID: 12
   377  type TestInfo struct {
   378  	state         protoimpl.MessageState
   379  	sizeCache     protoimpl.SizeCache
   380  	unknownFields protoimpl.UnknownFields
   381  
   382  	// The display name of the test, typically what is shown for each row in
   383  	// TestGrid
   384  	DisplayName string `protobuf:"bytes,1,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
   385  	// The total number of test runs not including runs failed due to
   386  	// infrastructure failures.
   387  	TotalNonInfraRuns int32 `protobuf:"varint,2,opt,name=total_non_infra_runs,json=totalNonInfraRuns,proto3" json:"total_non_infra_runs,omitempty"`
   388  	// The number of passed test runs not including runs failed due to
   389  	// infrastructure failures.
   390  	PassedNonInfraRuns int32 `protobuf:"varint,3,opt,name=passed_non_infra_runs,json=passedNonInfraRuns,proto3" json:"passed_non_infra_runs,omitempty"`
   391  	// The number of failed test runs not including runs failed due to
   392  	// infrastructure failures.
   393  	FailedNonInfraRuns int32 `protobuf:"varint,4,opt,name=failed_non_infra_runs,json=failedNonInfraRuns,proto3" json:"failed_non_infra_runs,omitempty"`
   394  	// The number of failed test runs specifically due to infrastructure
   395  	// failures.
   396  	FailedInfraRuns int32 `protobuf:"varint,5,opt,name=failed_infra_runs,json=failedInfraRuns,proto3" json:"failed_infra_runs,omitempty"`
   397  	// The total number of all runs, including failures due to infrastructure
   398  	TotalRunsWithInfra int32 `protobuf:"varint,6,opt,name=total_runs_with_infra,json=totalRunsWithInfra,proto3" json:"total_runs_with_infra,omitempty"`
   399  	// Any other type of runs not included above.
   400  	OtherRuns int32 `protobuf:"varint,7,opt,name=other_runs,json=otherRuns,proto3" json:"other_runs,omitempty"`
   401  	// The flakiness of the test, measured out of 100
   402  	Flakiness float32 `protobuf:"fixed32,8,opt,name=flakiness,proto3" json:"flakiness,omitempty"`
   403  	// The flakiness of the test from previous intervals
   404  	PreviousFlakiness []float32 `protobuf:"fixed32,10,rep,packed,name=previous_flakiness,json=previousFlakiness,proto3" json:"previous_flakiness,omitempty"`
   405  	// The change of flakiness based on the last interval's flakiness
   406  	// e.g. if last interval the flakiness was 50, and now it's 75, the
   407  	// trend is UP. A trend of NO_CHANGE means last week and this week were
   408  	// exactly the same. The interval is set by each tab's config, with
   409  	// a default of 7 days.
   410  	ChangeFromLastInterval TestInfo_Trend `protobuf:"varint,9,opt,name=change_from_last_interval,json=changeFromLastInterval,proto3,enum=testgrid.summary.TestInfo_Trend" json:"change_from_last_interval,omitempty"`
   411  	// A map of infra failure name to the count of that failure for the interval.
   412  	InfraFailures map[string]int32 `protobuf:"bytes,11,rep,name=infra_failures,json=infraFailures,proto3" json:"infra_failures,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
   413  }
   414  
   415  func (x *TestInfo) Reset() {
   416  	*x = TestInfo{}
   417  	if protoimpl.UnsafeEnabled {
   418  		mi := &file_summary_proto_msgTypes[1]
   419  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   420  		ms.StoreMessageInfo(mi)
   421  	}
   422  }
   423  
   424  func (x *TestInfo) String() string {
   425  	return protoimpl.X.MessageStringOf(x)
   426  }
   427  
   428  func (*TestInfo) ProtoMessage() {}
   429  
   430  func (x *TestInfo) ProtoReflect() protoreflect.Message {
   431  	mi := &file_summary_proto_msgTypes[1]
   432  	if protoimpl.UnsafeEnabled && x != nil {
   433  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   434  		if ms.LoadMessageInfo() == nil {
   435  			ms.StoreMessageInfo(mi)
   436  		}
   437  		return ms
   438  	}
   439  	return mi.MessageOf(x)
   440  }
   441  
   442  // Deprecated: Use TestInfo.ProtoReflect.Descriptor instead.
   443  func (*TestInfo) Descriptor() ([]byte, []int) {
   444  	return file_summary_proto_rawDescGZIP(), []int{1}
   445  }
   446  
   447  func (x *TestInfo) GetDisplayName() string {
   448  	if x != nil {
   449  		return x.DisplayName
   450  	}
   451  	return ""
   452  }
   453  
   454  func (x *TestInfo) GetTotalNonInfraRuns() int32 {
   455  	if x != nil {
   456  		return x.TotalNonInfraRuns
   457  	}
   458  	return 0
   459  }
   460  
   461  func (x *TestInfo) GetPassedNonInfraRuns() int32 {
   462  	if x != nil {
   463  		return x.PassedNonInfraRuns
   464  	}
   465  	return 0
   466  }
   467  
   468  func (x *TestInfo) GetFailedNonInfraRuns() int32 {
   469  	if x != nil {
   470  		return x.FailedNonInfraRuns
   471  	}
   472  	return 0
   473  }
   474  
   475  func (x *TestInfo) GetFailedInfraRuns() int32 {
   476  	if x != nil {
   477  		return x.FailedInfraRuns
   478  	}
   479  	return 0
   480  }
   481  
   482  func (x *TestInfo) GetTotalRunsWithInfra() int32 {
   483  	if x != nil {
   484  		return x.TotalRunsWithInfra
   485  	}
   486  	return 0
   487  }
   488  
   489  func (x *TestInfo) GetOtherRuns() int32 {
   490  	if x != nil {
   491  		return x.OtherRuns
   492  	}
   493  	return 0
   494  }
   495  
   496  func (x *TestInfo) GetFlakiness() float32 {
   497  	if x != nil {
   498  		return x.Flakiness
   499  	}
   500  	return 0
   501  }
   502  
   503  func (x *TestInfo) GetPreviousFlakiness() []float32 {
   504  	if x != nil {
   505  		return x.PreviousFlakiness
   506  	}
   507  	return nil
   508  }
   509  
   510  func (x *TestInfo) GetChangeFromLastInterval() TestInfo_Trend {
   511  	if x != nil {
   512  		return x.ChangeFromLastInterval
   513  	}
   514  	return TestInfo_UNKNOWN
   515  }
   516  
   517  func (x *TestInfo) GetInfraFailures() map[string]int32 {
   518  	if x != nil {
   519  		return x.InfraFailures
   520  	}
   521  	return nil
   522  }
   523  
   524  // Summary of the flakiness and overall healthiness of a dashboard tab
   525  type HealthinessInfo struct {
   526  	state         protoimpl.MessageState
   527  	sizeCache     protoimpl.SizeCache
   528  	unknownFields protoimpl.UnknownFields
   529  
   530  	// The start of the time frame that the analysis was run for.
   531  	// Represents the lower bound but does not guarantee that the earliest
   532  	// test occurred at start
   533  	Start *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=start,proto3" json:"start,omitempty"`
   534  	// The end of the time frame that the analysis was run for.
   535  	// Same caveat as above but for upper bound.
   536  	End *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=end,proto3" json:"end,omitempty"`
   537  	// A list of test entries associated with this tab + timeframe.
   538  	Tests []*TestInfo `protobuf:"bytes,3,rep,name=tests,proto3" json:"tests,omitempty"`
   539  	// The flakiness out of 100 (think percentage but drop the sign)
   540  	AverageFlakiness float32 `protobuf:"fixed32,4,opt,name=average_flakiness,json=averageFlakiness,proto3" json:"average_flakiness,omitempty"`
   541  	// The average flakiness for previous intervals
   542  	PreviousFlakiness []float32 `protobuf:"fixed32,5,rep,packed,name=previous_flakiness,json=previousFlakiness,proto3" json:"previous_flakiness,omitempty"`
   543  }
   544  
   545  func (x *HealthinessInfo) Reset() {
   546  	*x = HealthinessInfo{}
   547  	if protoimpl.UnsafeEnabled {
   548  		mi := &file_summary_proto_msgTypes[2]
   549  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   550  		ms.StoreMessageInfo(mi)
   551  	}
   552  }
   553  
   554  func (x *HealthinessInfo) String() string {
   555  	return protoimpl.X.MessageStringOf(x)
   556  }
   557  
   558  func (*HealthinessInfo) ProtoMessage() {}
   559  
   560  func (x *HealthinessInfo) ProtoReflect() protoreflect.Message {
   561  	mi := &file_summary_proto_msgTypes[2]
   562  	if protoimpl.UnsafeEnabled && x != nil {
   563  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   564  		if ms.LoadMessageInfo() == nil {
   565  			ms.StoreMessageInfo(mi)
   566  		}
   567  		return ms
   568  	}
   569  	return mi.MessageOf(x)
   570  }
   571  
   572  // Deprecated: Use HealthinessInfo.ProtoReflect.Descriptor instead.
   573  func (*HealthinessInfo) Descriptor() ([]byte, []int) {
   574  	return file_summary_proto_rawDescGZIP(), []int{2}
   575  }
   576  
   577  func (x *HealthinessInfo) GetStart() *timestamppb.Timestamp {
   578  	if x != nil {
   579  		return x.Start
   580  	}
   581  	return nil
   582  }
   583  
   584  func (x *HealthinessInfo) GetEnd() *timestamppb.Timestamp {
   585  	if x != nil {
   586  		return x.End
   587  	}
   588  	return nil
   589  }
   590  
   591  func (x *HealthinessInfo) GetTests() []*TestInfo {
   592  	if x != nil {
   593  		return x.Tests
   594  	}
   595  	return nil
   596  }
   597  
   598  func (x *HealthinessInfo) GetAverageFlakiness() float32 {
   599  	if x != nil {
   600  		return x.AverageFlakiness
   601  	}
   602  	return 0
   603  }
   604  
   605  func (x *HealthinessInfo) GetPreviousFlakiness() []float32 {
   606  	if x != nil {
   607  		return x.PreviousFlakiness
   608  	}
   609  	return nil
   610  }
   611  
   612  // Information about alerts that have been sent
   613  type AlertingData struct {
   614  	state         protoimpl.MessageState
   615  	sizeCache     protoimpl.SizeCache
   616  	unknownFields protoimpl.UnknownFields
   617  
   618  	// Seconds since epoch at which an email was last sent
   619  	LastEmailTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=last_email_time,json=lastEmailTime,proto3" json:"last_email_time,omitempty"`
   620  }
   621  
   622  func (x *AlertingData) Reset() {
   623  	*x = AlertingData{}
   624  	if protoimpl.UnsafeEnabled {
   625  		mi := &file_summary_proto_msgTypes[3]
   626  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   627  		ms.StoreMessageInfo(mi)
   628  	}
   629  }
   630  
   631  func (x *AlertingData) String() string {
   632  	return protoimpl.X.MessageStringOf(x)
   633  }
   634  
   635  func (*AlertingData) ProtoMessage() {}
   636  
   637  func (x *AlertingData) ProtoReflect() protoreflect.Message {
   638  	mi := &file_summary_proto_msgTypes[3]
   639  	if protoimpl.UnsafeEnabled && x != nil {
   640  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   641  		if ms.LoadMessageInfo() == nil {
   642  			ms.StoreMessageInfo(mi)
   643  		}
   644  		return ms
   645  	}
   646  	return mi.MessageOf(x)
   647  }
   648  
   649  // Deprecated: Use AlertingData.ProtoReflect.Descriptor instead.
   650  func (*AlertingData) Descriptor() ([]byte, []int) {
   651  	return file_summary_proto_rawDescGZIP(), []int{3}
   652  }
   653  
   654  func (x *AlertingData) GetLastEmailTime() *timestamppb.Timestamp {
   655  	if x != nil {
   656  		return x.LastEmailTime
   657  	}
   658  	return nil
   659  }
   660  
   661  // Summary of a dashboard tab.
   662  type DashboardTabSummary struct {
   663  	state         protoimpl.MessageState
   664  	sizeCache     protoimpl.SizeCache
   665  	unknownFields protoimpl.UnknownFields
   666  
   667  	// The name of the dashboard.
   668  	DashboardName string `protobuf:"bytes,1,opt,name=dashboard_name,json=dashboardName,proto3" json:"dashboard_name,omitempty"`
   669  	// The name of the dashboard tab.
   670  	DashboardTabName string `protobuf:"bytes,2,opt,name=dashboard_tab_name,json=dashboardTabName,proto3" json:"dashboard_tab_name,omitempty"`
   671  	// Any top-level alert on this dashboard tab.
   672  	Alert string `protobuf:"bytes,3,opt,name=alert,proto3" json:"alert,omitempty"`
   673  	// List of failing test summary information.
   674  	FailingTestSummaries []*FailingTestSummary `protobuf:"bytes,4,rep,name=failing_test_summaries,json=failingTestSummaries,proto3" json:"failing_test_summaries,omitempty"`
   675  	// Seconds since epoch at which the test group was last updated.
   676  	LastUpdateTimestamp float64 `protobuf:"fixed64,5,opt,name=last_update_timestamp,json=lastUpdateTimestamp,proto3" json:"last_update_timestamp,omitempty"`
   677  	// A summary of the status of this dashboard tab.
   678  	Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"`
   679  	// The overall status for this dashboard tab.
   680  	OverallStatus DashboardTabSummary_TabStatus `protobuf:"varint,7,opt,name=overall_status,json=overallStatus,proto3,enum=testgrid.summary.DashboardTabSummary_TabStatus" json:"overall_status,omitempty"`
   681  	// The ID for the latest passing build.
   682  	LatestGreen string `protobuf:"bytes,8,opt,name=latest_green,json=latestGreen,proto3" json:"latest_green,omitempty"`
   683  	// Seconds since epoch at which tests last ran.
   684  	LastRunTimestamp float64 `protobuf:"fixed64,9,opt,name=last_run_timestamp,json=lastRunTimestamp,proto3" json:"last_run_timestamp,omitempty"`
   685  	// String indicating the URL for linking to a bug.
   686  	BugUrl string `protobuf:"bytes,10,opt,name=bug_url,json=bugUrl,proto3" json:"bug_url,omitempty"`
   687  	// Metrics for the recent healthiness of a tab
   688  	Healthiness *HealthinessInfo `protobuf:"bytes,12,opt,name=healthiness,proto3" json:"healthiness,omitempty"`
   689  	// All the issue IDs linked to this tab.
   690  	LinkedIssues []string `protobuf:"bytes,13,rep,name=linked_issues,json=linkedIssues,proto3" json:"linked_issues,omitempty"`
   691  	// Metrics about alerts sent with respect to this summary
   692  	// Maintained by alerter; does not need to be populated by summarizer
   693  	AlertingData *AlertingData `protobuf:"bytes,14,opt,name=alerting_data,json=alertingData,proto3" json:"alerting_data,omitempty"`
   694  	// DEPRECATED: now part of the TabStatus.
   695  	//
   696  	// Deprecated: Do not use.
   697  	AcceptablyFlaky bool `protobuf:"varint,15,opt,name=acceptably_flaky,json=acceptablyFlaky,proto3" json:"acceptably_flaky,omitempty"`
   698  	// Additional metrics provided for the dashboard tab
   699  	SummaryMetrics *DashboardTabSummaryMetrics `protobuf:"bytes,16,opt,name=summary_metrics,json=summaryMetrics,proto3" json:"summary_metrics,omitempty"`
   700  }
   701  
   702  func (x *DashboardTabSummary) Reset() {
   703  	*x = DashboardTabSummary{}
   704  	if protoimpl.UnsafeEnabled {
   705  		mi := &file_summary_proto_msgTypes[4]
   706  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   707  		ms.StoreMessageInfo(mi)
   708  	}
   709  }
   710  
   711  func (x *DashboardTabSummary) String() string {
   712  	return protoimpl.X.MessageStringOf(x)
   713  }
   714  
   715  func (*DashboardTabSummary) ProtoMessage() {}
   716  
   717  func (x *DashboardTabSummary) ProtoReflect() protoreflect.Message {
   718  	mi := &file_summary_proto_msgTypes[4]
   719  	if protoimpl.UnsafeEnabled && x != nil {
   720  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   721  		if ms.LoadMessageInfo() == nil {
   722  			ms.StoreMessageInfo(mi)
   723  		}
   724  		return ms
   725  	}
   726  	return mi.MessageOf(x)
   727  }
   728  
   729  // Deprecated: Use DashboardTabSummary.ProtoReflect.Descriptor instead.
   730  func (*DashboardTabSummary) Descriptor() ([]byte, []int) {
   731  	return file_summary_proto_rawDescGZIP(), []int{4}
   732  }
   733  
   734  func (x *DashboardTabSummary) GetDashboardName() string {
   735  	if x != nil {
   736  		return x.DashboardName
   737  	}
   738  	return ""
   739  }
   740  
   741  func (x *DashboardTabSummary) GetDashboardTabName() string {
   742  	if x != nil {
   743  		return x.DashboardTabName
   744  	}
   745  	return ""
   746  }
   747  
   748  func (x *DashboardTabSummary) GetAlert() string {
   749  	if x != nil {
   750  		return x.Alert
   751  	}
   752  	return ""
   753  }
   754  
   755  func (x *DashboardTabSummary) GetFailingTestSummaries() []*FailingTestSummary {
   756  	if x != nil {
   757  		return x.FailingTestSummaries
   758  	}
   759  	return nil
   760  }
   761  
   762  func (x *DashboardTabSummary) GetLastUpdateTimestamp() float64 {
   763  	if x != nil {
   764  		return x.LastUpdateTimestamp
   765  	}
   766  	return 0
   767  }
   768  
   769  func (x *DashboardTabSummary) GetStatus() string {
   770  	if x != nil {
   771  		return x.Status
   772  	}
   773  	return ""
   774  }
   775  
   776  func (x *DashboardTabSummary) GetOverallStatus() DashboardTabSummary_TabStatus {
   777  	if x != nil {
   778  		return x.OverallStatus
   779  	}
   780  	return DashboardTabSummary_NOT_SET
   781  }
   782  
   783  func (x *DashboardTabSummary) GetLatestGreen() string {
   784  	if x != nil {
   785  		return x.LatestGreen
   786  	}
   787  	return ""
   788  }
   789  
   790  func (x *DashboardTabSummary) GetLastRunTimestamp() float64 {
   791  	if x != nil {
   792  		return x.LastRunTimestamp
   793  	}
   794  	return 0
   795  }
   796  
   797  func (x *DashboardTabSummary) GetBugUrl() string {
   798  	if x != nil {
   799  		return x.BugUrl
   800  	}
   801  	return ""
   802  }
   803  
   804  func (x *DashboardTabSummary) GetHealthiness() *HealthinessInfo {
   805  	if x != nil {
   806  		return x.Healthiness
   807  	}
   808  	return nil
   809  }
   810  
   811  func (x *DashboardTabSummary) GetLinkedIssues() []string {
   812  	if x != nil {
   813  		return x.LinkedIssues
   814  	}
   815  	return nil
   816  }
   817  
   818  func (x *DashboardTabSummary) GetAlertingData() *AlertingData {
   819  	if x != nil {
   820  		return x.AlertingData
   821  	}
   822  	return nil
   823  }
   824  
   825  // Deprecated: Do not use.
   826  func (x *DashboardTabSummary) GetAcceptablyFlaky() bool {
   827  	if x != nil {
   828  		return x.AcceptablyFlaky
   829  	}
   830  	return false
   831  }
   832  
   833  func (x *DashboardTabSummary) GetSummaryMetrics() *DashboardTabSummaryMetrics {
   834  	if x != nil {
   835  		return x.SummaryMetrics
   836  	}
   837  	return nil
   838  }
   839  
   840  // Most recent summary metrics for the tab calculated over columns (not individual tests)
   841  type DashboardTabSummaryMetrics struct {
   842  	state         protoimpl.MessageState
   843  	sizeCache     protoimpl.SizeCache
   844  	unknownFields protoimpl.UnknownFields
   845  
   846  	// Number of total columns analyzed by summarizer
   847  	CompletedColumns int32 `protobuf:"varint,1,opt,name=completed_columns,json=completedColumns,proto3" json:"completed_columns,omitempty"`
   848  	// Number of columns with all tests passing
   849  	PassingColumns int32 `protobuf:"varint,2,opt,name=passing_columns,json=passingColumns,proto3" json:"passing_columns,omitempty"`
   850  	// Number of ignored columns
   851  	IgnoredColumns int32 `protobuf:"varint,3,opt,name=ignored_columns,json=ignoredColumns,proto3" json:"ignored_columns,omitempty"`
   852  }
   853  
   854  func (x *DashboardTabSummaryMetrics) Reset() {
   855  	*x = DashboardTabSummaryMetrics{}
   856  	if protoimpl.UnsafeEnabled {
   857  		mi := &file_summary_proto_msgTypes[5]
   858  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   859  		ms.StoreMessageInfo(mi)
   860  	}
   861  }
   862  
   863  func (x *DashboardTabSummaryMetrics) String() string {
   864  	return protoimpl.X.MessageStringOf(x)
   865  }
   866  
   867  func (*DashboardTabSummaryMetrics) ProtoMessage() {}
   868  
   869  func (x *DashboardTabSummaryMetrics) ProtoReflect() protoreflect.Message {
   870  	mi := &file_summary_proto_msgTypes[5]
   871  	if protoimpl.UnsafeEnabled && x != nil {
   872  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   873  		if ms.LoadMessageInfo() == nil {
   874  			ms.StoreMessageInfo(mi)
   875  		}
   876  		return ms
   877  	}
   878  	return mi.MessageOf(x)
   879  }
   880  
   881  // Deprecated: Use DashboardTabSummaryMetrics.ProtoReflect.Descriptor instead.
   882  func (*DashboardTabSummaryMetrics) Descriptor() ([]byte, []int) {
   883  	return file_summary_proto_rawDescGZIP(), []int{5}
   884  }
   885  
   886  func (x *DashboardTabSummaryMetrics) GetCompletedColumns() int32 {
   887  	if x != nil {
   888  		return x.CompletedColumns
   889  	}
   890  	return 0
   891  }
   892  
   893  func (x *DashboardTabSummaryMetrics) GetPassingColumns() int32 {
   894  	if x != nil {
   895  		return x.PassingColumns
   896  	}
   897  	return 0
   898  }
   899  
   900  func (x *DashboardTabSummaryMetrics) GetIgnoredColumns() int32 {
   901  	if x != nil {
   902  		return x.IgnoredColumns
   903  	}
   904  	return 0
   905  }
   906  
   907  // Summary state of a dashboard.
   908  type DashboardSummary struct {
   909  	state         protoimpl.MessageState
   910  	sizeCache     protoimpl.SizeCache
   911  	unknownFields protoimpl.UnknownFields
   912  
   913  	// Summary of a dashboard tab; see config.proto.
   914  	TabSummaries []*DashboardTabSummary `protobuf:"bytes,1,rep,name=tab_summaries,json=tabSummaries,proto3" json:"tab_summaries,omitempty"`
   915  }
   916  
   917  func (x *DashboardSummary) Reset() {
   918  	*x = DashboardSummary{}
   919  	if protoimpl.UnsafeEnabled {
   920  		mi := &file_summary_proto_msgTypes[6]
   921  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   922  		ms.StoreMessageInfo(mi)
   923  	}
   924  }
   925  
   926  func (x *DashboardSummary) String() string {
   927  	return protoimpl.X.MessageStringOf(x)
   928  }
   929  
   930  func (*DashboardSummary) ProtoMessage() {}
   931  
   932  func (x *DashboardSummary) ProtoReflect() protoreflect.Message {
   933  	mi := &file_summary_proto_msgTypes[6]
   934  	if protoimpl.UnsafeEnabled && x != nil {
   935  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   936  		if ms.LoadMessageInfo() == nil {
   937  			ms.StoreMessageInfo(mi)
   938  		}
   939  		return ms
   940  	}
   941  	return mi.MessageOf(x)
   942  }
   943  
   944  // Deprecated: Use DashboardSummary.ProtoReflect.Descriptor instead.
   945  func (*DashboardSummary) Descriptor() ([]byte, []int) {
   946  	return file_summary_proto_rawDescGZIP(), []int{6}
   947  }
   948  
   949  func (x *DashboardSummary) GetTabSummaries() []*DashboardTabSummary {
   950  	if x != nil {
   951  		return x.TabSummaries
   952  	}
   953  	return nil
   954  }
   955  
   956  var File_summary_proto protoreflect.FileDescriptor
   957  
   958  var file_summary_proto_rawDesc = []byte{
   959  	0x0a, 0x0d, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
   960  	0x10, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72,
   961  	0x79, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
   962  	0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f,
   963  	0x74, 0x6f, 0x22, 0xe4, 0x07, 0x0a, 0x12, 0x46, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x65,
   964  	0x73, 0x74, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73,
   965  	0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
   966  	0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09,
   967  	0x74, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
   968  	0x08, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x66, 0x61, 0x69,
   969  	0x6c, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
   970  	0x52, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x25, 0x0a,
   971  	0x0e, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18,
   972  	0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73,
   973  	0x74, 0x61, 0x6d, 0x70, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x62, 0x75, 0x69,
   974  	0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x73,
   975  	0x73, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x61, 0x73, 0x73,
   976  	0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01,
   977  	0x52, 0x0d, 0x70, 0x61, 0x73, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12,
   978  	0x1d, 0x0a, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20,
   979  	0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x61, 0x69, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d,
   980  	0x0a, 0x0a, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x08, 0x20, 0x01,
   981  	0x28, 0x09, 0x52, 0x09, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x26, 0x0a,
   982  	0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x74, 0x65, 0x78, 0x74,
   983  	0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x6e,
   984  	0x6b, 0x54, 0x65, 0x78, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x75,
   985  	0x72, 0x6c, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62,
   986  	0x75, 0x69, 0x6c, 0x64, 0x55, 0x72, 0x6c, 0x54, 0x65, 0x78, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x66,
   987  	0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x0b,
   988  	0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x4d, 0x65, 0x73,
   989  	0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x5f, 0x62,
   990  	0x75, 0x67, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6c, 0x69, 0x6e, 0x6b, 0x65,
   991  	0x64, 0x42, 0x75, 0x67, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x65,
   992  	0x73, 0x74, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66,
   993  	0x61, 0x69, 0x6c, 0x54, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x31, 0x0a, 0x15, 0x6c,
   994  	0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f,
   995  	0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6c, 0x61, 0x74, 0x65,
   996  	0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x54, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x2f,
   997  	0x0a, 0x14, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x62, 0x75,
   998  	0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61,
   999  	0x74, 0x65, 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12,
  1000  	0x54, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0f, 0x20,
  1001  	0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73,
  1002  	0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x65,
  1003  	0x73, 0x74, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72,
  1004  	0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65,
  1005  	0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74,
  1006  	0x5f, 0x69, 0x64, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x6f, 0x74, 0x6c,
  1007  	0x69, 0x73, 0x74, 0x49, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f,
  1008  	0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x09, 0x52,
  1009  	0x0e, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12,
  1010  	0x71, 0x0a, 0x15, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
  1011  	0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d,
  1012  	0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72,
  1013  	0x79, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x6d,
  1014  	0x6d, 0x61, 0x72, 0x79, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
  1015  	0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x63,
  1016  	0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65,
  1017  	0x72, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73,
  1018  	0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
  1019  	0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
  1020  	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
  1021  	0x01, 0x1a, 0x46, 0x0a, 0x18, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
  1022  	0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
  1023  	0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
  1024  	0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
  1025  	0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbb, 0x05, 0x0a, 0x08, 0x54, 0x65,
  1026  	0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61,
  1027  	0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69,
  1028  	0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x14, 0x74, 0x6f, 0x74,
  1029  	0x61, 0x6c, 0x5f, 0x6e, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x5f, 0x72, 0x75, 0x6e,
  1030  	0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4e, 0x6f,
  1031  	0x6e, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x70, 0x61,
  1032  	0x73, 0x73, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x5f, 0x72,
  1033  	0x75, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x70, 0x61, 0x73, 0x73, 0x65,
  1034  	0x64, 0x4e, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x31, 0x0a,
  1035  	0x15, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x72,
  1036  	0x61, 0x5f, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x66, 0x61,
  1037  	0x69, 0x6c, 0x65, 0x64, 0x4e, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x52, 0x75, 0x6e, 0x73,
  1038  	0x12, 0x2a, 0x0a, 0x11, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x66, 0x72, 0x61,
  1039  	0x5f, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x66, 0x61, 0x69,
  1040  	0x6c, 0x65, 0x64, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x31, 0x0a, 0x15,
  1041  	0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x75, 0x6e, 0x73, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f,
  1042  	0x69, 0x6e, 0x66, 0x72, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x74, 0x6f, 0x74,
  1043  	0x61, 0x6c, 0x52, 0x75, 0x6e, 0x73, 0x57, 0x69, 0x74, 0x68, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x12,
  1044  	0x1d, 0x0a, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x07, 0x20,
  1045  	0x01, 0x28, 0x05, 0x52, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x1c,
  1046  	0x0a, 0x09, 0x66, 0x6c, 0x61, 0x6b, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28,
  1047  	0x02, 0x52, 0x09, 0x66, 0x6c, 0x61, 0x6b, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x2d, 0x0a, 0x12,
  1048  	0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x66, 0x6c, 0x61, 0x6b, 0x69, 0x6e, 0x65,
  1049  	0x73, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x02, 0x52, 0x11, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f,
  1050  	0x75, 0x73, 0x46, 0x6c, 0x61, 0x6b, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x5b, 0x0a, 0x19, 0x63,
  1051  	0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f,
  1052  	0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20,
  1053  	0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72,
  1054  	0x79, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x54, 0x72, 0x65, 0x6e, 0x64,
  1055  	0x52, 0x16, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x4c, 0x61, 0x73, 0x74,
  1056  	0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x54, 0x0a, 0x0e, 0x69, 0x6e, 0x66, 0x72,
  1057  	0x61, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b,
  1058  	0x32, 0x2d, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x75, 0x6d, 0x6d,
  1059  	0x61, 0x72, 0x79, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x49, 0x6e, 0x66,
  1060  	0x72, 0x61, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
  1061  	0x0d, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x1a, 0x40,
  1062  	0x0a, 0x12, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x45,
  1063  	0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
  1064  	0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
  1065  	0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
  1066  	0x22, 0x35, 0x0a, 0x05, 0x54, 0x72, 0x65, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b,
  1067  	0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x5f, 0x43, 0x48, 0x41,
  1068  	0x4e, 0x47, 0x45, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x55, 0x50, 0x10, 0x02, 0x12, 0x08, 0x0a,
  1069  	0x04, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x03, 0x22, 0xff, 0x01, 0x0a, 0x0f, 0x48, 0x65, 0x61, 0x6c,
  1070  	0x74, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x30, 0x0a, 0x05, 0x73,
  1071  	0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
  1072  	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
  1073  	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a,
  1074  	0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
  1075  	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
  1076  	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x74,
  1077  	0x65, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x65, 0x73,
  1078  	0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x2e, 0x54, 0x65,
  1079  	0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, 0x12, 0x2b, 0x0a,
  1080  	0x11, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x6b, 0x69, 0x6e, 0x65,
  1081  	0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67,
  1082  	0x65, 0x46, 0x6c, 0x61, 0x6b, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72,
  1083  	0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x66, 0x6c, 0x61, 0x6b, 0x69, 0x6e, 0x65, 0x73, 0x73,
  1084  	0x18, 0x05, 0x20, 0x03, 0x28, 0x02, 0x52, 0x11, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73,
  1085  	0x46, 0x6c, 0x61, 0x6b, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x22, 0x52, 0x0a, 0x0c, 0x41, 0x6c, 0x65,
  1086  	0x72, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x0f, 0x6c, 0x61, 0x73,
  1087  	0x74, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
  1088  	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
  1089  	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d,
  1090  	0x6c, 0x61, 0x73, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x9f, 0x07,
  1091  	0x0a, 0x13, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x53, 0x75,
  1092  	0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61,
  1093  	0x72, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64,
  1094  	0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x12,
  1095  	0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x61, 0x62, 0x5f, 0x6e, 0x61,
  1096  	0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f,
  1097  	0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c,
  1098  	0x65, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x65, 0x72, 0x74,
  1099  	0x12, 0x5a, 0x0a, 0x16, 0x66, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x65, 0x73, 0x74,
  1100  	0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
  1101  	0x32, 0x24, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x75, 0x6d, 0x6d,
  1102  	0x61, 0x72, 0x79, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x65, 0x73, 0x74, 0x53,
  1103  	0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x14, 0x66, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x54,
  1104  	0x65, 0x73, 0x74, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15,
  1105  	0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65,
  1106  	0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x13, 0x6c, 0x61, 0x73,
  1107  	0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
  1108  	0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
  1109  	0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x56, 0x0a, 0x0e, 0x6f, 0x76, 0x65, 0x72,
  1110  	0x61, 0x6c, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e,
  1111  	0x32, 0x2f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x75, 0x6d, 0x6d,
  1112  	0x61, 0x72, 0x79, 0x2e, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62,
  1113  	0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75,
  1114  	0x73, 0x52, 0x0d, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
  1115  	0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x65, 0x65, 0x6e,
  1116  	0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x47, 0x72,
  1117  	0x65, 0x65, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x5f,
  1118  	0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52,
  1119  	0x10, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
  1120  	0x70, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x75, 0x67, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0a, 0x20, 0x01,
  1121  	0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x43, 0x0a, 0x0b, 0x68, 0x65,
  1122  	0x61, 0x6c, 0x74, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32,
  1123  	0x21, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x75, 0x6d, 0x6d, 0x61,
  1124  	0x72, 0x79, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x49, 0x6e,
  1125  	0x66, 0x6f, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x12,
  1126  	0x23, 0x0a, 0x0d, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73,
  1127  	0x18, 0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x49, 0x73,
  1128  	0x73, 0x75, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x0d, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67,
  1129  	0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65,
  1130  	0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x2e, 0x41,
  1131  	0x6c, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x61, 0x6c, 0x65,
  1132  	0x72, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x10, 0x61, 0x63, 0x63,
  1133  	0x65, 0x70, 0x74, 0x61, 0x62, 0x6c, 0x79, 0x5f, 0x66, 0x6c, 0x61, 0x6b, 0x79, 0x18, 0x0f, 0x20,
  1134  	0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61,
  1135  	0x62, 0x6c, 0x79, 0x46, 0x6c, 0x61, 0x6b, 0x79, 0x12, 0x55, 0x0a, 0x0f, 0x73, 0x75, 0x6d, 0x6d,
  1136  	0x61, 0x72, 0x79, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28,
  1137  	0x0b, 0x32, 0x2c, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x75, 0x6d,
  1138  	0x6d, 0x61, 0x72, 0x79, 0x2e, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x61,
  1139  	0x62, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52,
  1140  	0x0e, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22,
  1141  	0x78, 0x0a, 0x09, 0x54, 0x61, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07,
  1142  	0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b,
  1143  	0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x53, 0x53, 0x10, 0x02,
  1144  	0x12, 0x08, 0x0a, 0x04, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4c,
  1145  	0x41, 0x4b, 0x59, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x54, 0x41, 0x4c, 0x45, 0x10, 0x05,
  1146  	0x12, 0x0a, 0x0a, 0x06, 0x42, 0x52, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07,
  1147  	0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x43, 0x43,
  1148  	0x45, 0x50, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x0b, 0x10, 0x0c, 0x22,
  1149  	0x9b, 0x01, 0x0a, 0x1a, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62,
  1150  	0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x2b,
  1151  	0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x75,
  1152  	0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x6c,
  1153  	0x65, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x70,
  1154  	0x61, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x02,
  1155  	0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x70, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6c,
  1156  	0x75, 0x6d, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x5f,
  1157  	0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x69,
  1158  	0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0x5e, 0x0a,
  1159  	0x10, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72,
  1160  	0x79, 0x12, 0x4a, 0x0a, 0x0d, 0x74, 0x61, 0x62, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69,
  1161  	0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67,
  1162  	0x72, 0x69, 0x64, 0x2e, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x2e, 0x44, 0x61, 0x73, 0x68,
  1163  	0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52,
  1164  	0x0c, 0x74, 0x61, 0x62, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x42, 0x34, 0x5a,
  1165  	0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x47, 0x6f, 0x6f, 0x67,
  1166  	0x6c, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f,
  1167  	0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2f, 0x70, 0x62, 0x2f, 0x73, 0x75, 0x6d, 0x6d,
  1168  	0x61, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
  1169  }
  1170  
  1171  var (
  1172  	file_summary_proto_rawDescOnce sync.Once
  1173  	file_summary_proto_rawDescData = file_summary_proto_rawDesc
  1174  )
  1175  
  1176  func file_summary_proto_rawDescGZIP() []byte {
  1177  	file_summary_proto_rawDescOnce.Do(func() {
  1178  		file_summary_proto_rawDescData = protoimpl.X.CompressGZIP(file_summary_proto_rawDescData)
  1179  	})
  1180  	return file_summary_proto_rawDescData
  1181  }
  1182  
  1183  var file_summary_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
  1184  var file_summary_proto_msgTypes = make([]protoimpl.MessageInfo, 10)
  1185  var file_summary_proto_goTypes = []interface{}{
  1186  	(TestInfo_Trend)(0),                // 0: testgrid.summary.TestInfo.Trend
  1187  	(DashboardTabSummary_TabStatus)(0), // 1: testgrid.summary.DashboardTabSummary.TabStatus
  1188  	(*FailingTestSummary)(nil),         // 2: testgrid.summary.FailingTestSummary
  1189  	(*TestInfo)(nil),                   // 3: testgrid.summary.TestInfo
  1190  	(*HealthinessInfo)(nil),            // 4: testgrid.summary.HealthinessInfo
  1191  	(*AlertingData)(nil),               // 5: testgrid.summary.AlertingData
  1192  	(*DashboardTabSummary)(nil),        // 6: testgrid.summary.DashboardTabSummary
  1193  	(*DashboardTabSummaryMetrics)(nil), // 7: testgrid.summary.DashboardTabSummaryMetrics
  1194  	(*DashboardSummary)(nil),           // 8: testgrid.summary.DashboardSummary
  1195  	nil,                                // 9: testgrid.summary.FailingTestSummary.PropertiesEntry
  1196  	nil,                                // 10: testgrid.summary.FailingTestSummary.CustomColumnHeadersEntry
  1197  	nil,                                // 11: testgrid.summary.TestInfo.InfraFailuresEntry
  1198  	(*timestamppb.Timestamp)(nil),      // 12: google.protobuf.Timestamp
  1199  }
  1200  var file_summary_proto_depIdxs = []int32{
  1201  	9,  // 0: testgrid.summary.FailingTestSummary.properties:type_name -> testgrid.summary.FailingTestSummary.PropertiesEntry
  1202  	10, // 1: testgrid.summary.FailingTestSummary.custom_column_headers:type_name -> testgrid.summary.FailingTestSummary.CustomColumnHeadersEntry
  1203  	0,  // 2: testgrid.summary.TestInfo.change_from_last_interval:type_name -> testgrid.summary.TestInfo.Trend
  1204  	11, // 3: testgrid.summary.TestInfo.infra_failures:type_name -> testgrid.summary.TestInfo.InfraFailuresEntry
  1205  	12, // 4: testgrid.summary.HealthinessInfo.start:type_name -> google.protobuf.Timestamp
  1206  	12, // 5: testgrid.summary.HealthinessInfo.end:type_name -> google.protobuf.Timestamp
  1207  	3,  // 6: testgrid.summary.HealthinessInfo.tests:type_name -> testgrid.summary.TestInfo
  1208  	12, // 7: testgrid.summary.AlertingData.last_email_time:type_name -> google.protobuf.Timestamp
  1209  	2,  // 8: testgrid.summary.DashboardTabSummary.failing_test_summaries:type_name -> testgrid.summary.FailingTestSummary
  1210  	1,  // 9: testgrid.summary.DashboardTabSummary.overall_status:type_name -> testgrid.summary.DashboardTabSummary.TabStatus
  1211  	4,  // 10: testgrid.summary.DashboardTabSummary.healthiness:type_name -> testgrid.summary.HealthinessInfo
  1212  	5,  // 11: testgrid.summary.DashboardTabSummary.alerting_data:type_name -> testgrid.summary.AlertingData
  1213  	7,  // 12: testgrid.summary.DashboardTabSummary.summary_metrics:type_name -> testgrid.summary.DashboardTabSummaryMetrics
  1214  	6,  // 13: testgrid.summary.DashboardSummary.tab_summaries:type_name -> testgrid.summary.DashboardTabSummary
  1215  	14, // [14:14] is the sub-list for method output_type
  1216  	14, // [14:14] is the sub-list for method input_type
  1217  	14, // [14:14] is the sub-list for extension type_name
  1218  	14, // [14:14] is the sub-list for extension extendee
  1219  	0,  // [0:14] is the sub-list for field type_name
  1220  }
  1221  
  1222  func init() { file_summary_proto_init() }
  1223  func file_summary_proto_init() {
  1224  	if File_summary_proto != nil {
  1225  		return
  1226  	}
  1227  	if !protoimpl.UnsafeEnabled {
  1228  		file_summary_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
  1229  			switch v := v.(*FailingTestSummary); i {
  1230  			case 0:
  1231  				return &v.state
  1232  			case 1:
  1233  				return &v.sizeCache
  1234  			case 2:
  1235  				return &v.unknownFields
  1236  			default:
  1237  				return nil
  1238  			}
  1239  		}
  1240  		file_summary_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
  1241  			switch v := v.(*TestInfo); i {
  1242  			case 0:
  1243  				return &v.state
  1244  			case 1:
  1245  				return &v.sizeCache
  1246  			case 2:
  1247  				return &v.unknownFields
  1248  			default:
  1249  				return nil
  1250  			}
  1251  		}
  1252  		file_summary_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
  1253  			switch v := v.(*HealthinessInfo); i {
  1254  			case 0:
  1255  				return &v.state
  1256  			case 1:
  1257  				return &v.sizeCache
  1258  			case 2:
  1259  				return &v.unknownFields
  1260  			default:
  1261  				return nil
  1262  			}
  1263  		}
  1264  		file_summary_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
  1265  			switch v := v.(*AlertingData); i {
  1266  			case 0:
  1267  				return &v.state
  1268  			case 1:
  1269  				return &v.sizeCache
  1270  			case 2:
  1271  				return &v.unknownFields
  1272  			default:
  1273  				return nil
  1274  			}
  1275  		}
  1276  		file_summary_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
  1277  			switch v := v.(*DashboardTabSummary); i {
  1278  			case 0:
  1279  				return &v.state
  1280  			case 1:
  1281  				return &v.sizeCache
  1282  			case 2:
  1283  				return &v.unknownFields
  1284  			default:
  1285  				return nil
  1286  			}
  1287  		}
  1288  		file_summary_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
  1289  			switch v := v.(*DashboardTabSummaryMetrics); i {
  1290  			case 0:
  1291  				return &v.state
  1292  			case 1:
  1293  				return &v.sizeCache
  1294  			case 2:
  1295  				return &v.unknownFields
  1296  			default:
  1297  				return nil
  1298  			}
  1299  		}
  1300  		file_summary_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
  1301  			switch v := v.(*DashboardSummary); i {
  1302  			case 0:
  1303  				return &v.state
  1304  			case 1:
  1305  				return &v.sizeCache
  1306  			case 2:
  1307  				return &v.unknownFields
  1308  			default:
  1309  				return nil
  1310  			}
  1311  		}
  1312  	}
  1313  	type x struct{}
  1314  	out := protoimpl.TypeBuilder{
  1315  		File: protoimpl.DescBuilder{
  1316  			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
  1317  			RawDescriptor: file_summary_proto_rawDesc,
  1318  			NumEnums:      2,
  1319  			NumMessages:   10,
  1320  			NumExtensions: 0,
  1321  			NumServices:   0,
  1322  		},
  1323  		GoTypes:           file_summary_proto_goTypes,
  1324  		DependencyIndexes: file_summary_proto_depIdxs,
  1325  		EnumInfos:         file_summary_proto_enumTypes,
  1326  		MessageInfos:      file_summary_proto_msgTypes,
  1327  	}.Build()
  1328  	File_summary_proto = out.File
  1329  	file_summary_proto_rawDesc = nil
  1330  	file_summary_proto_goTypes = nil
  1331  	file_summary_proto_depIdxs = nil
  1332  }