pb/config/config.pb.go (3,360 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.
*/
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.0
// protoc v3.21.1
// source: config.proto
package config
import (
custom_evaluator "github.com/GoogleCloudPlatform/testgrid/pb/custom_evaluator"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
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 TestGroup_TestsName int32
const (
TestGroup_TESTS_NAME_UNSPECIFIED TestGroup_TestsName = 0
TestGroup_TESTS_NAME_IGNORE TestGroup_TestsName = 1
TestGroup_TESTS_NAME_REPLACE TestGroup_TestsName = 2
TestGroup_TESTS_NAME_APPEND TestGroup_TestsName = 3
)
// Enum value maps for TestGroup_TestsName.
var (
TestGroup_TestsName_name = map[int32]string{
0: "TESTS_NAME_UNSPECIFIED",
1: "TESTS_NAME_IGNORE",
2: "TESTS_NAME_REPLACE",
3: "TESTS_NAME_APPEND",
}
TestGroup_TestsName_value = map[string]int32{
"TESTS_NAME_UNSPECIFIED": 0,
"TESTS_NAME_IGNORE": 1,
"TESTS_NAME_REPLACE": 2,
"TESTS_NAME_APPEND": 3,
}
)
func (x TestGroup_TestsName) Enum() *TestGroup_TestsName {
p := new(TestGroup_TestsName)
*p = x
return p
}
func (x TestGroup_TestsName) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (TestGroup_TestsName) Descriptor() protoreflect.EnumDescriptor {
return file_config_proto_enumTypes[0].Descriptor()
}
func (TestGroup_TestsName) Type() protoreflect.EnumType {
return &file_config_proto_enumTypes[0]
}
func (x TestGroup_TestsName) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use TestGroup_TestsName.Descriptor instead.
func (TestGroup_TestsName) EnumDescriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{2, 0}
}
type TestGroup_FallbackGrouping int32
const (
TestGroup_FALLBACK_GROUPING_NONE TestGroup_FallbackGrouping = 0
TestGroup_FALLBACK_GROUPING_DATE TestGroup_FallbackGrouping = 1
TestGroup_FALLBACK_GROUPING_LABELS TestGroup_FallbackGrouping = 2
TestGroup_FALLBACK_GROUPING_ID TestGroup_FallbackGrouping = 3
TestGroup_FALLBACK_GROUPING_BUILD TestGroup_FallbackGrouping = 4
// When using this, ensure fallback_grouping_configuration_value is
// also set.
TestGroup_FALLBACK_GROUPING_CONFIGURATION_VALUE TestGroup_FallbackGrouping = 5
)
// Enum value maps for TestGroup_FallbackGrouping.
var (
TestGroup_FallbackGrouping_name = map[int32]string{
0: "FALLBACK_GROUPING_NONE",
1: "FALLBACK_GROUPING_DATE",
2: "FALLBACK_GROUPING_LABELS",
3: "FALLBACK_GROUPING_ID",
4: "FALLBACK_GROUPING_BUILD",
5: "FALLBACK_GROUPING_CONFIGURATION_VALUE",
}
TestGroup_FallbackGrouping_value = map[string]int32{
"FALLBACK_GROUPING_NONE": 0,
"FALLBACK_GROUPING_DATE": 1,
"FALLBACK_GROUPING_LABELS": 2,
"FALLBACK_GROUPING_ID": 3,
"FALLBACK_GROUPING_BUILD": 4,
"FALLBACK_GROUPING_CONFIGURATION_VALUE": 5,
}
)
func (x TestGroup_FallbackGrouping) Enum() *TestGroup_FallbackGrouping {
p := new(TestGroup_FallbackGrouping)
*p = x
return p
}
func (x TestGroup_FallbackGrouping) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (TestGroup_FallbackGrouping) Descriptor() protoreflect.EnumDescriptor {
return file_config_proto_enumTypes[1].Descriptor()
}
func (TestGroup_FallbackGrouping) Type() protoreflect.EnumType {
return &file_config_proto_enumTypes[1]
}
func (x TestGroup_FallbackGrouping) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use TestGroup_FallbackGrouping.Descriptor instead.
func (TestGroup_FallbackGrouping) EnumDescriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{2, 1}
}
type TestGroup_PrimaryGrouping int32
const (
TestGroup_PRIMARY_GROUPING_NONE TestGroup_PrimaryGrouping = 0
TestGroup_PRIMARY_GROUPING_BUILD TestGroup_PrimaryGrouping = 1
)
// Enum value maps for TestGroup_PrimaryGrouping.
var (
TestGroup_PrimaryGrouping_name = map[int32]string{
0: "PRIMARY_GROUPING_NONE",
1: "PRIMARY_GROUPING_BUILD",
}
TestGroup_PrimaryGrouping_value = map[string]int32{
"PRIMARY_GROUPING_NONE": 0,
"PRIMARY_GROUPING_BUILD": 1,
}
)
func (x TestGroup_PrimaryGrouping) Enum() *TestGroup_PrimaryGrouping {
p := new(TestGroup_PrimaryGrouping)
*p = x
return p
}
func (x TestGroup_PrimaryGrouping) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (TestGroup_PrimaryGrouping) Descriptor() protoreflect.EnumDescriptor {
return file_config_proto_enumTypes[2].Descriptor()
}
func (TestGroup_PrimaryGrouping) Type() protoreflect.EnumType {
return &file_config_proto_enumTypes[2]
}
func (x TestGroup_PrimaryGrouping) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use TestGroup_PrimaryGrouping.Descriptor instead.
func (TestGroup_PrimaryGrouping) EnumDescriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{2, 2}
}
// Scale of issue priority, used to indicate importance of issue.
type AutoBugOptions_Priority int32
const (
// Unspecified; may not set priority at all
AutoBugOptions_PRIORITY_UNSPECIFIED AutoBugOptions_Priority = 0
// See https://developers.google.com/issue-tracker/concepts/issues
AutoBugOptions_P0 AutoBugOptions_Priority = 1
AutoBugOptions_P1 AutoBugOptions_Priority = 2
AutoBugOptions_P2 AutoBugOptions_Priority = 3
AutoBugOptions_P3 AutoBugOptions_Priority = 4
AutoBugOptions_P4 AutoBugOptions_Priority = 5
)
// Enum value maps for AutoBugOptions_Priority.
var (
AutoBugOptions_Priority_name = map[int32]string{
0: "PRIORITY_UNSPECIFIED",
1: "P0",
2: "P1",
3: "P2",
4: "P3",
5: "P4",
}
AutoBugOptions_Priority_value = map[string]int32{
"PRIORITY_UNSPECIFIED": 0,
"P0": 1,
"P1": 2,
"P2": 3,
"P3": 4,
"P4": 5,
}
)
func (x AutoBugOptions_Priority) Enum() *AutoBugOptions_Priority {
p := new(AutoBugOptions_Priority)
*p = x
return p
}
func (x AutoBugOptions_Priority) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (AutoBugOptions_Priority) Descriptor() protoreflect.EnumDescriptor {
return file_config_proto_enumTypes[3].Descriptor()
}
func (AutoBugOptions_Priority) Type() protoreflect.EnumType {
return &file_config_proto_enumTypes[3]
}
func (x AutoBugOptions_Priority) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use AutoBugOptions_Priority.Descriptor instead.
func (AutoBugOptions_Priority) EnumDescriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{7, 0}
}
// Columns which contain cells with any status configure below will be
// ignored. Ignored columns affect the computation of flakiness and
// non-ignored number of runs.
type DashboardTabStatusCustomizationOptions_IgnoredTestStatus int32
const (
DashboardTabStatusCustomizationOptions_TEST_STATUS_UNSPECIFIED DashboardTabStatusCustomizationOptions_IgnoredTestStatus = 0
DashboardTabStatusCustomizationOptions_CATEGORIZED_ABORT DashboardTabStatusCustomizationOptions_IgnoredTestStatus = 1
DashboardTabStatusCustomizationOptions_UNKNOWN DashboardTabStatusCustomizationOptions_IgnoredTestStatus = 2
DashboardTabStatusCustomizationOptions_CANCEL DashboardTabStatusCustomizationOptions_IgnoredTestStatus = 3
DashboardTabStatusCustomizationOptions_BLOCKED DashboardTabStatusCustomizationOptions_IgnoredTestStatus = 4
)
// Enum value maps for DashboardTabStatusCustomizationOptions_IgnoredTestStatus.
var (
DashboardTabStatusCustomizationOptions_IgnoredTestStatus_name = map[int32]string{
0: "TEST_STATUS_UNSPECIFIED",
1: "CATEGORIZED_ABORT",
2: "UNKNOWN",
3: "CANCEL",
4: "BLOCKED",
}
DashboardTabStatusCustomizationOptions_IgnoredTestStatus_value = map[string]int32{
"TEST_STATUS_UNSPECIFIED": 0,
"CATEGORIZED_ABORT": 1,
"UNKNOWN": 2,
"CANCEL": 3,
"BLOCKED": 4,
}
)
func (x DashboardTabStatusCustomizationOptions_IgnoredTestStatus) Enum() *DashboardTabStatusCustomizationOptions_IgnoredTestStatus {
p := new(DashboardTabStatusCustomizationOptions_IgnoredTestStatus)
*p = x
return p
}
func (x DashboardTabStatusCustomizationOptions_IgnoredTestStatus) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (DashboardTabStatusCustomizationOptions_IgnoredTestStatus) Descriptor() protoreflect.EnumDescriptor {
return file_config_proto_enumTypes[4].Descriptor()
}
func (DashboardTabStatusCustomizationOptions_IgnoredTestStatus) Type() protoreflect.EnumType {
return &file_config_proto_enumTypes[4]
}
func (x DashboardTabStatusCustomizationOptions_IgnoredTestStatus) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use DashboardTabStatusCustomizationOptions_IgnoredTestStatus.Descriptor instead.
func (DashboardTabStatusCustomizationOptions_IgnoredTestStatus) EnumDescriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{15, 0}
}
// Specifies the test name, and its source
type TestNameConfig struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The name elements specifying the target test name for this tab.
NameElements []*TestNameConfig_NameElement `protobuf:"bytes,1,rep,name=name_elements,json=nameElements,proto3" json:"name_elements,omitempty"`
// Specifies a printf-style format string for name elements. The format
// string should have as many conversions as there are name_elements.
// For example, two name_elements could be used with name_format="%s: %s".
NameFormat string `protobuf:"bytes,2,opt,name=name_format,json=nameFormat,proto3" json:"name_format,omitempty"`
}
func (x *TestNameConfig) Reset() {
*x = TestNameConfig{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TestNameConfig) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TestNameConfig) ProtoMessage() {}
func (x *TestNameConfig) ProtoReflect() protoreflect.Message {
mi := &file_config_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 TestNameConfig.ProtoReflect.Descriptor instead.
func (*TestNameConfig) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{0}
}
func (x *TestNameConfig) GetNameElements() []*TestNameConfig_NameElement {
if x != nil {
return x.NameElements
}
return nil
}
func (x *TestNameConfig) GetNameFormat() string {
if x != nil {
return x.NameFormat
}
return ""
}
// A single notification.
type Notification struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required: Text summary of the issue or notice.
Summary string `protobuf:"bytes,1,opt,name=summary,proto3" json:"summary,omitempty"`
// Optional: Link to further information, such as a bug, email, document, etc.
ContextLink string `protobuf:"bytes,2,opt,name=context_link,json=contextLink,proto3" json:"context_link,omitempty"`
}
func (x *Notification) Reset() {
*x = Notification{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Notification) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Notification) ProtoMessage() {}
func (x *Notification) ProtoReflect() protoreflect.Message {
mi := &file_config_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 Notification.ProtoReflect.Descriptor instead.
func (*Notification) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{1}
}
func (x *Notification) GetSummary() string {
if x != nil {
return x.Summary
}
return ""
}
func (x *Notification) GetContextLink() string {
if x != nil {
return x.ContextLink
}
return ""
}
// Specifies a group of tests to gather.
type TestGroup struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Name of this TestGroup, for mapping dashboard tabs to tests.
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// Path to the test result stored in gcs (some-bucket/some/optional/path).
GcsPrefix string `protobuf:"bytes,2,opt,name=gcs_prefix,json=gcsPrefix,proto3" json:"gcs_prefix,omitempty"`
// Number of days of test results to gather and serve.
DaysOfResults int32 `protobuf:"varint,3,opt,name=days_of_results,json=daysOfResults,proto3" json:"days_of_results,omitempty"`
// Whether to ignore pending (currently running) test results.
IgnorePending bool `protobuf:"varint,4,opt,name=ignore_pending,json=ignorePending,proto3" json:"ignore_pending,omitempty"`
// Whether to ignore reported build results. It is recommended that tests
// report BUILD_FAIL instead of relying on this being disabled.
IgnoreBuilt bool `protobuf:"varint,5,opt,name=ignore_built,json=ignoreBuilt,proto3" json:"ignore_built,omitempty"`
// What to do with the 'Tests name' configuration value. It can replace the
// name of the test, be appended to the name of the test, or ignored. If it is
// ignored, then the name of the tests will be the build target.
TestsNamePolicy TestGroup_TestsName `protobuf:"varint,6,opt,name=tests_name_policy,json=testsNamePolicy,proto3,enum=testgrid.config.TestGroup_TestsName" json:"tests_name_policy,omitempty"`
// Tests with names that include these substrings will be removed from the
// table.
IgnoreTestSubstring []string `protobuf:"bytes,8,rep,name=ignore_test_substring,json=ignoreTestSubstring,proto3" json:"ignore_test_substring,omitempty"`
ColumnHeader []*TestGroup_ColumnHeader `protobuf:"bytes,9,rep,name=column_header,json=columnHeader,proto3" json:"column_header,omitempty"`
// A test grouping option used if not specified by primary_grouping (#29)
FallbackGrouping TestGroup_FallbackGrouping `protobuf:"varint,10,opt,name=fallback_grouping,json=fallbackGrouping,proto3,enum=testgrid.config.TestGroup_FallbackGrouping" json:"fallback_grouping,omitempty"`
// DEPRECATED: use DashboardTabAlertOptions > alert_stale_result_hours
//
// Deprecated: Do not use.
AlertStaleResultsHours int32 `protobuf:"varint,11,opt,name=alert_stale_results_hours,json=alertStaleResultsHours,proto3" json:"alert_stale_results_hours,omitempty"`
// DEPRECATED: use DashboardTabAlertOptions > num_failures_to_alert
//
// Deprecated: Do not use.
NumFailuresToAlert int32 `protobuf:"varint,12,opt,name=num_failures_to_alert,json=numFailuresToAlert,proto3" json:"num_failures_to_alert,omitempty"`
// DEPRECATED: use dashboard_tab.beta_autobug_options.beta_autobug_component
// instead.
//
// Deprecated: Do not use.
BugComponent int32 `protobuf:"varint,13,opt,name=bug_component,json=bugComponent,proto3" json:"bug_component,omitempty"`
// Default code search path for searching regressions. Overridden by
// code_search_path in DashboardTab.
CodeSearchPath string `protobuf:"bytes,14,opt,name=code_search_path,json=codeSearchPath,proto3" json:"code_search_path,omitempty"`
// The number of columns to consider "recent" for a variety of purposes.
NumColumnsRecent int32 `protobuf:"varint,15,opt,name=num_columns_recent,json=numColumnsRecent,proto3" json:"num_columns_recent,omitempty"`
// Whether to read test metadata from the test results. Information
// from the test metadata is used to determine where bugs are filed in
// specific cases.
UseTestMetadata bool `protobuf:"varint,16,opt,name=use_test_metadata,json=useTestMetadata,proto3" json:"use_test_metadata,omitempty"`
// DEPRECATED: use DashboardTabAlertOptions > alert_mail_to_address instead
//
// Deprecated: Do not use.
AlertMailToAddresses string `protobuf:"bytes,17,opt,name=alert_mail_to_addresses,json=alertMailToAddresses,proto3" json:"alert_mail_to_addresses,omitempty"`
// DEPRECATED: use DashboardTabAlertOptions > subject
//
// Deprecated: Do not use.
AlertMailSubject string `protobuf:"bytes,18,opt,name=alert_mail_subject,json=alertMailSubject,proto3" json:"alert_mail_subject,omitempty"`
// DEPRECATED: use DashboardTabAlertOptions > alert_mail_failure_message
//
// Deprecated: Do not use.
AlertMailFailureMessage string `protobuf:"bytes,19,opt,name=alert_mail_failure_message,json=alertMailFailureMessage,proto3" json:"alert_mail_failure_message,omitempty"`
// DEPRECATED: use DashboardTabAlertOptions > debug_url
//
// Deprecated: Do not use.
AlertMailDebugUrl string `protobuf:"bytes,20,opt,name=alert_mail_debug_url,json=alertMailDebugUrl,proto3" json:"alert_mail_debug_url,omitempty"`
// DEPRECATED: use DashboardTabAlertOptions > wait_minutes_between_emails
//
// Deprecated: Do not use.
MinElapsedMinutesBetweenMails int32 `protobuf:"varint,21,opt,name=min_elapsed_minutes_between_mails,json=minElapsedMinutesBetweenMails,proto3" json:"min_elapsed_minutes_between_mails,omitempty"`
// Whether to treat a combination of passes and failures within one test as a
// flaky status.
EnableFlakyStatus bool `protobuf:"varint,23,opt,name=enable_flaky_status,json=enableFlakyStatus,proto3" json:"enable_flaky_status,omitempty"`
// disable_merged_status will restores deprecated behavior of
// splitting multiple foo rows into foo [2], etc rather a single
// potentially flaky row.
DisableMergedStatus bool `protobuf:"varint,60,opt,name=disable_merged_status,json=disableMergedStatus,proto3" json:"disable_merged_status,omitempty"`
// deprecated - always set to true
//
// Deprecated: Do not use.
UseKubernetesClient bool `protobuf:"varint,24,opt,name=use_kubernetes_client,json=useKubernetesClient,proto3" json:"use_kubernetes_client,omitempty"`
// When use_kubernetes_client is on testgrid expects these results
// to come from prow, which should include a prowjob.json and podinfo.json
// to help debugging. If you do not expect these files to exist, you
// can optionally disable this analysis.
DisableProwjobAnalysis bool `protobuf:"varint,62,opt,name=disable_prowjob_analysis,json=disableProwjobAnalysis,proto3" json:"disable_prowjob_analysis,omitempty"`
// deprecated - always set to true
IsExternal bool `protobuf:"varint,25,opt,name=is_external,json=isExternal,proto3" json:"is_external,omitempty"`
// Specifies the test name for a test.
TestNameConfig *TestNameConfig `protobuf:"bytes,26,opt,name=test_name_config,json=testNameConfig,proto3" json:"test_name_config,omitempty"`
// A list of notifications attached to this test group.
// This is displayed on any dashboard tab backed by this test group.
Notifications []*Notification `protobuf:"bytes,27,rep,name=notifications,proto3" json:"notifications,omitempty"`
// A primary grouping strategy for grouping test results in columns.
// If a primary grouping is specified, the fallback grouping is ignored.
PrimaryGrouping TestGroup_PrimaryGrouping `protobuf:"varint,29,opt,name=primary_grouping,json=primaryGrouping,proto3,enum=testgrid.config.TestGroup_PrimaryGrouping" json:"primary_grouping,omitempty"`
// Whether to collect pass-fail data for test methods. Additional test cases
// will be added for each test method in a target.
EnableTestMethods bool `protobuf:"varint,30,opt,name=enable_test_methods,json=enableTestMethods,proto3" json:"enable_test_methods,omitempty"`
// Test annotations to look for. Adds custom icon to results.
TestAnnotations []*TestGroup_TestAnnotation `protobuf:"bytes,31,rep,name=test_annotations,json=testAnnotations,proto3" json:"test_annotations,omitempty"`
// Maximum number of individual test methods to collect for any given test
// row. If a test has more than this many methods, no methods will be
// displayed.
MaxTestMethodsPerTest int32 `protobuf:"varint,32,opt,name=max_test_methods_per_test,json=maxTestMethodsPerTest,proto3" json:"max_test_methods_per_test,omitempty"`
// Default metadata that should be applied for opening bugs, if a given regex
// matches against a test's name.
// Requires 'use_test_metadata = true'.
TestMetadataOptions []*TestMetadataOptions `protobuf:"bytes,34,rep,name=test_metadata_options,json=testMetadataOptions,proto3" json:"test_metadata_options,omitempty"`
// A space-delimited string of tags that are used to filter test targets.
// A leading - before the tag means this tag should not be present
// in the target.
// Example:
// contains tag1, but not tag2: test_tag_pattern = 'tag1 -tag2'
TestTagPattern string `protobuf:"bytes,35,opt,name=test_tag_pattern,json=testTagPattern,proto3" json:"test_tag_pattern,omitempty"`
// DEPRECATED: use dashboard_tab.beta_autobug_options instead.
//
// Deprecated: Do not use.
AutoBugOptions *AutoBugOptions `protobuf:"bytes,36,opt,name=auto_bug_options,json=autoBugOptions,proto3" json:"auto_bug_options,omitempty"`
// Max number of days any single test can take.
MaxTestRuntimeHours int32 `protobuf:"varint,37,opt,name=max_test_runtime_hours,json=maxTestRuntimeHours,proto3" json:"max_test_runtime_hours,omitempty"`
// The number of consecutive test passes to close the alert.
NumPassesToDisableAlert int32 `protobuf:"varint,38,opt,name=num_passes_to_disable_alert,json=numPassesToDisableAlert,proto3" json:"num_passes_to_disable_alert,omitempty"`
// If true, also associate bugs with tests if the test result's overview/group
// ID is in the bug.
LinkBugsByGroup bool `protobuf:"varint,39,opt,name=link_bugs_by_group,json=linkBugsByGroup,proto3" json:"link_bugs_by_group,omitempty"`
// Only show test methods with all required properties
TestMethodProperties []*TestGroup_KeyValue `protobuf:"bytes,41,rep,name=test_method_properties,json=testMethodProperties,proto3" json:"test_method_properties,omitempty"`
// If true, allows gathering and associating bugs with targets in the
// dashboard. Required in order to auto-file bugs.
GatherBugs bool `protobuf:"varint,42,opt,name=gather_bugs,json=gatherBugs,proto3" json:"gather_bugs,omitempty"`
// Numeric property metric value to be used for short text. If this property
// is present, it will override all the other short text values.
ShortTextMetric string `protobuf:"bytes,43,opt,name=short_text_metric,json=shortTextMetric,proto3" json:"short_text_metric,omitempty"`
// The key of a key-value pair in metadata (a 'configuration value').
// This overrides the default build with the value from the key-value pair.
BuildOverrideConfigurationValue string `protobuf:"bytes,44,opt,name=build_override_configuration_value,json=buildOverrideConfigurationValue,proto3" json:"build_override_configuration_value,omitempty"`
// If true, only associate bugs with test methods if that test method is
// mentioned in the bug. If false, bugs will be associated with all test
// methods.
LinkBugsByTestMethods bool `protobuf:"varint,45,opt,name=link_bugs_by_test_methods,json=linkBugsByTestMethods,proto3" json:"link_bugs_by_test_methods,omitempty"`
// Regex to match test methods. Only test methods with names that match
// this regex will be included in the table.
TestMethodMatchRegex string `protobuf:"bytes,46,opt,name=test_method_match_regex,json=testMethodMatchRegex,proto3" json:"test_method_match_regex,omitempty"`
// Regex to exclude test methods. Test methods with names that match
// this regex will be excluded from the table, even if they match
// test_method_match_regex.
TestMethodUnmatchRegex string `protobuf:"bytes,61,opt,name=test_method_unmatch_regex,json=testMethodUnmatchRegex,proto3" json:"test_method_unmatch_regex,omitempty"`
// If true, test method names are printed with the full class names.
UseFullMethodNames bool `protobuf:"varint,47,opt,name=use_full_method_names,json=useFullMethodNames,proto3" json:"use_full_method_names,omitempty"`
// A configuration value that is used as a fallback grouping.
// This is useful for cases where there are builds that shared the same
// commit but are run at separate times of day.
FallbackGroupingConfigurationValue string `protobuf:"bytes,49,opt,name=fallback_grouping_configuration_value,json=fallbackGroupingConfigurationValue,proto3" json:"fallback_grouping_configuration_value,omitempty"`
// Configuration type of the result source.
ResultSource *TestGroup_ResultSource `protobuf:"bytes,50,opt,name=result_source,json=resultSource,proto3" json:"result_source,omitempty"`
// Set of rules that are evaluated with each test result. If an evaluation is
// successful, the status of that test result will be whatever is specified
// for a given rule. For more information, look at RuleSet documention
CustomEvaluatorRuleSet *custom_evaluator.RuleSet `protobuf:"bytes,51,opt,name=custom_evaluator_rule_set,json=customEvaluatorRuleSet,proto3" json:"custom_evaluator_rule_set,omitempty"`
// If true, instead of updating the group, read the state proto from storage
// and update summary, alerts, etc. from that state.
// This only applies to test group state, not bug state for a test group.
// This assumes that the state proto is updated through other means (another
// updater, manually, etc).
ReadStateFromStorage bool `protobuf:"varint,52,opt,name=read_state_from_storage,json=readStateFromStorage,proto3" json:"read_state_from_storage,omitempty"`
// If true, only add the most recent result for a test when multiple results
// for a test with the same name are encountered.
IgnoreOldResults bool `protobuf:"varint,53,opt,name=ignore_old_results,json=ignoreOldResults,proto3" json:"ignore_old_results,omitempty"`
// If True, ignore the 'pass with skips' status (show as a blank cell).
IgnoreSkip bool `protobuf:"varint,54,opt,name=ignore_skip,json=ignoreSkip,proto3" json:"ignore_skip,omitempty"`
// A string containing python formatting specifiers that overrides the
// commit with the date formatted according to this string. This is useful
// for aggregating multiple columns that don't have a matching commit.
BuildOverrideStrftime string `protobuf:"bytes,55,opt,name=build_override_strftime,json=buildOverrideStrftime,proto3" json:"build_override_strftime,omitempty"`
// Specify a property that will be read into state in the user_property field.
// These can be substituted into LinkTemplates.
UserProperty string `protobuf:"bytes,56,opt,name=user_property,json=userProperty,proto3" json:"user_property,omitempty"`
// Where to gather linked issues from. (Currently a no-op).
IssueGatherOptions *IssueGatherOptions `protobuf:"bytes,63,opt,name=issue_gather_options,json=issueGatherOptions,proto3" json:"issue_gather_options,omitempty"`
}
func (x *TestGroup) Reset() {
*x = TestGroup{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TestGroup) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TestGroup) ProtoMessage() {}
func (x *TestGroup) ProtoReflect() protoreflect.Message {
mi := &file_config_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 TestGroup.ProtoReflect.Descriptor instead.
func (*TestGroup) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{2}
}
func (x *TestGroup) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *TestGroup) GetGcsPrefix() string {
if x != nil {
return x.GcsPrefix
}
return ""
}
func (x *TestGroup) GetDaysOfResults() int32 {
if x != nil {
return x.DaysOfResults
}
return 0
}
func (x *TestGroup) GetIgnorePending() bool {
if x != nil {
return x.IgnorePending
}
return false
}
func (x *TestGroup) GetIgnoreBuilt() bool {
if x != nil {
return x.IgnoreBuilt
}
return false
}
func (x *TestGroup) GetTestsNamePolicy() TestGroup_TestsName {
if x != nil {
return x.TestsNamePolicy
}
return TestGroup_TESTS_NAME_UNSPECIFIED
}
func (x *TestGroup) GetIgnoreTestSubstring() []string {
if x != nil {
return x.IgnoreTestSubstring
}
return nil
}
func (x *TestGroup) GetColumnHeader() []*TestGroup_ColumnHeader {
if x != nil {
return x.ColumnHeader
}
return nil
}
func (x *TestGroup) GetFallbackGrouping() TestGroup_FallbackGrouping {
if x != nil {
return x.FallbackGrouping
}
return TestGroup_FALLBACK_GROUPING_NONE
}
// Deprecated: Do not use.
func (x *TestGroup) GetAlertStaleResultsHours() int32 {
if x != nil {
return x.AlertStaleResultsHours
}
return 0
}
// Deprecated: Do not use.
func (x *TestGroup) GetNumFailuresToAlert() int32 {
if x != nil {
return x.NumFailuresToAlert
}
return 0
}
// Deprecated: Do not use.
func (x *TestGroup) GetBugComponent() int32 {
if x != nil {
return x.BugComponent
}
return 0
}
func (x *TestGroup) GetCodeSearchPath() string {
if x != nil {
return x.CodeSearchPath
}
return ""
}
func (x *TestGroup) GetNumColumnsRecent() int32 {
if x != nil {
return x.NumColumnsRecent
}
return 0
}
func (x *TestGroup) GetUseTestMetadata() bool {
if x != nil {
return x.UseTestMetadata
}
return false
}
// Deprecated: Do not use.
func (x *TestGroup) GetAlertMailToAddresses() string {
if x != nil {
return x.AlertMailToAddresses
}
return ""
}
// Deprecated: Do not use.
func (x *TestGroup) GetAlertMailSubject() string {
if x != nil {
return x.AlertMailSubject
}
return ""
}
// Deprecated: Do not use.
func (x *TestGroup) GetAlertMailFailureMessage() string {
if x != nil {
return x.AlertMailFailureMessage
}
return ""
}
// Deprecated: Do not use.
func (x *TestGroup) GetAlertMailDebugUrl() string {
if x != nil {
return x.AlertMailDebugUrl
}
return ""
}
// Deprecated: Do not use.
func (x *TestGroup) GetMinElapsedMinutesBetweenMails() int32 {
if x != nil {
return x.MinElapsedMinutesBetweenMails
}
return 0
}
func (x *TestGroup) GetEnableFlakyStatus() bool {
if x != nil {
return x.EnableFlakyStatus
}
return false
}
func (x *TestGroup) GetDisableMergedStatus() bool {
if x != nil {
return x.DisableMergedStatus
}
return false
}
// Deprecated: Do not use.
func (x *TestGroup) GetUseKubernetesClient() bool {
if x != nil {
return x.UseKubernetesClient
}
return false
}
func (x *TestGroup) GetDisableProwjobAnalysis() bool {
if x != nil {
return x.DisableProwjobAnalysis
}
return false
}
func (x *TestGroup) GetIsExternal() bool {
if x != nil {
return x.IsExternal
}
return false
}
func (x *TestGroup) GetTestNameConfig() *TestNameConfig {
if x != nil {
return x.TestNameConfig
}
return nil
}
func (x *TestGroup) GetNotifications() []*Notification {
if x != nil {
return x.Notifications
}
return nil
}
func (x *TestGroup) GetPrimaryGrouping() TestGroup_PrimaryGrouping {
if x != nil {
return x.PrimaryGrouping
}
return TestGroup_PRIMARY_GROUPING_NONE
}
func (x *TestGroup) GetEnableTestMethods() bool {
if x != nil {
return x.EnableTestMethods
}
return false
}
func (x *TestGroup) GetTestAnnotations() []*TestGroup_TestAnnotation {
if x != nil {
return x.TestAnnotations
}
return nil
}
func (x *TestGroup) GetMaxTestMethodsPerTest() int32 {
if x != nil {
return x.MaxTestMethodsPerTest
}
return 0
}
func (x *TestGroup) GetTestMetadataOptions() []*TestMetadataOptions {
if x != nil {
return x.TestMetadataOptions
}
return nil
}
func (x *TestGroup) GetTestTagPattern() string {
if x != nil {
return x.TestTagPattern
}
return ""
}
// Deprecated: Do not use.
func (x *TestGroup) GetAutoBugOptions() *AutoBugOptions {
if x != nil {
return x.AutoBugOptions
}
return nil
}
func (x *TestGroup) GetMaxTestRuntimeHours() int32 {
if x != nil {
return x.MaxTestRuntimeHours
}
return 0
}
func (x *TestGroup) GetNumPassesToDisableAlert() int32 {
if x != nil {
return x.NumPassesToDisableAlert
}
return 0
}
func (x *TestGroup) GetLinkBugsByGroup() bool {
if x != nil {
return x.LinkBugsByGroup
}
return false
}
func (x *TestGroup) GetTestMethodProperties() []*TestGroup_KeyValue {
if x != nil {
return x.TestMethodProperties
}
return nil
}
func (x *TestGroup) GetGatherBugs() bool {
if x != nil {
return x.GatherBugs
}
return false
}
func (x *TestGroup) GetShortTextMetric() string {
if x != nil {
return x.ShortTextMetric
}
return ""
}
func (x *TestGroup) GetBuildOverrideConfigurationValue() string {
if x != nil {
return x.BuildOverrideConfigurationValue
}
return ""
}
func (x *TestGroup) GetLinkBugsByTestMethods() bool {
if x != nil {
return x.LinkBugsByTestMethods
}
return false
}
func (x *TestGroup) GetTestMethodMatchRegex() string {
if x != nil {
return x.TestMethodMatchRegex
}
return ""
}
func (x *TestGroup) GetTestMethodUnmatchRegex() string {
if x != nil {
return x.TestMethodUnmatchRegex
}
return ""
}
func (x *TestGroup) GetUseFullMethodNames() bool {
if x != nil {
return x.UseFullMethodNames
}
return false
}
func (x *TestGroup) GetFallbackGroupingConfigurationValue() string {
if x != nil {
return x.FallbackGroupingConfigurationValue
}
return ""
}
func (x *TestGroup) GetResultSource() *TestGroup_ResultSource {
if x != nil {
return x.ResultSource
}
return nil
}
func (x *TestGroup) GetCustomEvaluatorRuleSet() *custom_evaluator.RuleSet {
if x != nil {
return x.CustomEvaluatorRuleSet
}
return nil
}
func (x *TestGroup) GetReadStateFromStorage() bool {
if x != nil {
return x.ReadStateFromStorage
}
return false
}
func (x *TestGroup) GetIgnoreOldResults() bool {
if x != nil {
return x.IgnoreOldResults
}
return false
}
func (x *TestGroup) GetIgnoreSkip() bool {
if x != nil {
return x.IgnoreSkip
}
return false
}
func (x *TestGroup) GetBuildOverrideStrftime() string {
if x != nil {
return x.BuildOverrideStrftime
}
return ""
}
func (x *TestGroup) GetUserProperty() string {
if x != nil {
return x.UserProperty
}
return ""
}
func (x *TestGroup) GetIssueGatherOptions() *IssueGatherOptions {
if x != nil {
return x.IssueGatherOptions
}
return nil
}
// GCSConfig specifies results stored in GCS, typically created by prow.
//
// Each invocation is stored in a GCS path, containing json metadata files
// as well as junit and other artifacts specifying the result of the run.
//
// More info:
// https://github.com/GoogleCloudPlatform/testgrid/tree/master/metadata
type GCSConfig struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Path to the test result stored in gcs (some-bucket/some/optional/path).
GcsPrefix string `protobuf:"bytes,1,opt,name=gcs_prefix,json=gcsPrefix,proto3" json:"gcs_prefix,omitempty"`
// The GCP project where GCS sends notifications for the above prefix.
PubsubProject string `protobuf:"bytes,2,opt,name=pubsub_project,json=pubsubProject,proto3" json:"pubsub_project,omitempty"`
// The pubsub subscription ID in the above topic
PubsubSubscription string `protobuf:"bytes,3,opt,name=pubsub_subscription,json=pubsubSubscription,proto3" json:"pubsub_subscription,omitempty"`
}
func (x *GCSConfig) Reset() {
*x = GCSConfig{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GCSConfig) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GCSConfig) ProtoMessage() {}
func (x *GCSConfig) ProtoReflect() protoreflect.Message {
mi := &file_config_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 GCSConfig.ProtoReflect.Descriptor instead.
func (*GCSConfig) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{3}
}
func (x *GCSConfig) GetGcsPrefix() string {
if x != nil {
return x.GcsPrefix
}
return ""
}
func (x *GCSConfig) GetPubsubProject() string {
if x != nil {
return x.PubsubProject
}
return ""
}
func (x *GCSConfig) GetPubsubSubscription() string {
if x != nil {
return x.PubsubSubscription
}
return ""
}
// ResultStoreConfig specifies results stored in ResultStore.
type ResultStoreConfig struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Google Cloud Platform project ID where ResultStore results are stored.
Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
// A simple query to filter for particular results.
// Currently, only allows a query in the form of `target:"<target>"`.
Query string `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"`
}
func (x *ResultStoreConfig) Reset() {
*x = ResultStoreConfig{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ResultStoreConfig) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ResultStoreConfig) ProtoMessage() {}
func (x *ResultStoreConfig) ProtoReflect() protoreflect.Message {
mi := &file_config_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 ResultStoreConfig.ProtoReflect.Descriptor instead.
func (*ResultStoreConfig) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{4}
}
func (x *ResultStoreConfig) GetProject() string {
if x != nil {
return x.Project
}
return ""
}
func (x *ResultStoreConfig) GetQuery() string {
if x != nil {
return x.Query
}
return ""
}
// Options for where to gather linked issues from.
type IssueGatherOptions struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *IssueGatherOptions) Reset() {
*x = IssueGatherOptions{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *IssueGatherOptions) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*IssueGatherOptions) ProtoMessage() {}
func (x *IssueGatherOptions) ProtoReflect() protoreflect.Message {
mi := &file_config_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 IssueGatherOptions.ProtoReflect.Descriptor instead.
func (*IssueGatherOptions) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{5}
}
// Default metadata to apply when opening bugs.
type TestMetadataOptions struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Apply the following metadata if this regex matches a test's name.
TestNameRegex string `protobuf:"bytes,1,opt,name=test_name_regex,json=testNameRegex,proto3" json:"test_name_regex,omitempty"`
// Default bug component to open a bug in.
BugComponent int32 `protobuf:"varint,2,opt,name=bug_component,json=bugComponent,proto3" json:"bug_component,omitempty"`
// Default owner to assign a bug to.
Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"`
// List of default users to CC a bug to.
Cc []string `protobuf:"bytes,4,rep,name=cc,proto3" json:"cc,omitempty"`
// Apply following metadata if this regex matches a test’s failure message.
MessageRegex string `protobuf:"bytes,5,opt,name=message_regex,json=messageRegex,proto3" json:"message_regex,omitempty"`
}
func (x *TestMetadataOptions) Reset() {
*x = TestMetadataOptions{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TestMetadataOptions) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TestMetadataOptions) ProtoMessage() {}
func (x *TestMetadataOptions) ProtoReflect() protoreflect.Message {
mi := &file_config_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 TestMetadataOptions.ProtoReflect.Descriptor instead.
func (*TestMetadataOptions) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{6}
}
func (x *TestMetadataOptions) GetTestNameRegex() string {
if x != nil {
return x.TestNameRegex
}
return ""
}
func (x *TestMetadataOptions) GetBugComponent() int32 {
if x != nil {
return x.BugComponent
}
return 0
}
func (x *TestMetadataOptions) GetOwner() string {
if x != nil {
return x.Owner
}
return ""
}
func (x *TestMetadataOptions) GetCc() []string {
if x != nil {
return x.Cc
}
return nil
}
func (x *TestMetadataOptions) GetMessageRegex() string {
if x != nil {
return x.MessageRegex
}
return ""
}
type AutoBugOptions struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// [BETA] When specified, file bugs to this component, using the beta AutoBug.
// If you do not want to opt into the beta, specify `bug_component` in your
// TestGroup instead.
// TODO(b/154866134): Rename to autobug_component once we've migrated.
BetaAutobugComponent int32 `protobuf:"varint,10,opt,name=beta_autobug_component,json=betaAutobugComponent,proto3" json:"beta_autobug_component,omitempty"`
// Whether to auto-close auto-filed bugs.
// Alias for "passing_behavior = CLOSE_ON_PASSING";
AutoClose bool `protobuf:"varint,1,opt,name=auto_close,json=autoClose,proto3" json:"auto_close,omitempty"`
// A list of hotlist ids attached to auto-filed bugs.
HotlistIds []int64 `protobuf:"varint,2,rep,packed,name=hotlist_ids,json=hotlistIds,proto3" json:"hotlist_ids,omitempty"`
// The priority of the auto-filed bug. If provided, this will overwrite the
// priority in the component default template
Priority AutoBugOptions_Priority `protobuf:"varint,3,opt,name=priority,proto3,enum=testgrid.config.AutoBugOptions_Priority" json:"priority,omitempty"`
// A list of hotlist id sources
// Corresponds with the list hotlist_ids (#2)
//
// Deprecated: Do not use.
HotlistIdsFromSource []*HotlistIdFromSource `protobuf:"bytes,4,rep,name=hotlist_ids_from_source,json=hotlistIdsFromSource,proto3" json:"hotlist_ids_from_source,omitempty"`
// If True, files separate bugs for each failing target, instead of one bug
// for each set of targets failing at the same run.
FileIndividual bool `protobuf:"varint,5,opt,name=file_individual,json=fileIndividual,proto3" json:"file_individual,omitempty"`
// If True; keep only one automantic bug per target, regardless of the number
// of separate failures a target gets. Requires `file_individual` to be True.
// Consider setting `num_passes_to_disable_alert` instead if you're tracking
// flaky tests.
SingletonAutobug bool `protobuf:"varint,6,opt,name=singleton_autobug,json=singletonAutobug,proto3" json:"singleton_autobug,omitempty"`
// If provided: only raise one bug if the number of failures for a single
// query by testgrid for a single failure group exceeds this value. Requires
// 'file_individual' to be True.
MaxAllowedIndividualBugs int32 `protobuf:"varint,7,opt,name=max_allowed_individual_bugs,json=maxAllowedIndividualBugs,proto3" json:"max_allowed_individual_bugs,omitempty"`
// If True; file issues for the 'Overall' target, even if otherwise invalid.
FileOverall bool `protobuf:"varint,8,opt,name=file_overall,json=fileOverall,proto3" json:"file_overall,omitempty"`
// If provided: supplements `max_allowed_individual_bugs` field to raise a
// single bug if the number of failures for a single query by testgrid exceeds
// the max_allowed_individual_bugs` value, regardless of `TEST_METADATA`
// configurations. This is useful for filing fewer suspected environmental
// failure bugs and routing them to a specific location (i.e. an oncall).
// Requires 'file_individual' to be true and `max_allowed_individual_bugs` to
// not be empty.
DefaultTestMetadata *AutoBugOptions_DefaultTestMetadata `protobuf:"bytes,9,opt,name=default_test_metadata,json=defaultTestMetadata,proto3" json:"default_test_metadata,omitempty"`
// [BETA] If True, query the test metadata API to get issue-routing metadata.
// Enables routing issues using structured test failures.
AdvancedTestMetadata bool `protobuf:"varint,11,opt,name=advanced_test_metadata,json=advancedTestMetadata,proto3" json:"advanced_test_metadata,omitempty"`
// If True, file a bug when the tab goes stale.
// (Requires `alert_stale_results_hours` to be set.)
FileStale bool `protobuf:"varint,12,opt,name=file_stale,json=fileStale,proto3" json:"file_stale,omitempty"`
// If True, ignore overall rows when auto-filing.
IgnoreOverall bool `protobuf:"varint,13,opt,name=ignore_overall,json=ignoreOverall,proto3" json:"ignore_overall,omitempty"`
// [BETA] Extra text displayed in opened bugs. e.g., for including a link to a
// playbook.
Note string `protobuf:"bytes,14,opt,name=note,proto3" json:"note,omitempty"`
}
func (x *AutoBugOptions) Reset() {
*x = AutoBugOptions{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AutoBugOptions) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AutoBugOptions) ProtoMessage() {}
func (x *AutoBugOptions) ProtoReflect() protoreflect.Message {
mi := &file_config_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 AutoBugOptions.ProtoReflect.Descriptor instead.
func (*AutoBugOptions) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{7}
}
func (x *AutoBugOptions) GetBetaAutobugComponent() int32 {
if x != nil {
return x.BetaAutobugComponent
}
return 0
}
func (x *AutoBugOptions) GetAutoClose() bool {
if x != nil {
return x.AutoClose
}
return false
}
func (x *AutoBugOptions) GetHotlistIds() []int64 {
if x != nil {
return x.HotlistIds
}
return nil
}
func (x *AutoBugOptions) GetPriority() AutoBugOptions_Priority {
if x != nil {
return x.Priority
}
return AutoBugOptions_PRIORITY_UNSPECIFIED
}
// Deprecated: Do not use.
func (x *AutoBugOptions) GetHotlistIdsFromSource() []*HotlistIdFromSource {
if x != nil {
return x.HotlistIdsFromSource
}
return nil
}
func (x *AutoBugOptions) GetFileIndividual() bool {
if x != nil {
return x.FileIndividual
}
return false
}
func (x *AutoBugOptions) GetSingletonAutobug() bool {
if x != nil {
return x.SingletonAutobug
}
return false
}
func (x *AutoBugOptions) GetMaxAllowedIndividualBugs() int32 {
if x != nil {
return x.MaxAllowedIndividualBugs
}
return 0
}
func (x *AutoBugOptions) GetFileOverall() bool {
if x != nil {
return x.FileOverall
}
return false
}
func (x *AutoBugOptions) GetDefaultTestMetadata() *AutoBugOptions_DefaultTestMetadata {
if x != nil {
return x.DefaultTestMetadata
}
return nil
}
func (x *AutoBugOptions) GetAdvancedTestMetadata() bool {
if x != nil {
return x.AdvancedTestMetadata
}
return false
}
func (x *AutoBugOptions) GetFileStale() bool {
if x != nil {
return x.FileStale
}
return false
}
func (x *AutoBugOptions) GetIgnoreOverall() bool {
if x != nil {
return x.IgnoreOverall
}
return false
}
func (x *AutoBugOptions) GetNote() string {
if x != nil {
return x.Note
}
return ""
}
type HotlistIdFromSource struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Types that are assignable to HotlistIdSource:
// *HotlistIdFromSource_Value
// *HotlistIdFromSource_Label
HotlistIdSource isHotlistIdFromSource_HotlistIdSource `protobuf_oneof:"hotlist_id_source"`
}
func (x *HotlistIdFromSource) Reset() {
*x = HotlistIdFromSource{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *HotlistIdFromSource) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*HotlistIdFromSource) ProtoMessage() {}
func (x *HotlistIdFromSource) ProtoReflect() protoreflect.Message {
mi := &file_config_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 HotlistIdFromSource.ProtoReflect.Descriptor instead.
func (*HotlistIdFromSource) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{8}
}
func (m *HotlistIdFromSource) GetHotlistIdSource() isHotlistIdFromSource_HotlistIdSource {
if m != nil {
return m.HotlistIdSource
}
return nil
}
func (x *HotlistIdFromSource) GetValue() int64 {
if x, ok := x.GetHotlistIdSource().(*HotlistIdFromSource_Value); ok {
return x.Value
}
return 0
}
func (x *HotlistIdFromSource) GetLabel() string {
if x, ok := x.GetHotlistIdSource().(*HotlistIdFromSource_Label); ok {
return x.Label
}
return ""
}
type isHotlistIdFromSource_HotlistIdSource interface {
isHotlistIdFromSource_HotlistIdSource()
}
type HotlistIdFromSource_Value struct {
// ID value of hotlists
Value int64 `protobuf:"varint,1,opt,name=value,proto3,oneof"`
}
type HotlistIdFromSource_Label struct {
// A label prefix
Label string `protobuf:"bytes,2,opt,name=label,proto3,oneof"`
}
func (*HotlistIdFromSource_Value) isHotlistIdFromSource_HotlistIdSource() {}
func (*HotlistIdFromSource_Label) isHotlistIdFromSource_HotlistIdSource() {}
// Specifies a dashboard.
type Dashboard struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// A list of the tabs on the dashboard.
DashboardTab []*DashboardTab `protobuf:"bytes,1,rep,name=dashboard_tab,json=dashboardTab,proto3" json:"dashboard_tab,omitempty"`
// A name for the Dashboard.
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
// A list of notifications attached to this dashboard.
// This is displayed on any dashboard tab in this dashboard.
Notifications []*Notification `protobuf:"bytes,3,rep,name=notifications,proto3" json:"notifications,omitempty"`
// Control which tab is displayed when first opening a dashboard.
// Defaults to Summary
DefaultTab string `protobuf:"bytes,5,opt,name=default_tab,json=defaultTab,proto3" json:"default_tab,omitempty"`
// Controls whether to suppress highlighting of failing tabs.
DownplayFailingTabs bool `protobuf:"varint,8,opt,name=downplay_failing_tabs,json=downplayFailingTabs,proto3" json:"downplay_failing_tabs,omitempty"`
// Deprecated: Invert of 'downplay_failing_tabs'
//
// Deprecated: Do not use.
HighlightFailingTabs bool `protobuf:"varint,6,opt,name=highlight_failing_tabs,json=highlightFailingTabs,proto3" json:"highlight_failing_tabs,omitempty"`
// Controls whether to apply special highlighting to result header columns for
// the current day.
HighlightToday bool `protobuf:"varint,7,opt,name=highlight_today,json=highlightToday,proto3" json:"highlight_today,omitempty"`
// A description paragraph to be displayed.
Description string `protobuf:"bytes,9,opt,name=description,proto3" json:"description,omitempty"`
}
func (x *Dashboard) Reset() {
*x = Dashboard{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Dashboard) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Dashboard) ProtoMessage() {}
func (x *Dashboard) ProtoReflect() protoreflect.Message {
mi := &file_config_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 Dashboard.ProtoReflect.Descriptor instead.
func (*Dashboard) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{9}
}
func (x *Dashboard) GetDashboardTab() []*DashboardTab {
if x != nil {
return x.DashboardTab
}
return nil
}
func (x *Dashboard) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *Dashboard) GetNotifications() []*Notification {
if x != nil {
return x.Notifications
}
return nil
}
func (x *Dashboard) GetDefaultTab() string {
if x != nil {
return x.DefaultTab
}
return ""
}
func (x *Dashboard) GetDownplayFailingTabs() bool {
if x != nil {
return x.DownplayFailingTabs
}
return false
}
// Deprecated: Do not use.
func (x *Dashboard) GetHighlightFailingTabs() bool {
if x != nil {
return x.HighlightFailingTabs
}
return false
}
func (x *Dashboard) GetHighlightToday() bool {
if x != nil {
return x.HighlightToday
}
return false
}
func (x *Dashboard) GetDescription() string {
if x != nil {
return x.Description
}
return ""
}
type LinkTemplate struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The URL template.
Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
// The options templates.
Options []*LinkOptionsTemplate `protobuf:"bytes,2,rep,name=options,proto3" json:"options,omitempty"`
// An optional name, used for the context menu
Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
}
func (x *LinkTemplate) Reset() {
*x = LinkTemplate{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *LinkTemplate) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*LinkTemplate) ProtoMessage() {}
func (x *LinkTemplate) ProtoReflect() protoreflect.Message {
mi := &file_config_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 LinkTemplate.ProtoReflect.Descriptor instead.
func (*LinkTemplate) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{10}
}
func (x *LinkTemplate) GetUrl() string {
if x != nil {
return x.Url
}
return ""
}
func (x *LinkTemplate) GetOptions() []*LinkOptionsTemplate {
if x != nil {
return x.Options
}
return nil
}
func (x *LinkTemplate) GetName() string {
if x != nil {
return x.Name
}
return ""
}
// A simple key/value pair for link options.
type LinkOptionsTemplate struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The key for the option. This is not expanded.
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
// The value for the option. This is expanded the same as the LinkTemplate.
Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
}
func (x *LinkOptionsTemplate) Reset() {
*x = LinkOptionsTemplate{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *LinkOptionsTemplate) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*LinkOptionsTemplate) ProtoMessage() {}
func (x *LinkOptionsTemplate) ProtoReflect() protoreflect.Message {
mi := &file_config_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 LinkOptionsTemplate.ProtoReflect.Descriptor instead.
func (*LinkOptionsTemplate) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{11}
}
func (x *LinkOptionsTemplate) GetKey() string {
if x != nil {
return x.Key
}
return ""
}
func (x *LinkOptionsTemplate) GetValue() string {
if x != nil {
return x.Value
}
return ""
}
// A single tab on a dashboard.
type DashboardTab struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The name of the dashboard tab to display in the client.
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// The name of the TestGroup specifying the test results for this tab.
TestGroupName string `protobuf:"bytes,2,opt,name=test_group_name,json=testGroupName,proto3" json:"test_group_name,omitempty"`
// Default bug component for manually filing bugs from the dashboard
BugComponent int32 `protobuf:"varint,3,opt,name=bug_component,json=bugComponent,proto3" json:"bug_component,omitempty"`
// Default code search path for searching regressions. This value overrides
// the default in the TestGroup config so that dashboards may be customized
// separately.
CodeSearchPath string `protobuf:"bytes,4,opt,name=code_search_path,json=codeSearchPath,proto3" json:"code_search_path,omitempty"`
// See TestGroup.num_columns_recent. This value overrides the default in the
// TestGroup config so that dashboards may be customized separately.
NumColumnsRecent int32 `protobuf:"varint,5,opt,name=num_columns_recent,json=numColumnsRecent,proto3" json:"num_columns_recent,omitempty"`
// Base options to always include, for example:
// width=20&include-filter-by-regex=level_tests
// This is taken from the #fragment part of the testgrid url.
// Best way to create these is to setup the options on testgrid and then
// copy the #fragment part.
BaseOptions string `protobuf:"bytes,6,opt,name=base_options,json=baseOptions,proto3" json:"base_options,omitempty"`
// The URL template to visit after clicking on a cell.
OpenTestTemplate *LinkTemplate `protobuf:"bytes,7,opt,name=open_test_template,json=openTestTemplate,proto3" json:"open_test_template,omitempty"`
// The URL template to visit when filing a bug.
FileBugTemplate *LinkTemplate `protobuf:"bytes,8,opt,name=file_bug_template,json=fileBugTemplate,proto3" json:"file_bug_template,omitempty"`
// The URL template to visit when attaching a bug
AttachBugTemplate *LinkTemplate `protobuf:"bytes,9,opt,name=attach_bug_template,json=attachBugTemplate,proto3" json:"attach_bug_template,omitempty"`
// Text to show in the about menu as a link to another view of the results.
ResultsText string `protobuf:"bytes,10,opt,name=results_text,json=resultsText,proto3" json:"results_text,omitempty"`
// The URL template to visit after clicking.
ResultsUrlTemplate *LinkTemplate `protobuf:"bytes,11,opt,name=results_url_template,json=resultsUrlTemplate,proto3" json:"results_url_template,omitempty"`
// The URL template to visit when searching for code changes, such as pull
// requests
CodeSearchUrlTemplate *LinkTemplate `protobuf:"bytes,12,opt,name=code_search_url_template,json=codeSearchUrlTemplate,proto3" json:"code_search_url_template,omitempty"`
// A description paragraph to be displayed.
Description string `protobuf:"bytes,13,opt,name=description,proto3" json:"description,omitempty"`
// A regular expression that uses the named group syntax to specify how to
// show names in a table.
TabularNamesRegex string `protobuf:"bytes,14,opt,name=tabular_names_regex,json=tabularNamesRegex,proto3" json:"tabular_names_regex,omitempty"`
// Configuration options for dashboard tab alerts.
AlertOptions *DashboardTabAlertOptions `protobuf:"bytes,15,opt,name=alert_options,json=alertOptions,proto3" json:"alert_options,omitempty"`
// Configuration options for dashboard tab flakiness alerts.
FlakinessAlertOptions *DashboardTabFlakinessAlertOptions `protobuf:"bytes,24,opt,name=flakiness_alert_options,json=flakinessAlertOptions,proto3" json:"flakiness_alert_options,omitempty"`
// Configuration options for customizing dashboard tab status calculation.
StatusCustomizationOptions *DashboardTabStatusCustomizationOptions `protobuf:"bytes,26,opt,name=status_customization_options,json=statusCustomizationOptions,proto3" json:"status_customization_options,omitempty"`
// A URL for the "About this Dashboard" menu option
AboutDashboardUrl string `protobuf:"bytes,16,opt,name=about_dashboard_url,json=aboutDashboardUrl,proto3" json:"about_dashboard_url,omitempty"`
// The URL template to visit when viewing an associated bug.
OpenBugTemplate *LinkTemplate `protobuf:"bytes,17,opt,name=open_bug_template,json=openBugTemplate,proto3" json:"open_bug_template,omitempty"`
// If true, auto-file bugs when new alerts occur. This requires that the
// backing test group has `bug_component` set and uses the backing test
// group's `auto_bug_options`.
AutoFileBugs bool `protobuf:"varint,18,opt,name=auto_file_bugs,json=autoFileBugs,proto3" json:"auto_file_bugs,omitempty"`
// Display user local time on the dashboard when set to true (by default).
// If false, uses Pacific Timezone for this DashboardTab.
DisplayLocalTime bool `protobuf:"varint,19,opt,name=display_local_time,json=displayLocalTime,proto3" json:"display_local_time,omitempty"`
// A set of optional LinkTemplates that will become right-click context menu
// items.
// TODO(b/159042168) in the near future this should be re-implemented as a
// generic list of repeated LinkTemplates which users may specify in their
// reqpective configurations as right-click context menus with names and
// actions upon being clicked.
ContextMenuTemplate *LinkTemplate `protobuf:"bytes,20,opt,name=context_menu_template,json=contextMenuTemplate,proto3" json:"context_menu_template,omitempty"`
// When specified, treat a tab as BROKEN as long as one of the most recent
// columns are "broken" (ratio of failed to total tests exceeds <threshold>).
BrokenColumnThreshold float32 `protobuf:"fixed32,21,opt,name=broken_column_threshold,json=brokenColumnThreshold,proto3" json:"broken_column_threshold,omitempty"`
// Options for auto-filed bugs.
// Using this for a dashboard tab requires specifying `beta_autobug_component`
// and will opt you into the beta AutoBug.
BetaAutobugOptions *AutoBugOptions `protobuf:"bytes,22,opt,name=beta_autobug_options,json=betaAutobugOptions,proto3" json:"beta_autobug_options,omitempty"`
// Options for the configuration of the flakiness analysis tool, on a per tab
// basis
HealthAnalysisOptions *HealthAnalysisOptions `protobuf:"bytes,23,opt,name=health_analysis_options,json=healthAnalysisOptions,proto3" json:"health_analysis_options,omitempty"`
// A set of optional Link Templates when search for diffs between columns.
ColumnDiffLinkTemplates []*LinkTemplate `protobuf:"bytes,25,rep,name=column_diff_link_templates,json=columnDiffLinkTemplates,proto3" json:"column_diff_link_templates,omitempty"`
}
func (x *DashboardTab) Reset() {
*x = DashboardTab{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DashboardTab) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DashboardTab) ProtoMessage() {}
func (x *DashboardTab) ProtoReflect() protoreflect.Message {
mi := &file_config_proto_msgTypes[12]
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 DashboardTab.ProtoReflect.Descriptor instead.
func (*DashboardTab) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{12}
}
func (x *DashboardTab) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *DashboardTab) GetTestGroupName() string {
if x != nil {
return x.TestGroupName
}
return ""
}
func (x *DashboardTab) GetBugComponent() int32 {
if x != nil {
return x.BugComponent
}
return 0
}
func (x *DashboardTab) GetCodeSearchPath() string {
if x != nil {
return x.CodeSearchPath
}
return ""
}
func (x *DashboardTab) GetNumColumnsRecent() int32 {
if x != nil {
return x.NumColumnsRecent
}
return 0
}
func (x *DashboardTab) GetBaseOptions() string {
if x != nil {
return x.BaseOptions
}
return ""
}
func (x *DashboardTab) GetOpenTestTemplate() *LinkTemplate {
if x != nil {
return x.OpenTestTemplate
}
return nil
}
func (x *DashboardTab) GetFileBugTemplate() *LinkTemplate {
if x != nil {
return x.FileBugTemplate
}
return nil
}
func (x *DashboardTab) GetAttachBugTemplate() *LinkTemplate {
if x != nil {
return x.AttachBugTemplate
}
return nil
}
func (x *DashboardTab) GetResultsText() string {
if x != nil {
return x.ResultsText
}
return ""
}
func (x *DashboardTab) GetResultsUrlTemplate() *LinkTemplate {
if x != nil {
return x.ResultsUrlTemplate
}
return nil
}
func (x *DashboardTab) GetCodeSearchUrlTemplate() *LinkTemplate {
if x != nil {
return x.CodeSearchUrlTemplate
}
return nil
}
func (x *DashboardTab) GetDescription() string {
if x != nil {
return x.Description
}
return ""
}
func (x *DashboardTab) GetTabularNamesRegex() string {
if x != nil {
return x.TabularNamesRegex
}
return ""
}
func (x *DashboardTab) GetAlertOptions() *DashboardTabAlertOptions {
if x != nil {
return x.AlertOptions
}
return nil
}
func (x *DashboardTab) GetFlakinessAlertOptions() *DashboardTabFlakinessAlertOptions {
if x != nil {
return x.FlakinessAlertOptions
}
return nil
}
func (x *DashboardTab) GetStatusCustomizationOptions() *DashboardTabStatusCustomizationOptions {
if x != nil {
return x.StatusCustomizationOptions
}
return nil
}
func (x *DashboardTab) GetAboutDashboardUrl() string {
if x != nil {
return x.AboutDashboardUrl
}
return ""
}
func (x *DashboardTab) GetOpenBugTemplate() *LinkTemplate {
if x != nil {
return x.OpenBugTemplate
}
return nil
}
func (x *DashboardTab) GetAutoFileBugs() bool {
if x != nil {
return x.AutoFileBugs
}
return false
}
func (x *DashboardTab) GetDisplayLocalTime() bool {
if x != nil {
return x.DisplayLocalTime
}
return false
}
func (x *DashboardTab) GetContextMenuTemplate() *LinkTemplate {
if x != nil {
return x.ContextMenuTemplate
}
return nil
}
func (x *DashboardTab) GetBrokenColumnThreshold() float32 {
if x != nil {
return x.BrokenColumnThreshold
}
return 0
}
func (x *DashboardTab) GetBetaAutobugOptions() *AutoBugOptions {
if x != nil {
return x.BetaAutobugOptions
}
return nil
}
func (x *DashboardTab) GetHealthAnalysisOptions() *HealthAnalysisOptions {
if x != nil {
return x.HealthAnalysisOptions
}
return nil
}
func (x *DashboardTab) GetColumnDiffLinkTemplates() []*LinkTemplate {
if x != nil {
return x.ColumnDiffLinkTemplates
}
return nil
}
// Configuration options for dashboard tab alerts.
type DashboardTabAlertOptions struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Time in hours before an alert will be added to a test results table if the
// run date of the latest results are older than this time. If zero, no
// alerts are raised.
AlertStaleResultsHours int32 `protobuf:"varint,1,opt,name=alert_stale_results_hours,json=alertStaleResultsHours,proto3" json:"alert_stale_results_hours,omitempty"`
// The number of consecutive test result failures to see before alerting of
// a consistent failure. If zero, no alerts are raised.
NumFailuresToAlert int32 `protobuf:"varint,2,opt,name=num_failures_to_alert,json=numFailuresToAlert,proto3" json:"num_failures_to_alert,omitempty"`
// The comma-separated addresses to send mail.
AlertMailToAddresses string `protobuf:"bytes,3,opt,name=alert_mail_to_addresses,json=alertMailToAddresses,proto3" json:"alert_mail_to_addresses,omitempty"`
// The number of consecutive test passes to close the alert.
NumPassesToDisableAlert int32 `protobuf:"varint,4,opt,name=num_passes_to_disable_alert,json=numPassesToDisableAlert,proto3" json:"num_passes_to_disable_alert,omitempty"`
// Custom subject for alert mails.
Subject string `protobuf:"bytes,5,opt,name=subject,proto3" json:"subject,omitempty"`
// Custom link for further help/instructions on debugging this alert.
DebugUrl string `protobuf:"bytes,6,opt,name=debug_url,json=debugUrl,proto3" json:"debug_url,omitempty"`
// Custom text to show for the debug link.
DebugMessage string `protobuf:"bytes,7,opt,name=debug_message,json=debugMessage,proto3" json:"debug_message,omitempty"`
// Wait time between emails. If unset or zero, an email will be sent only once
// it becomes a consistent failure, and not again until it succeeds.
// TestGrid does not pester about staleness
WaitMinutesBetweenEmails int32 `protobuf:"varint,8,opt,name=wait_minutes_between_emails,json=waitMinutesBetweenEmails,proto3" json:"wait_minutes_between_emails,omitempty"`
// A custom message
AlertMailFailureMessage string `protobuf:"bytes,9,opt,name=alert_mail_failure_message,json=alertMailFailureMessage,proto3" json:"alert_mail_failure_message,omitempty"`
}
func (x *DashboardTabAlertOptions) Reset() {
*x = DashboardTabAlertOptions{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DashboardTabAlertOptions) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DashboardTabAlertOptions) ProtoMessage() {}
func (x *DashboardTabAlertOptions) ProtoReflect() protoreflect.Message {
mi := &file_config_proto_msgTypes[13]
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 DashboardTabAlertOptions.ProtoReflect.Descriptor instead.
func (*DashboardTabAlertOptions) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{13}
}
func (x *DashboardTabAlertOptions) GetAlertStaleResultsHours() int32 {
if x != nil {
return x.AlertStaleResultsHours
}
return 0
}
func (x *DashboardTabAlertOptions) GetNumFailuresToAlert() int32 {
if x != nil {
return x.NumFailuresToAlert
}
return 0
}
func (x *DashboardTabAlertOptions) GetAlertMailToAddresses() string {
if x != nil {
return x.AlertMailToAddresses
}
return ""
}
func (x *DashboardTabAlertOptions) GetNumPassesToDisableAlert() int32 {
if x != nil {
return x.NumPassesToDisableAlert
}
return 0
}
func (x *DashboardTabAlertOptions) GetSubject() string {
if x != nil {
return x.Subject
}
return ""
}
func (x *DashboardTabAlertOptions) GetDebugUrl() string {
if x != nil {
return x.DebugUrl
}
return ""
}
func (x *DashboardTabAlertOptions) GetDebugMessage() string {
if x != nil {
return x.DebugMessage
}
return ""
}
func (x *DashboardTabAlertOptions) GetWaitMinutesBetweenEmails() int32 {
if x != nil {
return x.WaitMinutesBetweenEmails
}
return 0
}
func (x *DashboardTabAlertOptions) GetAlertMailFailureMessage() string {
if x != nil {
return x.AlertMailFailureMessage
}
return ""
}
// Configuration options for dashboard tab flakiness alerts.
type DashboardTabFlakinessAlertOptions struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The minimum amount of flakiness needed to trigger a flakiness alert.
// 0=Disable alerts
// This is a percentage; expected values go from 0 to 100 (100 = 100% flaky)
MinimumFlakinessToAlert float32 `protobuf:"fixed32,1,opt,name=minimum_flakiness_to_alert,json=minimumFlakinessToAlert,proto3" json:"minimum_flakiness_to_alert,omitempty"`
// The comma-separated addresses to send mail.
AlertMailToAddresses string `protobuf:"bytes,2,opt,name=alert_mail_to_addresses,json=alertMailToAddresses,proto3" json:"alert_mail_to_addresses,omitempty"`
// Custom subject for alert mails.
Subject string `protobuf:"bytes,3,opt,name=subject,proto3" json:"subject,omitempty"`
// Minimum time between sending mails.
WaitMinutesBetweenEmails int32 `protobuf:"varint,4,opt,name=wait_minutes_between_emails,json=waitMinutesBetweenEmails,proto3" json:"wait_minutes_between_emails,omitempty"`
// A custom message
// TODO(RonWeber): This should be a template
AlertMailFailureMessage string `protobuf:"bytes,5,opt,name=alert_mail_failure_message,json=alertMailFailureMessage,proto3" json:"alert_mail_failure_message,omitempty"`
}
func (x *DashboardTabFlakinessAlertOptions) Reset() {
*x = DashboardTabFlakinessAlertOptions{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DashboardTabFlakinessAlertOptions) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DashboardTabFlakinessAlertOptions) ProtoMessage() {}
func (x *DashboardTabFlakinessAlertOptions) ProtoReflect() protoreflect.Message {
mi := &file_config_proto_msgTypes[14]
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 DashboardTabFlakinessAlertOptions.ProtoReflect.Descriptor instead.
func (*DashboardTabFlakinessAlertOptions) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{14}
}
func (x *DashboardTabFlakinessAlertOptions) GetMinimumFlakinessToAlert() float32 {
if x != nil {
return x.MinimumFlakinessToAlert
}
return 0
}
func (x *DashboardTabFlakinessAlertOptions) GetAlertMailToAddresses() string {
if x != nil {
return x.AlertMailToAddresses
}
return ""
}
func (x *DashboardTabFlakinessAlertOptions) GetSubject() string {
if x != nil {
return x.Subject
}
return ""
}
func (x *DashboardTabFlakinessAlertOptions) GetWaitMinutesBetweenEmails() int32 {
if x != nil {
return x.WaitMinutesBetweenEmails
}
return 0
}
func (x *DashboardTabFlakinessAlertOptions) GetAlertMailFailureMessage() string {
if x != nil {
return x.AlertMailFailureMessage
}
return ""
}
// Configuration options for customizing the tab status calculation.
type DashboardTabStatusCustomizationOptions struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Maximum amount of flakiness tolerated to categorize tab as acceptable. Will
// supplement dashboard tab status message, and mark the tab as ACCEPTABLE in
// the dashboard group view. Set to "0" to disable. This is configured as a
// percentage of valid (non-ignored) columns; expected values go from 0.0 to
// 100.0 (100% = no passing columns is acceptable)
MaxAcceptableFlakiness float32 `protobuf:"fixed32,1,opt,name=max_acceptable_flakiness,json=maxAcceptableFlakiness,proto3" json:"max_acceptable_flakiness,omitempty"`
IgnoredTestStatuses []DashboardTabStatusCustomizationOptions_IgnoredTestStatus `protobuf:"varint,2,rep,packed,name=ignored_test_statuses,json=ignoredTestStatuses,proto3,enum=testgrid.config.DashboardTabStatusCustomizationOptions_IgnoredTestStatus" json:"ignored_test_statuses,omitempty"`
// Minimum number of runs required excluding ignored ones.
// If the non-ignored columns is less than this, tab status will be PENDING.
MinAcceptableRuns int32 `protobuf:"varint,3,opt,name=min_acceptable_runs,json=minAcceptableRuns,proto3" json:"min_acceptable_runs,omitempty"`
}
func (x *DashboardTabStatusCustomizationOptions) Reset() {
*x = DashboardTabStatusCustomizationOptions{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DashboardTabStatusCustomizationOptions) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DashboardTabStatusCustomizationOptions) ProtoMessage() {}
func (x *DashboardTabStatusCustomizationOptions) ProtoReflect() protoreflect.Message {
mi := &file_config_proto_msgTypes[15]
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 DashboardTabStatusCustomizationOptions.ProtoReflect.Descriptor instead.
func (*DashboardTabStatusCustomizationOptions) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{15}
}
func (x *DashboardTabStatusCustomizationOptions) GetMaxAcceptableFlakiness() float32 {
if x != nil {
return x.MaxAcceptableFlakiness
}
return 0
}
func (x *DashboardTabStatusCustomizationOptions) GetIgnoredTestStatuses() []DashboardTabStatusCustomizationOptions_IgnoredTestStatus {
if x != nil {
return x.IgnoredTestStatuses
}
return nil
}
func (x *DashboardTabStatusCustomizationOptions) GetMinAcceptableRuns() int32 {
if x != nil {
return x.MinAcceptableRuns
}
return 0
}
// Specifies a dashboard group.
type DashboardGroup struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The name for the dashboard group.
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// A list of names specifying dashboards to show links to in a separate tabbed
// bar at the top of the page for each of the given dashboards.
DashboardNames []string `protobuf:"bytes,2,rep,name=dashboard_names,json=dashboardNames,proto3" json:"dashboard_names,omitempty"`
// A description paragraph to be displayed.
Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
}
func (x *DashboardGroup) Reset() {
*x = DashboardGroup{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DashboardGroup) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DashboardGroup) ProtoMessage() {}
func (x *DashboardGroup) ProtoReflect() protoreflect.Message {
mi := &file_config_proto_msgTypes[16]
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 DashboardGroup.ProtoReflect.Descriptor instead.
func (*DashboardGroup) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{16}
}
func (x *DashboardGroup) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *DashboardGroup) GetDashboardNames() []string {
if x != nil {
return x.DashboardNames
}
return nil
}
func (x *DashboardGroup) GetDescription() string {
if x != nil {
return x.Description
}
return ""
}
// A service configuration consisting of multiple test groups and dashboards.
type Configuration struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// A list of groups of tests to gather.
TestGroups []*TestGroup `protobuf:"bytes,1,rep,name=test_groups,json=testGroups,proto3" json:"test_groups,omitempty"`
// A list of all of the dashboards for a server.
Dashboards []*Dashboard `protobuf:"bytes,2,rep,name=dashboards,proto3" json:"dashboards,omitempty"`
// A list of all the dashboard groups for a server.
DashboardGroups []*DashboardGroup `protobuf:"bytes,3,rep,name=dashboard_groups,json=dashboardGroups,proto3" json:"dashboard_groups,omitempty"`
}
func (x *Configuration) Reset() {
*x = Configuration{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Configuration) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Configuration) ProtoMessage() {}
func (x *Configuration) ProtoReflect() protoreflect.Message {
mi := &file_config_proto_msgTypes[17]
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 Configuration.ProtoReflect.Descriptor instead.
func (*Configuration) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{17}
}
func (x *Configuration) GetTestGroups() []*TestGroup {
if x != nil {
return x.TestGroups
}
return nil
}
func (x *Configuration) GetDashboards() []*Dashboard {
if x != nil {
return x.Dashboards
}
return nil
}
func (x *Configuration) GetDashboardGroups() []*DashboardGroup {
if x != nil {
return x.DashboardGroups
}
return nil
}
// A grouping of configuration options for the flakiness analysis tool.
// Later configuration options could include the ability to choose different
// kinds of flakiness and choosing if and who to email a copy of the flakiness
// report.
type HealthAnalysisOptions struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Defaults to false; flakiness analysis is opt-in
Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"`
// Defines the number of days for one interval of analysis.
// i.e. flakiness will be analyzed for the previous N days starting from Now,
// and it will be compared to the calculated N days before that for trend
// analysis.
DaysOfAnalysis int32 `protobuf:"varint,2,opt,name=days_of_analysis,json=daysOfAnalysis,proto3" json:"days_of_analysis,omitempty"`
// When to send healthiness emails out, uses cron string format.
EmailSchedule string `protobuf:"bytes,3,opt,name=email_schedule,json=emailSchedule,proto3" json:"email_schedule,omitempty"`
// A comma-separated list of healthiness email recipients.
EmailRecipients string `protobuf:"bytes,4,opt,name=email_recipients,json=emailRecipients,proto3" json:"email_recipients,omitempty"`
// A compilable regex string for grouping tests by name.
// Works the same as the group-by-regex-mask option of base_options:
// go/testgrid/users/dashboard_guide#grouping-tests
// An empty string means no grouping.
// e.g. test name: "//path/to/test - env", regex: ` - \w+`
// The regex will match " - env" in the above test name and give a group of:
// //path/to/test <- Group Name
// - env <- Group Member
GroupingRegex string `protobuf:"bytes,5,opt,name=grouping_regex,json=groupingRegex,proto3" json:"grouping_regex,omitempty"`
}
func (x *HealthAnalysisOptions) Reset() {
*x = HealthAnalysisOptions{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *HealthAnalysisOptions) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*HealthAnalysisOptions) ProtoMessage() {}
func (x *HealthAnalysisOptions) ProtoReflect() protoreflect.Message {
mi := &file_config_proto_msgTypes[18]
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 HealthAnalysisOptions.ProtoReflect.Descriptor instead.
func (*HealthAnalysisOptions) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{18}
}
func (x *HealthAnalysisOptions) GetEnable() bool {
if x != nil {
return x.Enable
}
return false
}
func (x *HealthAnalysisOptions) GetDaysOfAnalysis() int32 {
if x != nil {
return x.DaysOfAnalysis
}
return 0
}
func (x *HealthAnalysisOptions) GetEmailSchedule() string {
if x != nil {
return x.EmailSchedule
}
return ""
}
func (x *HealthAnalysisOptions) GetEmailRecipients() string {
if x != nil {
return x.EmailRecipients
}
return ""
}
func (x *HealthAnalysisOptions) GetGroupingRegex() string {
if x != nil {
return x.GroupingRegex
}
return ""
}
// The DefaultConfiguration Proto is deprecated, and will be deleted after Nov
// 1, 2019. For defaulting behavior, use the yamlcfg library instead.
type DefaultConfiguration struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// A default testgroup with default initialization data
//
// Deprecated: Do not use.
DefaultTestGroup *TestGroup `protobuf:"bytes,1,opt,name=default_test_group,json=defaultTestGroup,proto3" json:"default_test_group,omitempty"`
// A default dashboard tab with default initialization data
//
// Deprecated: Do not use.
DefaultDashboardTab *DashboardTab `protobuf:"bytes,2,opt,name=default_dashboard_tab,json=defaultDashboardTab,proto3" json:"default_dashboard_tab,omitempty"`
}
func (x *DefaultConfiguration) Reset() {
*x = DefaultConfiguration{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DefaultConfiguration) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DefaultConfiguration) ProtoMessage() {}
func (x *DefaultConfiguration) ProtoReflect() protoreflect.Message {
mi := &file_config_proto_msgTypes[19]
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 DefaultConfiguration.ProtoReflect.Descriptor instead.
func (*DefaultConfiguration) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{19}
}
// Deprecated: Do not use.
func (x *DefaultConfiguration) GetDefaultTestGroup() *TestGroup {
if x != nil {
return x.DefaultTestGroup
}
return nil
}
// Deprecated: Do not use.
func (x *DefaultConfiguration) GetDefaultDashboardTab() *DashboardTab {
if x != nil {
return x.DefaultDashboardTab
}
return nil
}
// Specifies name elements to be selected from configuration values
type TestNameConfig_NameElement struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// A space-delimited string of labels
Labels string `protobuf:"bytes,1,opt,name=labels,proto3" json:"labels,omitempty"`
// Configuration value to use.
// Valid choice are:
// 'Tests name': The name of a test case
// 'Commit': The commit number of the build
// 'Context', 'Thread': The info extracted from each junit files:
// - junit_core-os_01.xml -> Context: core-os, Thread: 01
// - junit_runner.xml -> Context: runner
// - junit_01.xml -> Thread: 01
// or any metadata key from finished.json, which is copied from your test
// suite.
//
// A valid sample TestNameConfig looks like:
// test_name_config:
// name_elements:
// - target_config: Tests name
// - target_config: Context
// name_format: '%s [%s]'
TargetConfig string `protobuf:"bytes,2,opt,name=target_config,json=targetConfig,proto3" json:"target_config,omitempty"`
// Whether to use the build-target name
BuildTarget bool `protobuf:"varint,3,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
// A space-delimited string of Bazel build tags.
Tags string `protobuf:"bytes,4,opt,name=tags,proto3" json:"tags,omitempty"`
// The key of a test result's property.
TestProperty string `protobuf:"bytes,5,opt,name=test_property,json=testProperty,proto3" json:"test_property,omitempty"`
}
func (x *TestNameConfig_NameElement) Reset() {
*x = TestNameConfig_NameElement{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TestNameConfig_NameElement) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TestNameConfig_NameElement) ProtoMessage() {}
func (x *TestNameConfig_NameElement) ProtoReflect() protoreflect.Message {
mi := &file_config_proto_msgTypes[20]
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 TestNameConfig_NameElement.ProtoReflect.Descriptor instead.
func (*TestNameConfig_NameElement) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{0, 0}
}
func (x *TestNameConfig_NameElement) GetLabels() string {
if x != nil {
return x.Labels
}
return ""
}
func (x *TestNameConfig_NameElement) GetTargetConfig() string {
if x != nil {
return x.TargetConfig
}
return ""
}
func (x *TestNameConfig_NameElement) GetBuildTarget() bool {
if x != nil {
return x.BuildTarget
}
return false
}
func (x *TestNameConfig_NameElement) GetTags() string {
if x != nil {
return x.Tags
}
return ""
}
func (x *TestNameConfig_NameElement) GetTestProperty() string {
if x != nil {
return x.TestProperty
}
return ""
}
// Custom column headers for defining extra column-heading rows from values in
// the test result.
type TestGroup_ColumnHeader struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Label string `protobuf:"bytes,1,opt,name=label,proto3" json:"label,omitempty"`
Property string `protobuf:"bytes,2,opt,name=property,proto3" json:"property,omitempty"`
ConfigurationValue string `protobuf:"bytes,3,opt,name=configuration_value,json=configurationValue,proto3" json:"configuration_value,omitempty"`
// If true, list all distinct values. Else, list multiple distinct values as
// "*".
ListAllValues bool `protobuf:"varint,4,opt,name=list_all_values,json=listAllValues,proto3" json:"list_all_values,omitempty"`
}
func (x *TestGroup_ColumnHeader) Reset() {
*x = TestGroup_ColumnHeader{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TestGroup_ColumnHeader) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TestGroup_ColumnHeader) ProtoMessage() {}
func (x *TestGroup_ColumnHeader) ProtoReflect() protoreflect.Message {
mi := &file_config_proto_msgTypes[21]
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 TestGroup_ColumnHeader.ProtoReflect.Descriptor instead.
func (*TestGroup_ColumnHeader) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{2, 0}
}
func (x *TestGroup_ColumnHeader) GetLabel() string {
if x != nil {
return x.Label
}
return ""
}
func (x *TestGroup_ColumnHeader) GetProperty() string {
if x != nil {
return x.Property
}
return ""
}
func (x *TestGroup_ColumnHeader) GetConfigurationValue() string {
if x != nil {
return x.ConfigurationValue
}
return ""
}
func (x *TestGroup_ColumnHeader) GetListAllValues() bool {
if x != nil {
return x.ListAllValues
}
return false
}
// Associates the presence of a named test property with a custom short text
// displayed over the results. Short text must be <=5 characters long.
type TestGroup_TestAnnotation struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ShortText string `protobuf:"bytes,1,opt,name=short_text,json=shortText,proto3" json:"short_text,omitempty"`
// Types that are assignable to ShortTextMessageSource:
// *TestGroup_TestAnnotation_PropertyName
ShortTextMessageSource isTestGroup_TestAnnotation_ShortTextMessageSource `protobuf_oneof:"short_text_message_source"`
}
func (x *TestGroup_TestAnnotation) Reset() {
*x = TestGroup_TestAnnotation{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TestGroup_TestAnnotation) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TestGroup_TestAnnotation) ProtoMessage() {}
func (x *TestGroup_TestAnnotation) ProtoReflect() protoreflect.Message {
mi := &file_config_proto_msgTypes[22]
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 TestGroup_TestAnnotation.ProtoReflect.Descriptor instead.
func (*TestGroup_TestAnnotation) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{2, 1}
}
func (x *TestGroup_TestAnnotation) GetShortText() string {
if x != nil {
return x.ShortText
}
return ""
}
func (m *TestGroup_TestAnnotation) GetShortTextMessageSource() isTestGroup_TestAnnotation_ShortTextMessageSource {
if m != nil {
return m.ShortTextMessageSource
}
return nil
}
func (x *TestGroup_TestAnnotation) GetPropertyName() string {
if x, ok := x.GetShortTextMessageSource().(*TestGroup_TestAnnotation_PropertyName); ok {
return x.PropertyName
}
return ""
}
type isTestGroup_TestAnnotation_ShortTextMessageSource interface {
isTestGroup_TestAnnotation_ShortTextMessageSource()
}
type TestGroup_TestAnnotation_PropertyName struct {
PropertyName string `protobuf:"bytes,2,opt,name=property_name,json=propertyName,proto3,oneof"`
}
func (*TestGroup_TestAnnotation_PropertyName) isTestGroup_TestAnnotation_ShortTextMessageSource() {}
// A string key value pair message
type TestGroup_KeyValue struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
}
func (x *TestGroup_KeyValue) Reset() {
*x = TestGroup_KeyValue{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TestGroup_KeyValue) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TestGroup_KeyValue) ProtoMessage() {}
func (x *TestGroup_KeyValue) ProtoReflect() protoreflect.Message {
mi := &file_config_proto_msgTypes[23]
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 TestGroup_KeyValue.ProtoReflect.Descriptor instead.
func (*TestGroup_KeyValue) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{2, 2}
}
func (x *TestGroup_KeyValue) GetKey() string {
if x != nil {
return x.Key
}
return ""
}
func (x *TestGroup_KeyValue) GetValue() string {
if x != nil {
return x.Value
}
return ""
}
type TestGroup_ResultSource struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Types that are assignable to ResultSourceConfig:
// *TestGroup_ResultSource_GcsConfig
// *TestGroup_ResultSource_ResultstoreConfig
ResultSourceConfig isTestGroup_ResultSource_ResultSourceConfig `protobuf_oneof:"result_source_config"`
}
func (x *TestGroup_ResultSource) Reset() {
*x = TestGroup_ResultSource{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[24]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TestGroup_ResultSource) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TestGroup_ResultSource) ProtoMessage() {}
func (x *TestGroup_ResultSource) ProtoReflect() protoreflect.Message {
mi := &file_config_proto_msgTypes[24]
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 TestGroup_ResultSource.ProtoReflect.Descriptor instead.
func (*TestGroup_ResultSource) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{2, 3}
}
func (m *TestGroup_ResultSource) GetResultSourceConfig() isTestGroup_ResultSource_ResultSourceConfig {
if m != nil {
return m.ResultSourceConfig
}
return nil
}
func (x *TestGroup_ResultSource) GetGcsConfig() *GCSConfig {
if x, ok := x.GetResultSourceConfig().(*TestGroup_ResultSource_GcsConfig); ok {
return x.GcsConfig
}
return nil
}
func (x *TestGroup_ResultSource) GetResultstoreConfig() *ResultStoreConfig {
if x, ok := x.GetResultSourceConfig().(*TestGroup_ResultSource_ResultstoreConfig); ok {
return x.ResultstoreConfig
}
return nil
}
type isTestGroup_ResultSource_ResultSourceConfig interface {
isTestGroup_ResultSource_ResultSourceConfig()
}
type TestGroup_ResultSource_GcsConfig struct {
// GCS buckets holding junit and json results, typically created by prow.
GcsConfig *GCSConfig `protobuf:"bytes,2,opt,name=gcs_config,json=gcsConfig,proto3,oneof"`
}
type TestGroup_ResultSource_ResultstoreConfig struct {
// Invocations stored in ResultStore.
ResultstoreConfig *ResultStoreConfig `protobuf:"bytes,6,opt,name=resultstore_config,json=resultstoreConfig,proto3,oneof"`
}
func (*TestGroup_ResultSource_GcsConfig) isTestGroup_ResultSource_ResultSourceConfig() {}
func (*TestGroup_ResultSource_ResultstoreConfig) isTestGroup_ResultSource_ResultSourceConfig() {}
type AutoBugOptions_DefaultTestMetadata struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
BugComponent int32 `protobuf:"varint,1,opt,name=bug_component,json=bugComponent,proto3" json:"bug_component,omitempty"`
Owner string `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"`
Cc []string `protobuf:"bytes,3,rep,name=cc,proto3" json:"cc,omitempty"`
}
func (x *AutoBugOptions_DefaultTestMetadata) Reset() {
*x = AutoBugOptions_DefaultTestMetadata{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[25]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AutoBugOptions_DefaultTestMetadata) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AutoBugOptions_DefaultTestMetadata) ProtoMessage() {}
func (x *AutoBugOptions_DefaultTestMetadata) ProtoReflect() protoreflect.Message {
mi := &file_config_proto_msgTypes[25]
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 AutoBugOptions_DefaultTestMetadata.ProtoReflect.Descriptor instead.
func (*AutoBugOptions_DefaultTestMetadata) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{7, 0}
}
func (x *AutoBugOptions_DefaultTestMetadata) GetBugComponent() int32 {
if x != nil {
return x.BugComponent
}
return 0
}
func (x *AutoBugOptions_DefaultTestMetadata) GetOwner() string {
if x != nil {
return x.Owner
}
return ""
}
func (x *AutoBugOptions_DefaultTestMetadata) GetCc() []string {
if x != nil {
return x.Cc
}
return nil
}
var File_config_proto protoreflect.FileDescriptor
var file_config_proto_rawDesc = []byte{
0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f,
0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a,
0x2a, 0x70, 0x62, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75,
0x61, 0x74, 0x6f, 0x72, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x65, 0x76, 0x61, 0x6c,
0x75, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xac, 0x02, 0x0a, 0x0e,
0x54, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x50,
0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18,
0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64,
0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65,
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65,
0x6e, 0x74, 0x52, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73,
0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61,
0x74, 0x1a, 0xa6, 0x01, 0x0a, 0x0b, 0x4e, 0x61, 0x6d, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
0x74, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x61, 0x72,
0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21,
0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03,
0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65,
0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x72,
0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x65,
0x73, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x22, 0x4b, 0x0a, 0x0c, 0x4e, 0x6f,
0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75,
0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d,
0x6d, 0x61, 0x72, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f,
0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74,
0x65, 0x78, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x22, 0x8d, 0x20, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74,
0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x63, 0x73,
0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67,
0x63, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x61, 0x79, 0x73,
0x5f, 0x6f, 0x66, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
0x05, 0x52, 0x0d, 0x64, 0x61, 0x79, 0x73, 0x4f, 0x66, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
0x12, 0x25, 0x0a, 0x0e, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x70, 0x65, 0x6e, 0x64, 0x69,
0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f, 0x72,
0x65, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69,
0x67, 0x6e, 0x6f, 0x72, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x12, 0x50, 0x0a, 0x11, 0x74, 0x65,
0x73, 0x74, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18,
0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 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, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x0f, 0x74, 0x65, 0x73,
0x74, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x32, 0x0a, 0x15,
0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x75, 0x62, 0x73,
0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x69, 0x67, 0x6e,
0x6f, 0x72, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
0x12, 0x4c, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65,
0x72, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 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, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72,
0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x58,
0x0a, 0x11, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70,
0x69, 0x6e, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 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, 0x2e, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x47, 0x72,
0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b,
0x47, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x3d, 0x0a, 0x19, 0x61, 0x6c, 0x65, 0x72,
0x74, 0x5f, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f,
0x68, 0x6f, 0x75, 0x72, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x52,
0x16, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x53, 0x74, 0x61, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c,
0x74, 0x73, 0x48, 0x6f, 0x75, 0x72, 0x73, 0x12, 0x35, 0x0a, 0x15, 0x6e, 0x75, 0x6d, 0x5f, 0x66,
0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74,
0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x52, 0x12, 0x6e, 0x75, 0x6d, 0x46,
0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x54, 0x6f, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x27,
0x0a, 0x0d, 0x62, 0x75, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x18,
0x0d, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0c, 0x62, 0x75, 0x67, 0x43, 0x6f,
0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x64, 0x65, 0x5f,
0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0e, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0e, 0x63, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x61, 0x74,
0x68, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73,
0x5f, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x6e,
0x75, 0x6d, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x12,
0x2a, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61,
0x64, 0x61, 0x74, 0x61, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x54,
0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x17, 0x61,
0x6c, 0x65, 0x72, 0x74, 0x5f, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x64, 0x64,
0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01,
0x52, 0x14, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x4d, 0x61, 0x69, 0x6c, 0x54, 0x6f, 0x41, 0x64, 0x64,
0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x12, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f,
0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x12, 0x20, 0x01,
0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x10, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x4d, 0x61, 0x69,
0x6c, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x3f, 0x0a, 0x1a, 0x61, 0x6c, 0x65, 0x72,
0x74, 0x5f, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x6d,
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01,
0x52, 0x17, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x4d, 0x61, 0x69, 0x6c, 0x46, 0x61, 0x69, 0x6c, 0x75,
0x72, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x14, 0x61, 0x6c, 0x65,
0x72, 0x74, 0x5f, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x75, 0x72,
0x6c, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x11, 0x61, 0x6c, 0x65,
0x72, 0x74, 0x4d, 0x61, 0x69, 0x6c, 0x44, 0x65, 0x62, 0x75, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x4c,
0x0a, 0x21, 0x6d, 0x69, 0x6e, 0x5f, 0x65, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x5f, 0x6d, 0x69,
0x6e, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x5f, 0x6d, 0x61,
0x69, 0x6c, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x52, 0x1d, 0x6d,
0x69, 0x6e, 0x45, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73,
0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x4d, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x2e, 0x0a, 0x13,
0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x6b, 0x79, 0x5f, 0x73, 0x74, 0x61,
0x74, 0x75, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x65, 0x6e, 0x61, 0x62, 0x6c,
0x65, 0x46, 0x6c, 0x61, 0x6b, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x15,
0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x5f, 0x73,
0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x64, 0x69, 0x73,
0x61, 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
0x12, 0x36, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x5f, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74,
0x65, 0x73, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x42,
0x02, 0x18, 0x01, 0x52, 0x13, 0x75, 0x73, 0x65, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74,
0x65, 0x73, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x69, 0x73, 0x61,
0x62, 0x6c, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x77, 0x6a, 0x6f, 0x62, 0x5f, 0x61, 0x6e, 0x61, 0x6c,
0x79, 0x73, 0x69, 0x73, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x64, 0x69, 0x73, 0x61,
0x62, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x77, 0x6a, 0x6f, 0x62, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73,
0x69, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61,
0x6c, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72,
0x6e, 0x61, 0x6c, 0x12, 0x49, 0x0a, 0x10, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e,
0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
0x54, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e,
0x74, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x43,
0x0a, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
0x1b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64,
0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x73, 0x12, 0x55, 0x0a, 0x10, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x67,
0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 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, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72,
0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61,
0x72, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x6e,
0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64,
0x73, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54,
0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x12, 0x54, 0x0a, 0x10, 0x74, 0x65,
0x73, 0x74, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x1f,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 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,
0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
0x0f, 0x74, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
0x12, 0x38, 0x0a, 0x19, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74,
0x68, 0x6f, 0x64, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x18, 0x20, 0x20,
0x01, 0x28, 0x05, 0x52, 0x15, 0x6d, 0x61, 0x78, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x68,
0x6f, 0x64, 0x73, 0x50, 0x65, 0x72, 0x54, 0x65, 0x73, 0x74, 0x12, 0x58, 0x0a, 0x15, 0x74, 0x65,
0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6f, 0x70, 0x74, 0x69,
0x6f, 0x6e, 0x73, 0x18, 0x22, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x73, 0x74,
0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, 0x74,
0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
0x13, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4f, 0x70, 0x74,
0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x61, 0x67,
0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x23, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e,
0x74, 0x65, 0x73, 0x74, 0x54, 0x61, 0x67, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x4d,
0x0a, 0x10, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x62, 0x75, 0x67, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f,
0x6e, 0x73, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67,
0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x42,
0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0e, 0x61,
0x75, 0x74, 0x6f, 0x42, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a,
0x16, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d,
0x65, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x18, 0x25, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x6d,
0x61, 0x78, 0x54, 0x65, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x48, 0x6f, 0x75,
0x72, 0x73, 0x12, 0x3c, 0x0a, 0x1b, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x65, 0x73,
0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6c, 0x65, 0x72,
0x74, 0x18, 0x26, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x6e, 0x75, 0x6d, 0x50, 0x61, 0x73, 0x73,
0x65, 0x73, 0x54, 0x6f, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74,
0x12, 0x2b, 0x0a, 0x12, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x62, 0x75, 0x67, 0x73, 0x5f, 0x62, 0x79,
0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x27, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6c, 0x69,
0x6e, 0x6b, 0x42, 0x75, 0x67, 0x73, 0x42, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x59, 0x0a,
0x16, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x70, 0x72, 0x6f,
0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x29, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 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, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c,
0x75, 0x65, 0x52, 0x14, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x50, 0x72,
0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x67, 0x61, 0x74, 0x68,
0x65, 0x72, 0x5f, 0x62, 0x75, 0x67, 0x73, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x67,
0x61, 0x74, 0x68, 0x65, 0x72, 0x42, 0x75, 0x67, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x68, 0x6f,
0x72, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x2b,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x78, 0x74, 0x4d,
0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x4b, 0x0a, 0x22, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6f,
0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x2c, 0x20, 0x01, 0x28,
0x09, 0x52, 0x1f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65,
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c,
0x75, 0x65, 0x12, 0x38, 0x0a, 0x19, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x62, 0x75, 0x67, 0x73, 0x5f,
0x62, 0x79, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x18,
0x2d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x6c, 0x69, 0x6e, 0x6b, 0x42, 0x75, 0x67, 0x73, 0x42,
0x79, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x12, 0x35, 0x0a, 0x17,
0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x6d, 0x61, 0x74, 0x63,
0x68, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74,
0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65,
0x67, 0x65, 0x78, 0x12, 0x39, 0x0a, 0x19, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x68,
0x6f, 0x64, 0x5f, 0x75, 0x6e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78,
0x18, 0x3d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x68,
0x6f, 0x64, 0x55, 0x6e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x67, 0x65, 0x78, 0x12, 0x31,
0x0a, 0x15, 0x75, 0x73, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f,
0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x75,
0x73, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65,
0x73, 0x12, 0x51, 0x0a, 0x25, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x67, 0x72,
0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x31, 0x20, 0x01, 0x28, 0x09,
0x52, 0x22, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x69,
0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56,
0x61, 0x6c, 0x75, 0x65, 0x12, 0x4c, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x73,
0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 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, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x6f,
0x75, 0x72, 0x63, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x6f, 0x75, 0x72,
0x63, 0x65, 0x12, 0x5d, 0x0a, 0x19, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x65, 0x76, 0x61,
0x6c, 0x75, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x18,
0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64,
0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x6f,
0x72, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x52, 0x16, 0x63, 0x75, 0x73, 0x74, 0x6f,
0x6d, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x65,
0x74, 0x12, 0x35, 0x0a, 0x17, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f,
0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x34, 0x20, 0x01,
0x28, 0x08, 0x52, 0x14, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x46, 0x72, 0x6f,
0x6d, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x67, 0x6e, 0x6f,
0x72, 0x65, 0x5f, 0x6f, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x35,
0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4f, 0x6c, 0x64, 0x52,
0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
0x5f, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x36, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x67, 0x6e,
0x6f, 0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x12, 0x36, 0x0a, 0x17, 0x62, 0x75, 0x69, 0x6c, 0x64,
0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x66, 0x74, 0x69,
0x6d, 0x65, 0x18, 0x37, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4f,
0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x53, 0x74, 0x72, 0x66, 0x74, 0x69, 0x6d, 0x65, 0x12,
0x23, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
0x18, 0x38, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70,
0x65, 0x72, 0x74, 0x79, 0x12, 0x55, 0x0a, 0x14, 0x69, 0x73, 0x73, 0x75, 0x65, 0x5f, 0x67, 0x61,
0x74, 0x68, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x3f, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x47, 0x61, 0x74, 0x68, 0x65, 0x72,
0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x12, 0x69, 0x73, 0x73, 0x75, 0x65, 0x47, 0x61,
0x74, 0x68, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x99, 0x01, 0x0a, 0x0c,
0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05,
0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62,
0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x2f,
0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,
0x26, 0x0a, 0x0f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, 0x69, 0x73, 0x74, 0x41, 0x6c,
0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x73, 0x0a, 0x0e, 0x54, 0x65, 0x73, 0x74, 0x41,
0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x6f,
0x72, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73,
0x68, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x25, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x70,
0x65, 0x72, 0x74, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48,
0x00, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x42,
0x1b, 0x0a, 0x19, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x6d, 0x65,
0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0x32, 0x0a, 0x08,
0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 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,
0x1a, 0xc4, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63,
0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64,
0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x43, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x53,
0x0a, 0x12, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x73,
0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73,
0x75, 0x6c, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00,
0x52, 0x11, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x42, 0x16, 0x0a, 0x14, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x6f,
0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4a, 0x04, 0x08, 0x01, 0x10,
0x02, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x06, 0x22, 0x6d, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74, 0x73,
0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x54, 0x45, 0x53, 0x54, 0x53, 0x5f, 0x4e, 0x41,
0x4d, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00,
0x12, 0x15, 0x0a, 0x11, 0x54, 0x45, 0x53, 0x54, 0x53, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x49,
0x47, 0x4e, 0x4f, 0x52, 0x45, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x45, 0x53, 0x54, 0x53,
0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10, 0x02, 0x12,
0x15, 0x0a, 0x11, 0x54, 0x45, 0x53, 0x54, 0x53, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x41, 0x50,
0x50, 0x45, 0x4e, 0x44, 0x10, 0x03, 0x22, 0xca, 0x01, 0x0a, 0x10, 0x46, 0x61, 0x6c, 0x6c, 0x62,
0x61, 0x63, 0x6b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x16, 0x46,
0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x49, 0x4e, 0x47,
0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x46, 0x41, 0x4c, 0x4c, 0x42,
0x41, 0x43, 0x4b, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x41, 0x54,
0x45, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x5f,
0x47, 0x52, 0x4f, 0x55, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x53, 0x10,
0x02, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x5f, 0x47, 0x52,
0x4f, 0x55, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x49, 0x44, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x46,
0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x49, 0x4e, 0x47,
0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x04, 0x12, 0x29, 0x0a, 0x25, 0x46, 0x41, 0x4c, 0x4c,
0x42, 0x41, 0x43, 0x4b, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4f,
0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x4c, 0x55,
0x45, 0x10, 0x05, 0x22, 0x48, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x72,
0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x19, 0x0a, 0x15, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52,
0x59, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10,
0x00, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x5f, 0x47, 0x52, 0x4f,
0x55, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x01, 0x4a, 0x04, 0x08,
0x07, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x16, 0x10, 0x17, 0x4a, 0x04, 0x08, 0x1c, 0x10, 0x1d, 0x4a,
0x04, 0x08, 0x21, 0x10, 0x22, 0x4a, 0x04, 0x08, 0x28, 0x10, 0x29, 0x4a, 0x04, 0x08, 0x30, 0x10,
0x31, 0x4a, 0x04, 0x08, 0x39, 0x10, 0x3c, 0x22, 0x82, 0x01, 0x0a, 0x09, 0x47, 0x43, 0x53, 0x43,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x70, 0x72, 0x65,
0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x63, 0x73, 0x50, 0x72,
0x65, 0x66, 0x69, 0x78, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x75, 0x62, 0x73, 0x75, 0x62, 0x5f, 0x70,
0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x75,
0x62, 0x73, 0x75, 0x62, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2f, 0x0a, 0x13, 0x70,
0x75, 0x62, 0x73, 0x75, 0x62, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x70, 0x75, 0x62, 0x73, 0x75, 0x62,
0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x43, 0x0a, 0x11,
0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x71,
0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72,
0x79, 0x22, 0x20, 0x0a, 0x12, 0x49, 0x73, 0x73, 0x75, 0x65, 0x47, 0x61, 0x74, 0x68, 0x65, 0x72,
0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08,
0x02, 0x10, 0x03, 0x22, 0xb3, 0x01, 0x0a, 0x13, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61,
0x64, 0x61, 0x74, 0x61, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x74,
0x65, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65,
0x67, 0x65, 0x78, 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, 0x23,
0x0a, 0x0d, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18,
0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65,
0x67, 0x65, 0x78, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x9a, 0x07, 0x0a, 0x0e, 0x41, 0x75,
0x74, 0x6f, 0x42, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34, 0x0a, 0x16,
0x62, 0x65, 0x74, 0x61, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x62, 0x75, 0x67, 0x5f, 0x63, 0x6f, 0x6d,
0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x62, 0x65,
0x74, 0x61, 0x41, 0x75, 0x74, 0x6f, 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65,
0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x43, 0x6c, 0x6f, 0x73,
0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x73,
0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x49,
0x64, 0x73, 0x12, 0x44, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03,
0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e,
0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x42, 0x75, 0x67, 0x4f, 0x70,
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x08,
0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x5f, 0x0a, 0x17, 0x68, 0x6f, 0x74, 0x6c,
0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x73, 0x6f, 0x75,
0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x73, 0x74,
0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x48, 0x6f, 0x74, 0x6c,
0x69, 0x73, 0x74, 0x49, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42,
0x02, 0x18, 0x01, 0x52, 0x14, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x49, 0x64, 0x73, 0x46,
0x72, 0x6f, 0x6d, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x69, 0x6c,
0x65, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01,
0x28, 0x08, 0x52, 0x0e, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75,
0x61, 0x6c, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x74, 0x6f, 0x6e, 0x5f,
0x61, 0x75, 0x74, 0x6f, 0x62, 0x75, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x73,
0x69, 0x6e, 0x67, 0x6c, 0x65, 0x74, 0x6f, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x62, 0x75, 0x67, 0x12,
0x3d, 0x0a, 0x1b, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x69,
0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, 0x5f, 0x62, 0x75, 0x67, 0x73, 0x18, 0x07,
0x20, 0x01, 0x28, 0x05, 0x52, 0x18, 0x6d, 0x61, 0x78, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64,
0x49, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, 0x42, 0x75, 0x67, 0x73, 0x12, 0x21,
0x0a, 0x0c, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x18, 0x08,
0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x61, 0x6c,
0x6c, 0x12, 0x67, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x73,
0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x33, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x42, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x73, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74,
0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x65,
0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x0a, 0x16, 0x61, 0x64,
0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61,
0x64, 0x61, 0x74, 0x61, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x64, 0x76, 0x61,
0x6e, 0x63, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x18, 0x0c,
0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x6c, 0x65, 0x12,
0x25, 0x0a, 0x0e, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x6c,
0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4f,
0x76, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x0e,
0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x1a, 0x60, 0x0a, 0x13, 0x44, 0x65,
0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
0x61, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x75, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65,
0x6e, 0x74, 0x18, 0x01, 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,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02,
0x63, 0x63, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x02, 0x63, 0x63, 0x22, 0x4c, 0x0a, 0x08,
0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x52, 0x49, 0x4f,
0x52, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44,
0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x30, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x31,
0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x32, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x33,
0x10, 0x04, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x34, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x0f, 0x10, 0x10,
0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, 0x22, 0x5a, 0x0a, 0x13, 0x48, 0x6f, 0x74, 0x6c, 0x69, 0x73,
0x74, 0x49, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a,
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x05,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x42, 0x13, 0x0a,
0x11, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72,
0x63, 0x65, 0x22, 0x88, 0x03, 0x0a, 0x09, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64,
0x12, 0x42, 0x0a, 0x0d, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x61,
0x62, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72,
0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f,
0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x52, 0x0c, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72,
0x64, 0x54, 0x61, 0x62, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x0d, 0x6e, 0x6f, 0x74, 0x69,
0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d,
0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a,
0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x74, 0x61, 0x62, 0x18, 0x05, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x61, 0x62, 0x12, 0x32,
0x0a, 0x15, 0x64, 0x6f, 0x77, 0x6e, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x69,
0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x64,
0x6f, 0x77, 0x6e, 0x70, 0x6c, 0x61, 0x79, 0x46, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x61,
0x62, 0x73, 0x12, 0x38, 0x0a, 0x16, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f,
0x66, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62, 0x73, 0x18, 0x06, 0x20, 0x01,
0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x14, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68,
0x74, 0x46, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x73, 0x12, 0x27, 0x0a, 0x0f,
0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x74, 0x6f, 0x64, 0x61, 0x79, 0x18,
0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74,
0x54, 0x6f, 0x64, 0x61, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63,
0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x74, 0x0a,
0x0c, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a,
0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12,
0x3e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x24, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12,
0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
0x61, 0x6d, 0x65, 0x22, 0x3d, 0x0a, 0x13, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x70, 0x74, 0x69, 0x6f,
0x6e, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 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, 0x22, 0x8f, 0x0d, 0x0a, 0x0c, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64,
0x54, 0x61, 0x62, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x73, 0x74, 0x5f,
0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0d, 0x74, 0x65, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12,
0x23, 0x0a, 0x0d, 0x62, 0x75, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74,
0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x6f,
0x6e, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x73, 0x65, 0x61,
0x72, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e,
0x63, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2c,
0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x72, 0x65,
0x63, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x43,
0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c,
0x62, 0x61, 0x73, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12,
0x4b, 0x0a, 0x12, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65,
0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x69,
0x6e, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x10, 0x6f, 0x70, 0x65, 0x6e,
0x54, 0x65, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x49, 0x0a, 0x11,
0x66, 0x69, 0x6c, 0x65, 0x5f, 0x62, 0x75, 0x67, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72,
0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x0f, 0x66, 0x69, 0x6c, 0x65, 0x42, 0x75, 0x67, 0x54,
0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x13, 0x61, 0x74, 0x74, 0x61, 0x63,
0x68, 0x5f, 0x62, 0x75, 0x67, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x09,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e,
0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x52, 0x11, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x42, 0x75, 0x67, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
0x73, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65,
0x73, 0x75, 0x6c, 0x74, 0x73, 0x54, 0x65, 0x78, 0x74, 0x12, 0x4f, 0x0a, 0x14, 0x72, 0x65, 0x73,
0x75, 0x6c, 0x74, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72,
0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x12, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x55,
0x72, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x56, 0x0a, 0x18, 0x63, 0x6f,
0x64, 0x65, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x75, 0x72, 0x6c, 0x5f, 0x74, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74,
0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c,
0x69, 0x6e, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x15, 0x63, 0x6f, 0x64,
0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x72, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61,
0x74, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x61, 0x62, 0x75, 0x6c, 0x61, 0x72, 0x5f,
0x6e, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x0e, 0x20, 0x01, 0x28,
0x09, 0x52, 0x11, 0x74, 0x61, 0x62, 0x75, 0x6c, 0x61, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52,
0x65, 0x67, 0x65, 0x78, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x6f, 0x70,
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, 0x65,
0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x61,
0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x4f,
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x4f, 0x70, 0x74,
0x69, 0x6f, 0x6e, 0x73, 0x12, 0x6a, 0x0a, 0x17, 0x66, 0x6c, 0x61, 0x6b, 0x69, 0x6e, 0x65, 0x73,
0x73, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64,
0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72,
0x64, 0x54, 0x61, 0x62, 0x46, 0x6c, 0x61, 0x6b, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6c, 0x65,
0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x15, 0x66, 0x6c, 0x61, 0x6b, 0x69,
0x6e, 0x65, 0x73, 0x73, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
0x12, 0x79, 0x0a, 0x1c, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f,
0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69,
0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61,
0x72, 0x64, 0x54, 0x61, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x75, 0x73, 0x74, 0x6f,
0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
0x1a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x61,
0x62, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x75,
0x72, 0x6c, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x44,
0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x55, 0x72, 0x6c, 0x12, 0x49, 0x0a, 0x11, 0x6f,
0x70, 0x65, 0x6e, 0x5f, 0x62, 0x75, 0x67, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69,
0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x6e, 0x42, 0x75, 0x67, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x66,
0x69, 0x6c, 0x65, 0x5f, 0x62, 0x75, 0x67, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c,
0x61, 0x75, 0x74, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x42, 0x75, 0x67, 0x73, 0x12, 0x2c, 0x0a, 0x12,
0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x74, 0x69,
0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61,
0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x15, 0x63, 0x6f,
0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x6d, 0x65, 0x6e, 0x75, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74,
0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x69, 0x6e, 0x6b,
0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
0x74, 0x4d, 0x65, 0x6e, 0x75, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a,
0x17, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74,
0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15,
0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x68, 0x72, 0x65,
0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x51, 0x0a, 0x14, 0x62, 0x65, 0x74, 0x61, 0x5f, 0x61, 0x75,
0x74, 0x6f, 0x62, 0x75, 0x67, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x16, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x42, 0x75, 0x67, 0x4f, 0x70, 0x74,
0x69, 0x6f, 0x6e, 0x73, 0x52, 0x12, 0x62, 0x65, 0x74, 0x61, 0x41, 0x75, 0x74, 0x6f, 0x62, 0x75,
0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5e, 0x0a, 0x17, 0x68, 0x65, 0x61, 0x6c,
0x74, 0x68, 0x5f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x5f, 0x6f, 0x70, 0x74, 0x69,
0x6f, 0x6e, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x73, 0x74,
0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x48, 0x65, 0x61, 0x6c,
0x74, 0x68, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x73, 0x52, 0x15, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69,
0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x1a, 0x63, 0x6f, 0x6c, 0x75,
0x6d, 0x6e, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x74, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x19, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74,
0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c,
0x69, 0x6e, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x17, 0x63, 0x6f, 0x6c,
0x75, 0x6d, 0x6e, 0x44, 0x69, 0x66, 0x66, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x73, 0x22, 0xd5, 0x03, 0x0a, 0x18, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61,
0x72, 0x64, 0x54, 0x61, 0x62, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x73, 0x12, 0x39, 0x0a, 0x19, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x6c, 0x65,
0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x18, 0x01,
0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x53, 0x74, 0x61, 0x6c, 0x65,
0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x48, 0x6f, 0x75, 0x72, 0x73, 0x12, 0x31, 0x0a, 0x15,
0x6e, 0x75, 0x6d, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x5f,
0x61, 0x6c, 0x65, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x6e, 0x75, 0x6d,
0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x54, 0x6f, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12,
0x35, 0x0a, 0x17, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x6f,
0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
0x52, 0x14, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x4d, 0x61, 0x69, 0x6c, 0x54, 0x6f, 0x41, 0x64, 0x64,
0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x1b, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61,
0x73, 0x73, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f,
0x61, 0x6c, 0x65, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x6e, 0x75, 0x6d,
0x50, 0x61, 0x73, 0x73, 0x65, 0x73, 0x54, 0x6f, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41,
0x6c, 0x65, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18,
0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1b,
0x0a, 0x09, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28,
0x09, 0x52, 0x08, 0x64, 0x65, 0x62, 0x75, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x64,
0x65, 0x62, 0x75, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x62, 0x75, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
0x12, 0x3d, 0x0a, 0x1b, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73,
0x5f, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x18,
0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x18, 0x77, 0x61, 0x69, 0x74, 0x4d, 0x69, 0x6e, 0x75, 0x74,
0x65, 0x73, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x12,
0x3b, 0x0a, 0x1a, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x66, 0x61,
0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x09, 0x20,
0x01, 0x28, 0x09, 0x52, 0x17, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x4d, 0x61, 0x69, 0x6c, 0x46, 0x61,
0x69, 0x6c, 0x75, 0x72, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xad, 0x02, 0x0a,
0x21, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x46, 0x6c, 0x61,
0x6b, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f,
0x6e, 0x73, 0x12, 0x3b, 0x0a, 0x1a, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x66, 0x6c,
0x61, 0x6b, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74,
0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x17, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x46,
0x6c, 0x61, 0x6b, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12,
0x35, 0x0a, 0x17, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x6f,
0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x14, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x4d, 0x61, 0x69, 0x6c, 0x54, 0x6f, 0x41, 0x64, 0x64,
0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63,
0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74,
0x12, 0x3d, 0x0a, 0x1b, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73,
0x5f, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x18,
0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x18, 0x77, 0x61, 0x69, 0x74, 0x4d, 0x69, 0x6e, 0x75, 0x74,
0x65, 0x73, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x12,
0x3b, 0x0a, 0x1a, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x66, 0x61,
0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20,
0x01, 0x28, 0x09, 0x52, 0x17, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x4d, 0x61, 0x69, 0x6c, 0x46, 0x61,
0x69, 0x6c, 0x75, 0x72, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x80, 0x03, 0x0a,
0x26, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x53, 0x74, 0x61,
0x74, 0x75, 0x73, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x6d, 0x61, 0x78, 0x5f, 0x61,
0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x6b, 0x69, 0x6e,
0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x16, 0x6d, 0x61, 0x78, 0x41, 0x63,
0x63, 0x65, 0x70, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x6b, 0x69, 0x6e, 0x65, 0x73,
0x73, 0x12, 0x7d, 0x0a, 0x15, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x73,
0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e,
0x32, 0x49, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x2e, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x53,
0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65,
0x64, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x13, 0x69, 0x67, 0x6e,
0x6f, 0x72, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73,
0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x69, 0x6e, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x62,
0x6c, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x6d,
0x69, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x73,
0x22, 0x6d, 0x0a, 0x11, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x53,
0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x17, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x53, 0x54,
0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44,
0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x49, 0x5a, 0x45,
0x44, 0x5f, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b,
0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c,
0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x04, 0x22,
0x6f, 0x0a, 0x0e, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x47, 0x72, 0x6f, 0x75,
0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61,
0x72, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e,
0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x20,
0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x22, 0xd4, 0x01, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x0b, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70,
0x73, 0x18, 0x01, 0x20, 0x03, 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, 0x0a, 0x74, 0x65, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12,
0x3a, 0x0a, 0x0a, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20,
0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52,
0x0a, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x12, 0x4a, 0x0a, 0x10, 0x64,
0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18,
0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64,
0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72,
0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0f, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72,
0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0xd2, 0x01, 0x0a, 0x15, 0x48, 0x65, 0x61, 0x6c,
0x74, 0x68, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x08, 0x52, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x64, 0x61, 0x79,
0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x18, 0x02, 0x20,
0x01, 0x28, 0x05, 0x52, 0x0e, 0x64, 0x61, 0x79, 0x73, 0x4f, 0x66, 0x41, 0x6e, 0x61, 0x6c, 0x79,
0x73, 0x69, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x73, 0x63, 0x68,
0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6d, 0x61,
0x69, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x6d,
0x61, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x63, 0x69, 0x70,
0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e,
0x67, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x67,
0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x65, 0x78, 0x22, 0xbb, 0x01, 0x0a,
0x14, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 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, 0x42, 0x02, 0x18,
0x01, 0x52, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x65, 0x73, 0x74, 0x47, 0x72,
0x6f, 0x75, 0x70, 0x12, 0x55, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x64,
0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x61, 0x62, 0x18, 0x02, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x61,
0x62, 0x42, 0x02, 0x18, 0x01, 0x52, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x44, 0x61,
0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x42, 0x33, 0x5a, 0x31, 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, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x62,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_config_proto_rawDescOnce sync.Once
file_config_proto_rawDescData = file_config_proto_rawDesc
)
func file_config_proto_rawDescGZIP() []byte {
file_config_proto_rawDescOnce.Do(func() {
file_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_config_proto_rawDescData)
})
return file_config_proto_rawDescData
}
var file_config_proto_enumTypes = make([]protoimpl.EnumInfo, 5)
var file_config_proto_msgTypes = make([]protoimpl.MessageInfo, 26)
var file_config_proto_goTypes = []interface{}{
(TestGroup_TestsName)(0), // 0: testgrid.config.TestGroup.TestsName
(TestGroup_FallbackGrouping)(0), // 1: testgrid.config.TestGroup.FallbackGrouping
(TestGroup_PrimaryGrouping)(0), // 2: testgrid.config.TestGroup.PrimaryGrouping
(AutoBugOptions_Priority)(0), // 3: testgrid.config.AutoBugOptions.Priority
(DashboardTabStatusCustomizationOptions_IgnoredTestStatus)(0), // 4: testgrid.config.DashboardTabStatusCustomizationOptions.IgnoredTestStatus
(*TestNameConfig)(nil), // 5: testgrid.config.TestNameConfig
(*Notification)(nil), // 6: testgrid.config.Notification
(*TestGroup)(nil), // 7: testgrid.config.TestGroup
(*GCSConfig)(nil), // 8: testgrid.config.GCSConfig
(*ResultStoreConfig)(nil), // 9: testgrid.config.ResultStoreConfig
(*IssueGatherOptions)(nil), // 10: testgrid.config.IssueGatherOptions
(*TestMetadataOptions)(nil), // 11: testgrid.config.TestMetadataOptions
(*AutoBugOptions)(nil), // 12: testgrid.config.AutoBugOptions
(*HotlistIdFromSource)(nil), // 13: testgrid.config.HotlistIdFromSource
(*Dashboard)(nil), // 14: testgrid.config.Dashboard
(*LinkTemplate)(nil), // 15: testgrid.config.LinkTemplate
(*LinkOptionsTemplate)(nil), // 16: testgrid.config.LinkOptionsTemplate
(*DashboardTab)(nil), // 17: testgrid.config.DashboardTab
(*DashboardTabAlertOptions)(nil), // 18: testgrid.config.DashboardTabAlertOptions
(*DashboardTabFlakinessAlertOptions)(nil), // 19: testgrid.config.DashboardTabFlakinessAlertOptions
(*DashboardTabStatusCustomizationOptions)(nil), // 20: testgrid.config.DashboardTabStatusCustomizationOptions
(*DashboardGroup)(nil), // 21: testgrid.config.DashboardGroup
(*Configuration)(nil), // 22: testgrid.config.Configuration
(*HealthAnalysisOptions)(nil), // 23: testgrid.config.HealthAnalysisOptions
(*DefaultConfiguration)(nil), // 24: testgrid.config.DefaultConfiguration
(*TestNameConfig_NameElement)(nil), // 25: testgrid.config.TestNameConfig.NameElement
(*TestGroup_ColumnHeader)(nil), // 26: testgrid.config.TestGroup.ColumnHeader
(*TestGroup_TestAnnotation)(nil), // 27: testgrid.config.TestGroup.TestAnnotation
(*TestGroup_KeyValue)(nil), // 28: testgrid.config.TestGroup.KeyValue
(*TestGroup_ResultSource)(nil), // 29: testgrid.config.TestGroup.ResultSource
(*AutoBugOptions_DefaultTestMetadata)(nil), // 30: testgrid.config.AutoBugOptions.DefaultTestMetadata
(*custom_evaluator.RuleSet)(nil), // 31: testgrid.custom_evaluator.RuleSet
}
var file_config_proto_depIdxs = []int32{
25, // 0: testgrid.config.TestNameConfig.name_elements:type_name -> testgrid.config.TestNameConfig.NameElement
0, // 1: testgrid.config.TestGroup.tests_name_policy:type_name -> testgrid.config.TestGroup.TestsName
26, // 2: testgrid.config.TestGroup.column_header:type_name -> testgrid.config.TestGroup.ColumnHeader
1, // 3: testgrid.config.TestGroup.fallback_grouping:type_name -> testgrid.config.TestGroup.FallbackGrouping
5, // 4: testgrid.config.TestGroup.test_name_config:type_name -> testgrid.config.TestNameConfig
6, // 5: testgrid.config.TestGroup.notifications:type_name -> testgrid.config.Notification
2, // 6: testgrid.config.TestGroup.primary_grouping:type_name -> testgrid.config.TestGroup.PrimaryGrouping
27, // 7: testgrid.config.TestGroup.test_annotations:type_name -> testgrid.config.TestGroup.TestAnnotation
11, // 8: testgrid.config.TestGroup.test_metadata_options:type_name -> testgrid.config.TestMetadataOptions
12, // 9: testgrid.config.TestGroup.auto_bug_options:type_name -> testgrid.config.AutoBugOptions
28, // 10: testgrid.config.TestGroup.test_method_properties:type_name -> testgrid.config.TestGroup.KeyValue
29, // 11: testgrid.config.TestGroup.result_source:type_name -> testgrid.config.TestGroup.ResultSource
31, // 12: testgrid.config.TestGroup.custom_evaluator_rule_set:type_name -> testgrid.custom_evaluator.RuleSet
10, // 13: testgrid.config.TestGroup.issue_gather_options:type_name -> testgrid.config.IssueGatherOptions
3, // 14: testgrid.config.AutoBugOptions.priority:type_name -> testgrid.config.AutoBugOptions.Priority
13, // 15: testgrid.config.AutoBugOptions.hotlist_ids_from_source:type_name -> testgrid.config.HotlistIdFromSource
30, // 16: testgrid.config.AutoBugOptions.default_test_metadata:type_name -> testgrid.config.AutoBugOptions.DefaultTestMetadata
17, // 17: testgrid.config.Dashboard.dashboard_tab:type_name -> testgrid.config.DashboardTab
6, // 18: testgrid.config.Dashboard.notifications:type_name -> testgrid.config.Notification
16, // 19: testgrid.config.LinkTemplate.options:type_name -> testgrid.config.LinkOptionsTemplate
15, // 20: testgrid.config.DashboardTab.open_test_template:type_name -> testgrid.config.LinkTemplate
15, // 21: testgrid.config.DashboardTab.file_bug_template:type_name -> testgrid.config.LinkTemplate
15, // 22: testgrid.config.DashboardTab.attach_bug_template:type_name -> testgrid.config.LinkTemplate
15, // 23: testgrid.config.DashboardTab.results_url_template:type_name -> testgrid.config.LinkTemplate
15, // 24: testgrid.config.DashboardTab.code_search_url_template:type_name -> testgrid.config.LinkTemplate
18, // 25: testgrid.config.DashboardTab.alert_options:type_name -> testgrid.config.DashboardTabAlertOptions
19, // 26: testgrid.config.DashboardTab.flakiness_alert_options:type_name -> testgrid.config.DashboardTabFlakinessAlertOptions
20, // 27: testgrid.config.DashboardTab.status_customization_options:type_name -> testgrid.config.DashboardTabStatusCustomizationOptions
15, // 28: testgrid.config.DashboardTab.open_bug_template:type_name -> testgrid.config.LinkTemplate
15, // 29: testgrid.config.DashboardTab.context_menu_template:type_name -> testgrid.config.LinkTemplate
12, // 30: testgrid.config.DashboardTab.beta_autobug_options:type_name -> testgrid.config.AutoBugOptions
23, // 31: testgrid.config.DashboardTab.health_analysis_options:type_name -> testgrid.config.HealthAnalysisOptions
15, // 32: testgrid.config.DashboardTab.column_diff_link_templates:type_name -> testgrid.config.LinkTemplate
4, // 33: testgrid.config.DashboardTabStatusCustomizationOptions.ignored_test_statuses:type_name -> testgrid.config.DashboardTabStatusCustomizationOptions.IgnoredTestStatus
7, // 34: testgrid.config.Configuration.test_groups:type_name -> testgrid.config.TestGroup
14, // 35: testgrid.config.Configuration.dashboards:type_name -> testgrid.config.Dashboard
21, // 36: testgrid.config.Configuration.dashboard_groups:type_name -> testgrid.config.DashboardGroup
7, // 37: testgrid.config.DefaultConfiguration.default_test_group:type_name -> testgrid.config.TestGroup
17, // 38: testgrid.config.DefaultConfiguration.default_dashboard_tab:type_name -> testgrid.config.DashboardTab
8, // 39: testgrid.config.TestGroup.ResultSource.gcs_config:type_name -> testgrid.config.GCSConfig
9, // 40: testgrid.config.TestGroup.ResultSource.resultstore_config:type_name -> testgrid.config.ResultStoreConfig
41, // [41:41] is the sub-list for method output_type
41, // [41:41] is the sub-list for method input_type
41, // [41:41] is the sub-list for extension type_name
41, // [41:41] is the sub-list for extension extendee
0, // [0:41] is the sub-list for field type_name
}
func init() { file_config_proto_init() }
func file_config_proto_init() {
if File_config_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TestNameConfig); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Notification); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TestGroup); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GCSConfig); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ResultStoreConfig); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IssueGatherOptions); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TestMetadataOptions); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AutoBugOptions); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*HotlistIdFromSource); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Dashboard); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*LinkTemplate); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*LinkOptionsTemplate); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DashboardTab); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DashboardTabAlertOptions); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DashboardTabFlakinessAlertOptions); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DashboardTabStatusCustomizationOptions); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DashboardGroup); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Configuration); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*HealthAnalysisOptions); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DefaultConfiguration); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TestNameConfig_NameElement); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TestGroup_ColumnHeader); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TestGroup_TestAnnotation); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TestGroup_KeyValue); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TestGroup_ResultSource); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AutoBugOptions_DefaultTestMetadata); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
file_config_proto_msgTypes[8].OneofWrappers = []interface{}{
(*HotlistIdFromSource_Value)(nil),
(*HotlistIdFromSource_Label)(nil),
}
file_config_proto_msgTypes[22].OneofWrappers = []interface{}{
(*TestGroup_TestAnnotation_PropertyName)(nil),
}
file_config_proto_msgTypes[24].OneofWrappers = []interface{}{
(*TestGroup_ResultSource_GcsConfig)(nil),
(*TestGroup_ResultSource_ResultstoreConfig)(nil),
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_config_proto_rawDesc,
NumEnums: 5,
NumMessages: 26,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_config_proto_goTypes,
DependencyIndexes: file_config_proto_depIdxs,
EnumInfos: file_config_proto_enumTypes,
MessageInfos: file_config_proto_msgTypes,
}.Build()
File_config_proto = out.File
file_config_proto_rawDesc = nil
file_config_proto_goTypes = nil
file_config_proto_depIdxs = nil
}