github.com/GoogleCloudPlatform/testgrid@v0.0.174/pb/config/config.pb.go (about) 1 /* 2 Copyright The TestGrid Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 // Code generated by protoc-gen-go. DO NOT EDIT. 18 // versions: 19 // protoc-gen-go v1.28.0 20 // protoc v3.21.1 21 // source: config.proto 22 23 package config 24 25 import ( 26 custom_evaluator "github.com/GoogleCloudPlatform/testgrid/pb/custom_evaluator" 27 protoreflect "google.golang.org/protobuf/reflect/protoreflect" 28 protoimpl "google.golang.org/protobuf/runtime/protoimpl" 29 reflect "reflect" 30 sync "sync" 31 ) 32 33 const ( 34 // Verify that this generated code is sufficiently up-to-date. 35 _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) 36 // Verify that runtime/protoimpl is sufficiently up-to-date. 37 _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) 38 ) 39 40 type TestGroup_TestsName int32 41 42 const ( 43 TestGroup_TESTS_NAME_UNSPECIFIED TestGroup_TestsName = 0 44 TestGroup_TESTS_NAME_IGNORE TestGroup_TestsName = 1 45 TestGroup_TESTS_NAME_REPLACE TestGroup_TestsName = 2 46 TestGroup_TESTS_NAME_APPEND TestGroup_TestsName = 3 47 ) 48 49 // Enum value maps for TestGroup_TestsName. 50 var ( 51 TestGroup_TestsName_name = map[int32]string{ 52 0: "TESTS_NAME_UNSPECIFIED", 53 1: "TESTS_NAME_IGNORE", 54 2: "TESTS_NAME_REPLACE", 55 3: "TESTS_NAME_APPEND", 56 } 57 TestGroup_TestsName_value = map[string]int32{ 58 "TESTS_NAME_UNSPECIFIED": 0, 59 "TESTS_NAME_IGNORE": 1, 60 "TESTS_NAME_REPLACE": 2, 61 "TESTS_NAME_APPEND": 3, 62 } 63 ) 64 65 func (x TestGroup_TestsName) Enum() *TestGroup_TestsName { 66 p := new(TestGroup_TestsName) 67 *p = x 68 return p 69 } 70 71 func (x TestGroup_TestsName) String() string { 72 return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) 73 } 74 75 func (TestGroup_TestsName) Descriptor() protoreflect.EnumDescriptor { 76 return file_config_proto_enumTypes[0].Descriptor() 77 } 78 79 func (TestGroup_TestsName) Type() protoreflect.EnumType { 80 return &file_config_proto_enumTypes[0] 81 } 82 83 func (x TestGroup_TestsName) Number() protoreflect.EnumNumber { 84 return protoreflect.EnumNumber(x) 85 } 86 87 // Deprecated: Use TestGroup_TestsName.Descriptor instead. 88 func (TestGroup_TestsName) EnumDescriptor() ([]byte, []int) { 89 return file_config_proto_rawDescGZIP(), []int{2, 0} 90 } 91 92 type TestGroup_FallbackGrouping int32 93 94 const ( 95 TestGroup_FALLBACK_GROUPING_NONE TestGroup_FallbackGrouping = 0 96 TestGroup_FALLBACK_GROUPING_DATE TestGroup_FallbackGrouping = 1 97 TestGroup_FALLBACK_GROUPING_LABELS TestGroup_FallbackGrouping = 2 98 TestGroup_FALLBACK_GROUPING_ID TestGroup_FallbackGrouping = 3 99 TestGroup_FALLBACK_GROUPING_BUILD TestGroup_FallbackGrouping = 4 100 // When using this, ensure fallback_grouping_configuration_value is 101 // also set. 102 TestGroup_FALLBACK_GROUPING_CONFIGURATION_VALUE TestGroup_FallbackGrouping = 5 103 ) 104 105 // Enum value maps for TestGroup_FallbackGrouping. 106 var ( 107 TestGroup_FallbackGrouping_name = map[int32]string{ 108 0: "FALLBACK_GROUPING_NONE", 109 1: "FALLBACK_GROUPING_DATE", 110 2: "FALLBACK_GROUPING_LABELS", 111 3: "FALLBACK_GROUPING_ID", 112 4: "FALLBACK_GROUPING_BUILD", 113 5: "FALLBACK_GROUPING_CONFIGURATION_VALUE", 114 } 115 TestGroup_FallbackGrouping_value = map[string]int32{ 116 "FALLBACK_GROUPING_NONE": 0, 117 "FALLBACK_GROUPING_DATE": 1, 118 "FALLBACK_GROUPING_LABELS": 2, 119 "FALLBACK_GROUPING_ID": 3, 120 "FALLBACK_GROUPING_BUILD": 4, 121 "FALLBACK_GROUPING_CONFIGURATION_VALUE": 5, 122 } 123 ) 124 125 func (x TestGroup_FallbackGrouping) Enum() *TestGroup_FallbackGrouping { 126 p := new(TestGroup_FallbackGrouping) 127 *p = x 128 return p 129 } 130 131 func (x TestGroup_FallbackGrouping) String() string { 132 return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) 133 } 134 135 func (TestGroup_FallbackGrouping) Descriptor() protoreflect.EnumDescriptor { 136 return file_config_proto_enumTypes[1].Descriptor() 137 } 138 139 func (TestGroup_FallbackGrouping) Type() protoreflect.EnumType { 140 return &file_config_proto_enumTypes[1] 141 } 142 143 func (x TestGroup_FallbackGrouping) Number() protoreflect.EnumNumber { 144 return protoreflect.EnumNumber(x) 145 } 146 147 // Deprecated: Use TestGroup_FallbackGrouping.Descriptor instead. 148 func (TestGroup_FallbackGrouping) EnumDescriptor() ([]byte, []int) { 149 return file_config_proto_rawDescGZIP(), []int{2, 1} 150 } 151 152 type TestGroup_PrimaryGrouping int32 153 154 const ( 155 TestGroup_PRIMARY_GROUPING_NONE TestGroup_PrimaryGrouping = 0 156 TestGroup_PRIMARY_GROUPING_BUILD TestGroup_PrimaryGrouping = 1 157 ) 158 159 // Enum value maps for TestGroup_PrimaryGrouping. 160 var ( 161 TestGroup_PrimaryGrouping_name = map[int32]string{ 162 0: "PRIMARY_GROUPING_NONE", 163 1: "PRIMARY_GROUPING_BUILD", 164 } 165 TestGroup_PrimaryGrouping_value = map[string]int32{ 166 "PRIMARY_GROUPING_NONE": 0, 167 "PRIMARY_GROUPING_BUILD": 1, 168 } 169 ) 170 171 func (x TestGroup_PrimaryGrouping) Enum() *TestGroup_PrimaryGrouping { 172 p := new(TestGroup_PrimaryGrouping) 173 *p = x 174 return p 175 } 176 177 func (x TestGroup_PrimaryGrouping) String() string { 178 return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) 179 } 180 181 func (TestGroup_PrimaryGrouping) Descriptor() protoreflect.EnumDescriptor { 182 return file_config_proto_enumTypes[2].Descriptor() 183 } 184 185 func (TestGroup_PrimaryGrouping) Type() protoreflect.EnumType { 186 return &file_config_proto_enumTypes[2] 187 } 188 189 func (x TestGroup_PrimaryGrouping) Number() protoreflect.EnumNumber { 190 return protoreflect.EnumNumber(x) 191 } 192 193 // Deprecated: Use TestGroup_PrimaryGrouping.Descriptor instead. 194 func (TestGroup_PrimaryGrouping) EnumDescriptor() ([]byte, []int) { 195 return file_config_proto_rawDescGZIP(), []int{2, 2} 196 } 197 198 // Scale of issue priority, used to indicate importance of issue. 199 type AutoBugOptions_Priority int32 200 201 const ( 202 // Unspecified; may not set priority at all 203 AutoBugOptions_PRIORITY_UNSPECIFIED AutoBugOptions_Priority = 0 204 // See https://developers.google.com/issue-tracker/concepts/issues 205 AutoBugOptions_P0 AutoBugOptions_Priority = 1 206 AutoBugOptions_P1 AutoBugOptions_Priority = 2 207 AutoBugOptions_P2 AutoBugOptions_Priority = 3 208 AutoBugOptions_P3 AutoBugOptions_Priority = 4 209 AutoBugOptions_P4 AutoBugOptions_Priority = 5 210 ) 211 212 // Enum value maps for AutoBugOptions_Priority. 213 var ( 214 AutoBugOptions_Priority_name = map[int32]string{ 215 0: "PRIORITY_UNSPECIFIED", 216 1: "P0", 217 2: "P1", 218 3: "P2", 219 4: "P3", 220 5: "P4", 221 } 222 AutoBugOptions_Priority_value = map[string]int32{ 223 "PRIORITY_UNSPECIFIED": 0, 224 "P0": 1, 225 "P1": 2, 226 "P2": 3, 227 "P3": 4, 228 "P4": 5, 229 } 230 ) 231 232 func (x AutoBugOptions_Priority) Enum() *AutoBugOptions_Priority { 233 p := new(AutoBugOptions_Priority) 234 *p = x 235 return p 236 } 237 238 func (x AutoBugOptions_Priority) String() string { 239 return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) 240 } 241 242 func (AutoBugOptions_Priority) Descriptor() protoreflect.EnumDescriptor { 243 return file_config_proto_enumTypes[3].Descriptor() 244 } 245 246 func (AutoBugOptions_Priority) Type() protoreflect.EnumType { 247 return &file_config_proto_enumTypes[3] 248 } 249 250 func (x AutoBugOptions_Priority) Number() protoreflect.EnumNumber { 251 return protoreflect.EnumNumber(x) 252 } 253 254 // Deprecated: Use AutoBugOptions_Priority.Descriptor instead. 255 func (AutoBugOptions_Priority) EnumDescriptor() ([]byte, []int) { 256 return file_config_proto_rawDescGZIP(), []int{7, 0} 257 } 258 259 // Columns which contain cells with any status configure below will be 260 // ignored. Ignored columns affect the computation of flakiness and 261 // non-ignored number of runs. 262 type DashboardTabStatusCustomizationOptions_IgnoredTestStatus int32 263 264 const ( 265 DashboardTabStatusCustomizationOptions_TEST_STATUS_UNSPECIFIED DashboardTabStatusCustomizationOptions_IgnoredTestStatus = 0 266 DashboardTabStatusCustomizationOptions_CATEGORIZED_ABORT DashboardTabStatusCustomizationOptions_IgnoredTestStatus = 1 267 DashboardTabStatusCustomizationOptions_UNKNOWN DashboardTabStatusCustomizationOptions_IgnoredTestStatus = 2 268 DashboardTabStatusCustomizationOptions_CANCEL DashboardTabStatusCustomizationOptions_IgnoredTestStatus = 3 269 DashboardTabStatusCustomizationOptions_BLOCKED DashboardTabStatusCustomizationOptions_IgnoredTestStatus = 4 270 ) 271 272 // Enum value maps for DashboardTabStatusCustomizationOptions_IgnoredTestStatus. 273 var ( 274 DashboardTabStatusCustomizationOptions_IgnoredTestStatus_name = map[int32]string{ 275 0: "TEST_STATUS_UNSPECIFIED", 276 1: "CATEGORIZED_ABORT", 277 2: "UNKNOWN", 278 3: "CANCEL", 279 4: "BLOCKED", 280 } 281 DashboardTabStatusCustomizationOptions_IgnoredTestStatus_value = map[string]int32{ 282 "TEST_STATUS_UNSPECIFIED": 0, 283 "CATEGORIZED_ABORT": 1, 284 "UNKNOWN": 2, 285 "CANCEL": 3, 286 "BLOCKED": 4, 287 } 288 ) 289 290 func (x DashboardTabStatusCustomizationOptions_IgnoredTestStatus) Enum() *DashboardTabStatusCustomizationOptions_IgnoredTestStatus { 291 p := new(DashboardTabStatusCustomizationOptions_IgnoredTestStatus) 292 *p = x 293 return p 294 } 295 296 func (x DashboardTabStatusCustomizationOptions_IgnoredTestStatus) String() string { 297 return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) 298 } 299 300 func (DashboardTabStatusCustomizationOptions_IgnoredTestStatus) Descriptor() protoreflect.EnumDescriptor { 301 return file_config_proto_enumTypes[4].Descriptor() 302 } 303 304 func (DashboardTabStatusCustomizationOptions_IgnoredTestStatus) Type() protoreflect.EnumType { 305 return &file_config_proto_enumTypes[4] 306 } 307 308 func (x DashboardTabStatusCustomizationOptions_IgnoredTestStatus) Number() protoreflect.EnumNumber { 309 return protoreflect.EnumNumber(x) 310 } 311 312 // Deprecated: Use DashboardTabStatusCustomizationOptions_IgnoredTestStatus.Descriptor instead. 313 func (DashboardTabStatusCustomizationOptions_IgnoredTestStatus) EnumDescriptor() ([]byte, []int) { 314 return file_config_proto_rawDescGZIP(), []int{15, 0} 315 } 316 317 // Specifies the test name, and its source 318 type TestNameConfig struct { 319 state protoimpl.MessageState 320 sizeCache protoimpl.SizeCache 321 unknownFields protoimpl.UnknownFields 322 323 // The name elements specifying the target test name for this tab. 324 NameElements []*TestNameConfig_NameElement `protobuf:"bytes,1,rep,name=name_elements,json=nameElements,proto3" json:"name_elements,omitempty"` 325 // Specifies a printf-style format string for name elements. The format 326 // string should have as many conversions as there are name_elements. 327 // For example, two name_elements could be used with name_format="%s: %s". 328 NameFormat string `protobuf:"bytes,2,opt,name=name_format,json=nameFormat,proto3" json:"name_format,omitempty"` 329 } 330 331 func (x *TestNameConfig) Reset() { 332 *x = TestNameConfig{} 333 if protoimpl.UnsafeEnabled { 334 mi := &file_config_proto_msgTypes[0] 335 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 336 ms.StoreMessageInfo(mi) 337 } 338 } 339 340 func (x *TestNameConfig) String() string { 341 return protoimpl.X.MessageStringOf(x) 342 } 343 344 func (*TestNameConfig) ProtoMessage() {} 345 346 func (x *TestNameConfig) ProtoReflect() protoreflect.Message { 347 mi := &file_config_proto_msgTypes[0] 348 if protoimpl.UnsafeEnabled && x != nil { 349 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 350 if ms.LoadMessageInfo() == nil { 351 ms.StoreMessageInfo(mi) 352 } 353 return ms 354 } 355 return mi.MessageOf(x) 356 } 357 358 // Deprecated: Use TestNameConfig.ProtoReflect.Descriptor instead. 359 func (*TestNameConfig) Descriptor() ([]byte, []int) { 360 return file_config_proto_rawDescGZIP(), []int{0} 361 } 362 363 func (x *TestNameConfig) GetNameElements() []*TestNameConfig_NameElement { 364 if x != nil { 365 return x.NameElements 366 } 367 return nil 368 } 369 370 func (x *TestNameConfig) GetNameFormat() string { 371 if x != nil { 372 return x.NameFormat 373 } 374 return "" 375 } 376 377 // A single notification. 378 type Notification struct { 379 state protoimpl.MessageState 380 sizeCache protoimpl.SizeCache 381 unknownFields protoimpl.UnknownFields 382 383 // Required: Text summary of the issue or notice. 384 Summary string `protobuf:"bytes,1,opt,name=summary,proto3" json:"summary,omitempty"` 385 // Optional: Link to further information, such as a bug, email, document, etc. 386 ContextLink string `protobuf:"bytes,2,opt,name=context_link,json=contextLink,proto3" json:"context_link,omitempty"` 387 } 388 389 func (x *Notification) Reset() { 390 *x = Notification{} 391 if protoimpl.UnsafeEnabled { 392 mi := &file_config_proto_msgTypes[1] 393 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 394 ms.StoreMessageInfo(mi) 395 } 396 } 397 398 func (x *Notification) String() string { 399 return protoimpl.X.MessageStringOf(x) 400 } 401 402 func (*Notification) ProtoMessage() {} 403 404 func (x *Notification) ProtoReflect() protoreflect.Message { 405 mi := &file_config_proto_msgTypes[1] 406 if protoimpl.UnsafeEnabled && x != nil { 407 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 408 if ms.LoadMessageInfo() == nil { 409 ms.StoreMessageInfo(mi) 410 } 411 return ms 412 } 413 return mi.MessageOf(x) 414 } 415 416 // Deprecated: Use Notification.ProtoReflect.Descriptor instead. 417 func (*Notification) Descriptor() ([]byte, []int) { 418 return file_config_proto_rawDescGZIP(), []int{1} 419 } 420 421 func (x *Notification) GetSummary() string { 422 if x != nil { 423 return x.Summary 424 } 425 return "" 426 } 427 428 func (x *Notification) GetContextLink() string { 429 if x != nil { 430 return x.ContextLink 431 } 432 return "" 433 } 434 435 // Specifies a group of tests to gather. 436 type TestGroup struct { 437 state protoimpl.MessageState 438 sizeCache protoimpl.SizeCache 439 unknownFields protoimpl.UnknownFields 440 441 // Name of this TestGroup, for mapping dashboard tabs to tests. 442 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 443 // Path to the test result stored in gcs (some-bucket/some/optional/path). 444 GcsPrefix string `protobuf:"bytes,2,opt,name=gcs_prefix,json=gcsPrefix,proto3" json:"gcs_prefix,omitempty"` 445 // Number of days of test results to gather and serve. 446 DaysOfResults int32 `protobuf:"varint,3,opt,name=days_of_results,json=daysOfResults,proto3" json:"days_of_results,omitempty"` 447 // Whether to ignore pending (currently running) test results. 448 IgnorePending bool `protobuf:"varint,4,opt,name=ignore_pending,json=ignorePending,proto3" json:"ignore_pending,omitempty"` 449 // Whether to ignore reported build results. It is recommended that tests 450 // report BUILD_FAIL instead of relying on this being disabled. 451 IgnoreBuilt bool `protobuf:"varint,5,opt,name=ignore_built,json=ignoreBuilt,proto3" json:"ignore_built,omitempty"` 452 // What to do with the 'Tests name' configuration value. It can replace the 453 // name of the test, be appended to the name of the test, or ignored. If it is 454 // ignored, then the name of the tests will be the build target. 455 TestsNamePolicy TestGroup_TestsName `protobuf:"varint,6,opt,name=tests_name_policy,json=testsNamePolicy,proto3,enum=testgrid.config.TestGroup_TestsName" json:"tests_name_policy,omitempty"` 456 // Tests with names that include these substrings will be removed from the 457 // table. 458 IgnoreTestSubstring []string `protobuf:"bytes,8,rep,name=ignore_test_substring,json=ignoreTestSubstring,proto3" json:"ignore_test_substring,omitempty"` 459 ColumnHeader []*TestGroup_ColumnHeader `protobuf:"bytes,9,rep,name=column_header,json=columnHeader,proto3" json:"column_header,omitempty"` 460 // A test grouping option used if not specified by primary_grouping (#29) 461 FallbackGrouping TestGroup_FallbackGrouping `protobuf:"varint,10,opt,name=fallback_grouping,json=fallbackGrouping,proto3,enum=testgrid.config.TestGroup_FallbackGrouping" json:"fallback_grouping,omitempty"` 462 // DEPRECATED: use DashboardTabAlertOptions > alert_stale_result_hours 463 // 464 // Deprecated: Do not use. 465 AlertStaleResultsHours int32 `protobuf:"varint,11,opt,name=alert_stale_results_hours,json=alertStaleResultsHours,proto3" json:"alert_stale_results_hours,omitempty"` 466 // DEPRECATED: use DashboardTabAlertOptions > num_failures_to_alert 467 // 468 // Deprecated: Do not use. 469 NumFailuresToAlert int32 `protobuf:"varint,12,opt,name=num_failures_to_alert,json=numFailuresToAlert,proto3" json:"num_failures_to_alert,omitempty"` 470 // DEPRECATED: use dashboard_tab.beta_autobug_options.beta_autobug_component 471 // instead. 472 // 473 // Deprecated: Do not use. 474 BugComponent int32 `protobuf:"varint,13,opt,name=bug_component,json=bugComponent,proto3" json:"bug_component,omitempty"` 475 // Default code search path for searching regressions. Overridden by 476 // code_search_path in DashboardTab. 477 CodeSearchPath string `protobuf:"bytes,14,opt,name=code_search_path,json=codeSearchPath,proto3" json:"code_search_path,omitempty"` 478 // The number of columns to consider "recent" for a variety of purposes. 479 NumColumnsRecent int32 `protobuf:"varint,15,opt,name=num_columns_recent,json=numColumnsRecent,proto3" json:"num_columns_recent,omitempty"` 480 // Whether to read test metadata from the test results. Information 481 // from the test metadata is used to determine where bugs are filed in 482 // specific cases. 483 UseTestMetadata bool `protobuf:"varint,16,opt,name=use_test_metadata,json=useTestMetadata,proto3" json:"use_test_metadata,omitempty"` 484 // DEPRECATED: use DashboardTabAlertOptions > alert_mail_to_address instead 485 // 486 // Deprecated: Do not use. 487 AlertMailToAddresses string `protobuf:"bytes,17,opt,name=alert_mail_to_addresses,json=alertMailToAddresses,proto3" json:"alert_mail_to_addresses,omitempty"` 488 // DEPRECATED: use DashboardTabAlertOptions > subject 489 // 490 // Deprecated: Do not use. 491 AlertMailSubject string `protobuf:"bytes,18,opt,name=alert_mail_subject,json=alertMailSubject,proto3" json:"alert_mail_subject,omitempty"` 492 // DEPRECATED: use DashboardTabAlertOptions > alert_mail_failure_message 493 // 494 // Deprecated: Do not use. 495 AlertMailFailureMessage string `protobuf:"bytes,19,opt,name=alert_mail_failure_message,json=alertMailFailureMessage,proto3" json:"alert_mail_failure_message,omitempty"` 496 // DEPRECATED: use DashboardTabAlertOptions > debug_url 497 // 498 // Deprecated: Do not use. 499 AlertMailDebugUrl string `protobuf:"bytes,20,opt,name=alert_mail_debug_url,json=alertMailDebugUrl,proto3" json:"alert_mail_debug_url,omitempty"` 500 // DEPRECATED: use DashboardTabAlertOptions > wait_minutes_between_emails 501 // 502 // Deprecated: Do not use. 503 MinElapsedMinutesBetweenMails int32 `protobuf:"varint,21,opt,name=min_elapsed_minutes_between_mails,json=minElapsedMinutesBetweenMails,proto3" json:"min_elapsed_minutes_between_mails,omitempty"` 504 // Whether to treat a combination of passes and failures within one test as a 505 // flaky status. 506 EnableFlakyStatus bool `protobuf:"varint,23,opt,name=enable_flaky_status,json=enableFlakyStatus,proto3" json:"enable_flaky_status,omitempty"` 507 // disable_merged_status will restores deprecated behavior of 508 // splitting multiple foo rows into foo [2], etc rather a single 509 // potentially flaky row. 510 DisableMergedStatus bool `protobuf:"varint,60,opt,name=disable_merged_status,json=disableMergedStatus,proto3" json:"disable_merged_status,omitempty"` 511 // deprecated - always set to true 512 // 513 // Deprecated: Do not use. 514 UseKubernetesClient bool `protobuf:"varint,24,opt,name=use_kubernetes_client,json=useKubernetesClient,proto3" json:"use_kubernetes_client,omitempty"` 515 // When use_kubernetes_client is on testgrid expects these results 516 // to come from prow, which should include a prowjob.json and podinfo.json 517 // to help debugging. If you do not expect these files to exist, you 518 // can optionally disable this analysis. 519 DisableProwjobAnalysis bool `protobuf:"varint,62,opt,name=disable_prowjob_analysis,json=disableProwjobAnalysis,proto3" json:"disable_prowjob_analysis,omitempty"` 520 // deprecated - always set to true 521 IsExternal bool `protobuf:"varint,25,opt,name=is_external,json=isExternal,proto3" json:"is_external,omitempty"` 522 // Specifies the test name for a test. 523 TestNameConfig *TestNameConfig `protobuf:"bytes,26,opt,name=test_name_config,json=testNameConfig,proto3" json:"test_name_config,omitempty"` 524 // A list of notifications attached to this test group. 525 // This is displayed on any dashboard tab backed by this test group. 526 Notifications []*Notification `protobuf:"bytes,27,rep,name=notifications,proto3" json:"notifications,omitempty"` 527 // A primary grouping strategy for grouping test results in columns. 528 // If a primary grouping is specified, the fallback grouping is ignored. 529 PrimaryGrouping TestGroup_PrimaryGrouping `protobuf:"varint,29,opt,name=primary_grouping,json=primaryGrouping,proto3,enum=testgrid.config.TestGroup_PrimaryGrouping" json:"primary_grouping,omitempty"` 530 // Whether to collect pass-fail data for test methods. Additional test cases 531 // will be added for each test method in a target. 532 EnableTestMethods bool `protobuf:"varint,30,opt,name=enable_test_methods,json=enableTestMethods,proto3" json:"enable_test_methods,omitempty"` 533 // Test annotations to look for. Adds custom icon to results. 534 TestAnnotations []*TestGroup_TestAnnotation `protobuf:"bytes,31,rep,name=test_annotations,json=testAnnotations,proto3" json:"test_annotations,omitempty"` 535 // Maximum number of individual test methods to collect for any given test 536 // row. If a test has more than this many methods, no methods will be 537 // displayed. 538 MaxTestMethodsPerTest int32 `protobuf:"varint,32,opt,name=max_test_methods_per_test,json=maxTestMethodsPerTest,proto3" json:"max_test_methods_per_test,omitempty"` 539 // Default metadata that should be applied for opening bugs, if a given regex 540 // matches against a test's name. 541 // Requires 'use_test_metadata = true'. 542 TestMetadataOptions []*TestMetadataOptions `protobuf:"bytes,34,rep,name=test_metadata_options,json=testMetadataOptions,proto3" json:"test_metadata_options,omitempty"` 543 // A space-delimited string of tags that are used to filter test targets. 544 // A leading - before the tag means this tag should not be present 545 // in the target. 546 // Example: 547 // contains tag1, but not tag2: test_tag_pattern = 'tag1 -tag2' 548 TestTagPattern string `protobuf:"bytes,35,opt,name=test_tag_pattern,json=testTagPattern,proto3" json:"test_tag_pattern,omitempty"` 549 // DEPRECATED: use dashboard_tab.beta_autobug_options instead. 550 // 551 // Deprecated: Do not use. 552 AutoBugOptions *AutoBugOptions `protobuf:"bytes,36,opt,name=auto_bug_options,json=autoBugOptions,proto3" json:"auto_bug_options,omitempty"` 553 // Max number of days any single test can take. 554 MaxTestRuntimeHours int32 `protobuf:"varint,37,opt,name=max_test_runtime_hours,json=maxTestRuntimeHours,proto3" json:"max_test_runtime_hours,omitempty"` 555 // The number of consecutive test passes to close the alert. 556 NumPassesToDisableAlert int32 `protobuf:"varint,38,opt,name=num_passes_to_disable_alert,json=numPassesToDisableAlert,proto3" json:"num_passes_to_disable_alert,omitempty"` 557 // If true, also associate bugs with tests if the test result's overview/group 558 // ID is in the bug. 559 LinkBugsByGroup bool `protobuf:"varint,39,opt,name=link_bugs_by_group,json=linkBugsByGroup,proto3" json:"link_bugs_by_group,omitempty"` 560 // Only show test methods with all required properties 561 TestMethodProperties []*TestGroup_KeyValue `protobuf:"bytes,41,rep,name=test_method_properties,json=testMethodProperties,proto3" json:"test_method_properties,omitempty"` 562 // If true, allows gathering and associating bugs with targets in the 563 // dashboard. Required in order to auto-file bugs. 564 GatherBugs bool `protobuf:"varint,42,opt,name=gather_bugs,json=gatherBugs,proto3" json:"gather_bugs,omitempty"` 565 // Numeric property metric value to be used for short text. If this property 566 // is present, it will override all the other short text values. 567 ShortTextMetric string `protobuf:"bytes,43,opt,name=short_text_metric,json=shortTextMetric,proto3" json:"short_text_metric,omitempty"` 568 // The key of a key-value pair in metadata (a 'configuration value'). 569 // This overrides the default build with the value from the key-value pair. 570 BuildOverrideConfigurationValue string `protobuf:"bytes,44,opt,name=build_override_configuration_value,json=buildOverrideConfigurationValue,proto3" json:"build_override_configuration_value,omitempty"` 571 // If true, only associate bugs with test methods if that test method is 572 // mentioned in the bug. If false, bugs will be associated with all test 573 // methods. 574 LinkBugsByTestMethods bool `protobuf:"varint,45,opt,name=link_bugs_by_test_methods,json=linkBugsByTestMethods,proto3" json:"link_bugs_by_test_methods,omitempty"` 575 // Regex to match test methods. Only test methods with names that match 576 // this regex will be included in the table. 577 TestMethodMatchRegex string `protobuf:"bytes,46,opt,name=test_method_match_regex,json=testMethodMatchRegex,proto3" json:"test_method_match_regex,omitempty"` 578 // Regex to exclude test methods. Test methods with names that match 579 // this regex will be excluded from the table, even if they match 580 // test_method_match_regex. 581 TestMethodUnmatchRegex string `protobuf:"bytes,61,opt,name=test_method_unmatch_regex,json=testMethodUnmatchRegex,proto3" json:"test_method_unmatch_regex,omitempty"` 582 // If true, test method names are printed with the full class names. 583 UseFullMethodNames bool `protobuf:"varint,47,opt,name=use_full_method_names,json=useFullMethodNames,proto3" json:"use_full_method_names,omitempty"` 584 // A configuration value that is used as a fallback grouping. 585 // This is useful for cases where there are builds that shared the same 586 // commit but are run at separate times of day. 587 FallbackGroupingConfigurationValue string `protobuf:"bytes,49,opt,name=fallback_grouping_configuration_value,json=fallbackGroupingConfigurationValue,proto3" json:"fallback_grouping_configuration_value,omitempty"` 588 // Configuration type of the result source. 589 ResultSource *TestGroup_ResultSource `protobuf:"bytes,50,opt,name=result_source,json=resultSource,proto3" json:"result_source,omitempty"` 590 // Set of rules that are evaluated with each test result. If an evaluation is 591 // successful, the status of that test result will be whatever is specified 592 // for a given rule. For more information, look at RuleSet documention 593 CustomEvaluatorRuleSet *custom_evaluator.RuleSet `protobuf:"bytes,51,opt,name=custom_evaluator_rule_set,json=customEvaluatorRuleSet,proto3" json:"custom_evaluator_rule_set,omitempty"` 594 // If true, instead of updating the group, read the state proto from storage 595 // and update summary, alerts, etc. from that state. 596 // This only applies to test group state, not bug state for a test group. 597 // This assumes that the state proto is updated through other means (another 598 // updater, manually, etc). 599 ReadStateFromStorage bool `protobuf:"varint,52,opt,name=read_state_from_storage,json=readStateFromStorage,proto3" json:"read_state_from_storage,omitempty"` 600 // If true, only add the most recent result for a test when multiple results 601 // for a test with the same name are encountered. 602 IgnoreOldResults bool `protobuf:"varint,53,opt,name=ignore_old_results,json=ignoreOldResults,proto3" json:"ignore_old_results,omitempty"` 603 // If True, ignore the 'pass with skips' status (show as a blank cell). 604 IgnoreSkip bool `protobuf:"varint,54,opt,name=ignore_skip,json=ignoreSkip,proto3" json:"ignore_skip,omitempty"` 605 // A string containing python formatting specifiers that overrides the 606 // commit with the date formatted according to this string. This is useful 607 // for aggregating multiple columns that don't have a matching commit. 608 BuildOverrideStrftime string `protobuf:"bytes,55,opt,name=build_override_strftime,json=buildOverrideStrftime,proto3" json:"build_override_strftime,omitempty"` 609 // Specify a property that will be read into state in the user_property field. 610 // These can be substituted into LinkTemplates. 611 UserProperty string `protobuf:"bytes,56,opt,name=user_property,json=userProperty,proto3" json:"user_property,omitempty"` 612 // Where to gather linked issues from. (Currently a no-op). 613 IssueGatherOptions *IssueGatherOptions `protobuf:"bytes,63,opt,name=issue_gather_options,json=issueGatherOptions,proto3" json:"issue_gather_options,omitempty"` 614 } 615 616 func (x *TestGroup) Reset() { 617 *x = TestGroup{} 618 if protoimpl.UnsafeEnabled { 619 mi := &file_config_proto_msgTypes[2] 620 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 621 ms.StoreMessageInfo(mi) 622 } 623 } 624 625 func (x *TestGroup) String() string { 626 return protoimpl.X.MessageStringOf(x) 627 } 628 629 func (*TestGroup) ProtoMessage() {} 630 631 func (x *TestGroup) ProtoReflect() protoreflect.Message { 632 mi := &file_config_proto_msgTypes[2] 633 if protoimpl.UnsafeEnabled && x != nil { 634 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 635 if ms.LoadMessageInfo() == nil { 636 ms.StoreMessageInfo(mi) 637 } 638 return ms 639 } 640 return mi.MessageOf(x) 641 } 642 643 // Deprecated: Use TestGroup.ProtoReflect.Descriptor instead. 644 func (*TestGroup) Descriptor() ([]byte, []int) { 645 return file_config_proto_rawDescGZIP(), []int{2} 646 } 647 648 func (x *TestGroup) GetName() string { 649 if x != nil { 650 return x.Name 651 } 652 return "" 653 } 654 655 func (x *TestGroup) GetGcsPrefix() string { 656 if x != nil { 657 return x.GcsPrefix 658 } 659 return "" 660 } 661 662 func (x *TestGroup) GetDaysOfResults() int32 { 663 if x != nil { 664 return x.DaysOfResults 665 } 666 return 0 667 } 668 669 func (x *TestGroup) GetIgnorePending() bool { 670 if x != nil { 671 return x.IgnorePending 672 } 673 return false 674 } 675 676 func (x *TestGroup) GetIgnoreBuilt() bool { 677 if x != nil { 678 return x.IgnoreBuilt 679 } 680 return false 681 } 682 683 func (x *TestGroup) GetTestsNamePolicy() TestGroup_TestsName { 684 if x != nil { 685 return x.TestsNamePolicy 686 } 687 return TestGroup_TESTS_NAME_UNSPECIFIED 688 } 689 690 func (x *TestGroup) GetIgnoreTestSubstring() []string { 691 if x != nil { 692 return x.IgnoreTestSubstring 693 } 694 return nil 695 } 696 697 func (x *TestGroup) GetColumnHeader() []*TestGroup_ColumnHeader { 698 if x != nil { 699 return x.ColumnHeader 700 } 701 return nil 702 } 703 704 func (x *TestGroup) GetFallbackGrouping() TestGroup_FallbackGrouping { 705 if x != nil { 706 return x.FallbackGrouping 707 } 708 return TestGroup_FALLBACK_GROUPING_NONE 709 } 710 711 // Deprecated: Do not use. 712 func (x *TestGroup) GetAlertStaleResultsHours() int32 { 713 if x != nil { 714 return x.AlertStaleResultsHours 715 } 716 return 0 717 } 718 719 // Deprecated: Do not use. 720 func (x *TestGroup) GetNumFailuresToAlert() int32 { 721 if x != nil { 722 return x.NumFailuresToAlert 723 } 724 return 0 725 } 726 727 // Deprecated: Do not use. 728 func (x *TestGroup) GetBugComponent() int32 { 729 if x != nil { 730 return x.BugComponent 731 } 732 return 0 733 } 734 735 func (x *TestGroup) GetCodeSearchPath() string { 736 if x != nil { 737 return x.CodeSearchPath 738 } 739 return "" 740 } 741 742 func (x *TestGroup) GetNumColumnsRecent() int32 { 743 if x != nil { 744 return x.NumColumnsRecent 745 } 746 return 0 747 } 748 749 func (x *TestGroup) GetUseTestMetadata() bool { 750 if x != nil { 751 return x.UseTestMetadata 752 } 753 return false 754 } 755 756 // Deprecated: Do not use. 757 func (x *TestGroup) GetAlertMailToAddresses() string { 758 if x != nil { 759 return x.AlertMailToAddresses 760 } 761 return "" 762 } 763 764 // Deprecated: Do not use. 765 func (x *TestGroup) GetAlertMailSubject() string { 766 if x != nil { 767 return x.AlertMailSubject 768 } 769 return "" 770 } 771 772 // Deprecated: Do not use. 773 func (x *TestGroup) GetAlertMailFailureMessage() string { 774 if x != nil { 775 return x.AlertMailFailureMessage 776 } 777 return "" 778 } 779 780 // Deprecated: Do not use. 781 func (x *TestGroup) GetAlertMailDebugUrl() string { 782 if x != nil { 783 return x.AlertMailDebugUrl 784 } 785 return "" 786 } 787 788 // Deprecated: Do not use. 789 func (x *TestGroup) GetMinElapsedMinutesBetweenMails() int32 { 790 if x != nil { 791 return x.MinElapsedMinutesBetweenMails 792 } 793 return 0 794 } 795 796 func (x *TestGroup) GetEnableFlakyStatus() bool { 797 if x != nil { 798 return x.EnableFlakyStatus 799 } 800 return false 801 } 802 803 func (x *TestGroup) GetDisableMergedStatus() bool { 804 if x != nil { 805 return x.DisableMergedStatus 806 } 807 return false 808 } 809 810 // Deprecated: Do not use. 811 func (x *TestGroup) GetUseKubernetesClient() bool { 812 if x != nil { 813 return x.UseKubernetesClient 814 } 815 return false 816 } 817 818 func (x *TestGroup) GetDisableProwjobAnalysis() bool { 819 if x != nil { 820 return x.DisableProwjobAnalysis 821 } 822 return false 823 } 824 825 func (x *TestGroup) GetIsExternal() bool { 826 if x != nil { 827 return x.IsExternal 828 } 829 return false 830 } 831 832 func (x *TestGroup) GetTestNameConfig() *TestNameConfig { 833 if x != nil { 834 return x.TestNameConfig 835 } 836 return nil 837 } 838 839 func (x *TestGroup) GetNotifications() []*Notification { 840 if x != nil { 841 return x.Notifications 842 } 843 return nil 844 } 845 846 func (x *TestGroup) GetPrimaryGrouping() TestGroup_PrimaryGrouping { 847 if x != nil { 848 return x.PrimaryGrouping 849 } 850 return TestGroup_PRIMARY_GROUPING_NONE 851 } 852 853 func (x *TestGroup) GetEnableTestMethods() bool { 854 if x != nil { 855 return x.EnableTestMethods 856 } 857 return false 858 } 859 860 func (x *TestGroup) GetTestAnnotations() []*TestGroup_TestAnnotation { 861 if x != nil { 862 return x.TestAnnotations 863 } 864 return nil 865 } 866 867 func (x *TestGroup) GetMaxTestMethodsPerTest() int32 { 868 if x != nil { 869 return x.MaxTestMethodsPerTest 870 } 871 return 0 872 } 873 874 func (x *TestGroup) GetTestMetadataOptions() []*TestMetadataOptions { 875 if x != nil { 876 return x.TestMetadataOptions 877 } 878 return nil 879 } 880 881 func (x *TestGroup) GetTestTagPattern() string { 882 if x != nil { 883 return x.TestTagPattern 884 } 885 return "" 886 } 887 888 // Deprecated: Do not use. 889 func (x *TestGroup) GetAutoBugOptions() *AutoBugOptions { 890 if x != nil { 891 return x.AutoBugOptions 892 } 893 return nil 894 } 895 896 func (x *TestGroup) GetMaxTestRuntimeHours() int32 { 897 if x != nil { 898 return x.MaxTestRuntimeHours 899 } 900 return 0 901 } 902 903 func (x *TestGroup) GetNumPassesToDisableAlert() int32 { 904 if x != nil { 905 return x.NumPassesToDisableAlert 906 } 907 return 0 908 } 909 910 func (x *TestGroup) GetLinkBugsByGroup() bool { 911 if x != nil { 912 return x.LinkBugsByGroup 913 } 914 return false 915 } 916 917 func (x *TestGroup) GetTestMethodProperties() []*TestGroup_KeyValue { 918 if x != nil { 919 return x.TestMethodProperties 920 } 921 return nil 922 } 923 924 func (x *TestGroup) GetGatherBugs() bool { 925 if x != nil { 926 return x.GatherBugs 927 } 928 return false 929 } 930 931 func (x *TestGroup) GetShortTextMetric() string { 932 if x != nil { 933 return x.ShortTextMetric 934 } 935 return "" 936 } 937 938 func (x *TestGroup) GetBuildOverrideConfigurationValue() string { 939 if x != nil { 940 return x.BuildOverrideConfigurationValue 941 } 942 return "" 943 } 944 945 func (x *TestGroup) GetLinkBugsByTestMethods() bool { 946 if x != nil { 947 return x.LinkBugsByTestMethods 948 } 949 return false 950 } 951 952 func (x *TestGroup) GetTestMethodMatchRegex() string { 953 if x != nil { 954 return x.TestMethodMatchRegex 955 } 956 return "" 957 } 958 959 func (x *TestGroup) GetTestMethodUnmatchRegex() string { 960 if x != nil { 961 return x.TestMethodUnmatchRegex 962 } 963 return "" 964 } 965 966 func (x *TestGroup) GetUseFullMethodNames() bool { 967 if x != nil { 968 return x.UseFullMethodNames 969 } 970 return false 971 } 972 973 func (x *TestGroup) GetFallbackGroupingConfigurationValue() string { 974 if x != nil { 975 return x.FallbackGroupingConfigurationValue 976 } 977 return "" 978 } 979 980 func (x *TestGroup) GetResultSource() *TestGroup_ResultSource { 981 if x != nil { 982 return x.ResultSource 983 } 984 return nil 985 } 986 987 func (x *TestGroup) GetCustomEvaluatorRuleSet() *custom_evaluator.RuleSet { 988 if x != nil { 989 return x.CustomEvaluatorRuleSet 990 } 991 return nil 992 } 993 994 func (x *TestGroup) GetReadStateFromStorage() bool { 995 if x != nil { 996 return x.ReadStateFromStorage 997 } 998 return false 999 } 1000 1001 func (x *TestGroup) GetIgnoreOldResults() bool { 1002 if x != nil { 1003 return x.IgnoreOldResults 1004 } 1005 return false 1006 } 1007 1008 func (x *TestGroup) GetIgnoreSkip() bool { 1009 if x != nil { 1010 return x.IgnoreSkip 1011 } 1012 return false 1013 } 1014 1015 func (x *TestGroup) GetBuildOverrideStrftime() string { 1016 if x != nil { 1017 return x.BuildOverrideStrftime 1018 } 1019 return "" 1020 } 1021 1022 func (x *TestGroup) GetUserProperty() string { 1023 if x != nil { 1024 return x.UserProperty 1025 } 1026 return "" 1027 } 1028 1029 func (x *TestGroup) GetIssueGatherOptions() *IssueGatherOptions { 1030 if x != nil { 1031 return x.IssueGatherOptions 1032 } 1033 return nil 1034 } 1035 1036 // GCSConfig specifies results stored in GCS, typically created by prow. 1037 // 1038 // Each invocation is stored in a GCS path, containing json metadata files 1039 // as well as junit and other artifacts specifying the result of the run. 1040 // 1041 // More info: 1042 // https://github.com/GoogleCloudPlatform/testgrid/tree/master/metadata 1043 type GCSConfig struct { 1044 state protoimpl.MessageState 1045 sizeCache protoimpl.SizeCache 1046 unknownFields protoimpl.UnknownFields 1047 1048 // Path to the test result stored in gcs (some-bucket/some/optional/path). 1049 GcsPrefix string `protobuf:"bytes,1,opt,name=gcs_prefix,json=gcsPrefix,proto3" json:"gcs_prefix,omitempty"` 1050 // The GCP project where GCS sends notifications for the above prefix. 1051 PubsubProject string `protobuf:"bytes,2,opt,name=pubsub_project,json=pubsubProject,proto3" json:"pubsub_project,omitempty"` 1052 // The pubsub subscription ID in the above topic 1053 PubsubSubscription string `protobuf:"bytes,3,opt,name=pubsub_subscription,json=pubsubSubscription,proto3" json:"pubsub_subscription,omitempty"` 1054 } 1055 1056 func (x *GCSConfig) Reset() { 1057 *x = GCSConfig{} 1058 if protoimpl.UnsafeEnabled { 1059 mi := &file_config_proto_msgTypes[3] 1060 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1061 ms.StoreMessageInfo(mi) 1062 } 1063 } 1064 1065 func (x *GCSConfig) String() string { 1066 return protoimpl.X.MessageStringOf(x) 1067 } 1068 1069 func (*GCSConfig) ProtoMessage() {} 1070 1071 func (x *GCSConfig) ProtoReflect() protoreflect.Message { 1072 mi := &file_config_proto_msgTypes[3] 1073 if protoimpl.UnsafeEnabled && x != nil { 1074 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1075 if ms.LoadMessageInfo() == nil { 1076 ms.StoreMessageInfo(mi) 1077 } 1078 return ms 1079 } 1080 return mi.MessageOf(x) 1081 } 1082 1083 // Deprecated: Use GCSConfig.ProtoReflect.Descriptor instead. 1084 func (*GCSConfig) Descriptor() ([]byte, []int) { 1085 return file_config_proto_rawDescGZIP(), []int{3} 1086 } 1087 1088 func (x *GCSConfig) GetGcsPrefix() string { 1089 if x != nil { 1090 return x.GcsPrefix 1091 } 1092 return "" 1093 } 1094 1095 func (x *GCSConfig) GetPubsubProject() string { 1096 if x != nil { 1097 return x.PubsubProject 1098 } 1099 return "" 1100 } 1101 1102 func (x *GCSConfig) GetPubsubSubscription() string { 1103 if x != nil { 1104 return x.PubsubSubscription 1105 } 1106 return "" 1107 } 1108 1109 // ResultStoreConfig specifies results stored in ResultStore. 1110 type ResultStoreConfig struct { 1111 state protoimpl.MessageState 1112 sizeCache protoimpl.SizeCache 1113 unknownFields protoimpl.UnknownFields 1114 1115 // Google Cloud Platform project ID where ResultStore results are stored. 1116 Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` 1117 // A simple query to filter for particular results. 1118 // Currently, only allows a query in the form of `target:"<target>"`. 1119 Query string `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"` 1120 } 1121 1122 func (x *ResultStoreConfig) Reset() { 1123 *x = ResultStoreConfig{} 1124 if protoimpl.UnsafeEnabled { 1125 mi := &file_config_proto_msgTypes[4] 1126 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1127 ms.StoreMessageInfo(mi) 1128 } 1129 } 1130 1131 func (x *ResultStoreConfig) String() string { 1132 return protoimpl.X.MessageStringOf(x) 1133 } 1134 1135 func (*ResultStoreConfig) ProtoMessage() {} 1136 1137 func (x *ResultStoreConfig) ProtoReflect() protoreflect.Message { 1138 mi := &file_config_proto_msgTypes[4] 1139 if protoimpl.UnsafeEnabled && x != nil { 1140 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1141 if ms.LoadMessageInfo() == nil { 1142 ms.StoreMessageInfo(mi) 1143 } 1144 return ms 1145 } 1146 return mi.MessageOf(x) 1147 } 1148 1149 // Deprecated: Use ResultStoreConfig.ProtoReflect.Descriptor instead. 1150 func (*ResultStoreConfig) Descriptor() ([]byte, []int) { 1151 return file_config_proto_rawDescGZIP(), []int{4} 1152 } 1153 1154 func (x *ResultStoreConfig) GetProject() string { 1155 if x != nil { 1156 return x.Project 1157 } 1158 return "" 1159 } 1160 1161 func (x *ResultStoreConfig) GetQuery() string { 1162 if x != nil { 1163 return x.Query 1164 } 1165 return "" 1166 } 1167 1168 // Options for where to gather linked issues from. 1169 type IssueGatherOptions struct { 1170 state protoimpl.MessageState 1171 sizeCache protoimpl.SizeCache 1172 unknownFields protoimpl.UnknownFields 1173 } 1174 1175 func (x *IssueGatherOptions) Reset() { 1176 *x = IssueGatherOptions{} 1177 if protoimpl.UnsafeEnabled { 1178 mi := &file_config_proto_msgTypes[5] 1179 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1180 ms.StoreMessageInfo(mi) 1181 } 1182 } 1183 1184 func (x *IssueGatherOptions) String() string { 1185 return protoimpl.X.MessageStringOf(x) 1186 } 1187 1188 func (*IssueGatherOptions) ProtoMessage() {} 1189 1190 func (x *IssueGatherOptions) ProtoReflect() protoreflect.Message { 1191 mi := &file_config_proto_msgTypes[5] 1192 if protoimpl.UnsafeEnabled && x != nil { 1193 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1194 if ms.LoadMessageInfo() == nil { 1195 ms.StoreMessageInfo(mi) 1196 } 1197 return ms 1198 } 1199 return mi.MessageOf(x) 1200 } 1201 1202 // Deprecated: Use IssueGatherOptions.ProtoReflect.Descriptor instead. 1203 func (*IssueGatherOptions) Descriptor() ([]byte, []int) { 1204 return file_config_proto_rawDescGZIP(), []int{5} 1205 } 1206 1207 // Default metadata to apply when opening bugs. 1208 type TestMetadataOptions struct { 1209 state protoimpl.MessageState 1210 sizeCache protoimpl.SizeCache 1211 unknownFields protoimpl.UnknownFields 1212 1213 // Apply the following metadata if this regex matches a test's name. 1214 TestNameRegex string `protobuf:"bytes,1,opt,name=test_name_regex,json=testNameRegex,proto3" json:"test_name_regex,omitempty"` 1215 // Default bug component to open a bug in. 1216 BugComponent int32 `protobuf:"varint,2,opt,name=bug_component,json=bugComponent,proto3" json:"bug_component,omitempty"` 1217 // Default owner to assign a bug to. 1218 Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` 1219 // List of default users to CC a bug to. 1220 Cc []string `protobuf:"bytes,4,rep,name=cc,proto3" json:"cc,omitempty"` 1221 // Apply following metadata if this regex matches a test’s failure message. 1222 MessageRegex string `protobuf:"bytes,5,opt,name=message_regex,json=messageRegex,proto3" json:"message_regex,omitempty"` 1223 } 1224 1225 func (x *TestMetadataOptions) Reset() { 1226 *x = TestMetadataOptions{} 1227 if protoimpl.UnsafeEnabled { 1228 mi := &file_config_proto_msgTypes[6] 1229 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1230 ms.StoreMessageInfo(mi) 1231 } 1232 } 1233 1234 func (x *TestMetadataOptions) String() string { 1235 return protoimpl.X.MessageStringOf(x) 1236 } 1237 1238 func (*TestMetadataOptions) ProtoMessage() {} 1239 1240 func (x *TestMetadataOptions) ProtoReflect() protoreflect.Message { 1241 mi := &file_config_proto_msgTypes[6] 1242 if protoimpl.UnsafeEnabled && x != nil { 1243 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1244 if ms.LoadMessageInfo() == nil { 1245 ms.StoreMessageInfo(mi) 1246 } 1247 return ms 1248 } 1249 return mi.MessageOf(x) 1250 } 1251 1252 // Deprecated: Use TestMetadataOptions.ProtoReflect.Descriptor instead. 1253 func (*TestMetadataOptions) Descriptor() ([]byte, []int) { 1254 return file_config_proto_rawDescGZIP(), []int{6} 1255 } 1256 1257 func (x *TestMetadataOptions) GetTestNameRegex() string { 1258 if x != nil { 1259 return x.TestNameRegex 1260 } 1261 return "" 1262 } 1263 1264 func (x *TestMetadataOptions) GetBugComponent() int32 { 1265 if x != nil { 1266 return x.BugComponent 1267 } 1268 return 0 1269 } 1270 1271 func (x *TestMetadataOptions) GetOwner() string { 1272 if x != nil { 1273 return x.Owner 1274 } 1275 return "" 1276 } 1277 1278 func (x *TestMetadataOptions) GetCc() []string { 1279 if x != nil { 1280 return x.Cc 1281 } 1282 return nil 1283 } 1284 1285 func (x *TestMetadataOptions) GetMessageRegex() string { 1286 if x != nil { 1287 return x.MessageRegex 1288 } 1289 return "" 1290 } 1291 1292 type AutoBugOptions struct { 1293 state protoimpl.MessageState 1294 sizeCache protoimpl.SizeCache 1295 unknownFields protoimpl.UnknownFields 1296 1297 // [BETA] When specified, file bugs to this component, using the beta AutoBug. 1298 // If you do not want to opt into the beta, specify `bug_component` in your 1299 // TestGroup instead. 1300 // TODO(b/154866134): Rename to autobug_component once we've migrated. 1301 BetaAutobugComponent int32 `protobuf:"varint,10,opt,name=beta_autobug_component,json=betaAutobugComponent,proto3" json:"beta_autobug_component,omitempty"` 1302 // Whether to auto-close auto-filed bugs. 1303 // Alias for "passing_behavior = CLOSE_ON_PASSING"; 1304 AutoClose bool `protobuf:"varint,1,opt,name=auto_close,json=autoClose,proto3" json:"auto_close,omitempty"` 1305 // A list of hotlist ids attached to auto-filed bugs. 1306 HotlistIds []int64 `protobuf:"varint,2,rep,packed,name=hotlist_ids,json=hotlistIds,proto3" json:"hotlist_ids,omitempty"` 1307 // The priority of the auto-filed bug. If provided, this will overwrite the 1308 // priority in the component default template 1309 Priority AutoBugOptions_Priority `protobuf:"varint,3,opt,name=priority,proto3,enum=testgrid.config.AutoBugOptions_Priority" json:"priority,omitempty"` 1310 // A list of hotlist id sources 1311 // Corresponds with the list hotlist_ids (#2) 1312 // 1313 // Deprecated: Do not use. 1314 HotlistIdsFromSource []*HotlistIdFromSource `protobuf:"bytes,4,rep,name=hotlist_ids_from_source,json=hotlistIdsFromSource,proto3" json:"hotlist_ids_from_source,omitempty"` 1315 // If True, files separate bugs for each failing target, instead of one bug 1316 // for each set of targets failing at the same run. 1317 FileIndividual bool `protobuf:"varint,5,opt,name=file_individual,json=fileIndividual,proto3" json:"file_individual,omitempty"` 1318 // If True; keep only one automantic bug per target, regardless of the number 1319 // of separate failures a target gets. Requires `file_individual` to be True. 1320 // Consider setting `num_passes_to_disable_alert` instead if you're tracking 1321 // flaky tests. 1322 SingletonAutobug bool `protobuf:"varint,6,opt,name=singleton_autobug,json=singletonAutobug,proto3" json:"singleton_autobug,omitempty"` 1323 // If provided: only raise one bug if the number of failures for a single 1324 // query by testgrid for a single failure group exceeds this value. Requires 1325 // 'file_individual' to be True. 1326 MaxAllowedIndividualBugs int32 `protobuf:"varint,7,opt,name=max_allowed_individual_bugs,json=maxAllowedIndividualBugs,proto3" json:"max_allowed_individual_bugs,omitempty"` 1327 // If True; file issues for the 'Overall' target, even if otherwise invalid. 1328 FileOverall bool `protobuf:"varint,8,opt,name=file_overall,json=fileOverall,proto3" json:"file_overall,omitempty"` 1329 // If provided: supplements `max_allowed_individual_bugs` field to raise a 1330 // single bug if the number of failures for a single query by testgrid exceeds 1331 // the max_allowed_individual_bugs` value, regardless of `TEST_METADATA` 1332 // configurations. This is useful for filing fewer suspected environmental 1333 // failure bugs and routing them to a specific location (i.e. an oncall). 1334 // Requires 'file_individual' to be true and `max_allowed_individual_bugs` to 1335 // not be empty. 1336 DefaultTestMetadata *AutoBugOptions_DefaultTestMetadata `protobuf:"bytes,9,opt,name=default_test_metadata,json=defaultTestMetadata,proto3" json:"default_test_metadata,omitempty"` 1337 // [BETA] If True, query the test metadata API to get issue-routing metadata. 1338 // Enables routing issues using structured test failures. 1339 AdvancedTestMetadata bool `protobuf:"varint,11,opt,name=advanced_test_metadata,json=advancedTestMetadata,proto3" json:"advanced_test_metadata,omitempty"` 1340 // If True, file a bug when the tab goes stale. 1341 // (Requires `alert_stale_results_hours` to be set.) 1342 FileStale bool `protobuf:"varint,12,opt,name=file_stale,json=fileStale,proto3" json:"file_stale,omitempty"` 1343 // If True, ignore overall rows when auto-filing. 1344 IgnoreOverall bool `protobuf:"varint,13,opt,name=ignore_overall,json=ignoreOverall,proto3" json:"ignore_overall,omitempty"` 1345 // [BETA] Extra text displayed in opened bugs. e.g., for including a link to a 1346 // playbook. 1347 Note string `protobuf:"bytes,14,opt,name=note,proto3" json:"note,omitempty"` 1348 } 1349 1350 func (x *AutoBugOptions) Reset() { 1351 *x = AutoBugOptions{} 1352 if protoimpl.UnsafeEnabled { 1353 mi := &file_config_proto_msgTypes[7] 1354 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1355 ms.StoreMessageInfo(mi) 1356 } 1357 } 1358 1359 func (x *AutoBugOptions) String() string { 1360 return protoimpl.X.MessageStringOf(x) 1361 } 1362 1363 func (*AutoBugOptions) ProtoMessage() {} 1364 1365 func (x *AutoBugOptions) ProtoReflect() protoreflect.Message { 1366 mi := &file_config_proto_msgTypes[7] 1367 if protoimpl.UnsafeEnabled && x != nil { 1368 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1369 if ms.LoadMessageInfo() == nil { 1370 ms.StoreMessageInfo(mi) 1371 } 1372 return ms 1373 } 1374 return mi.MessageOf(x) 1375 } 1376 1377 // Deprecated: Use AutoBugOptions.ProtoReflect.Descriptor instead. 1378 func (*AutoBugOptions) Descriptor() ([]byte, []int) { 1379 return file_config_proto_rawDescGZIP(), []int{7} 1380 } 1381 1382 func (x *AutoBugOptions) GetBetaAutobugComponent() int32 { 1383 if x != nil { 1384 return x.BetaAutobugComponent 1385 } 1386 return 0 1387 } 1388 1389 func (x *AutoBugOptions) GetAutoClose() bool { 1390 if x != nil { 1391 return x.AutoClose 1392 } 1393 return false 1394 } 1395 1396 func (x *AutoBugOptions) GetHotlistIds() []int64 { 1397 if x != nil { 1398 return x.HotlistIds 1399 } 1400 return nil 1401 } 1402 1403 func (x *AutoBugOptions) GetPriority() AutoBugOptions_Priority { 1404 if x != nil { 1405 return x.Priority 1406 } 1407 return AutoBugOptions_PRIORITY_UNSPECIFIED 1408 } 1409 1410 // Deprecated: Do not use. 1411 func (x *AutoBugOptions) GetHotlistIdsFromSource() []*HotlistIdFromSource { 1412 if x != nil { 1413 return x.HotlistIdsFromSource 1414 } 1415 return nil 1416 } 1417 1418 func (x *AutoBugOptions) GetFileIndividual() bool { 1419 if x != nil { 1420 return x.FileIndividual 1421 } 1422 return false 1423 } 1424 1425 func (x *AutoBugOptions) GetSingletonAutobug() bool { 1426 if x != nil { 1427 return x.SingletonAutobug 1428 } 1429 return false 1430 } 1431 1432 func (x *AutoBugOptions) GetMaxAllowedIndividualBugs() int32 { 1433 if x != nil { 1434 return x.MaxAllowedIndividualBugs 1435 } 1436 return 0 1437 } 1438 1439 func (x *AutoBugOptions) GetFileOverall() bool { 1440 if x != nil { 1441 return x.FileOverall 1442 } 1443 return false 1444 } 1445 1446 func (x *AutoBugOptions) GetDefaultTestMetadata() *AutoBugOptions_DefaultTestMetadata { 1447 if x != nil { 1448 return x.DefaultTestMetadata 1449 } 1450 return nil 1451 } 1452 1453 func (x *AutoBugOptions) GetAdvancedTestMetadata() bool { 1454 if x != nil { 1455 return x.AdvancedTestMetadata 1456 } 1457 return false 1458 } 1459 1460 func (x *AutoBugOptions) GetFileStale() bool { 1461 if x != nil { 1462 return x.FileStale 1463 } 1464 return false 1465 } 1466 1467 func (x *AutoBugOptions) GetIgnoreOverall() bool { 1468 if x != nil { 1469 return x.IgnoreOverall 1470 } 1471 return false 1472 } 1473 1474 func (x *AutoBugOptions) GetNote() string { 1475 if x != nil { 1476 return x.Note 1477 } 1478 return "" 1479 } 1480 1481 type HotlistIdFromSource struct { 1482 state protoimpl.MessageState 1483 sizeCache protoimpl.SizeCache 1484 unknownFields protoimpl.UnknownFields 1485 1486 // Types that are assignable to HotlistIdSource: 1487 // *HotlistIdFromSource_Value 1488 // *HotlistIdFromSource_Label 1489 HotlistIdSource isHotlistIdFromSource_HotlistIdSource `protobuf_oneof:"hotlist_id_source"` 1490 } 1491 1492 func (x *HotlistIdFromSource) Reset() { 1493 *x = HotlistIdFromSource{} 1494 if protoimpl.UnsafeEnabled { 1495 mi := &file_config_proto_msgTypes[8] 1496 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1497 ms.StoreMessageInfo(mi) 1498 } 1499 } 1500 1501 func (x *HotlistIdFromSource) String() string { 1502 return protoimpl.X.MessageStringOf(x) 1503 } 1504 1505 func (*HotlistIdFromSource) ProtoMessage() {} 1506 1507 func (x *HotlistIdFromSource) ProtoReflect() protoreflect.Message { 1508 mi := &file_config_proto_msgTypes[8] 1509 if protoimpl.UnsafeEnabled && x != nil { 1510 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1511 if ms.LoadMessageInfo() == nil { 1512 ms.StoreMessageInfo(mi) 1513 } 1514 return ms 1515 } 1516 return mi.MessageOf(x) 1517 } 1518 1519 // Deprecated: Use HotlistIdFromSource.ProtoReflect.Descriptor instead. 1520 func (*HotlistIdFromSource) Descriptor() ([]byte, []int) { 1521 return file_config_proto_rawDescGZIP(), []int{8} 1522 } 1523 1524 func (m *HotlistIdFromSource) GetHotlistIdSource() isHotlistIdFromSource_HotlistIdSource { 1525 if m != nil { 1526 return m.HotlistIdSource 1527 } 1528 return nil 1529 } 1530 1531 func (x *HotlistIdFromSource) GetValue() int64 { 1532 if x, ok := x.GetHotlistIdSource().(*HotlistIdFromSource_Value); ok { 1533 return x.Value 1534 } 1535 return 0 1536 } 1537 1538 func (x *HotlistIdFromSource) GetLabel() string { 1539 if x, ok := x.GetHotlistIdSource().(*HotlistIdFromSource_Label); ok { 1540 return x.Label 1541 } 1542 return "" 1543 } 1544 1545 type isHotlistIdFromSource_HotlistIdSource interface { 1546 isHotlistIdFromSource_HotlistIdSource() 1547 } 1548 1549 type HotlistIdFromSource_Value struct { 1550 // ID value of hotlists 1551 Value int64 `protobuf:"varint,1,opt,name=value,proto3,oneof"` 1552 } 1553 1554 type HotlistIdFromSource_Label struct { 1555 // A label prefix 1556 Label string `protobuf:"bytes,2,opt,name=label,proto3,oneof"` 1557 } 1558 1559 func (*HotlistIdFromSource_Value) isHotlistIdFromSource_HotlistIdSource() {} 1560 1561 func (*HotlistIdFromSource_Label) isHotlistIdFromSource_HotlistIdSource() {} 1562 1563 // Specifies a dashboard. 1564 type Dashboard struct { 1565 state protoimpl.MessageState 1566 sizeCache protoimpl.SizeCache 1567 unknownFields protoimpl.UnknownFields 1568 1569 // A list of the tabs on the dashboard. 1570 DashboardTab []*DashboardTab `protobuf:"bytes,1,rep,name=dashboard_tab,json=dashboardTab,proto3" json:"dashboard_tab,omitempty"` 1571 // A name for the Dashboard. 1572 Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` 1573 // A list of notifications attached to this dashboard. 1574 // This is displayed on any dashboard tab in this dashboard. 1575 Notifications []*Notification `protobuf:"bytes,3,rep,name=notifications,proto3" json:"notifications,omitempty"` 1576 // Control which tab is displayed when first opening a dashboard. 1577 // Defaults to Summary 1578 DefaultTab string `protobuf:"bytes,5,opt,name=default_tab,json=defaultTab,proto3" json:"default_tab,omitempty"` 1579 // Controls whether to suppress highlighting of failing tabs. 1580 DownplayFailingTabs bool `protobuf:"varint,8,opt,name=downplay_failing_tabs,json=downplayFailingTabs,proto3" json:"downplay_failing_tabs,omitempty"` 1581 // Deprecated: Invert of 'downplay_failing_tabs' 1582 // 1583 // Deprecated: Do not use. 1584 HighlightFailingTabs bool `protobuf:"varint,6,opt,name=highlight_failing_tabs,json=highlightFailingTabs,proto3" json:"highlight_failing_tabs,omitempty"` 1585 // Controls whether to apply special highlighting to result header columns for 1586 // the current day. 1587 HighlightToday bool `protobuf:"varint,7,opt,name=highlight_today,json=highlightToday,proto3" json:"highlight_today,omitempty"` 1588 // A description paragraph to be displayed. 1589 Description string `protobuf:"bytes,9,opt,name=description,proto3" json:"description,omitempty"` 1590 } 1591 1592 func (x *Dashboard) Reset() { 1593 *x = Dashboard{} 1594 if protoimpl.UnsafeEnabled { 1595 mi := &file_config_proto_msgTypes[9] 1596 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1597 ms.StoreMessageInfo(mi) 1598 } 1599 } 1600 1601 func (x *Dashboard) String() string { 1602 return protoimpl.X.MessageStringOf(x) 1603 } 1604 1605 func (*Dashboard) ProtoMessage() {} 1606 1607 func (x *Dashboard) ProtoReflect() protoreflect.Message { 1608 mi := &file_config_proto_msgTypes[9] 1609 if protoimpl.UnsafeEnabled && x != nil { 1610 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1611 if ms.LoadMessageInfo() == nil { 1612 ms.StoreMessageInfo(mi) 1613 } 1614 return ms 1615 } 1616 return mi.MessageOf(x) 1617 } 1618 1619 // Deprecated: Use Dashboard.ProtoReflect.Descriptor instead. 1620 func (*Dashboard) Descriptor() ([]byte, []int) { 1621 return file_config_proto_rawDescGZIP(), []int{9} 1622 } 1623 1624 func (x *Dashboard) GetDashboardTab() []*DashboardTab { 1625 if x != nil { 1626 return x.DashboardTab 1627 } 1628 return nil 1629 } 1630 1631 func (x *Dashboard) GetName() string { 1632 if x != nil { 1633 return x.Name 1634 } 1635 return "" 1636 } 1637 1638 func (x *Dashboard) GetNotifications() []*Notification { 1639 if x != nil { 1640 return x.Notifications 1641 } 1642 return nil 1643 } 1644 1645 func (x *Dashboard) GetDefaultTab() string { 1646 if x != nil { 1647 return x.DefaultTab 1648 } 1649 return "" 1650 } 1651 1652 func (x *Dashboard) GetDownplayFailingTabs() bool { 1653 if x != nil { 1654 return x.DownplayFailingTabs 1655 } 1656 return false 1657 } 1658 1659 // Deprecated: Do not use. 1660 func (x *Dashboard) GetHighlightFailingTabs() bool { 1661 if x != nil { 1662 return x.HighlightFailingTabs 1663 } 1664 return false 1665 } 1666 1667 func (x *Dashboard) GetHighlightToday() bool { 1668 if x != nil { 1669 return x.HighlightToday 1670 } 1671 return false 1672 } 1673 1674 func (x *Dashboard) GetDescription() string { 1675 if x != nil { 1676 return x.Description 1677 } 1678 return "" 1679 } 1680 1681 type LinkTemplate struct { 1682 state protoimpl.MessageState 1683 sizeCache protoimpl.SizeCache 1684 unknownFields protoimpl.UnknownFields 1685 1686 // The URL template. 1687 Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` 1688 // The options templates. 1689 Options []*LinkOptionsTemplate `protobuf:"bytes,2,rep,name=options,proto3" json:"options,omitempty"` 1690 // An optional name, used for the context menu 1691 Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` 1692 } 1693 1694 func (x *LinkTemplate) Reset() { 1695 *x = LinkTemplate{} 1696 if protoimpl.UnsafeEnabled { 1697 mi := &file_config_proto_msgTypes[10] 1698 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1699 ms.StoreMessageInfo(mi) 1700 } 1701 } 1702 1703 func (x *LinkTemplate) String() string { 1704 return protoimpl.X.MessageStringOf(x) 1705 } 1706 1707 func (*LinkTemplate) ProtoMessage() {} 1708 1709 func (x *LinkTemplate) ProtoReflect() protoreflect.Message { 1710 mi := &file_config_proto_msgTypes[10] 1711 if protoimpl.UnsafeEnabled && x != nil { 1712 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1713 if ms.LoadMessageInfo() == nil { 1714 ms.StoreMessageInfo(mi) 1715 } 1716 return ms 1717 } 1718 return mi.MessageOf(x) 1719 } 1720 1721 // Deprecated: Use LinkTemplate.ProtoReflect.Descriptor instead. 1722 func (*LinkTemplate) Descriptor() ([]byte, []int) { 1723 return file_config_proto_rawDescGZIP(), []int{10} 1724 } 1725 1726 func (x *LinkTemplate) GetUrl() string { 1727 if x != nil { 1728 return x.Url 1729 } 1730 return "" 1731 } 1732 1733 func (x *LinkTemplate) GetOptions() []*LinkOptionsTemplate { 1734 if x != nil { 1735 return x.Options 1736 } 1737 return nil 1738 } 1739 1740 func (x *LinkTemplate) GetName() string { 1741 if x != nil { 1742 return x.Name 1743 } 1744 return "" 1745 } 1746 1747 // A simple key/value pair for link options. 1748 type LinkOptionsTemplate struct { 1749 state protoimpl.MessageState 1750 sizeCache protoimpl.SizeCache 1751 unknownFields protoimpl.UnknownFields 1752 1753 // The key for the option. This is not expanded. 1754 Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` 1755 // The value for the option. This is expanded the same as the LinkTemplate. 1756 Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` 1757 } 1758 1759 func (x *LinkOptionsTemplate) Reset() { 1760 *x = LinkOptionsTemplate{} 1761 if protoimpl.UnsafeEnabled { 1762 mi := &file_config_proto_msgTypes[11] 1763 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1764 ms.StoreMessageInfo(mi) 1765 } 1766 } 1767 1768 func (x *LinkOptionsTemplate) String() string { 1769 return protoimpl.X.MessageStringOf(x) 1770 } 1771 1772 func (*LinkOptionsTemplate) ProtoMessage() {} 1773 1774 func (x *LinkOptionsTemplate) ProtoReflect() protoreflect.Message { 1775 mi := &file_config_proto_msgTypes[11] 1776 if protoimpl.UnsafeEnabled && x != nil { 1777 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1778 if ms.LoadMessageInfo() == nil { 1779 ms.StoreMessageInfo(mi) 1780 } 1781 return ms 1782 } 1783 return mi.MessageOf(x) 1784 } 1785 1786 // Deprecated: Use LinkOptionsTemplate.ProtoReflect.Descriptor instead. 1787 func (*LinkOptionsTemplate) Descriptor() ([]byte, []int) { 1788 return file_config_proto_rawDescGZIP(), []int{11} 1789 } 1790 1791 func (x *LinkOptionsTemplate) GetKey() string { 1792 if x != nil { 1793 return x.Key 1794 } 1795 return "" 1796 } 1797 1798 func (x *LinkOptionsTemplate) GetValue() string { 1799 if x != nil { 1800 return x.Value 1801 } 1802 return "" 1803 } 1804 1805 // A single tab on a dashboard. 1806 type DashboardTab struct { 1807 state protoimpl.MessageState 1808 sizeCache protoimpl.SizeCache 1809 unknownFields protoimpl.UnknownFields 1810 1811 // The name of the dashboard tab to display in the client. 1812 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 1813 // The name of the TestGroup specifying the test results for this tab. 1814 TestGroupName string `protobuf:"bytes,2,opt,name=test_group_name,json=testGroupName,proto3" json:"test_group_name,omitempty"` 1815 // Default bug component for manually filing bugs from the dashboard 1816 BugComponent int32 `protobuf:"varint,3,opt,name=bug_component,json=bugComponent,proto3" json:"bug_component,omitempty"` 1817 // Default code search path for searching regressions. This value overrides 1818 // the default in the TestGroup config so that dashboards may be customized 1819 // separately. 1820 CodeSearchPath string `protobuf:"bytes,4,opt,name=code_search_path,json=codeSearchPath,proto3" json:"code_search_path,omitempty"` 1821 // See TestGroup.num_columns_recent. This value overrides the default in the 1822 // TestGroup config so that dashboards may be customized separately. 1823 NumColumnsRecent int32 `protobuf:"varint,5,opt,name=num_columns_recent,json=numColumnsRecent,proto3" json:"num_columns_recent,omitempty"` 1824 // Base options to always include, for example: 1825 // width=20&include-filter-by-regex=level_tests 1826 // This is taken from the #fragment part of the testgrid url. 1827 // Best way to create these is to setup the options on testgrid and then 1828 // copy the #fragment part. 1829 BaseOptions string `protobuf:"bytes,6,opt,name=base_options,json=baseOptions,proto3" json:"base_options,omitempty"` 1830 // The URL template to visit after clicking on a cell. 1831 OpenTestTemplate *LinkTemplate `protobuf:"bytes,7,opt,name=open_test_template,json=openTestTemplate,proto3" json:"open_test_template,omitempty"` 1832 // The URL template to visit when filing a bug. 1833 FileBugTemplate *LinkTemplate `protobuf:"bytes,8,opt,name=file_bug_template,json=fileBugTemplate,proto3" json:"file_bug_template,omitempty"` 1834 // The URL template to visit when attaching a bug 1835 AttachBugTemplate *LinkTemplate `protobuf:"bytes,9,opt,name=attach_bug_template,json=attachBugTemplate,proto3" json:"attach_bug_template,omitempty"` 1836 // Text to show in the about menu as a link to another view of the results. 1837 ResultsText string `protobuf:"bytes,10,opt,name=results_text,json=resultsText,proto3" json:"results_text,omitempty"` 1838 // The URL template to visit after clicking. 1839 ResultsUrlTemplate *LinkTemplate `protobuf:"bytes,11,opt,name=results_url_template,json=resultsUrlTemplate,proto3" json:"results_url_template,omitempty"` 1840 // The URL template to visit when searching for code changes, such as pull 1841 // requests 1842 CodeSearchUrlTemplate *LinkTemplate `protobuf:"bytes,12,opt,name=code_search_url_template,json=codeSearchUrlTemplate,proto3" json:"code_search_url_template,omitempty"` 1843 // A description paragraph to be displayed. 1844 Description string `protobuf:"bytes,13,opt,name=description,proto3" json:"description,omitempty"` 1845 // A regular expression that uses the named group syntax to specify how to 1846 // show names in a table. 1847 TabularNamesRegex string `protobuf:"bytes,14,opt,name=tabular_names_regex,json=tabularNamesRegex,proto3" json:"tabular_names_regex,omitempty"` 1848 // Configuration options for dashboard tab alerts. 1849 AlertOptions *DashboardTabAlertOptions `protobuf:"bytes,15,opt,name=alert_options,json=alertOptions,proto3" json:"alert_options,omitempty"` 1850 // Configuration options for dashboard tab flakiness alerts. 1851 FlakinessAlertOptions *DashboardTabFlakinessAlertOptions `protobuf:"bytes,24,opt,name=flakiness_alert_options,json=flakinessAlertOptions,proto3" json:"flakiness_alert_options,omitempty"` 1852 // Configuration options for customizing dashboard tab status calculation. 1853 StatusCustomizationOptions *DashboardTabStatusCustomizationOptions `protobuf:"bytes,26,opt,name=status_customization_options,json=statusCustomizationOptions,proto3" json:"status_customization_options,omitempty"` 1854 // A URL for the "About this Dashboard" menu option 1855 AboutDashboardUrl string `protobuf:"bytes,16,opt,name=about_dashboard_url,json=aboutDashboardUrl,proto3" json:"about_dashboard_url,omitempty"` 1856 // The URL template to visit when viewing an associated bug. 1857 OpenBugTemplate *LinkTemplate `protobuf:"bytes,17,opt,name=open_bug_template,json=openBugTemplate,proto3" json:"open_bug_template,omitempty"` 1858 // If true, auto-file bugs when new alerts occur. This requires that the 1859 // backing test group has `bug_component` set and uses the backing test 1860 // group's `auto_bug_options`. 1861 AutoFileBugs bool `protobuf:"varint,18,opt,name=auto_file_bugs,json=autoFileBugs,proto3" json:"auto_file_bugs,omitempty"` 1862 // Display user local time on the dashboard when set to true (by default). 1863 // If false, uses Pacific Timezone for this DashboardTab. 1864 DisplayLocalTime bool `protobuf:"varint,19,opt,name=display_local_time,json=displayLocalTime,proto3" json:"display_local_time,omitempty"` 1865 // A set of optional LinkTemplates that will become right-click context menu 1866 // items. 1867 // TODO(b/159042168) in the near future this should be re-implemented as a 1868 // generic list of repeated LinkTemplates which users may specify in their 1869 // reqpective configurations as right-click context menus with names and 1870 // actions upon being clicked. 1871 ContextMenuTemplate *LinkTemplate `protobuf:"bytes,20,opt,name=context_menu_template,json=contextMenuTemplate,proto3" json:"context_menu_template,omitempty"` 1872 // When specified, treat a tab as BROKEN as long as one of the most recent 1873 // columns are "broken" (ratio of failed to total tests exceeds <threshold>). 1874 BrokenColumnThreshold float32 `protobuf:"fixed32,21,opt,name=broken_column_threshold,json=brokenColumnThreshold,proto3" json:"broken_column_threshold,omitempty"` 1875 // Options for auto-filed bugs. 1876 // Using this for a dashboard tab requires specifying `beta_autobug_component` 1877 // and will opt you into the beta AutoBug. 1878 BetaAutobugOptions *AutoBugOptions `protobuf:"bytes,22,opt,name=beta_autobug_options,json=betaAutobugOptions,proto3" json:"beta_autobug_options,omitempty"` 1879 // Options for the configuration of the flakiness analysis tool, on a per tab 1880 // basis 1881 HealthAnalysisOptions *HealthAnalysisOptions `protobuf:"bytes,23,opt,name=health_analysis_options,json=healthAnalysisOptions,proto3" json:"health_analysis_options,omitempty"` 1882 // A set of optional Link Templates when search for diffs between columns. 1883 ColumnDiffLinkTemplates []*LinkTemplate `protobuf:"bytes,25,rep,name=column_diff_link_templates,json=columnDiffLinkTemplates,proto3" json:"column_diff_link_templates,omitempty"` 1884 } 1885 1886 func (x *DashboardTab) Reset() { 1887 *x = DashboardTab{} 1888 if protoimpl.UnsafeEnabled { 1889 mi := &file_config_proto_msgTypes[12] 1890 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1891 ms.StoreMessageInfo(mi) 1892 } 1893 } 1894 1895 func (x *DashboardTab) String() string { 1896 return protoimpl.X.MessageStringOf(x) 1897 } 1898 1899 func (*DashboardTab) ProtoMessage() {} 1900 1901 func (x *DashboardTab) ProtoReflect() protoreflect.Message { 1902 mi := &file_config_proto_msgTypes[12] 1903 if protoimpl.UnsafeEnabled && x != nil { 1904 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1905 if ms.LoadMessageInfo() == nil { 1906 ms.StoreMessageInfo(mi) 1907 } 1908 return ms 1909 } 1910 return mi.MessageOf(x) 1911 } 1912 1913 // Deprecated: Use DashboardTab.ProtoReflect.Descriptor instead. 1914 func (*DashboardTab) Descriptor() ([]byte, []int) { 1915 return file_config_proto_rawDescGZIP(), []int{12} 1916 } 1917 1918 func (x *DashboardTab) GetName() string { 1919 if x != nil { 1920 return x.Name 1921 } 1922 return "" 1923 } 1924 1925 func (x *DashboardTab) GetTestGroupName() string { 1926 if x != nil { 1927 return x.TestGroupName 1928 } 1929 return "" 1930 } 1931 1932 func (x *DashboardTab) GetBugComponent() int32 { 1933 if x != nil { 1934 return x.BugComponent 1935 } 1936 return 0 1937 } 1938 1939 func (x *DashboardTab) GetCodeSearchPath() string { 1940 if x != nil { 1941 return x.CodeSearchPath 1942 } 1943 return "" 1944 } 1945 1946 func (x *DashboardTab) GetNumColumnsRecent() int32 { 1947 if x != nil { 1948 return x.NumColumnsRecent 1949 } 1950 return 0 1951 } 1952 1953 func (x *DashboardTab) GetBaseOptions() string { 1954 if x != nil { 1955 return x.BaseOptions 1956 } 1957 return "" 1958 } 1959 1960 func (x *DashboardTab) GetOpenTestTemplate() *LinkTemplate { 1961 if x != nil { 1962 return x.OpenTestTemplate 1963 } 1964 return nil 1965 } 1966 1967 func (x *DashboardTab) GetFileBugTemplate() *LinkTemplate { 1968 if x != nil { 1969 return x.FileBugTemplate 1970 } 1971 return nil 1972 } 1973 1974 func (x *DashboardTab) GetAttachBugTemplate() *LinkTemplate { 1975 if x != nil { 1976 return x.AttachBugTemplate 1977 } 1978 return nil 1979 } 1980 1981 func (x *DashboardTab) GetResultsText() string { 1982 if x != nil { 1983 return x.ResultsText 1984 } 1985 return "" 1986 } 1987 1988 func (x *DashboardTab) GetResultsUrlTemplate() *LinkTemplate { 1989 if x != nil { 1990 return x.ResultsUrlTemplate 1991 } 1992 return nil 1993 } 1994 1995 func (x *DashboardTab) GetCodeSearchUrlTemplate() *LinkTemplate { 1996 if x != nil { 1997 return x.CodeSearchUrlTemplate 1998 } 1999 return nil 2000 } 2001 2002 func (x *DashboardTab) GetDescription() string { 2003 if x != nil { 2004 return x.Description 2005 } 2006 return "" 2007 } 2008 2009 func (x *DashboardTab) GetTabularNamesRegex() string { 2010 if x != nil { 2011 return x.TabularNamesRegex 2012 } 2013 return "" 2014 } 2015 2016 func (x *DashboardTab) GetAlertOptions() *DashboardTabAlertOptions { 2017 if x != nil { 2018 return x.AlertOptions 2019 } 2020 return nil 2021 } 2022 2023 func (x *DashboardTab) GetFlakinessAlertOptions() *DashboardTabFlakinessAlertOptions { 2024 if x != nil { 2025 return x.FlakinessAlertOptions 2026 } 2027 return nil 2028 } 2029 2030 func (x *DashboardTab) GetStatusCustomizationOptions() *DashboardTabStatusCustomizationOptions { 2031 if x != nil { 2032 return x.StatusCustomizationOptions 2033 } 2034 return nil 2035 } 2036 2037 func (x *DashboardTab) GetAboutDashboardUrl() string { 2038 if x != nil { 2039 return x.AboutDashboardUrl 2040 } 2041 return "" 2042 } 2043 2044 func (x *DashboardTab) GetOpenBugTemplate() *LinkTemplate { 2045 if x != nil { 2046 return x.OpenBugTemplate 2047 } 2048 return nil 2049 } 2050 2051 func (x *DashboardTab) GetAutoFileBugs() bool { 2052 if x != nil { 2053 return x.AutoFileBugs 2054 } 2055 return false 2056 } 2057 2058 func (x *DashboardTab) GetDisplayLocalTime() bool { 2059 if x != nil { 2060 return x.DisplayLocalTime 2061 } 2062 return false 2063 } 2064 2065 func (x *DashboardTab) GetContextMenuTemplate() *LinkTemplate { 2066 if x != nil { 2067 return x.ContextMenuTemplate 2068 } 2069 return nil 2070 } 2071 2072 func (x *DashboardTab) GetBrokenColumnThreshold() float32 { 2073 if x != nil { 2074 return x.BrokenColumnThreshold 2075 } 2076 return 0 2077 } 2078 2079 func (x *DashboardTab) GetBetaAutobugOptions() *AutoBugOptions { 2080 if x != nil { 2081 return x.BetaAutobugOptions 2082 } 2083 return nil 2084 } 2085 2086 func (x *DashboardTab) GetHealthAnalysisOptions() *HealthAnalysisOptions { 2087 if x != nil { 2088 return x.HealthAnalysisOptions 2089 } 2090 return nil 2091 } 2092 2093 func (x *DashboardTab) GetColumnDiffLinkTemplates() []*LinkTemplate { 2094 if x != nil { 2095 return x.ColumnDiffLinkTemplates 2096 } 2097 return nil 2098 } 2099 2100 // Configuration options for dashboard tab alerts. 2101 type DashboardTabAlertOptions struct { 2102 state protoimpl.MessageState 2103 sizeCache protoimpl.SizeCache 2104 unknownFields protoimpl.UnknownFields 2105 2106 // Time in hours before an alert will be added to a test results table if the 2107 // run date of the latest results are older than this time. If zero, no 2108 // alerts are raised. 2109 AlertStaleResultsHours int32 `protobuf:"varint,1,opt,name=alert_stale_results_hours,json=alertStaleResultsHours,proto3" json:"alert_stale_results_hours,omitempty"` 2110 // The number of consecutive test result failures to see before alerting of 2111 // a consistent failure. If zero, no alerts are raised. 2112 NumFailuresToAlert int32 `protobuf:"varint,2,opt,name=num_failures_to_alert,json=numFailuresToAlert,proto3" json:"num_failures_to_alert,omitempty"` 2113 // The comma-separated addresses to send mail. 2114 AlertMailToAddresses string `protobuf:"bytes,3,opt,name=alert_mail_to_addresses,json=alertMailToAddresses,proto3" json:"alert_mail_to_addresses,omitempty"` 2115 // The number of consecutive test passes to close the alert. 2116 NumPassesToDisableAlert int32 `protobuf:"varint,4,opt,name=num_passes_to_disable_alert,json=numPassesToDisableAlert,proto3" json:"num_passes_to_disable_alert,omitempty"` 2117 // Custom subject for alert mails. 2118 Subject string `protobuf:"bytes,5,opt,name=subject,proto3" json:"subject,omitempty"` 2119 // Custom link for further help/instructions on debugging this alert. 2120 DebugUrl string `protobuf:"bytes,6,opt,name=debug_url,json=debugUrl,proto3" json:"debug_url,omitempty"` 2121 // Custom text to show for the debug link. 2122 DebugMessage string `protobuf:"bytes,7,opt,name=debug_message,json=debugMessage,proto3" json:"debug_message,omitempty"` 2123 // Wait time between emails. If unset or zero, an email will be sent only once 2124 // it becomes a consistent failure, and not again until it succeeds. 2125 // TestGrid does not pester about staleness 2126 WaitMinutesBetweenEmails int32 `protobuf:"varint,8,opt,name=wait_minutes_between_emails,json=waitMinutesBetweenEmails,proto3" json:"wait_minutes_between_emails,omitempty"` 2127 // A custom message 2128 AlertMailFailureMessage string `protobuf:"bytes,9,opt,name=alert_mail_failure_message,json=alertMailFailureMessage,proto3" json:"alert_mail_failure_message,omitempty"` 2129 } 2130 2131 func (x *DashboardTabAlertOptions) Reset() { 2132 *x = DashboardTabAlertOptions{} 2133 if protoimpl.UnsafeEnabled { 2134 mi := &file_config_proto_msgTypes[13] 2135 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2136 ms.StoreMessageInfo(mi) 2137 } 2138 } 2139 2140 func (x *DashboardTabAlertOptions) String() string { 2141 return protoimpl.X.MessageStringOf(x) 2142 } 2143 2144 func (*DashboardTabAlertOptions) ProtoMessage() {} 2145 2146 func (x *DashboardTabAlertOptions) ProtoReflect() protoreflect.Message { 2147 mi := &file_config_proto_msgTypes[13] 2148 if protoimpl.UnsafeEnabled && x != nil { 2149 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2150 if ms.LoadMessageInfo() == nil { 2151 ms.StoreMessageInfo(mi) 2152 } 2153 return ms 2154 } 2155 return mi.MessageOf(x) 2156 } 2157 2158 // Deprecated: Use DashboardTabAlertOptions.ProtoReflect.Descriptor instead. 2159 func (*DashboardTabAlertOptions) Descriptor() ([]byte, []int) { 2160 return file_config_proto_rawDescGZIP(), []int{13} 2161 } 2162 2163 func (x *DashboardTabAlertOptions) GetAlertStaleResultsHours() int32 { 2164 if x != nil { 2165 return x.AlertStaleResultsHours 2166 } 2167 return 0 2168 } 2169 2170 func (x *DashboardTabAlertOptions) GetNumFailuresToAlert() int32 { 2171 if x != nil { 2172 return x.NumFailuresToAlert 2173 } 2174 return 0 2175 } 2176 2177 func (x *DashboardTabAlertOptions) GetAlertMailToAddresses() string { 2178 if x != nil { 2179 return x.AlertMailToAddresses 2180 } 2181 return "" 2182 } 2183 2184 func (x *DashboardTabAlertOptions) GetNumPassesToDisableAlert() int32 { 2185 if x != nil { 2186 return x.NumPassesToDisableAlert 2187 } 2188 return 0 2189 } 2190 2191 func (x *DashboardTabAlertOptions) GetSubject() string { 2192 if x != nil { 2193 return x.Subject 2194 } 2195 return "" 2196 } 2197 2198 func (x *DashboardTabAlertOptions) GetDebugUrl() string { 2199 if x != nil { 2200 return x.DebugUrl 2201 } 2202 return "" 2203 } 2204 2205 func (x *DashboardTabAlertOptions) GetDebugMessage() string { 2206 if x != nil { 2207 return x.DebugMessage 2208 } 2209 return "" 2210 } 2211 2212 func (x *DashboardTabAlertOptions) GetWaitMinutesBetweenEmails() int32 { 2213 if x != nil { 2214 return x.WaitMinutesBetweenEmails 2215 } 2216 return 0 2217 } 2218 2219 func (x *DashboardTabAlertOptions) GetAlertMailFailureMessage() string { 2220 if x != nil { 2221 return x.AlertMailFailureMessage 2222 } 2223 return "" 2224 } 2225 2226 // Configuration options for dashboard tab flakiness alerts. 2227 type DashboardTabFlakinessAlertOptions struct { 2228 state protoimpl.MessageState 2229 sizeCache protoimpl.SizeCache 2230 unknownFields protoimpl.UnknownFields 2231 2232 // The minimum amount of flakiness needed to trigger a flakiness alert. 2233 // 0=Disable alerts 2234 // This is a percentage; expected values go from 0 to 100 (100 = 100% flaky) 2235 MinimumFlakinessToAlert float32 `protobuf:"fixed32,1,opt,name=minimum_flakiness_to_alert,json=minimumFlakinessToAlert,proto3" json:"minimum_flakiness_to_alert,omitempty"` 2236 // The comma-separated addresses to send mail. 2237 AlertMailToAddresses string `protobuf:"bytes,2,opt,name=alert_mail_to_addresses,json=alertMailToAddresses,proto3" json:"alert_mail_to_addresses,omitempty"` 2238 // Custom subject for alert mails. 2239 Subject string `protobuf:"bytes,3,opt,name=subject,proto3" json:"subject,omitempty"` 2240 // Minimum time between sending mails. 2241 WaitMinutesBetweenEmails int32 `protobuf:"varint,4,opt,name=wait_minutes_between_emails,json=waitMinutesBetweenEmails,proto3" json:"wait_minutes_between_emails,omitempty"` 2242 // A custom message 2243 // TODO(RonWeber): This should be a template 2244 AlertMailFailureMessage string `protobuf:"bytes,5,opt,name=alert_mail_failure_message,json=alertMailFailureMessage,proto3" json:"alert_mail_failure_message,omitempty"` 2245 } 2246 2247 func (x *DashboardTabFlakinessAlertOptions) Reset() { 2248 *x = DashboardTabFlakinessAlertOptions{} 2249 if protoimpl.UnsafeEnabled { 2250 mi := &file_config_proto_msgTypes[14] 2251 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2252 ms.StoreMessageInfo(mi) 2253 } 2254 } 2255 2256 func (x *DashboardTabFlakinessAlertOptions) String() string { 2257 return protoimpl.X.MessageStringOf(x) 2258 } 2259 2260 func (*DashboardTabFlakinessAlertOptions) ProtoMessage() {} 2261 2262 func (x *DashboardTabFlakinessAlertOptions) ProtoReflect() protoreflect.Message { 2263 mi := &file_config_proto_msgTypes[14] 2264 if protoimpl.UnsafeEnabled && x != nil { 2265 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2266 if ms.LoadMessageInfo() == nil { 2267 ms.StoreMessageInfo(mi) 2268 } 2269 return ms 2270 } 2271 return mi.MessageOf(x) 2272 } 2273 2274 // Deprecated: Use DashboardTabFlakinessAlertOptions.ProtoReflect.Descriptor instead. 2275 func (*DashboardTabFlakinessAlertOptions) Descriptor() ([]byte, []int) { 2276 return file_config_proto_rawDescGZIP(), []int{14} 2277 } 2278 2279 func (x *DashboardTabFlakinessAlertOptions) GetMinimumFlakinessToAlert() float32 { 2280 if x != nil { 2281 return x.MinimumFlakinessToAlert 2282 } 2283 return 0 2284 } 2285 2286 func (x *DashboardTabFlakinessAlertOptions) GetAlertMailToAddresses() string { 2287 if x != nil { 2288 return x.AlertMailToAddresses 2289 } 2290 return "" 2291 } 2292 2293 func (x *DashboardTabFlakinessAlertOptions) GetSubject() string { 2294 if x != nil { 2295 return x.Subject 2296 } 2297 return "" 2298 } 2299 2300 func (x *DashboardTabFlakinessAlertOptions) GetWaitMinutesBetweenEmails() int32 { 2301 if x != nil { 2302 return x.WaitMinutesBetweenEmails 2303 } 2304 return 0 2305 } 2306 2307 func (x *DashboardTabFlakinessAlertOptions) GetAlertMailFailureMessage() string { 2308 if x != nil { 2309 return x.AlertMailFailureMessage 2310 } 2311 return "" 2312 } 2313 2314 // Configuration options for customizing the tab status calculation. 2315 type DashboardTabStatusCustomizationOptions struct { 2316 state protoimpl.MessageState 2317 sizeCache protoimpl.SizeCache 2318 unknownFields protoimpl.UnknownFields 2319 2320 // Maximum amount of flakiness tolerated to categorize tab as acceptable. Will 2321 // supplement dashboard tab status message, and mark the tab as ACCEPTABLE in 2322 // the dashboard group view. Set to "0" to disable. This is configured as a 2323 // percentage of valid (non-ignored) columns; expected values go from 0.0 to 2324 // 100.0 (100% = no passing columns is acceptable) 2325 MaxAcceptableFlakiness float32 `protobuf:"fixed32,1,opt,name=max_acceptable_flakiness,json=maxAcceptableFlakiness,proto3" json:"max_acceptable_flakiness,omitempty"` 2326 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"` 2327 // Minimum number of runs required excluding ignored ones. 2328 // If the non-ignored columns is less than this, tab status will be PENDING. 2329 MinAcceptableRuns int32 `protobuf:"varint,3,opt,name=min_acceptable_runs,json=minAcceptableRuns,proto3" json:"min_acceptable_runs,omitempty"` 2330 } 2331 2332 func (x *DashboardTabStatusCustomizationOptions) Reset() { 2333 *x = DashboardTabStatusCustomizationOptions{} 2334 if protoimpl.UnsafeEnabled { 2335 mi := &file_config_proto_msgTypes[15] 2336 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2337 ms.StoreMessageInfo(mi) 2338 } 2339 } 2340 2341 func (x *DashboardTabStatusCustomizationOptions) String() string { 2342 return protoimpl.X.MessageStringOf(x) 2343 } 2344 2345 func (*DashboardTabStatusCustomizationOptions) ProtoMessage() {} 2346 2347 func (x *DashboardTabStatusCustomizationOptions) ProtoReflect() protoreflect.Message { 2348 mi := &file_config_proto_msgTypes[15] 2349 if protoimpl.UnsafeEnabled && x != nil { 2350 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2351 if ms.LoadMessageInfo() == nil { 2352 ms.StoreMessageInfo(mi) 2353 } 2354 return ms 2355 } 2356 return mi.MessageOf(x) 2357 } 2358 2359 // Deprecated: Use DashboardTabStatusCustomizationOptions.ProtoReflect.Descriptor instead. 2360 func (*DashboardTabStatusCustomizationOptions) Descriptor() ([]byte, []int) { 2361 return file_config_proto_rawDescGZIP(), []int{15} 2362 } 2363 2364 func (x *DashboardTabStatusCustomizationOptions) GetMaxAcceptableFlakiness() float32 { 2365 if x != nil { 2366 return x.MaxAcceptableFlakiness 2367 } 2368 return 0 2369 } 2370 2371 func (x *DashboardTabStatusCustomizationOptions) GetIgnoredTestStatuses() []DashboardTabStatusCustomizationOptions_IgnoredTestStatus { 2372 if x != nil { 2373 return x.IgnoredTestStatuses 2374 } 2375 return nil 2376 } 2377 2378 func (x *DashboardTabStatusCustomizationOptions) GetMinAcceptableRuns() int32 { 2379 if x != nil { 2380 return x.MinAcceptableRuns 2381 } 2382 return 0 2383 } 2384 2385 // Specifies a dashboard group. 2386 type DashboardGroup struct { 2387 state protoimpl.MessageState 2388 sizeCache protoimpl.SizeCache 2389 unknownFields protoimpl.UnknownFields 2390 2391 // The name for the dashboard group. 2392 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 2393 // A list of names specifying dashboards to show links to in a separate tabbed 2394 // bar at the top of the page for each of the given dashboards. 2395 DashboardNames []string `protobuf:"bytes,2,rep,name=dashboard_names,json=dashboardNames,proto3" json:"dashboard_names,omitempty"` 2396 // A description paragraph to be displayed. 2397 Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` 2398 } 2399 2400 func (x *DashboardGroup) Reset() { 2401 *x = DashboardGroup{} 2402 if protoimpl.UnsafeEnabled { 2403 mi := &file_config_proto_msgTypes[16] 2404 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2405 ms.StoreMessageInfo(mi) 2406 } 2407 } 2408 2409 func (x *DashboardGroup) String() string { 2410 return protoimpl.X.MessageStringOf(x) 2411 } 2412 2413 func (*DashboardGroup) ProtoMessage() {} 2414 2415 func (x *DashboardGroup) ProtoReflect() protoreflect.Message { 2416 mi := &file_config_proto_msgTypes[16] 2417 if protoimpl.UnsafeEnabled && x != nil { 2418 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2419 if ms.LoadMessageInfo() == nil { 2420 ms.StoreMessageInfo(mi) 2421 } 2422 return ms 2423 } 2424 return mi.MessageOf(x) 2425 } 2426 2427 // Deprecated: Use DashboardGroup.ProtoReflect.Descriptor instead. 2428 func (*DashboardGroup) Descriptor() ([]byte, []int) { 2429 return file_config_proto_rawDescGZIP(), []int{16} 2430 } 2431 2432 func (x *DashboardGroup) GetName() string { 2433 if x != nil { 2434 return x.Name 2435 } 2436 return "" 2437 } 2438 2439 func (x *DashboardGroup) GetDashboardNames() []string { 2440 if x != nil { 2441 return x.DashboardNames 2442 } 2443 return nil 2444 } 2445 2446 func (x *DashboardGroup) GetDescription() string { 2447 if x != nil { 2448 return x.Description 2449 } 2450 return "" 2451 } 2452 2453 // A service configuration consisting of multiple test groups and dashboards. 2454 type Configuration struct { 2455 state protoimpl.MessageState 2456 sizeCache protoimpl.SizeCache 2457 unknownFields protoimpl.UnknownFields 2458 2459 // A list of groups of tests to gather. 2460 TestGroups []*TestGroup `protobuf:"bytes,1,rep,name=test_groups,json=testGroups,proto3" json:"test_groups,omitempty"` 2461 // A list of all of the dashboards for a server. 2462 Dashboards []*Dashboard `protobuf:"bytes,2,rep,name=dashboards,proto3" json:"dashboards,omitempty"` 2463 // A list of all the dashboard groups for a server. 2464 DashboardGroups []*DashboardGroup `protobuf:"bytes,3,rep,name=dashboard_groups,json=dashboardGroups,proto3" json:"dashboard_groups,omitempty"` 2465 } 2466 2467 func (x *Configuration) Reset() { 2468 *x = Configuration{} 2469 if protoimpl.UnsafeEnabled { 2470 mi := &file_config_proto_msgTypes[17] 2471 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2472 ms.StoreMessageInfo(mi) 2473 } 2474 } 2475 2476 func (x *Configuration) String() string { 2477 return protoimpl.X.MessageStringOf(x) 2478 } 2479 2480 func (*Configuration) ProtoMessage() {} 2481 2482 func (x *Configuration) ProtoReflect() protoreflect.Message { 2483 mi := &file_config_proto_msgTypes[17] 2484 if protoimpl.UnsafeEnabled && x != nil { 2485 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2486 if ms.LoadMessageInfo() == nil { 2487 ms.StoreMessageInfo(mi) 2488 } 2489 return ms 2490 } 2491 return mi.MessageOf(x) 2492 } 2493 2494 // Deprecated: Use Configuration.ProtoReflect.Descriptor instead. 2495 func (*Configuration) Descriptor() ([]byte, []int) { 2496 return file_config_proto_rawDescGZIP(), []int{17} 2497 } 2498 2499 func (x *Configuration) GetTestGroups() []*TestGroup { 2500 if x != nil { 2501 return x.TestGroups 2502 } 2503 return nil 2504 } 2505 2506 func (x *Configuration) GetDashboards() []*Dashboard { 2507 if x != nil { 2508 return x.Dashboards 2509 } 2510 return nil 2511 } 2512 2513 func (x *Configuration) GetDashboardGroups() []*DashboardGroup { 2514 if x != nil { 2515 return x.DashboardGroups 2516 } 2517 return nil 2518 } 2519 2520 // A grouping of configuration options for the flakiness analysis tool. 2521 // Later configuration options could include the ability to choose different 2522 // kinds of flakiness and choosing if and who to email a copy of the flakiness 2523 // report. 2524 type HealthAnalysisOptions struct { 2525 state protoimpl.MessageState 2526 sizeCache protoimpl.SizeCache 2527 unknownFields protoimpl.UnknownFields 2528 2529 // Defaults to false; flakiness analysis is opt-in 2530 Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` 2531 // Defines the number of days for one interval of analysis. 2532 // i.e. flakiness will be analyzed for the previous N days starting from Now, 2533 // and it will be compared to the calculated N days before that for trend 2534 // analysis. 2535 DaysOfAnalysis int32 `protobuf:"varint,2,opt,name=days_of_analysis,json=daysOfAnalysis,proto3" json:"days_of_analysis,omitempty"` 2536 // When to send healthiness emails out, uses cron string format. 2537 EmailSchedule string `protobuf:"bytes,3,opt,name=email_schedule,json=emailSchedule,proto3" json:"email_schedule,omitempty"` 2538 // A comma-separated list of healthiness email recipients. 2539 EmailRecipients string `protobuf:"bytes,4,opt,name=email_recipients,json=emailRecipients,proto3" json:"email_recipients,omitempty"` 2540 // A compilable regex string for grouping tests by name. 2541 // Works the same as the group-by-regex-mask option of base_options: 2542 // go/testgrid/users/dashboard_guide#grouping-tests 2543 // An empty string means no grouping. 2544 // e.g. test name: "//path/to/test - env", regex: ` - \w+` 2545 // The regex will match " - env" in the above test name and give a group of: 2546 // //path/to/test <- Group Name 2547 // - env <- Group Member 2548 GroupingRegex string `protobuf:"bytes,5,opt,name=grouping_regex,json=groupingRegex,proto3" json:"grouping_regex,omitempty"` 2549 } 2550 2551 func (x *HealthAnalysisOptions) Reset() { 2552 *x = HealthAnalysisOptions{} 2553 if protoimpl.UnsafeEnabled { 2554 mi := &file_config_proto_msgTypes[18] 2555 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2556 ms.StoreMessageInfo(mi) 2557 } 2558 } 2559 2560 func (x *HealthAnalysisOptions) String() string { 2561 return protoimpl.X.MessageStringOf(x) 2562 } 2563 2564 func (*HealthAnalysisOptions) ProtoMessage() {} 2565 2566 func (x *HealthAnalysisOptions) ProtoReflect() protoreflect.Message { 2567 mi := &file_config_proto_msgTypes[18] 2568 if protoimpl.UnsafeEnabled && x != nil { 2569 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2570 if ms.LoadMessageInfo() == nil { 2571 ms.StoreMessageInfo(mi) 2572 } 2573 return ms 2574 } 2575 return mi.MessageOf(x) 2576 } 2577 2578 // Deprecated: Use HealthAnalysisOptions.ProtoReflect.Descriptor instead. 2579 func (*HealthAnalysisOptions) Descriptor() ([]byte, []int) { 2580 return file_config_proto_rawDescGZIP(), []int{18} 2581 } 2582 2583 func (x *HealthAnalysisOptions) GetEnable() bool { 2584 if x != nil { 2585 return x.Enable 2586 } 2587 return false 2588 } 2589 2590 func (x *HealthAnalysisOptions) GetDaysOfAnalysis() int32 { 2591 if x != nil { 2592 return x.DaysOfAnalysis 2593 } 2594 return 0 2595 } 2596 2597 func (x *HealthAnalysisOptions) GetEmailSchedule() string { 2598 if x != nil { 2599 return x.EmailSchedule 2600 } 2601 return "" 2602 } 2603 2604 func (x *HealthAnalysisOptions) GetEmailRecipients() string { 2605 if x != nil { 2606 return x.EmailRecipients 2607 } 2608 return "" 2609 } 2610 2611 func (x *HealthAnalysisOptions) GetGroupingRegex() string { 2612 if x != nil { 2613 return x.GroupingRegex 2614 } 2615 return "" 2616 } 2617 2618 // The DefaultConfiguration Proto is deprecated, and will be deleted after Nov 2619 // 1, 2019. For defaulting behavior, use the yamlcfg library instead. 2620 type DefaultConfiguration struct { 2621 state protoimpl.MessageState 2622 sizeCache protoimpl.SizeCache 2623 unknownFields protoimpl.UnknownFields 2624 2625 // A default testgroup with default initialization data 2626 // 2627 // Deprecated: Do not use. 2628 DefaultTestGroup *TestGroup `protobuf:"bytes,1,opt,name=default_test_group,json=defaultTestGroup,proto3" json:"default_test_group,omitempty"` 2629 // A default dashboard tab with default initialization data 2630 // 2631 // Deprecated: Do not use. 2632 DefaultDashboardTab *DashboardTab `protobuf:"bytes,2,opt,name=default_dashboard_tab,json=defaultDashboardTab,proto3" json:"default_dashboard_tab,omitempty"` 2633 } 2634 2635 func (x *DefaultConfiguration) Reset() { 2636 *x = DefaultConfiguration{} 2637 if protoimpl.UnsafeEnabled { 2638 mi := &file_config_proto_msgTypes[19] 2639 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2640 ms.StoreMessageInfo(mi) 2641 } 2642 } 2643 2644 func (x *DefaultConfiguration) String() string { 2645 return protoimpl.X.MessageStringOf(x) 2646 } 2647 2648 func (*DefaultConfiguration) ProtoMessage() {} 2649 2650 func (x *DefaultConfiguration) ProtoReflect() protoreflect.Message { 2651 mi := &file_config_proto_msgTypes[19] 2652 if protoimpl.UnsafeEnabled && x != nil { 2653 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2654 if ms.LoadMessageInfo() == nil { 2655 ms.StoreMessageInfo(mi) 2656 } 2657 return ms 2658 } 2659 return mi.MessageOf(x) 2660 } 2661 2662 // Deprecated: Use DefaultConfiguration.ProtoReflect.Descriptor instead. 2663 func (*DefaultConfiguration) Descriptor() ([]byte, []int) { 2664 return file_config_proto_rawDescGZIP(), []int{19} 2665 } 2666 2667 // Deprecated: Do not use. 2668 func (x *DefaultConfiguration) GetDefaultTestGroup() *TestGroup { 2669 if x != nil { 2670 return x.DefaultTestGroup 2671 } 2672 return nil 2673 } 2674 2675 // Deprecated: Do not use. 2676 func (x *DefaultConfiguration) GetDefaultDashboardTab() *DashboardTab { 2677 if x != nil { 2678 return x.DefaultDashboardTab 2679 } 2680 return nil 2681 } 2682 2683 // Specifies name elements to be selected from configuration values 2684 type TestNameConfig_NameElement struct { 2685 state protoimpl.MessageState 2686 sizeCache protoimpl.SizeCache 2687 unknownFields protoimpl.UnknownFields 2688 2689 // A space-delimited string of labels 2690 Labels string `protobuf:"bytes,1,opt,name=labels,proto3" json:"labels,omitempty"` 2691 // Configuration value to use. 2692 // Valid choice are: 2693 // 'Tests name': The name of a test case 2694 // 'Commit': The commit number of the build 2695 // 'Context', 'Thread': The info extracted from each junit files: 2696 // - junit_core-os_01.xml -> Context: core-os, Thread: 01 2697 // - junit_runner.xml -> Context: runner 2698 // - junit_01.xml -> Thread: 01 2699 // or any metadata key from finished.json, which is copied from your test 2700 // suite. 2701 // 2702 // A valid sample TestNameConfig looks like: 2703 // test_name_config: 2704 // name_elements: 2705 // - target_config: Tests name 2706 // - target_config: Context 2707 // name_format: '%s [%s]' 2708 TargetConfig string `protobuf:"bytes,2,opt,name=target_config,json=targetConfig,proto3" json:"target_config,omitempty"` 2709 // Whether to use the build-target name 2710 BuildTarget bool `protobuf:"varint,3,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"` 2711 // A space-delimited string of Bazel build tags. 2712 Tags string `protobuf:"bytes,4,opt,name=tags,proto3" json:"tags,omitempty"` 2713 // The key of a test result's property. 2714 TestProperty string `protobuf:"bytes,5,opt,name=test_property,json=testProperty,proto3" json:"test_property,omitempty"` 2715 } 2716 2717 func (x *TestNameConfig_NameElement) Reset() { 2718 *x = TestNameConfig_NameElement{} 2719 if protoimpl.UnsafeEnabled { 2720 mi := &file_config_proto_msgTypes[20] 2721 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2722 ms.StoreMessageInfo(mi) 2723 } 2724 } 2725 2726 func (x *TestNameConfig_NameElement) String() string { 2727 return protoimpl.X.MessageStringOf(x) 2728 } 2729 2730 func (*TestNameConfig_NameElement) ProtoMessage() {} 2731 2732 func (x *TestNameConfig_NameElement) ProtoReflect() protoreflect.Message { 2733 mi := &file_config_proto_msgTypes[20] 2734 if protoimpl.UnsafeEnabled && x != nil { 2735 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2736 if ms.LoadMessageInfo() == nil { 2737 ms.StoreMessageInfo(mi) 2738 } 2739 return ms 2740 } 2741 return mi.MessageOf(x) 2742 } 2743 2744 // Deprecated: Use TestNameConfig_NameElement.ProtoReflect.Descriptor instead. 2745 func (*TestNameConfig_NameElement) Descriptor() ([]byte, []int) { 2746 return file_config_proto_rawDescGZIP(), []int{0, 0} 2747 } 2748 2749 func (x *TestNameConfig_NameElement) GetLabels() string { 2750 if x != nil { 2751 return x.Labels 2752 } 2753 return "" 2754 } 2755 2756 func (x *TestNameConfig_NameElement) GetTargetConfig() string { 2757 if x != nil { 2758 return x.TargetConfig 2759 } 2760 return "" 2761 } 2762 2763 func (x *TestNameConfig_NameElement) GetBuildTarget() bool { 2764 if x != nil { 2765 return x.BuildTarget 2766 } 2767 return false 2768 } 2769 2770 func (x *TestNameConfig_NameElement) GetTags() string { 2771 if x != nil { 2772 return x.Tags 2773 } 2774 return "" 2775 } 2776 2777 func (x *TestNameConfig_NameElement) GetTestProperty() string { 2778 if x != nil { 2779 return x.TestProperty 2780 } 2781 return "" 2782 } 2783 2784 // Custom column headers for defining extra column-heading rows from values in 2785 // the test result. 2786 type TestGroup_ColumnHeader struct { 2787 state protoimpl.MessageState 2788 sizeCache protoimpl.SizeCache 2789 unknownFields protoimpl.UnknownFields 2790 2791 Label string `protobuf:"bytes,1,opt,name=label,proto3" json:"label,omitempty"` 2792 Property string `protobuf:"bytes,2,opt,name=property,proto3" json:"property,omitempty"` 2793 ConfigurationValue string `protobuf:"bytes,3,opt,name=configuration_value,json=configurationValue,proto3" json:"configuration_value,omitempty"` 2794 // If true, list all distinct values. Else, list multiple distinct values as 2795 // "*". 2796 ListAllValues bool `protobuf:"varint,4,opt,name=list_all_values,json=listAllValues,proto3" json:"list_all_values,omitempty"` 2797 } 2798 2799 func (x *TestGroup_ColumnHeader) Reset() { 2800 *x = TestGroup_ColumnHeader{} 2801 if protoimpl.UnsafeEnabled { 2802 mi := &file_config_proto_msgTypes[21] 2803 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2804 ms.StoreMessageInfo(mi) 2805 } 2806 } 2807 2808 func (x *TestGroup_ColumnHeader) String() string { 2809 return protoimpl.X.MessageStringOf(x) 2810 } 2811 2812 func (*TestGroup_ColumnHeader) ProtoMessage() {} 2813 2814 func (x *TestGroup_ColumnHeader) ProtoReflect() protoreflect.Message { 2815 mi := &file_config_proto_msgTypes[21] 2816 if protoimpl.UnsafeEnabled && x != nil { 2817 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2818 if ms.LoadMessageInfo() == nil { 2819 ms.StoreMessageInfo(mi) 2820 } 2821 return ms 2822 } 2823 return mi.MessageOf(x) 2824 } 2825 2826 // Deprecated: Use TestGroup_ColumnHeader.ProtoReflect.Descriptor instead. 2827 func (*TestGroup_ColumnHeader) Descriptor() ([]byte, []int) { 2828 return file_config_proto_rawDescGZIP(), []int{2, 0} 2829 } 2830 2831 func (x *TestGroup_ColumnHeader) GetLabel() string { 2832 if x != nil { 2833 return x.Label 2834 } 2835 return "" 2836 } 2837 2838 func (x *TestGroup_ColumnHeader) GetProperty() string { 2839 if x != nil { 2840 return x.Property 2841 } 2842 return "" 2843 } 2844 2845 func (x *TestGroup_ColumnHeader) GetConfigurationValue() string { 2846 if x != nil { 2847 return x.ConfigurationValue 2848 } 2849 return "" 2850 } 2851 2852 func (x *TestGroup_ColumnHeader) GetListAllValues() bool { 2853 if x != nil { 2854 return x.ListAllValues 2855 } 2856 return false 2857 } 2858 2859 // Associates the presence of a named test property with a custom short text 2860 // displayed over the results. Short text must be <=5 characters long. 2861 type TestGroup_TestAnnotation struct { 2862 state protoimpl.MessageState 2863 sizeCache protoimpl.SizeCache 2864 unknownFields protoimpl.UnknownFields 2865 2866 ShortText string `protobuf:"bytes,1,opt,name=short_text,json=shortText,proto3" json:"short_text,omitempty"` 2867 // Types that are assignable to ShortTextMessageSource: 2868 // *TestGroup_TestAnnotation_PropertyName 2869 ShortTextMessageSource isTestGroup_TestAnnotation_ShortTextMessageSource `protobuf_oneof:"short_text_message_source"` 2870 } 2871 2872 func (x *TestGroup_TestAnnotation) Reset() { 2873 *x = TestGroup_TestAnnotation{} 2874 if protoimpl.UnsafeEnabled { 2875 mi := &file_config_proto_msgTypes[22] 2876 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2877 ms.StoreMessageInfo(mi) 2878 } 2879 } 2880 2881 func (x *TestGroup_TestAnnotation) String() string { 2882 return protoimpl.X.MessageStringOf(x) 2883 } 2884 2885 func (*TestGroup_TestAnnotation) ProtoMessage() {} 2886 2887 func (x *TestGroup_TestAnnotation) ProtoReflect() protoreflect.Message { 2888 mi := &file_config_proto_msgTypes[22] 2889 if protoimpl.UnsafeEnabled && x != nil { 2890 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2891 if ms.LoadMessageInfo() == nil { 2892 ms.StoreMessageInfo(mi) 2893 } 2894 return ms 2895 } 2896 return mi.MessageOf(x) 2897 } 2898 2899 // Deprecated: Use TestGroup_TestAnnotation.ProtoReflect.Descriptor instead. 2900 func (*TestGroup_TestAnnotation) Descriptor() ([]byte, []int) { 2901 return file_config_proto_rawDescGZIP(), []int{2, 1} 2902 } 2903 2904 func (x *TestGroup_TestAnnotation) GetShortText() string { 2905 if x != nil { 2906 return x.ShortText 2907 } 2908 return "" 2909 } 2910 2911 func (m *TestGroup_TestAnnotation) GetShortTextMessageSource() isTestGroup_TestAnnotation_ShortTextMessageSource { 2912 if m != nil { 2913 return m.ShortTextMessageSource 2914 } 2915 return nil 2916 } 2917 2918 func (x *TestGroup_TestAnnotation) GetPropertyName() string { 2919 if x, ok := x.GetShortTextMessageSource().(*TestGroup_TestAnnotation_PropertyName); ok { 2920 return x.PropertyName 2921 } 2922 return "" 2923 } 2924 2925 type isTestGroup_TestAnnotation_ShortTextMessageSource interface { 2926 isTestGroup_TestAnnotation_ShortTextMessageSource() 2927 } 2928 2929 type TestGroup_TestAnnotation_PropertyName struct { 2930 PropertyName string `protobuf:"bytes,2,opt,name=property_name,json=propertyName,proto3,oneof"` 2931 } 2932 2933 func (*TestGroup_TestAnnotation_PropertyName) isTestGroup_TestAnnotation_ShortTextMessageSource() {} 2934 2935 // A string key value pair message 2936 type TestGroup_KeyValue struct { 2937 state protoimpl.MessageState 2938 sizeCache protoimpl.SizeCache 2939 unknownFields protoimpl.UnknownFields 2940 2941 Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` 2942 Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` 2943 } 2944 2945 func (x *TestGroup_KeyValue) Reset() { 2946 *x = TestGroup_KeyValue{} 2947 if protoimpl.UnsafeEnabled { 2948 mi := &file_config_proto_msgTypes[23] 2949 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2950 ms.StoreMessageInfo(mi) 2951 } 2952 } 2953 2954 func (x *TestGroup_KeyValue) String() string { 2955 return protoimpl.X.MessageStringOf(x) 2956 } 2957 2958 func (*TestGroup_KeyValue) ProtoMessage() {} 2959 2960 func (x *TestGroup_KeyValue) ProtoReflect() protoreflect.Message { 2961 mi := &file_config_proto_msgTypes[23] 2962 if protoimpl.UnsafeEnabled && x != nil { 2963 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2964 if ms.LoadMessageInfo() == nil { 2965 ms.StoreMessageInfo(mi) 2966 } 2967 return ms 2968 } 2969 return mi.MessageOf(x) 2970 } 2971 2972 // Deprecated: Use TestGroup_KeyValue.ProtoReflect.Descriptor instead. 2973 func (*TestGroup_KeyValue) Descriptor() ([]byte, []int) { 2974 return file_config_proto_rawDescGZIP(), []int{2, 2} 2975 } 2976 2977 func (x *TestGroup_KeyValue) GetKey() string { 2978 if x != nil { 2979 return x.Key 2980 } 2981 return "" 2982 } 2983 2984 func (x *TestGroup_KeyValue) GetValue() string { 2985 if x != nil { 2986 return x.Value 2987 } 2988 return "" 2989 } 2990 2991 type TestGroup_ResultSource struct { 2992 state protoimpl.MessageState 2993 sizeCache protoimpl.SizeCache 2994 unknownFields protoimpl.UnknownFields 2995 2996 // Types that are assignable to ResultSourceConfig: 2997 // *TestGroup_ResultSource_GcsConfig 2998 // *TestGroup_ResultSource_ResultstoreConfig 2999 ResultSourceConfig isTestGroup_ResultSource_ResultSourceConfig `protobuf_oneof:"result_source_config"` 3000 } 3001 3002 func (x *TestGroup_ResultSource) Reset() { 3003 *x = TestGroup_ResultSource{} 3004 if protoimpl.UnsafeEnabled { 3005 mi := &file_config_proto_msgTypes[24] 3006 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3007 ms.StoreMessageInfo(mi) 3008 } 3009 } 3010 3011 func (x *TestGroup_ResultSource) String() string { 3012 return protoimpl.X.MessageStringOf(x) 3013 } 3014 3015 func (*TestGroup_ResultSource) ProtoMessage() {} 3016 3017 func (x *TestGroup_ResultSource) ProtoReflect() protoreflect.Message { 3018 mi := &file_config_proto_msgTypes[24] 3019 if protoimpl.UnsafeEnabled && x != nil { 3020 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3021 if ms.LoadMessageInfo() == nil { 3022 ms.StoreMessageInfo(mi) 3023 } 3024 return ms 3025 } 3026 return mi.MessageOf(x) 3027 } 3028 3029 // Deprecated: Use TestGroup_ResultSource.ProtoReflect.Descriptor instead. 3030 func (*TestGroup_ResultSource) Descriptor() ([]byte, []int) { 3031 return file_config_proto_rawDescGZIP(), []int{2, 3} 3032 } 3033 3034 func (m *TestGroup_ResultSource) GetResultSourceConfig() isTestGroup_ResultSource_ResultSourceConfig { 3035 if m != nil { 3036 return m.ResultSourceConfig 3037 } 3038 return nil 3039 } 3040 3041 func (x *TestGroup_ResultSource) GetGcsConfig() *GCSConfig { 3042 if x, ok := x.GetResultSourceConfig().(*TestGroup_ResultSource_GcsConfig); ok { 3043 return x.GcsConfig 3044 } 3045 return nil 3046 } 3047 3048 func (x *TestGroup_ResultSource) GetResultstoreConfig() *ResultStoreConfig { 3049 if x, ok := x.GetResultSourceConfig().(*TestGroup_ResultSource_ResultstoreConfig); ok { 3050 return x.ResultstoreConfig 3051 } 3052 return nil 3053 } 3054 3055 type isTestGroup_ResultSource_ResultSourceConfig interface { 3056 isTestGroup_ResultSource_ResultSourceConfig() 3057 } 3058 3059 type TestGroup_ResultSource_GcsConfig struct { 3060 // GCS buckets holding junit and json results, typically created by prow. 3061 GcsConfig *GCSConfig `protobuf:"bytes,2,opt,name=gcs_config,json=gcsConfig,proto3,oneof"` 3062 } 3063 3064 type TestGroup_ResultSource_ResultstoreConfig struct { 3065 // Invocations stored in ResultStore. 3066 ResultstoreConfig *ResultStoreConfig `protobuf:"bytes,6,opt,name=resultstore_config,json=resultstoreConfig,proto3,oneof"` 3067 } 3068 3069 func (*TestGroup_ResultSource_GcsConfig) isTestGroup_ResultSource_ResultSourceConfig() {} 3070 3071 func (*TestGroup_ResultSource_ResultstoreConfig) isTestGroup_ResultSource_ResultSourceConfig() {} 3072 3073 type AutoBugOptions_DefaultTestMetadata struct { 3074 state protoimpl.MessageState 3075 sizeCache protoimpl.SizeCache 3076 unknownFields protoimpl.UnknownFields 3077 3078 BugComponent int32 `protobuf:"varint,1,opt,name=bug_component,json=bugComponent,proto3" json:"bug_component,omitempty"` 3079 Owner string `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` 3080 Cc []string `protobuf:"bytes,3,rep,name=cc,proto3" json:"cc,omitempty"` 3081 } 3082 3083 func (x *AutoBugOptions_DefaultTestMetadata) Reset() { 3084 *x = AutoBugOptions_DefaultTestMetadata{} 3085 if protoimpl.UnsafeEnabled { 3086 mi := &file_config_proto_msgTypes[25] 3087 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3088 ms.StoreMessageInfo(mi) 3089 } 3090 } 3091 3092 func (x *AutoBugOptions_DefaultTestMetadata) String() string { 3093 return protoimpl.X.MessageStringOf(x) 3094 } 3095 3096 func (*AutoBugOptions_DefaultTestMetadata) ProtoMessage() {} 3097 3098 func (x *AutoBugOptions_DefaultTestMetadata) ProtoReflect() protoreflect.Message { 3099 mi := &file_config_proto_msgTypes[25] 3100 if protoimpl.UnsafeEnabled && x != nil { 3101 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 3102 if ms.LoadMessageInfo() == nil { 3103 ms.StoreMessageInfo(mi) 3104 } 3105 return ms 3106 } 3107 return mi.MessageOf(x) 3108 } 3109 3110 // Deprecated: Use AutoBugOptions_DefaultTestMetadata.ProtoReflect.Descriptor instead. 3111 func (*AutoBugOptions_DefaultTestMetadata) Descriptor() ([]byte, []int) { 3112 return file_config_proto_rawDescGZIP(), []int{7, 0} 3113 } 3114 3115 func (x *AutoBugOptions_DefaultTestMetadata) GetBugComponent() int32 { 3116 if x != nil { 3117 return x.BugComponent 3118 } 3119 return 0 3120 } 3121 3122 func (x *AutoBugOptions_DefaultTestMetadata) GetOwner() string { 3123 if x != nil { 3124 return x.Owner 3125 } 3126 return "" 3127 } 3128 3129 func (x *AutoBugOptions_DefaultTestMetadata) GetCc() []string { 3130 if x != nil { 3131 return x.Cc 3132 } 3133 return nil 3134 } 3135 3136 var File_config_proto protoreflect.FileDescriptor 3137 3138 var file_config_proto_rawDesc = []byte{ 3139 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 3140 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 3141 0x2a, 0x70, 0x62, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 3142 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x65, 0x76, 0x61, 0x6c, 3143 0x75, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xac, 0x02, 0x0a, 0x0e, 3144 0x54, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x50, 3145 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 3146 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 3147 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 3148 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, 3149 0x6e, 0x74, 0x52, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 3150 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 3151 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 3152 0x74, 0x1a, 0xa6, 0x01, 0x0a, 0x0b, 0x4e, 0x61, 0x6d, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 3153 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 3154 0x09, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x61, 0x72, 3155 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 3156 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 3157 0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 3158 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 3159 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 3160 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x72, 3161 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x65, 3162 0x73, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x22, 0x4b, 0x0a, 0x0c, 0x4e, 0x6f, 3163 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 3164 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 3165 0x6d, 0x61, 0x72, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 3166 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 3167 0x65, 0x78, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x22, 0x8d, 0x20, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74, 3168 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 3169 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x63, 0x73, 3170 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 3171 0x63, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x61, 0x79, 0x73, 3172 0x5f, 0x6f, 0x66, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 3173 0x05, 0x52, 0x0d, 0x64, 0x61, 0x79, 0x73, 0x4f, 0x66, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 3174 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x70, 0x65, 0x6e, 0x64, 0x69, 3175 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 3176 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f, 0x72, 3177 0x65, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 3178 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x12, 0x50, 0x0a, 0x11, 0x74, 0x65, 3179 0x73, 0x74, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 3180 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 3181 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 3182 0x70, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x0f, 0x74, 0x65, 0x73, 3183 0x74, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x32, 0x0a, 0x15, 3184 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x75, 0x62, 0x73, 3185 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x69, 0x67, 0x6e, 3186 0x6f, 0x72, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 3187 0x12, 0x4c, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 3188 0x72, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 3189 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x47, 0x72, 3190 0x6f, 0x75, 0x70, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 3191 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x58, 3192 0x0a, 0x11, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 3193 0x69, 0x6e, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x74, 0x65, 0x73, 0x74, 3194 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, 0x74, 3195 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x47, 0x72, 3196 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 3197 0x47, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x3d, 0x0a, 0x19, 0x61, 0x6c, 0x65, 0x72, 3198 0x74, 0x5f, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 3199 0x68, 0x6f, 0x75, 0x72, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x52, 3200 0x16, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x53, 0x74, 0x61, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 3201 0x74, 0x73, 0x48, 0x6f, 0x75, 0x72, 0x73, 0x12, 0x35, 0x0a, 0x15, 0x6e, 0x75, 0x6d, 0x5f, 0x66, 3202 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74, 3203 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x52, 0x12, 0x6e, 0x75, 0x6d, 0x46, 3204 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x54, 0x6f, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x27, 3205 0x0a, 0x0d, 0x62, 0x75, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x18, 3206 0x0d, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0c, 0x62, 0x75, 0x67, 0x43, 0x6f, 3207 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x64, 0x65, 0x5f, 3208 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0e, 0x20, 0x01, 0x28, 3209 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x61, 0x74, 3210 0x68, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 3211 0x5f, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x6e, 3212 0x75, 0x6d, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x12, 3213 0x2a, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 3214 0x64, 0x61, 0x74, 0x61, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x54, 3215 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x17, 0x61, 3216 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x64, 0x64, 3217 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 3218 0x52, 0x14, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x4d, 0x61, 0x69, 0x6c, 0x54, 0x6f, 0x41, 0x64, 0x64, 3219 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x12, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 3220 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x12, 0x20, 0x01, 3221 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x10, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x4d, 0x61, 0x69, 3222 0x6c, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x3f, 0x0a, 0x1a, 0x61, 0x6c, 0x65, 0x72, 3223 0x74, 0x5f, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x6d, 3224 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 3225 0x52, 0x17, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x4d, 0x61, 0x69, 0x6c, 0x46, 0x61, 0x69, 0x6c, 0x75, 3226 0x72, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x14, 0x61, 0x6c, 0x65, 3227 0x72, 0x74, 0x5f, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x75, 0x72, 3228 0x6c, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x11, 0x61, 0x6c, 0x65, 3229 0x72, 0x74, 0x4d, 0x61, 0x69, 0x6c, 0x44, 0x65, 0x62, 0x75, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x4c, 3230 0x0a, 0x21, 0x6d, 0x69, 0x6e, 0x5f, 0x65, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x5f, 0x6d, 0x69, 3231 0x6e, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x5f, 0x6d, 0x61, 3232 0x69, 0x6c, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x52, 0x1d, 0x6d, 3233 0x69, 0x6e, 0x45, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 3234 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x4d, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x2e, 0x0a, 0x13, 3235 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x6b, 0x79, 0x5f, 0x73, 0x74, 0x61, 3236 0x74, 0x75, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x65, 0x6e, 0x61, 0x62, 0x6c, 3237 0x65, 0x46, 0x6c, 0x61, 0x6b, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x15, 3238 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x5f, 0x73, 3239 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x64, 0x69, 0x73, 3240 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 3241 0x12, 0x36, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x5f, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 3242 0x65, 0x73, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x42, 3243 0x02, 0x18, 0x01, 0x52, 0x13, 0x75, 0x73, 0x65, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 3244 0x65, 0x73, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x69, 0x73, 0x61, 3245 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x77, 0x6a, 0x6f, 0x62, 0x5f, 0x61, 0x6e, 0x61, 0x6c, 3246 0x79, 0x73, 0x69, 0x73, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x64, 0x69, 0x73, 0x61, 3247 0x62, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x77, 0x6a, 0x6f, 0x62, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 3248 0x69, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 3249 0x6c, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 3250 0x6e, 0x61, 0x6c, 0x12, 0x49, 0x0a, 0x10, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 3251 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 3252 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 3253 0x54, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 3254 0x74, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x43, 3255 0x0a, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 3256 0x1b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 3257 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 3258 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 3259 0x6f, 0x6e, 0x73, 0x12, 0x55, 0x0a, 0x10, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x67, 3260 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 3261 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 3262 0x54, 0x65, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 3263 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 3264 0x72, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x6e, 3265 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 3266 0x73, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 3267 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x12, 0x54, 0x0a, 0x10, 0x74, 0x65, 3268 0x73, 0x74, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x1f, 3269 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 3270 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 3271 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 3272 0x0f, 0x74, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 3273 0x12, 0x38, 0x0a, 0x19, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 3274 0x68, 0x6f, 0x64, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x18, 0x20, 0x20, 3275 0x01, 0x28, 0x05, 0x52, 0x15, 0x6d, 0x61, 0x78, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x68, 3276 0x6f, 0x64, 0x73, 0x50, 0x65, 0x72, 0x54, 0x65, 0x73, 0x74, 0x12, 0x58, 0x0a, 0x15, 0x74, 0x65, 3277 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6f, 0x70, 0x74, 0x69, 3278 0x6f, 0x6e, 0x73, 0x18, 0x22, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x73, 0x74, 3279 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, 0x74, 3280 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 3281 0x13, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4f, 0x70, 0x74, 3282 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x61, 0x67, 3283 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x23, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 3284 0x74, 0x65, 0x73, 0x74, 0x54, 0x61, 0x67, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x4d, 3285 0x0a, 0x10, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x62, 0x75, 0x67, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 3286 0x6e, 0x73, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 3287 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x42, 3288 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0e, 0x61, 3289 0x75, 0x74, 0x6f, 0x42, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a, 3290 0x16, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 3291 0x65, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x18, 0x25, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x6d, 3292 0x61, 0x78, 0x54, 0x65, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x48, 0x6f, 0x75, 3293 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x1b, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x65, 0x73, 3294 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6c, 0x65, 0x72, 3295 0x74, 0x18, 0x26, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x6e, 0x75, 0x6d, 0x50, 0x61, 0x73, 0x73, 3296 0x65, 0x73, 0x54, 0x6f, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 3297 0x12, 0x2b, 0x0a, 0x12, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x62, 0x75, 0x67, 0x73, 0x5f, 0x62, 0x79, 3298 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x27, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6c, 0x69, 3299 0x6e, 0x6b, 0x42, 0x75, 0x67, 0x73, 0x42, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x59, 0x0a, 3300 0x16, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x70, 0x72, 0x6f, 3301 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x29, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 3302 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 3303 0x54, 0x65, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 3304 0x75, 0x65, 0x52, 0x14, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x50, 0x72, 3305 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x67, 0x61, 0x74, 0x68, 3306 0x65, 0x72, 0x5f, 0x62, 0x75, 0x67, 0x73, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x67, 3307 0x61, 0x74, 0x68, 0x65, 0x72, 0x42, 0x75, 0x67, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x68, 0x6f, 3308 0x72, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x2b, 3309 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x78, 0x74, 0x4d, 3310 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x4b, 0x0a, 0x22, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6f, 3311 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 3312 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x2c, 0x20, 0x01, 0x28, 3313 0x09, 0x52, 0x1f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 3314 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 3315 0x75, 0x65, 0x12, 0x38, 0x0a, 0x19, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x62, 0x75, 0x67, 0x73, 0x5f, 3316 0x62, 0x79, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x18, 3317 0x2d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x6c, 0x69, 0x6e, 0x6b, 0x42, 0x75, 0x67, 0x73, 0x42, 3318 0x79, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x12, 0x35, 0x0a, 0x17, 3319 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x6d, 0x61, 0x74, 0x63, 3320 0x68, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 3321 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 3322 0x67, 0x65, 0x78, 0x12, 0x39, 0x0a, 0x19, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x68, 3323 0x6f, 0x64, 0x5f, 0x75, 0x6e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 3324 0x18, 0x3d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x68, 3325 0x6f, 0x64, 0x55, 0x6e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x67, 0x65, 0x78, 0x12, 0x31, 3326 0x0a, 0x15, 0x75, 0x73, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 3327 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x75, 3328 0x73, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 3329 0x73, 0x12, 0x51, 0x0a, 0x25, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x67, 0x72, 3330 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 3331 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x31, 0x20, 0x01, 0x28, 0x09, 3332 0x52, 0x22, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x69, 3333 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 3334 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4c, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x73, 3335 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x74, 0x65, 3336 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 3337 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x6f, 3338 0x75, 0x72, 0x63, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x6f, 0x75, 0x72, 3339 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x19, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x65, 0x76, 0x61, 3340 0x6c, 0x75, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x18, 3341 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 3342 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x6f, 3343 0x72, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x52, 0x16, 0x63, 0x75, 0x73, 0x74, 0x6f, 3344 0x6d, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x65, 3345 0x74, 0x12, 0x35, 0x0a, 0x17, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 3346 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x34, 0x20, 0x01, 3347 0x28, 0x08, 0x52, 0x14, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x46, 0x72, 0x6f, 3348 0x6d, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x67, 0x6e, 0x6f, 3349 0x72, 0x65, 0x5f, 0x6f, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x35, 3350 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4f, 0x6c, 0x64, 0x52, 3351 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 3352 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x36, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x67, 0x6e, 3353 0x6f, 0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x12, 0x36, 0x0a, 0x17, 0x62, 0x75, 0x69, 0x6c, 0x64, 3354 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x66, 0x74, 0x69, 3355 0x6d, 0x65, 0x18, 0x37, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4f, 3356 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x53, 0x74, 0x72, 0x66, 0x74, 0x69, 0x6d, 0x65, 0x12, 3357 0x23, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 3358 0x18, 0x38, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, 3359 0x65, 0x72, 0x74, 0x79, 0x12, 0x55, 0x0a, 0x14, 0x69, 0x73, 0x73, 0x75, 0x65, 0x5f, 0x67, 0x61, 3360 0x74, 0x68, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x3f, 0x20, 0x01, 3361 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 3362 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x47, 0x61, 0x74, 0x68, 0x65, 0x72, 3363 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x12, 0x69, 0x73, 0x73, 0x75, 0x65, 0x47, 0x61, 3364 0x74, 0x68, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x99, 0x01, 0x0a, 0x0c, 3365 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 3366 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 3367 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x18, 0x02, 3368 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x2f, 3369 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 3370 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6e, 3371 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 3372 0x26, 0x0a, 0x0f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 3373 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, 0x69, 0x73, 0x74, 0x41, 0x6c, 3374 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x73, 0x0a, 0x0e, 0x54, 0x65, 0x73, 0x74, 0x41, 3375 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x6f, 3376 0x72, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 3377 0x68, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x25, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x70, 3378 0x65, 0x72, 0x74, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 3379 0x00, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x42, 3380 0x1b, 0x0a, 0x19, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x6d, 0x65, 3381 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0x32, 0x0a, 0x08, 3382 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 3383 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 3384 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 3385 0x1a, 0xc4, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 3386 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 3387 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 3388 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x43, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 3389 0x67, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x53, 3390 0x0a, 0x12, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x63, 0x6f, 3391 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x73, 3392 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73, 3393 0x75, 0x6c, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 3394 0x52, 0x11, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 3395 0x66, 0x69, 0x67, 0x42, 0x16, 0x0a, 0x14, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x6f, 3396 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4a, 0x04, 0x08, 0x01, 0x10, 3397 0x02, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x06, 0x22, 0x6d, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74, 0x73, 3398 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x54, 0x45, 0x53, 0x54, 0x53, 0x5f, 0x4e, 0x41, 3399 0x4d, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 3400 0x12, 0x15, 0x0a, 0x11, 0x54, 0x45, 0x53, 0x54, 0x53, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x49, 3401 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x45, 0x53, 0x54, 0x53, 3402 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10, 0x02, 0x12, 3403 0x15, 0x0a, 0x11, 0x54, 0x45, 0x53, 0x54, 0x53, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x41, 0x50, 3404 0x50, 0x45, 0x4e, 0x44, 0x10, 0x03, 0x22, 0xca, 0x01, 0x0a, 0x10, 0x46, 0x61, 0x6c, 0x6c, 0x62, 3405 0x61, 0x63, 0x6b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x16, 0x46, 3406 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x49, 0x4e, 0x47, 3407 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x46, 0x41, 0x4c, 0x4c, 0x42, 3408 0x41, 0x43, 0x4b, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x41, 0x54, 3409 0x45, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x5f, 3410 0x47, 0x52, 0x4f, 0x55, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x53, 0x10, 3411 0x02, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x5f, 0x47, 0x52, 3412 0x4f, 0x55, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x49, 0x44, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x46, 3413 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x49, 0x4e, 0x47, 3414 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x04, 0x12, 0x29, 0x0a, 0x25, 0x46, 0x41, 0x4c, 0x4c, 3415 0x42, 0x41, 0x43, 0x4b, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4f, 3416 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x4c, 0x55, 3417 0x45, 0x10, 0x05, 0x22, 0x48, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, 0x72, 3418 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x19, 0x0a, 0x15, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 3419 0x59, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 3420 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x5f, 0x47, 0x52, 0x4f, 3421 0x55, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x01, 0x4a, 0x04, 0x08, 3422 0x07, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x16, 0x10, 0x17, 0x4a, 0x04, 0x08, 0x1c, 0x10, 0x1d, 0x4a, 3423 0x04, 0x08, 0x21, 0x10, 0x22, 0x4a, 0x04, 0x08, 0x28, 0x10, 0x29, 0x4a, 0x04, 0x08, 0x30, 0x10, 3424 0x31, 0x4a, 0x04, 0x08, 0x39, 0x10, 0x3c, 0x22, 0x82, 0x01, 0x0a, 0x09, 0x47, 0x43, 0x53, 0x43, 3425 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x70, 0x72, 0x65, 3426 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x63, 0x73, 0x50, 0x72, 3427 0x65, 0x66, 0x69, 0x78, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x75, 0x62, 0x73, 0x75, 0x62, 0x5f, 0x70, 3428 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x75, 3429 0x62, 0x73, 0x75, 0x62, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2f, 0x0a, 0x13, 0x70, 3430 0x75, 0x62, 0x73, 0x75, 0x62, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 3431 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x70, 0x75, 0x62, 0x73, 0x75, 0x62, 3432 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x43, 0x0a, 0x11, 3433 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 3434 0x67, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 3435 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x71, 3436 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 3437 0x79, 0x22, 0x20, 0x0a, 0x12, 0x49, 0x73, 0x73, 0x75, 0x65, 0x47, 0x61, 0x74, 0x68, 0x65, 0x72, 3438 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 3439 0x02, 0x10, 0x03, 0x22, 0xb3, 0x01, 0x0a, 0x13, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 3440 0x64, 0x61, 0x74, 0x61, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x74, 3441 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x01, 3442 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 3443 0x67, 0x65, 0x78, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x75, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 3444 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x62, 0x75, 0x67, 0x43, 3445 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 3446 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x0e, 3447 0x0a, 0x02, 0x63, 0x63, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x02, 0x63, 0x63, 0x12, 0x23, 3448 0x0a, 0x0d, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 3449 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 3450 0x67, 0x65, 0x78, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x9a, 0x07, 0x0a, 0x0e, 0x41, 0x75, 3451 0x74, 0x6f, 0x42, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34, 0x0a, 0x16, 3452 0x62, 0x65, 0x74, 0x61, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x62, 0x75, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 3453 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x62, 0x65, 3454 0x74, 0x61, 0x41, 0x75, 0x74, 0x6f, 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 3455 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 3456 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x43, 0x6c, 0x6f, 0x73, 3457 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x73, 3458 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x49, 3459 0x64, 0x73, 0x12, 0x44, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 3460 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 3461 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x42, 0x75, 0x67, 0x4f, 0x70, 3462 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x08, 3463 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x5f, 0x0a, 0x17, 0x68, 0x6f, 0x74, 0x6c, 3464 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x73, 0x6f, 0x75, 3465 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x73, 0x74, 3466 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x48, 0x6f, 0x74, 0x6c, 3467 0x69, 0x73, 0x74, 0x49, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 3468 0x02, 0x18, 0x01, 0x52, 0x14, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x49, 0x64, 0x73, 0x46, 3469 0x72, 0x6f, 0x6d, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x69, 0x6c, 3470 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 3471 0x28, 0x08, 0x52, 0x0e, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 3472 0x61, 0x6c, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x74, 0x6f, 0x6e, 0x5f, 3473 0x61, 0x75, 0x74, 0x6f, 0x62, 0x75, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x73, 3474 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x74, 0x6f, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x62, 0x75, 0x67, 0x12, 3475 0x3d, 0x0a, 0x1b, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x69, 3476 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, 0x5f, 0x62, 0x75, 0x67, 0x73, 0x18, 0x07, 3477 0x20, 0x01, 0x28, 0x05, 0x52, 0x18, 0x6d, 0x61, 0x78, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 3478 0x49, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, 0x42, 0x75, 0x67, 0x73, 0x12, 0x21, 3479 0x0a, 0x0c, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x18, 0x08, 3480 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x61, 0x6c, 3481 0x6c, 0x12, 0x67, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x73, 3482 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 3483 0x32, 0x33, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 3484 0x69, 0x67, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x42, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 3485 0x73, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 3486 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x65, 3487 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x0a, 0x16, 0x61, 0x64, 3488 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 3489 0x64, 0x61, 0x74, 0x61, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x64, 0x76, 0x61, 3490 0x6e, 0x63, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 3491 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x18, 0x0c, 3492 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x6c, 0x65, 0x12, 3493 0x25, 0x0a, 0x0e, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x6c, 3494 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4f, 3495 0x76, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x0e, 3496 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x1a, 0x60, 0x0a, 0x13, 0x44, 0x65, 3497 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 3498 0x61, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x75, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 3499 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6d, 3500 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 3501 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 3502 0x63, 0x63, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x02, 0x63, 0x63, 0x22, 0x4c, 0x0a, 0x08, 3503 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x52, 0x49, 0x4f, 3504 0x52, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 3505 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x30, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x31, 3506 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x32, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x33, 3507 0x10, 0x04, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x34, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x0f, 0x10, 0x10, 3508 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, 0x22, 0x5a, 0x0a, 0x13, 0x48, 0x6f, 0x74, 0x6c, 0x69, 0x73, 3509 0x74, 0x49, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 3510 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x05, 3511 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 3512 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x42, 0x13, 0x0a, 3513 0x11, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 3514 0x63, 0x65, 0x22, 0x88, 0x03, 0x0a, 0x09, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 3515 0x12, 0x42, 0x0a, 0x0d, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x61, 3516 0x62, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 3517 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 3518 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x52, 0x0c, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 3519 0x64, 0x54, 0x61, 0x62, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 3520 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 3521 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 3522 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 3523 0x67, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 3524 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 3525 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x74, 0x61, 0x62, 0x18, 0x05, 0x20, 0x01, 3526 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x61, 0x62, 0x12, 0x32, 3527 0x0a, 0x15, 0x64, 0x6f, 0x77, 0x6e, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x69, 3528 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x64, 3529 0x6f, 0x77, 0x6e, 0x70, 0x6c, 0x61, 0x79, 0x46, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x61, 3530 0x62, 0x73, 0x12, 0x38, 0x0a, 0x16, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 3531 0x66, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x62, 0x73, 0x18, 0x06, 0x20, 0x01, 3532 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x14, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 3533 0x74, 0x46, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x73, 0x12, 0x27, 0x0a, 0x0f, 3534 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x74, 0x6f, 0x64, 0x61, 0x79, 0x18, 3535 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 3536 0x54, 0x6f, 0x64, 0x61, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 3537 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 3538 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x74, 0x0a, 3539 0x0c, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 3540 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 3541 0x3e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 3542 0x32, 0x24, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 3543 0x69, 0x67, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x65, 3544 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 3545 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 3546 0x61, 0x6d, 0x65, 0x22, 0x3d, 0x0a, 0x13, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x70, 0x74, 0x69, 0x6f, 3547 0x6e, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 3548 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 3549 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 3550 0x75, 0x65, 0x22, 0x8f, 0x0d, 0x0a, 0x0c, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 3551 0x54, 0x61, 0x62, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 3552 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x73, 0x74, 0x5f, 3553 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 3554 0x52, 0x0d, 0x74, 0x65, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 3555 0x23, 0x0a, 0x0d, 0x62, 0x75, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 3556 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 3557 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x73, 0x65, 0x61, 3558 0x72, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 3559 0x63, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2c, 3560 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x5f, 0x72, 0x65, 3561 0x63, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x43, 3562 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 3563 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 3564 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 3565 0x4b, 0x0a, 0x12, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x65, 0x6d, 3566 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 3567 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x69, 3568 0x6e, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x10, 0x6f, 0x70, 0x65, 0x6e, 3569 0x54, 0x65, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x49, 0x0a, 0x11, 3570 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x62, 0x75, 0x67, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 3571 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 3572 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x65, 3573 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x0f, 0x66, 0x69, 0x6c, 0x65, 0x42, 0x75, 0x67, 0x54, 3574 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x13, 0x61, 0x74, 0x74, 0x61, 0x63, 3575 0x68, 0x5f, 0x62, 0x75, 0x67, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x09, 3576 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 3577 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 3578 0x61, 0x74, 0x65, 0x52, 0x11, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x42, 0x75, 0x67, 0x54, 0x65, 3579 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 3580 0x73, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 3581 0x73, 0x75, 0x6c, 0x74, 0x73, 0x54, 0x65, 0x78, 0x74, 0x12, 0x4f, 0x0a, 0x14, 0x72, 0x65, 0x73, 3582 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 3583 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 3584 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x65, 3585 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x12, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x55, 3586 0x72, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x56, 0x0a, 0x18, 0x63, 0x6f, 3587 0x64, 0x65, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x75, 0x72, 0x6c, 0x5f, 0x74, 0x65, 3588 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 3589 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 3590 0x69, 0x6e, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x15, 0x63, 0x6f, 0x64, 3591 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x72, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 3592 0x74, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 3593 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 3594 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x61, 0x62, 0x75, 0x6c, 0x61, 0x72, 0x5f, 3595 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x0e, 0x20, 0x01, 0x28, 3596 0x09, 0x52, 0x11, 0x74, 0x61, 0x62, 0x75, 0x6c, 0x61, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 3597 0x65, 0x67, 0x65, 0x78, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x6f, 0x70, 3598 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, 0x65, 3599 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x61, 3600 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x4f, 3601 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x4f, 0x70, 0x74, 3602 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x6a, 0x0a, 0x17, 0x66, 0x6c, 0x61, 0x6b, 0x69, 0x6e, 0x65, 0x73, 3603 0x73, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 3604 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 3605 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 3606 0x64, 0x54, 0x61, 0x62, 0x46, 0x6c, 0x61, 0x6b, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6c, 0x65, 3607 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x15, 0x66, 0x6c, 0x61, 0x6b, 0x69, 3608 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 3609 0x12, 0x79, 0x0a, 0x1c, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 3610 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 3611 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 3612 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 3613 0x72, 0x64, 0x54, 0x61, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x75, 0x73, 0x74, 0x6f, 3614 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 3615 0x1a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 3616 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x61, 3617 0x62, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x75, 3618 0x72, 0x6c, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x44, 3619 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x55, 0x72, 0x6c, 0x12, 0x49, 0x0a, 0x11, 0x6f, 3620 0x70, 0x65, 0x6e, 0x5f, 0x62, 0x75, 0x67, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 3621 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 3622 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x65, 0x6d, 3623 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x6e, 0x42, 0x75, 0x67, 0x54, 0x65, 3624 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x66, 3625 0x69, 0x6c, 0x65, 0x5f, 0x62, 0x75, 0x67, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 3626 0x61, 0x75, 0x74, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x42, 0x75, 0x67, 0x73, 0x12, 0x2c, 0x0a, 0x12, 3627 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x74, 0x69, 3628 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 3629 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x15, 0x63, 0x6f, 3630 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x6d, 0x65, 0x6e, 0x75, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 3631 0x61, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74, 3632 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 3633 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 3634 0x74, 0x4d, 0x65, 0x6e, 0x75, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, 3635 0x17, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 3636 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 3637 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x68, 0x72, 0x65, 3638 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x51, 0x0a, 0x14, 0x62, 0x65, 0x74, 0x61, 0x5f, 0x61, 0x75, 3639 0x74, 0x6f, 0x62, 0x75, 0x67, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x16, 0x20, 3640 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 3641 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x42, 0x75, 0x67, 0x4f, 0x70, 0x74, 3642 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x12, 0x62, 0x65, 0x74, 0x61, 0x41, 0x75, 0x74, 0x6f, 0x62, 0x75, 3643 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5e, 0x0a, 0x17, 0x68, 0x65, 0x61, 0x6c, 3644 0x74, 0x68, 0x5f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x5f, 0x6f, 0x70, 0x74, 0x69, 3645 0x6f, 0x6e, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x73, 0x74, 3646 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x48, 0x65, 0x61, 0x6c, 3647 0x74, 0x68, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 3648 0x73, 0x52, 0x15, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 3649 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x1a, 0x63, 0x6f, 0x6c, 0x75, 3650 0x6d, 0x6e, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x74, 0x65, 0x6d, 3651 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x19, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 3652 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 3653 0x69, 0x6e, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x17, 0x63, 0x6f, 0x6c, 3654 0x75, 0x6d, 0x6e, 0x44, 0x69, 0x66, 0x66, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 3655 0x61, 0x74, 0x65, 0x73, 0x22, 0xd5, 0x03, 0x0a, 0x18, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 3656 0x72, 0x64, 0x54, 0x61, 0x62, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 3657 0x73, 0x12, 0x39, 0x0a, 0x19, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x6c, 0x65, 3658 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x18, 0x01, 3659 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x53, 0x74, 0x61, 0x6c, 0x65, 3660 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x48, 0x6f, 0x75, 0x72, 0x73, 0x12, 0x31, 0x0a, 0x15, 3661 0x6e, 0x75, 0x6d, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 3662 0x61, 0x6c, 0x65, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x6e, 0x75, 0x6d, 3663 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x54, 0x6f, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 3664 0x35, 0x0a, 0x17, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x6f, 3665 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 3666 0x52, 0x14, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x4d, 0x61, 0x69, 0x6c, 0x54, 0x6f, 0x41, 0x64, 0x64, 3667 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x1b, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 3668 0x73, 0x73, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 3669 0x61, 0x6c, 0x65, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x6e, 0x75, 0x6d, 3670 0x50, 0x61, 0x73, 0x73, 0x65, 0x73, 0x54, 0x6f, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 3671 0x6c, 0x65, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 3672 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1b, 3673 0x0a, 0x09, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 3674 0x09, 0x52, 0x08, 0x64, 0x65, 0x62, 0x75, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x64, 3675 0x65, 0x62, 0x75, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 3676 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x62, 0x75, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 3677 0x12, 0x3d, 0x0a, 0x1b, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 3678 0x5f, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x18, 3679 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x18, 0x77, 0x61, 0x69, 0x74, 0x4d, 0x69, 0x6e, 0x75, 0x74, 3680 0x65, 0x73, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x12, 3681 0x3b, 0x0a, 0x1a, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x66, 0x61, 3682 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x09, 0x20, 3683 0x01, 0x28, 0x09, 0x52, 0x17, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x4d, 0x61, 0x69, 0x6c, 0x46, 0x61, 3684 0x69, 0x6c, 0x75, 0x72, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xad, 0x02, 0x0a, 3685 0x21, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x46, 0x6c, 0x61, 3686 0x6b, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 3687 0x6e, 0x73, 0x12, 0x3b, 0x0a, 0x1a, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x66, 0x6c, 3688 0x61, 0x6b, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74, 3689 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x17, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x46, 3690 0x6c, 0x61, 0x6b, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 3691 0x35, 0x0a, 0x17, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x6f, 3692 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 3693 0x52, 0x14, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x4d, 0x61, 0x69, 0x6c, 0x54, 0x6f, 0x41, 0x64, 0x64, 3694 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 3695 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 3696 0x12, 0x3d, 0x0a, 0x1b, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 3697 0x5f, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x18, 3698 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x18, 0x77, 0x61, 0x69, 0x74, 0x4d, 0x69, 0x6e, 0x75, 0x74, 3699 0x65, 0x73, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x12, 3700 0x3b, 0x0a, 0x1a, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x66, 0x61, 3701 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 3702 0x01, 0x28, 0x09, 0x52, 0x17, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x4d, 0x61, 0x69, 0x6c, 0x46, 0x61, 3703 0x69, 0x6c, 0x75, 0x72, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x80, 0x03, 0x0a, 3704 0x26, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x53, 0x74, 0x61, 3705 0x74, 0x75, 0x73, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 3706 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x6d, 0x61, 0x78, 0x5f, 0x61, 3707 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x6b, 0x69, 0x6e, 3708 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x16, 0x6d, 0x61, 0x78, 0x41, 0x63, 3709 0x63, 0x65, 0x70, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x61, 0x6b, 0x69, 0x6e, 0x65, 0x73, 3710 0x73, 0x12, 0x7d, 0x0a, 0x15, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x73, 3711 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 3712 0x32, 0x49, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 3713 0x69, 0x67, 0x2e, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x53, 3714 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 3715 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 3716 0x64, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x13, 0x69, 0x67, 0x6e, 3717 0x6f, 0x72, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 3718 0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x69, 0x6e, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x62, 3719 0x6c, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x6d, 3720 0x69, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x73, 3721 0x22, 0x6d, 0x0a, 0x11, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x53, 3722 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x17, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x53, 0x54, 3723 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 3724 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x49, 0x5a, 0x45, 3725 0x44, 0x5f, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 3726 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 3727 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x04, 0x22, 3728 0x6f, 0x0a, 0x0e, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x47, 0x72, 0x6f, 0x75, 3729 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 3730 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 3731 0x72, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 3732 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x20, 3733 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 3734 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 3735 0x22, 0xd4, 0x01, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 3736 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x0b, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 3737 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 3738 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x47, 0x72, 3739 0x6f, 0x75, 0x70, 0x52, 0x0a, 0x74, 0x65, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 3740 0x3a, 0x0a, 0x0a, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 3741 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 3742 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 3743 0x0a, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x12, 0x4a, 0x0a, 0x10, 0x64, 3744 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 3745 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 3746 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 3747 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0f, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 3748 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0xd2, 0x01, 0x0a, 0x15, 0x48, 0x65, 0x61, 0x6c, 3749 0x74, 0x68, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 3750 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 3751 0x08, 0x52, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x64, 0x61, 0x79, 3752 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x18, 0x02, 0x20, 3753 0x01, 0x28, 0x05, 0x52, 0x0e, 0x64, 0x61, 0x79, 0x73, 0x4f, 0x66, 0x41, 0x6e, 0x61, 0x6c, 0x79, 3754 0x73, 0x69, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x73, 0x63, 0x68, 3755 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6d, 0x61, 3756 0x69, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x6d, 3757 0x61, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 3758 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x63, 0x69, 0x70, 3759 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 3760 0x67, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x67, 3761 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x65, 0x78, 0x22, 0xbb, 0x01, 0x0a, 3762 0x14, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 3763 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 3764 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 3765 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 3766 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x02, 0x18, 3767 0x01, 0x52, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x65, 0x73, 0x74, 0x47, 0x72, 3768 0x6f, 0x75, 0x70, 0x12, 0x55, 0x0a, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x64, 3769 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x61, 0x62, 0x18, 0x02, 0x20, 0x01, 3770 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 3771 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x61, 3772 0x62, 0x42, 0x02, 0x18, 0x01, 0x52, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x44, 0x61, 3773 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x61, 0x62, 0x42, 0x33, 0x5a, 0x31, 0x67, 0x69, 3774 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 3775 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, 0x73, 3776 0x74, 0x67, 0x72, 0x69, 0x64, 0x2f, 0x70, 0x62, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x62, 3777 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 3778 } 3779 3780 var ( 3781 file_config_proto_rawDescOnce sync.Once 3782 file_config_proto_rawDescData = file_config_proto_rawDesc 3783 ) 3784 3785 func file_config_proto_rawDescGZIP() []byte { 3786 file_config_proto_rawDescOnce.Do(func() { 3787 file_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_config_proto_rawDescData) 3788 }) 3789 return file_config_proto_rawDescData 3790 } 3791 3792 var file_config_proto_enumTypes = make([]protoimpl.EnumInfo, 5) 3793 var file_config_proto_msgTypes = make([]protoimpl.MessageInfo, 26) 3794 var file_config_proto_goTypes = []interface{}{ 3795 (TestGroup_TestsName)(0), // 0: testgrid.config.TestGroup.TestsName 3796 (TestGroup_FallbackGrouping)(0), // 1: testgrid.config.TestGroup.FallbackGrouping 3797 (TestGroup_PrimaryGrouping)(0), // 2: testgrid.config.TestGroup.PrimaryGrouping 3798 (AutoBugOptions_Priority)(0), // 3: testgrid.config.AutoBugOptions.Priority 3799 (DashboardTabStatusCustomizationOptions_IgnoredTestStatus)(0), // 4: testgrid.config.DashboardTabStatusCustomizationOptions.IgnoredTestStatus 3800 (*TestNameConfig)(nil), // 5: testgrid.config.TestNameConfig 3801 (*Notification)(nil), // 6: testgrid.config.Notification 3802 (*TestGroup)(nil), // 7: testgrid.config.TestGroup 3803 (*GCSConfig)(nil), // 8: testgrid.config.GCSConfig 3804 (*ResultStoreConfig)(nil), // 9: testgrid.config.ResultStoreConfig 3805 (*IssueGatherOptions)(nil), // 10: testgrid.config.IssueGatherOptions 3806 (*TestMetadataOptions)(nil), // 11: testgrid.config.TestMetadataOptions 3807 (*AutoBugOptions)(nil), // 12: testgrid.config.AutoBugOptions 3808 (*HotlistIdFromSource)(nil), // 13: testgrid.config.HotlistIdFromSource 3809 (*Dashboard)(nil), // 14: testgrid.config.Dashboard 3810 (*LinkTemplate)(nil), // 15: testgrid.config.LinkTemplate 3811 (*LinkOptionsTemplate)(nil), // 16: testgrid.config.LinkOptionsTemplate 3812 (*DashboardTab)(nil), // 17: testgrid.config.DashboardTab 3813 (*DashboardTabAlertOptions)(nil), // 18: testgrid.config.DashboardTabAlertOptions 3814 (*DashboardTabFlakinessAlertOptions)(nil), // 19: testgrid.config.DashboardTabFlakinessAlertOptions 3815 (*DashboardTabStatusCustomizationOptions)(nil), // 20: testgrid.config.DashboardTabStatusCustomizationOptions 3816 (*DashboardGroup)(nil), // 21: testgrid.config.DashboardGroup 3817 (*Configuration)(nil), // 22: testgrid.config.Configuration 3818 (*HealthAnalysisOptions)(nil), // 23: testgrid.config.HealthAnalysisOptions 3819 (*DefaultConfiguration)(nil), // 24: testgrid.config.DefaultConfiguration 3820 (*TestNameConfig_NameElement)(nil), // 25: testgrid.config.TestNameConfig.NameElement 3821 (*TestGroup_ColumnHeader)(nil), // 26: testgrid.config.TestGroup.ColumnHeader 3822 (*TestGroup_TestAnnotation)(nil), // 27: testgrid.config.TestGroup.TestAnnotation 3823 (*TestGroup_KeyValue)(nil), // 28: testgrid.config.TestGroup.KeyValue 3824 (*TestGroup_ResultSource)(nil), // 29: testgrid.config.TestGroup.ResultSource 3825 (*AutoBugOptions_DefaultTestMetadata)(nil), // 30: testgrid.config.AutoBugOptions.DefaultTestMetadata 3826 (*custom_evaluator.RuleSet)(nil), // 31: testgrid.custom_evaluator.RuleSet 3827 } 3828 var file_config_proto_depIdxs = []int32{ 3829 25, // 0: testgrid.config.TestNameConfig.name_elements:type_name -> testgrid.config.TestNameConfig.NameElement 3830 0, // 1: testgrid.config.TestGroup.tests_name_policy:type_name -> testgrid.config.TestGroup.TestsName 3831 26, // 2: testgrid.config.TestGroup.column_header:type_name -> testgrid.config.TestGroup.ColumnHeader 3832 1, // 3: testgrid.config.TestGroup.fallback_grouping:type_name -> testgrid.config.TestGroup.FallbackGrouping 3833 5, // 4: testgrid.config.TestGroup.test_name_config:type_name -> testgrid.config.TestNameConfig 3834 6, // 5: testgrid.config.TestGroup.notifications:type_name -> testgrid.config.Notification 3835 2, // 6: testgrid.config.TestGroup.primary_grouping:type_name -> testgrid.config.TestGroup.PrimaryGrouping 3836 27, // 7: testgrid.config.TestGroup.test_annotations:type_name -> testgrid.config.TestGroup.TestAnnotation 3837 11, // 8: testgrid.config.TestGroup.test_metadata_options:type_name -> testgrid.config.TestMetadataOptions 3838 12, // 9: testgrid.config.TestGroup.auto_bug_options:type_name -> testgrid.config.AutoBugOptions 3839 28, // 10: testgrid.config.TestGroup.test_method_properties:type_name -> testgrid.config.TestGroup.KeyValue 3840 29, // 11: testgrid.config.TestGroup.result_source:type_name -> testgrid.config.TestGroup.ResultSource 3841 31, // 12: testgrid.config.TestGroup.custom_evaluator_rule_set:type_name -> testgrid.custom_evaluator.RuleSet 3842 10, // 13: testgrid.config.TestGroup.issue_gather_options:type_name -> testgrid.config.IssueGatherOptions 3843 3, // 14: testgrid.config.AutoBugOptions.priority:type_name -> testgrid.config.AutoBugOptions.Priority 3844 13, // 15: testgrid.config.AutoBugOptions.hotlist_ids_from_source:type_name -> testgrid.config.HotlistIdFromSource 3845 30, // 16: testgrid.config.AutoBugOptions.default_test_metadata:type_name -> testgrid.config.AutoBugOptions.DefaultTestMetadata 3846 17, // 17: testgrid.config.Dashboard.dashboard_tab:type_name -> testgrid.config.DashboardTab 3847 6, // 18: testgrid.config.Dashboard.notifications:type_name -> testgrid.config.Notification 3848 16, // 19: testgrid.config.LinkTemplate.options:type_name -> testgrid.config.LinkOptionsTemplate 3849 15, // 20: testgrid.config.DashboardTab.open_test_template:type_name -> testgrid.config.LinkTemplate 3850 15, // 21: testgrid.config.DashboardTab.file_bug_template:type_name -> testgrid.config.LinkTemplate 3851 15, // 22: testgrid.config.DashboardTab.attach_bug_template:type_name -> testgrid.config.LinkTemplate 3852 15, // 23: testgrid.config.DashboardTab.results_url_template:type_name -> testgrid.config.LinkTemplate 3853 15, // 24: testgrid.config.DashboardTab.code_search_url_template:type_name -> testgrid.config.LinkTemplate 3854 18, // 25: testgrid.config.DashboardTab.alert_options:type_name -> testgrid.config.DashboardTabAlertOptions 3855 19, // 26: testgrid.config.DashboardTab.flakiness_alert_options:type_name -> testgrid.config.DashboardTabFlakinessAlertOptions 3856 20, // 27: testgrid.config.DashboardTab.status_customization_options:type_name -> testgrid.config.DashboardTabStatusCustomizationOptions 3857 15, // 28: testgrid.config.DashboardTab.open_bug_template:type_name -> testgrid.config.LinkTemplate 3858 15, // 29: testgrid.config.DashboardTab.context_menu_template:type_name -> testgrid.config.LinkTemplate 3859 12, // 30: testgrid.config.DashboardTab.beta_autobug_options:type_name -> testgrid.config.AutoBugOptions 3860 23, // 31: testgrid.config.DashboardTab.health_analysis_options:type_name -> testgrid.config.HealthAnalysisOptions 3861 15, // 32: testgrid.config.DashboardTab.column_diff_link_templates:type_name -> testgrid.config.LinkTemplate 3862 4, // 33: testgrid.config.DashboardTabStatusCustomizationOptions.ignored_test_statuses:type_name -> testgrid.config.DashboardTabStatusCustomizationOptions.IgnoredTestStatus 3863 7, // 34: testgrid.config.Configuration.test_groups:type_name -> testgrid.config.TestGroup 3864 14, // 35: testgrid.config.Configuration.dashboards:type_name -> testgrid.config.Dashboard 3865 21, // 36: testgrid.config.Configuration.dashboard_groups:type_name -> testgrid.config.DashboardGroup 3866 7, // 37: testgrid.config.DefaultConfiguration.default_test_group:type_name -> testgrid.config.TestGroup 3867 17, // 38: testgrid.config.DefaultConfiguration.default_dashboard_tab:type_name -> testgrid.config.DashboardTab 3868 8, // 39: testgrid.config.TestGroup.ResultSource.gcs_config:type_name -> testgrid.config.GCSConfig 3869 9, // 40: testgrid.config.TestGroup.ResultSource.resultstore_config:type_name -> testgrid.config.ResultStoreConfig 3870 41, // [41:41] is the sub-list for method output_type 3871 41, // [41:41] is the sub-list for method input_type 3872 41, // [41:41] is the sub-list for extension type_name 3873 41, // [41:41] is the sub-list for extension extendee 3874 0, // [0:41] is the sub-list for field type_name 3875 } 3876 3877 func init() { file_config_proto_init() } 3878 func file_config_proto_init() { 3879 if File_config_proto != nil { 3880 return 3881 } 3882 if !protoimpl.UnsafeEnabled { 3883 file_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { 3884 switch v := v.(*TestNameConfig); i { 3885 case 0: 3886 return &v.state 3887 case 1: 3888 return &v.sizeCache 3889 case 2: 3890 return &v.unknownFields 3891 default: 3892 return nil 3893 } 3894 } 3895 file_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { 3896 switch v := v.(*Notification); i { 3897 case 0: 3898 return &v.state 3899 case 1: 3900 return &v.sizeCache 3901 case 2: 3902 return &v.unknownFields 3903 default: 3904 return nil 3905 } 3906 } 3907 file_config_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { 3908 switch v := v.(*TestGroup); i { 3909 case 0: 3910 return &v.state 3911 case 1: 3912 return &v.sizeCache 3913 case 2: 3914 return &v.unknownFields 3915 default: 3916 return nil 3917 } 3918 } 3919 file_config_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { 3920 switch v := v.(*GCSConfig); i { 3921 case 0: 3922 return &v.state 3923 case 1: 3924 return &v.sizeCache 3925 case 2: 3926 return &v.unknownFields 3927 default: 3928 return nil 3929 } 3930 } 3931 file_config_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { 3932 switch v := v.(*ResultStoreConfig); i { 3933 case 0: 3934 return &v.state 3935 case 1: 3936 return &v.sizeCache 3937 case 2: 3938 return &v.unknownFields 3939 default: 3940 return nil 3941 } 3942 } 3943 file_config_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { 3944 switch v := v.(*IssueGatherOptions); i { 3945 case 0: 3946 return &v.state 3947 case 1: 3948 return &v.sizeCache 3949 case 2: 3950 return &v.unknownFields 3951 default: 3952 return nil 3953 } 3954 } 3955 file_config_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { 3956 switch v := v.(*TestMetadataOptions); i { 3957 case 0: 3958 return &v.state 3959 case 1: 3960 return &v.sizeCache 3961 case 2: 3962 return &v.unknownFields 3963 default: 3964 return nil 3965 } 3966 } 3967 file_config_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { 3968 switch v := v.(*AutoBugOptions); i { 3969 case 0: 3970 return &v.state 3971 case 1: 3972 return &v.sizeCache 3973 case 2: 3974 return &v.unknownFields 3975 default: 3976 return nil 3977 } 3978 } 3979 file_config_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { 3980 switch v := v.(*HotlistIdFromSource); i { 3981 case 0: 3982 return &v.state 3983 case 1: 3984 return &v.sizeCache 3985 case 2: 3986 return &v.unknownFields 3987 default: 3988 return nil 3989 } 3990 } 3991 file_config_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { 3992 switch v := v.(*Dashboard); i { 3993 case 0: 3994 return &v.state 3995 case 1: 3996 return &v.sizeCache 3997 case 2: 3998 return &v.unknownFields 3999 default: 4000 return nil 4001 } 4002 } 4003 file_config_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { 4004 switch v := v.(*LinkTemplate); i { 4005 case 0: 4006 return &v.state 4007 case 1: 4008 return &v.sizeCache 4009 case 2: 4010 return &v.unknownFields 4011 default: 4012 return nil 4013 } 4014 } 4015 file_config_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { 4016 switch v := v.(*LinkOptionsTemplate); i { 4017 case 0: 4018 return &v.state 4019 case 1: 4020 return &v.sizeCache 4021 case 2: 4022 return &v.unknownFields 4023 default: 4024 return nil 4025 } 4026 } 4027 file_config_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { 4028 switch v := v.(*DashboardTab); i { 4029 case 0: 4030 return &v.state 4031 case 1: 4032 return &v.sizeCache 4033 case 2: 4034 return &v.unknownFields 4035 default: 4036 return nil 4037 } 4038 } 4039 file_config_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { 4040 switch v := v.(*DashboardTabAlertOptions); i { 4041 case 0: 4042 return &v.state 4043 case 1: 4044 return &v.sizeCache 4045 case 2: 4046 return &v.unknownFields 4047 default: 4048 return nil 4049 } 4050 } 4051 file_config_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { 4052 switch v := v.(*DashboardTabFlakinessAlertOptions); i { 4053 case 0: 4054 return &v.state 4055 case 1: 4056 return &v.sizeCache 4057 case 2: 4058 return &v.unknownFields 4059 default: 4060 return nil 4061 } 4062 } 4063 file_config_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { 4064 switch v := v.(*DashboardTabStatusCustomizationOptions); i { 4065 case 0: 4066 return &v.state 4067 case 1: 4068 return &v.sizeCache 4069 case 2: 4070 return &v.unknownFields 4071 default: 4072 return nil 4073 } 4074 } 4075 file_config_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { 4076 switch v := v.(*DashboardGroup); i { 4077 case 0: 4078 return &v.state 4079 case 1: 4080 return &v.sizeCache 4081 case 2: 4082 return &v.unknownFields 4083 default: 4084 return nil 4085 } 4086 } 4087 file_config_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { 4088 switch v := v.(*Configuration); i { 4089 case 0: 4090 return &v.state 4091 case 1: 4092 return &v.sizeCache 4093 case 2: 4094 return &v.unknownFields 4095 default: 4096 return nil 4097 } 4098 } 4099 file_config_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { 4100 switch v := v.(*HealthAnalysisOptions); i { 4101 case 0: 4102 return &v.state 4103 case 1: 4104 return &v.sizeCache 4105 case 2: 4106 return &v.unknownFields 4107 default: 4108 return nil 4109 } 4110 } 4111 file_config_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { 4112 switch v := v.(*DefaultConfiguration); i { 4113 case 0: 4114 return &v.state 4115 case 1: 4116 return &v.sizeCache 4117 case 2: 4118 return &v.unknownFields 4119 default: 4120 return nil 4121 } 4122 } 4123 file_config_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { 4124 switch v := v.(*TestNameConfig_NameElement); i { 4125 case 0: 4126 return &v.state 4127 case 1: 4128 return &v.sizeCache 4129 case 2: 4130 return &v.unknownFields 4131 default: 4132 return nil 4133 } 4134 } 4135 file_config_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { 4136 switch v := v.(*TestGroup_ColumnHeader); i { 4137 case 0: 4138 return &v.state 4139 case 1: 4140 return &v.sizeCache 4141 case 2: 4142 return &v.unknownFields 4143 default: 4144 return nil 4145 } 4146 } 4147 file_config_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { 4148 switch v := v.(*TestGroup_TestAnnotation); i { 4149 case 0: 4150 return &v.state 4151 case 1: 4152 return &v.sizeCache 4153 case 2: 4154 return &v.unknownFields 4155 default: 4156 return nil 4157 } 4158 } 4159 file_config_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { 4160 switch v := v.(*TestGroup_KeyValue); i { 4161 case 0: 4162 return &v.state 4163 case 1: 4164 return &v.sizeCache 4165 case 2: 4166 return &v.unknownFields 4167 default: 4168 return nil 4169 } 4170 } 4171 file_config_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { 4172 switch v := v.(*TestGroup_ResultSource); i { 4173 case 0: 4174 return &v.state 4175 case 1: 4176 return &v.sizeCache 4177 case 2: 4178 return &v.unknownFields 4179 default: 4180 return nil 4181 } 4182 } 4183 file_config_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { 4184 switch v := v.(*AutoBugOptions_DefaultTestMetadata); i { 4185 case 0: 4186 return &v.state 4187 case 1: 4188 return &v.sizeCache 4189 case 2: 4190 return &v.unknownFields 4191 default: 4192 return nil 4193 } 4194 } 4195 } 4196 file_config_proto_msgTypes[8].OneofWrappers = []interface{}{ 4197 (*HotlistIdFromSource_Value)(nil), 4198 (*HotlistIdFromSource_Label)(nil), 4199 } 4200 file_config_proto_msgTypes[22].OneofWrappers = []interface{}{ 4201 (*TestGroup_TestAnnotation_PropertyName)(nil), 4202 } 4203 file_config_proto_msgTypes[24].OneofWrappers = []interface{}{ 4204 (*TestGroup_ResultSource_GcsConfig)(nil), 4205 (*TestGroup_ResultSource_ResultstoreConfig)(nil), 4206 } 4207 type x struct{} 4208 out := protoimpl.TypeBuilder{ 4209 File: protoimpl.DescBuilder{ 4210 GoPackagePath: reflect.TypeOf(x{}).PkgPath(), 4211 RawDescriptor: file_config_proto_rawDesc, 4212 NumEnums: 5, 4213 NumMessages: 26, 4214 NumExtensions: 0, 4215 NumServices: 0, 4216 }, 4217 GoTypes: file_config_proto_goTypes, 4218 DependencyIndexes: file_config_proto_depIdxs, 4219 EnumInfos: file_config_proto_enumTypes, 4220 MessageInfos: file_config_proto_msgTypes, 4221 }.Build() 4222 File_config_proto = out.File 4223 file_config_proto_rawDesc = nil 4224 file_config_proto_goTypes = nil 4225 file_config_proto_depIdxs = nil 4226 }