pb/state/state.pb.go (1,266 lines of code) (raw):
/*
Copyright The TestGrid Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
// Backing state for a test results table of a TestGrid dashboard tab.
// Grid is the top-level message; updated and stored by the updater and
// tabulator.
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.0
// protoc v3.21.1
// source: state.proto
package state
import (
config "github.com/GoogleCloudPlatform/testgrid/pb/config"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type Property struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Property map[string]string `protobuf:"bytes,1,rep,name=property,proto3" json:"property,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}
func (x *Property) Reset() {
*x = Property{}
if protoimpl.UnsafeEnabled {
mi := &file_state_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Property) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Property) ProtoMessage() {}
func (x *Property) ProtoReflect() protoreflect.Message {
mi := &file_state_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Property.ProtoReflect.Descriptor instead.
func (*Property) Descriptor() ([]byte, []int) {
return file_state_proto_rawDescGZIP(), []int{0}
}
func (x *Property) GetProperty() map[string]string {
if x != nil {
return x.Property
}
return nil
}
// A metric and its values for each test cycle.
type Metric struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Name of metric, such as duration
// Sparse encoding of values. Indices is a list of pairs of <index, count>
// that details columns with metric values. So given:
// Indices: [0, 2, 6, 4]
// Values: [0.1,0.2,6.1,6.2,6.3,6.4]
// Decoded 12-value equivalent is:
// [0.1, 0.2, nil, nil, nil, nil, 6.1, 6.2, 6.3, 6.4, nil, nil, ...]
Indices []int32 `protobuf:"varint,2,rep,packed,name=indices,proto3" json:"indices,omitempty"` // n=index of first value, n+1=count of filled values
Values []float64 `protobuf:"fixed64,3,rep,packed,name=values,proto3" json:"values,omitempty"` // only present for columns with a metric value
}
func (x *Metric) Reset() {
*x = Metric{}
if protoimpl.UnsafeEnabled {
mi := &file_state_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Metric) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Metric) ProtoMessage() {}
func (x *Metric) ProtoReflect() protoreflect.Message {
mi := &file_state_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Metric.ProtoReflect.Descriptor instead.
func (*Metric) Descriptor() ([]byte, []int) {
return file_state_proto_rawDescGZIP(), []int{1}
}
func (x *Metric) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *Metric) GetIndices() []int32 {
if x != nil {
return x.Indices
}
return nil
}
func (x *Metric) GetValues() []float64 {
if x != nil {
return x.Values
}
return nil
}
type UpdatePhaseData struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The name for a part of the update cycle.
PhaseName string `protobuf:"bytes,1,opt,name=phase_name,json=phaseName,proto3" json:"phase_name,omitempty"`
// Time taken for a part of the update cycle, in seconds.
PhaseSeconds float64 `protobuf:"fixed64,2,opt,name=phase_seconds,json=phaseSeconds,proto3" json:"phase_seconds,omitempty"`
}
func (x *UpdatePhaseData) Reset() {
*x = UpdatePhaseData{}
if protoimpl.UnsafeEnabled {
mi := &file_state_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UpdatePhaseData) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UpdatePhaseData) ProtoMessage() {}
func (x *UpdatePhaseData) ProtoReflect() protoreflect.Message {
mi := &file_state_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use UpdatePhaseData.ProtoReflect.Descriptor instead.
func (*UpdatePhaseData) Descriptor() ([]byte, []int) {
return file_state_proto_rawDescGZIP(), []int{2}
}
func (x *UpdatePhaseData) GetPhaseName() string {
if x != nil {
return x.PhaseName
}
return ""
}
func (x *UpdatePhaseData) GetPhaseSeconds() float64 {
if x != nil {
return x.PhaseSeconds
}
return 0
}
// Info on time taken to update test results during the last update cycle.
type UpdateInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Metrics for how long parts of the update cycle take.
UpdatePhaseData []*UpdatePhaseData `protobuf:"bytes,1,rep,name=update_phase_data,json=updatePhaseData,proto3" json:"update_phase_data,omitempty"`
}
func (x *UpdateInfo) Reset() {
*x = UpdateInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_state_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UpdateInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UpdateInfo) ProtoMessage() {}
func (x *UpdateInfo) ProtoReflect() protoreflect.Message {
mi := &file_state_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use UpdateInfo.ProtoReflect.Descriptor instead.
func (*UpdateInfo) Descriptor() ([]byte, []int) {
return file_state_proto_rawDescGZIP(), []int{3}
}
func (x *UpdateInfo) GetUpdatePhaseData() []*UpdatePhaseData {
if x != nil {
return x.UpdatePhaseData
}
return nil
}
// Info on a failing test row about the failure.
type AlertInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Number of results that have failed.
FailCount int32 `protobuf:"varint,1,opt,name=fail_count,json=failCount,proto3" json:"fail_count,omitempty"`
// The build ID the test first failed at.
FailBuildId string `protobuf:"bytes,2,opt,name=fail_build_id,json=failBuildId,proto3" json:"fail_build_id,omitempty"`
// The time the test first failed at.
FailTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=fail_time,json=failTime,proto3" json:"fail_time,omitempty"`
// The test ID for the first test failure.
FailTestId string `protobuf:"bytes,4,opt,name=fail_test_id,json=failTestId,proto3" json:"fail_test_id,omitempty"`
// The build ID the test last passed at.
PassBuildId string `protobuf:"bytes,5,opt,name=pass_build_id,json=passBuildId,proto3" json:"pass_build_id,omitempty"`
// The time the test last passed at.
PassTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=pass_time,json=passTime,proto3" json:"pass_time,omitempty"`
// A snippet explaining the failure.
FailureMessage string `protobuf:"bytes,7,opt,name=failure_message,json=failureMessage,proto3" json:"failure_message,omitempty"`
// Link to search for build changes, internally a code-search link.
BuildLink string `protobuf:"bytes,8,opt,name=build_link,json=buildLink,proto3" json:"build_link,omitempty"`
// Text for option to search for build changes.
BuildLinkText string `protobuf:"bytes,9,opt,name=build_link_text,json=buildLinkText,proto3" json:"build_link_text,omitempty"`
// Text to display for link to search for build changes.
BuildUrlText string `protobuf:"bytes,10,opt,name=build_url_text,json=buildUrlText,proto3" json:"build_url_text,omitempty"`
// The build ID for the latest test failure. (Does not indicate the failure is
// 'over', just the latest test failure we found.)
LatestFailBuildId string `protobuf:"bytes,11,opt,name=latest_fail_build_id,json=latestFailBuildId,proto3" json:"latest_fail_build_id,omitempty"`
// The test ID for the latest test failure.
LatestFailTestId string `protobuf:"bytes,14,opt,name=latest_fail_test_id,json=latestFailTestId,proto3" json:"latest_fail_test_id,omitempty"`
// Maps (property name):(property value) for arbitrary alert properties.
Properties map[string]string `protobuf:"bytes,12,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
// A list of IDs for issue hotlists related to this failure.
HotlistIds []string `protobuf:"bytes,13,rep,name=hotlist_ids,json=hotlistIds,proto3" json:"hotlist_ids,omitempty"`
// Dynamic email list, route email alerts to these instead of the configured
// defaults.
EmailAddresses []string `protobuf:"bytes,15,rep,name=email_addresses,json=emailAddresses,proto3" json:"email_addresses,omitempty"`
// Maps (custom column headers name):(custom column headers value) for arbitrary alert properties.
CustomColumnHeaders map[string]string `protobuf:"bytes,16,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"`
}
func (x *AlertInfo) Reset() {
*x = AlertInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_state_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AlertInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AlertInfo) ProtoMessage() {}
func (x *AlertInfo) ProtoReflect() protoreflect.Message {
mi := &file_state_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use AlertInfo.ProtoReflect.Descriptor instead.
func (*AlertInfo) Descriptor() ([]byte, []int) {
return file_state_proto_rawDescGZIP(), []int{4}
}
func (x *AlertInfo) GetFailCount() int32 {
if x != nil {
return x.FailCount
}
return 0
}
func (x *AlertInfo) GetFailBuildId() string {
if x != nil {
return x.FailBuildId
}
return ""
}
func (x *AlertInfo) GetFailTime() *timestamppb.Timestamp {
if x != nil {
return x.FailTime
}
return nil
}
func (x *AlertInfo) GetFailTestId() string {
if x != nil {
return x.FailTestId
}
return ""
}
func (x *AlertInfo) GetPassBuildId() string {
if x != nil {
return x.PassBuildId
}
return ""
}
func (x *AlertInfo) GetPassTime() *timestamppb.Timestamp {
if x != nil {
return x.PassTime
}
return nil
}
func (x *AlertInfo) GetFailureMessage() string {
if x != nil {
return x.FailureMessage
}
return ""
}
func (x *AlertInfo) GetBuildLink() string {
if x != nil {
return x.BuildLink
}
return ""
}
func (x *AlertInfo) GetBuildLinkText() string {
if x != nil {
return x.BuildLinkText
}
return ""
}
func (x *AlertInfo) GetBuildUrlText() string {
if x != nil {
return x.BuildUrlText
}
return ""
}
func (x *AlertInfo) GetLatestFailBuildId() string {
if x != nil {
return x.LatestFailBuildId
}
return ""
}
func (x *AlertInfo) GetLatestFailTestId() string {
if x != nil {
return x.LatestFailTestId
}
return ""
}
func (x *AlertInfo) GetProperties() map[string]string {
if x != nil {
return x.Properties
}
return nil
}
func (x *AlertInfo) GetHotlistIds() []string {
if x != nil {
return x.HotlistIds
}
return nil
}
func (x *AlertInfo) GetEmailAddresses() []string {
if x != nil {
return x.EmailAddresses
}
return nil
}
func (x *AlertInfo) GetCustomColumnHeaders() map[string]string {
if x != nil {
return x.CustomColumnHeaders
}
return nil
}
// Info on default test metadata for a dashboard tab.
type TestMetadata struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Name of the test with associated test metadata.
TestName string `protobuf:"bytes,1,opt,name=test_name,json=testName,proto3" json:"test_name,omitempty"`
// Default bug component.
BugComponent int32 `protobuf:"varint,2,opt,name=bug_component,json=bugComponent,proto3" json:"bug_component,omitempty"`
// Default owner.
Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"`
// Default list of cc's.
Cc []string `protobuf:"bytes,4,rep,name=cc,proto3" json:"cc,omitempty"`
// When present, only file a bug for failed tests with same error type.
// Otherwise, always file a bug.
ErrorType string `protobuf:"bytes,5,opt,name=error_type,json=errorType,proto3" json:"error_type,omitempty"`
}
func (x *TestMetadata) Reset() {
*x = TestMetadata{}
if protoimpl.UnsafeEnabled {
mi := &file_state_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TestMetadata) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TestMetadata) ProtoMessage() {}
func (x *TestMetadata) ProtoReflect() protoreflect.Message {
mi := &file_state_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use TestMetadata.ProtoReflect.Descriptor instead.
func (*TestMetadata) Descriptor() ([]byte, []int) {
return file_state_proto_rawDescGZIP(), []int{5}
}
func (x *TestMetadata) GetTestName() string {
if x != nil {
return x.TestName
}
return ""
}
func (x *TestMetadata) GetBugComponent() int32 {
if x != nil {
return x.BugComponent
}
return 0
}
func (x *TestMetadata) GetOwner() string {
if x != nil {
return x.Owner
}
return ""
}
func (x *TestMetadata) GetCc() []string {
if x != nil {
return x.Cc
}
return nil
}
func (x *TestMetadata) GetErrorType() string {
if x != nil {
return x.ErrorType
}
return ""
}
// TestGrid column headers. Does not contain the individual cells.
type Column struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Unique instance of the job, typically BUILD_NUMBER from prow or a guid
Build string `protobuf:"bytes,1,opt,name=build,proto3" json:"build,omitempty"`
// Name associated with the column (such as the run/invocation ID).No two
// columns should have the same build_id and name. The name field allows the
// display of multiple columns with the same build_id.
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
// Milliseconds since start of epoch (python time.time() * 1000)
// TODO(#683): Use a timestamp, not this double
Started float64 `protobuf:"fixed64,3,opt,name=started,proto3" json:"started,omitempty"`
// Additional custom headers like commit, image used, etc.
Extra []string `protobuf:"bytes,4,rep,name=extra,proto3" json:"extra,omitempty"`
// Custom hotlist ids.
HotlistIds string `protobuf:"bytes,5,opt,name=hotlist_ids,json=hotlistIds,proto3" json:"hotlist_ids,omitempty"`
// An optional hint for the updater.
Hint string `protobuf:"bytes,6,opt,name=hint,proto3" json:"hint,omitempty"`
// Dynamic email list, route email alerts to these instead of the configured
// defaults.
EmailAddresses []string `protobuf:"bytes,7,rep,name=email_addresses,json=emailAddresses,proto3" json:"email_addresses,omitempty"`
// Status totals for the column.
// Only written in tab state, if a broken threshold is defined for columns.
Stats *Stats `protobuf:"bytes,8,opt,name=stats,proto3" json:"stats,omitempty"`
}
func (x *Column) Reset() {
*x = Column{}
if protoimpl.UnsafeEnabled {
mi := &file_state_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Column) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Column) ProtoMessage() {}
func (x *Column) ProtoReflect() protoreflect.Message {
mi := &file_state_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Column.ProtoReflect.Descriptor instead.
func (*Column) Descriptor() ([]byte, []int) {
return file_state_proto_rawDescGZIP(), []int{6}
}
func (x *Column) GetBuild() string {
if x != nil {
return x.Build
}
return ""
}
func (x *Column) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *Column) GetStarted() float64 {
if x != nil {
return x.Started
}
return 0
}
func (x *Column) GetExtra() []string {
if x != nil {
return x.Extra
}
return nil
}
func (x *Column) GetHotlistIds() string {
if x != nil {
return x.HotlistIds
}
return ""
}
func (x *Column) GetHint() string {
if x != nil {
return x.Hint
}
return ""
}
func (x *Column) GetEmailAddresses() []string {
if x != nil {
return x.EmailAddresses
}
return nil
}
func (x *Column) GetStats() *Stats {
if x != nil {
return x.Stats
}
return nil
}
type Stats struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FailCount int32 `protobuf:"varint,1,opt,name=fail_count,json=failCount,proto3" json:"fail_count,omitempty"`
PassCount int32 `protobuf:"varint,2,opt,name=pass_count,json=passCount,proto3" json:"pass_count,omitempty"`
TotalCount int32 `protobuf:"varint,3,opt,name=total_count,json=totalCount,proto3" json:"total_count,omitempty"`
// True if this column has any in-progress runs.
Pending bool `protobuf:"varint,4,opt,name=pending,proto3" json:"pending,omitempty"`
// True if a broken threshold is defined, and this column's fail/total ratio
// exceeds it.
Broken bool `protobuf:"varint,5,opt,name=broken,proto3" json:"broken,omitempty"`
}
func (x *Stats) Reset() {
*x = Stats{}
if protoimpl.UnsafeEnabled {
mi := &file_state_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Stats) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Stats) ProtoMessage() {}
func (x *Stats) ProtoReflect() protoreflect.Message {
mi := &file_state_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Stats.ProtoReflect.Descriptor instead.
func (*Stats) Descriptor() ([]byte, []int) {
return file_state_proto_rawDescGZIP(), []int{7}
}
func (x *Stats) GetFailCount() int32 {
if x != nil {
return x.FailCount
}
return 0
}
func (x *Stats) GetPassCount() int32 {
if x != nil {
return x.PassCount
}
return 0
}
func (x *Stats) GetTotalCount() int32 {
if x != nil {
return x.TotalCount
}
return 0
}
func (x *Stats) GetPending() bool {
if x != nil {
return x.Pending
}
return false
}
func (x *Stats) GetBroken() bool {
if x != nil {
return x.Broken
}
return false
}
// TestGrid rows
type Row struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Display name, which might process id to append/filter info.
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// raw id for the row, such as the bazel target or golang package.
Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
// Results for this row, run-length encoded to reduce size/improve
// performance. Thus (encoded -> decoded equivalent):
// [0, 3, 5, 4] -> [0, 0, 0, 5, 5, 5, 5]
// [5, 1] -> [5]
// [1, 5] -> [1, 1, 1, 1, 1]
// The decoded values are Result enums
Results []int32 `protobuf:"varint,3,rep,packed,name=results,proto3" json:"results,omitempty"`
// Test IDs for each test result in this test case.
// Must be present on every column, regardless of status.
CellIds []string `protobuf:"bytes,4,rep,name=cell_ids,json=cellIds,proto3" json:"cell_ids,omitempty"`
// Short description of the result, displayed on mouseover.
// Present for any column with a non-empty status (not NO_RESULT).
Messages []string `protobuf:"bytes,5,rep,name=messages,proto3" json:"messages,omitempty"`
// Names of metrics associated with this test case. Stored separate from
// metric info (which may be omitted).
Metric []string `protobuf:"bytes,7,rep,name=metric,proto3" json:"metric,omitempty"`
Metrics []*Metric `protobuf:"bytes,8,rep,name=metrics,proto3" json:"metrics,omitempty"` // Numerical performance/timing data, etc.
// Short string to place inside the cell (F for fail, etc)
// Present for any column with a non-empty status (not NO_RESULT).
Icons []string `protobuf:"bytes,9,rep,name=icons,proto3" json:"icons,omitempty"`
// IDs for issues associated with this row.
Issues []string `protobuf:"bytes,10,rep,name=issues,proto3" json:"issues,omitempty"`
// An alert for the failure if there's a recent failure for this row.
AlertInfo *AlertInfo `protobuf:"bytes,11,opt,name=alert_info,json=alertInfo,proto3" json:"alert_info,omitempty"`
// Values of a user-defined property found in cells for this row.
// TODO: Fold this into `properties` field.
UserProperty []string `protobuf:"bytes,12,rep,name=user_property,json=userProperty,proto3" json:"user_property,omitempty"`
// General key-value pairs associated with cells in this row.
// Present for any column with a non-empty status (not NO_RESULT).
Properties []*Property `protobuf:"bytes,13,rep,name=properties,proto3" json:"properties,omitempty"`
}
func (x *Row) Reset() {
*x = Row{}
if protoimpl.UnsafeEnabled {
mi := &file_state_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Row) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Row) ProtoMessage() {}
func (x *Row) ProtoReflect() protoreflect.Message {
mi := &file_state_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Row.ProtoReflect.Descriptor instead.
func (*Row) Descriptor() ([]byte, []int) {
return file_state_proto_rawDescGZIP(), []int{8}
}
func (x *Row) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *Row) GetId() string {
if x != nil {
return x.Id
}
return ""
}
func (x *Row) GetResults() []int32 {
if x != nil {
return x.Results
}
return nil
}
func (x *Row) GetCellIds() []string {
if x != nil {
return x.CellIds
}
return nil
}
func (x *Row) GetMessages() []string {
if x != nil {
return x.Messages
}
return nil
}
func (x *Row) GetMetric() []string {
if x != nil {
return x.Metric
}
return nil
}
func (x *Row) GetMetrics() []*Metric {
if x != nil {
return x.Metrics
}
return nil
}
func (x *Row) GetIcons() []string {
if x != nil {
return x.Icons
}
return nil
}
func (x *Row) GetIssues() []string {
if x != nil {
return x.Issues
}
return nil
}
func (x *Row) GetAlertInfo() *AlertInfo {
if x != nil {
return x.AlertInfo
}
return nil
}
func (x *Row) GetUserProperty() []string {
if x != nil {
return x.UserProperty
}
return nil
}
func (x *Row) GetProperties() []*Property {
if x != nil {
return x.Properties
}
return nil
}
// A single table of test results backing a dashboard tab.
type Grid struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// A cycle of test results, not including the results. In the TestGrid client,
// the cycles define the columns.
Columns []*Column `protobuf:"bytes,1,rep,name=columns,proto3" json:"columns,omitempty"`
// A test case with test results. In the TestGrid client, the cases define the
// rows (and the results define the individual cells).
Rows []*Row `protobuf:"bytes,2,rep,name=rows,proto3" json:"rows,omitempty"`
// The latest configuration used to generate this test group.
Config *config.TestGroup `protobuf:"bytes,4,opt,name=config,proto3" json:"config,omitempty"`
// Seconds since epoch for last time this cycle was updated.
LastTimeUpdated float64 `protobuf:"fixed64,6,opt,name=last_time_updated,json=lastTimeUpdated,proto3" json:"last_time_updated,omitempty"`
// Stored info on previous timing for parts of the update cycle.
UpdateInfo []*UpdateInfo `protobuf:"bytes,8,rep,name=update_info,json=updateInfo,proto3" json:"update_info,omitempty"`
// Stored info on default test metadata.
TestMetadata []*TestMetadata `protobuf:"bytes,9,rep,name=test_metadata,json=testMetadata,proto3" json:"test_metadata,omitempty"`
// Clusters of failures for a TestResultTable instance.
Cluster []*Cluster `protobuf:"bytes,10,rep,name=cluster,proto3" json:"cluster,omitempty"`
// Most recent timestamp that clusters have processed.
MostRecentClusterTimestamp float64 `protobuf:"fixed64,11,opt,name=most_recent_cluster_timestamp,json=mostRecentClusterTimestamp,proto3" json:"most_recent_cluster_timestamp,omitempty"`
}
func (x *Grid) Reset() {
*x = Grid{}
if protoimpl.UnsafeEnabled {
mi := &file_state_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Grid) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Grid) ProtoMessage() {}
func (x *Grid) ProtoReflect() protoreflect.Message {
mi := &file_state_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Grid.ProtoReflect.Descriptor instead.
func (*Grid) Descriptor() ([]byte, []int) {
return file_state_proto_rawDescGZIP(), []int{9}
}
func (x *Grid) GetColumns() []*Column {
if x != nil {
return x.Columns
}
return nil
}
func (x *Grid) GetRows() []*Row {
if x != nil {
return x.Rows
}
return nil
}
func (x *Grid) GetConfig() *config.TestGroup {
if x != nil {
return x.Config
}
return nil
}
func (x *Grid) GetLastTimeUpdated() float64 {
if x != nil {
return x.LastTimeUpdated
}
return 0
}
func (x *Grid) GetUpdateInfo() []*UpdateInfo {
if x != nil {
return x.UpdateInfo
}
return nil
}
func (x *Grid) GetTestMetadata() []*TestMetadata {
if x != nil {
return x.TestMetadata
}
return nil
}
func (x *Grid) GetCluster() []*Cluster {
if x != nil {
return x.Cluster
}
return nil
}
func (x *Grid) GetMostRecentClusterTimestamp() float64 {
if x != nil {
return x.MostRecentClusterTimestamp
}
return 0
}
// A cluster of failures grouped by test status and message for a test results
// table.
type Cluster struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Test status cluster grouped by.
TestStatus int32 `protobuf:"varint,1,opt,name=test_status,json=testStatus,proto3" json:"test_status,omitempty"`
// Error message or testFailureClassification string cluster grouped by.
Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
// ClusterRows that belong to this cluster.
ClusterRow []*ClusterRow `protobuf:"bytes,3,rep,name=cluster_row,json=clusterRow,proto3" json:"cluster_row,omitempty"`
}
func (x *Cluster) Reset() {
*x = Cluster{}
if protoimpl.UnsafeEnabled {
mi := &file_state_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Cluster) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Cluster) ProtoMessage() {}
func (x *Cluster) ProtoReflect() protoreflect.Message {
mi := &file_state_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Cluster.ProtoReflect.Descriptor instead.
func (*Cluster) Descriptor() ([]byte, []int) {
return file_state_proto_rawDescGZIP(), []int{10}
}
func (x *Cluster) GetTestStatus() int32 {
if x != nil {
return x.TestStatus
}
return 0
}
func (x *Cluster) GetMessage() string {
if x != nil {
return x.Message
}
return ""
}
func (x *Cluster) GetClusterRow() []*ClusterRow {
if x != nil {
return x.ClusterRow
}
return nil
}
// Cells in a TestRow that belong to a specific Cluster.
type ClusterRow struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Name of TestRow.
DisplayName string `protobuf:"bytes,1,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
// Index within row that belongs to Cluster (refer to columns of the row).
Index []int32 `protobuf:"varint,2,rep,packed,name=index,proto3" json:"index,omitempty"`
}
func (x *ClusterRow) Reset() {
*x = ClusterRow{}
if protoimpl.UnsafeEnabled {
mi := &file_state_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ClusterRow) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ClusterRow) ProtoMessage() {}
func (x *ClusterRow) ProtoReflect() protoreflect.Message {
mi := &file_state_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ClusterRow.ProtoReflect.Descriptor instead.
func (*ClusterRow) Descriptor() ([]byte, []int) {
return file_state_proto_rawDescGZIP(), []int{11}
}
func (x *ClusterRow) GetDisplayName() string {
if x != nil {
return x.DisplayName
}
return ""
}
func (x *ClusterRow) GetIndex() []int32 {
if x != nil {
return x.Index
}
return nil
}
var File_state_proto protoreflect.FileDescriptor
var file_state_proto_rawDesc = []byte{
0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x74,
0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x1f, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74,
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16,
0x70, 0x62, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8b, 0x01, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x70, 0x65,
0x72, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x18,
0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64,
0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x2e,
0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x70,
0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, 0x65,
0x72, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x3a, 0x02, 0x38, 0x01, 0x22, 0x4e, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x12,
0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20,
0x03, 0x28, 0x05, 0x52, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x01, 0x52, 0x06, 0x76, 0x61,
0x6c, 0x75, 0x65, 0x73, 0x22, 0x55, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x68,
0x61, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x68, 0x61, 0x73, 0x65,
0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x68, 0x61,
0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x68, 0x61, 0x73, 0x65, 0x5f,
0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x70,
0x68, 0x61, 0x73, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0x59, 0x0a, 0x0a, 0x55,
0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4b, 0x0a, 0x11, 0x75, 0x70, 0x64,
0x61, 0x74, 0x65, 0x5f, 0x70, 0x68, 0x61, 0x73, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e,
0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x68, 0x61, 0x73,
0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x68, 0x61,
0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x80, 0x07, 0x0a, 0x09, 0x41, 0x6c, 0x65, 0x72, 0x74,
0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x63, 0x6f, 0x75,
0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x61, 0x69, 0x6c, 0x43, 0x6f,
0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x62, 0x75, 0x69, 0x6c,
0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x61, 0x69, 0x6c,
0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x66, 0x61, 0x69, 0x6c, 0x5f,
0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x66, 0x61, 0x69, 0x6c, 0x54, 0x69, 0x6d, 0x65,
0x12, 0x20, 0x0a, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64,
0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x54, 0x65, 0x73, 0x74,
0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64,
0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x73, 0x73, 0x42,
0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x74,
0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x12,
0x27, 0x0a, 0x0f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61,
0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72,
0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x75, 0x69, 0x6c,
0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x75,
0x69, 0x6c, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x26, 0x0a, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64,
0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0d, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x65, 0x78, 0x74, 0x12,
0x24, 0x0a, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x75, 0x72, 0x6c, 0x5f, 0x74, 0x65, 0x78,
0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x55, 0x72,
0x6c, 0x54, 0x65, 0x78, 0x74, 0x12, 0x2f, 0x0a, 0x14, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f,
0x66, 0x61, 0x69, 0x6c, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20,
0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x42,
0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x13, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74,
0x5f, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20,
0x01, 0x28, 0x09, 0x52, 0x10, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x54,
0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x49, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
0x69, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, 0x65, 0x73, 0x74,
0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74,
0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45,
0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73,
0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18,
0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x49, 0x64,
0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65,
0x73, 0x73, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x6d, 0x61, 0x69,
0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x66, 0x0a, 0x15, 0x63, 0x75,
0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x68, 0x65, 0x61, 0x64,
0x65, 0x72, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x74, 0x65, 0x73, 0x74,
0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74,
0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x63,
0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65,
0x72, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73,
0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
0x01, 0x1a, 0x46, 0x0a, 0x18, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9b, 0x01, 0x0a, 0x0c, 0x54, 0x65,
0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65,
0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74,
0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x75, 0x67, 0x5f, 0x63,
0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c,
0x62, 0x75, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05,
0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e,
0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x63, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x02,
0x63, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65,
0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70,
0x65, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0xed, 0x01, 0x0a, 0x06, 0x43, 0x6f, 0x6c, 0x75,
0x6d, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07,
0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x73,
0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18,
0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x12, 0x1f, 0x0a, 0x0b,
0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0a, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x49, 0x64, 0x73, 0x12, 0x12, 0x0a,
0x04, 0x68, 0x69, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x69, 0x6e,
0x74, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65,
0x73, 0x73, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x6d, 0x61, 0x69,
0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x05, 0x73, 0x74,
0x61, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x65, 0x73, 0x74,
0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73,
0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74,
0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18,
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x61, 0x69, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74,
0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02,
0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x61, 0x73, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12,
0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03,
0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74,
0x12, 0x18, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28,
0x08, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x72,
0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x72, 0x6f, 0x6b,
0x65, 0x6e, 0x22, 0x91, 0x03, 0x0a, 0x03, 0x52, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e,
0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18,
0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52,
0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x65, 0x6c, 0x6c,
0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x65, 0x6c, 0x6c,
0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18,
0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12,
0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52,
0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x30, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69,
0x63, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67,
0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x63, 0x6f,
0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x69, 0x63, 0x6f, 0x6e, 0x73, 0x12,
0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52,
0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x0a, 0x61, 0x6c, 0x65, 0x72, 0x74,
0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x65,
0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x6c, 0x65,
0x72, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x49, 0x6e, 0x66,
0x6f, 0x12, 0x23, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
0x74, 0x79, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x50, 0x72,
0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x38, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
0x74, 0x69, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x65, 0x73,
0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70,
0x65, 0x72, 0x74, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73,
0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0xc9, 0x03, 0x0a, 0x04, 0x47, 0x72, 0x69, 0x64, 0x12,
0x30, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x16, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74,
0x65, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
0x73, 0x12, 0x27, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x13, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65,
0x2e, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x12, 0x32, 0x0a, 0x06, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x65, 0x73,
0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73,
0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a,
0x0a, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61,
0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x54,
0x69, 0x6d, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70,
0x64, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x1a, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65,
0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x75, 0x70, 0x64,
0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x41, 0x0a, 0x0d, 0x74, 0x65, 0x73, 0x74, 0x5f,
0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c,
0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e,
0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x74, 0x65,
0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6c,
0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x65,
0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6c, 0x75,
0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a,
0x1d, 0x6d, 0x6f, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6c, 0x75,
0x73, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0b,
0x20, 0x01, 0x28, 0x01, 0x52, 0x1a, 0x6d, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74,
0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x07,
0x10, 0x08, 0x22, 0x81, 0x01, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1f,
0x0a, 0x0b, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20,
0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x6c, 0x75,
0x73, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x77, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a,
0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e,
0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x77, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73,
0x74, 0x65, 0x72, 0x52, 0x6f, 0x77, 0x22, 0x45, 0x0a, 0x0a, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65,
0x72, 0x52, 0x6f, 0x77, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f,
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70,
0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78,
0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x32, 0x5a,
0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x47, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f,
0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2f, 0x70, 0x62, 0x2f, 0x73, 0x74, 0x61, 0x74,
0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_state_proto_rawDescOnce sync.Once
file_state_proto_rawDescData = file_state_proto_rawDesc
)
func file_state_proto_rawDescGZIP() []byte {
file_state_proto_rawDescOnce.Do(func() {
file_state_proto_rawDescData = protoimpl.X.CompressGZIP(file_state_proto_rawDescData)
})
return file_state_proto_rawDescData
}
var file_state_proto_msgTypes = make([]protoimpl.MessageInfo, 15)
var file_state_proto_goTypes = []interface{}{
(*Property)(nil), // 0: testgrid.state.Property
(*Metric)(nil), // 1: testgrid.state.Metric
(*UpdatePhaseData)(nil), // 2: testgrid.state.UpdatePhaseData
(*UpdateInfo)(nil), // 3: testgrid.state.UpdateInfo
(*AlertInfo)(nil), // 4: testgrid.state.AlertInfo
(*TestMetadata)(nil), // 5: testgrid.state.TestMetadata
(*Column)(nil), // 6: testgrid.state.Column
(*Stats)(nil), // 7: testgrid.state.Stats
(*Row)(nil), // 8: testgrid.state.Row
(*Grid)(nil), // 9: testgrid.state.Grid
(*Cluster)(nil), // 10: testgrid.state.Cluster
(*ClusterRow)(nil), // 11: testgrid.state.ClusterRow
nil, // 12: testgrid.state.Property.PropertyEntry
nil, // 13: testgrid.state.AlertInfo.PropertiesEntry
nil, // 14: testgrid.state.AlertInfo.CustomColumnHeadersEntry
(*timestamppb.Timestamp)(nil), // 15: google.protobuf.Timestamp
(*config.TestGroup)(nil), // 16: testgrid.config.TestGroup
}
var file_state_proto_depIdxs = []int32{
12, // 0: testgrid.state.Property.property:type_name -> testgrid.state.Property.PropertyEntry
2, // 1: testgrid.state.UpdateInfo.update_phase_data:type_name -> testgrid.state.UpdatePhaseData
15, // 2: testgrid.state.AlertInfo.fail_time:type_name -> google.protobuf.Timestamp
15, // 3: testgrid.state.AlertInfo.pass_time:type_name -> google.protobuf.Timestamp
13, // 4: testgrid.state.AlertInfo.properties:type_name -> testgrid.state.AlertInfo.PropertiesEntry
14, // 5: testgrid.state.AlertInfo.custom_column_headers:type_name -> testgrid.state.AlertInfo.CustomColumnHeadersEntry
7, // 6: testgrid.state.Column.stats:type_name -> testgrid.state.Stats
1, // 7: testgrid.state.Row.metrics:type_name -> testgrid.state.Metric
4, // 8: testgrid.state.Row.alert_info:type_name -> testgrid.state.AlertInfo
0, // 9: testgrid.state.Row.properties:type_name -> testgrid.state.Property
6, // 10: testgrid.state.Grid.columns:type_name -> testgrid.state.Column
8, // 11: testgrid.state.Grid.rows:type_name -> testgrid.state.Row
16, // 12: testgrid.state.Grid.config:type_name -> testgrid.config.TestGroup
3, // 13: testgrid.state.Grid.update_info:type_name -> testgrid.state.UpdateInfo
5, // 14: testgrid.state.Grid.test_metadata:type_name -> testgrid.state.TestMetadata
10, // 15: testgrid.state.Grid.cluster:type_name -> testgrid.state.Cluster
11, // 16: testgrid.state.Cluster.cluster_row:type_name -> testgrid.state.ClusterRow
17, // [17:17] is the sub-list for method output_type
17, // [17:17] is the sub-list for method input_type
17, // [17:17] is the sub-list for extension type_name
17, // [17:17] is the sub-list for extension extendee
0, // [0:17] is the sub-list for field type_name
}
func init() { file_state_proto_init() }
func file_state_proto_init() {
if File_state_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_state_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Property); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_state_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Metric); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_state_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UpdatePhaseData); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_state_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UpdateInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_state_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AlertInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_state_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TestMetadata); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_state_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Column); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_state_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Stats); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_state_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Row); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_state_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Grid); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_state_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Cluster); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_state_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ClusterRow); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_state_proto_rawDesc,
NumEnums: 0,
NumMessages: 15,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_state_proto_goTypes,
DependencyIndexes: file_state_proto_depIdxs,
MessageInfos: file_state_proto_msgTypes,
}.Build()
File_state_proto = out.File
file_state_proto_rawDesc = nil
file_state_proto_goTypes = nil
file_state_proto_depIdxs = nil
}