go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/analysis/proto/config/project_config.pb.go (about) 1 // Copyright 2022 The LUCI Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // Code generated by protoc-gen-go. DO NOT EDIT. 16 // versions: 17 // protoc-gen-go v1.31.0 18 // protoc v3.21.7 19 // source: go.chromium.org/luci/analysis/proto/config/project_config.proto 20 21 package configpb 22 23 import ( 24 protoreflect "google.golang.org/protobuf/reflect/protoreflect" 25 protoimpl "google.golang.org/protobuf/runtime/protoimpl" 26 timestamppb "google.golang.org/protobuf/types/known/timestamppb" 27 reflect "reflect" 28 sync "sync" 29 ) 30 31 const ( 32 // Verify that this generated code is sufficiently up-to-date. 33 _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) 34 // Verify that runtime/protoimpl is sufficiently up-to-date. 35 _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) 36 ) 37 38 // An enum that represents the bug filing system that the project uses. 39 type BugSystem int32 40 41 const ( 42 // An unspecified bug system, Do not use, this will 43 // break LUCI Analysis bug filing functionality. 44 BugSystem_BUG_SYSTEM_UNSPECIFIED BugSystem = 0 45 // Use Monorail to file bugs. 46 BugSystem_MONORAIL BugSystem = 1 47 // Use Buganizer to file bugs. 48 BugSystem_BUGANIZER BugSystem = 2 49 ) 50 51 // Enum value maps for BugSystem. 52 var ( 53 BugSystem_name = map[int32]string{ 54 0: "BUG_SYSTEM_UNSPECIFIED", 55 1: "MONORAIL", 56 2: "BUGANIZER", 57 } 58 BugSystem_value = map[string]int32{ 59 "BUG_SYSTEM_UNSPECIFIED": 0, 60 "MONORAIL": 1, 61 "BUGANIZER": 2, 62 } 63 ) 64 65 func (x BugSystem) Enum() *BugSystem { 66 p := new(BugSystem) 67 *p = x 68 return p 69 } 70 71 func (x BugSystem) String() string { 72 return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) 73 } 74 75 func (BugSystem) Descriptor() protoreflect.EnumDescriptor { 76 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_enumTypes[0].Descriptor() 77 } 78 79 func (BugSystem) Type() protoreflect.EnumType { 80 return &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_enumTypes[0] 81 } 82 83 func (x BugSystem) Number() protoreflect.EnumNumber { 84 return protoreflect.EnumNumber(x) 85 } 86 87 // Deprecated: Use BugSystem.Descriptor instead. 88 func (BugSystem) EnumDescriptor() ([]byte, []int) { 89 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{0} 90 } 91 92 // This enum represents the Buganizer priorities. 93 // It is equivalent to the one in Buganizer API. 94 type BuganizerPriority int32 95 96 const ( 97 // Priority unspecified, Do not use this value. 98 BuganizerPriority_BUGANIZER_PRIORITY_UNSPECIFIED BuganizerPriority = 0 99 // P0, Highest priority. 100 BuganizerPriority_P0 BuganizerPriority = 1 101 BuganizerPriority_P1 BuganizerPriority = 2 102 BuganizerPriority_P2 BuganizerPriority = 3 103 BuganizerPriority_P3 BuganizerPriority = 4 104 BuganizerPriority_P4 BuganizerPriority = 5 105 ) 106 107 // Enum value maps for BuganizerPriority. 108 var ( 109 BuganizerPriority_name = map[int32]string{ 110 0: "BUGANIZER_PRIORITY_UNSPECIFIED", 111 1: "P0", 112 2: "P1", 113 3: "P2", 114 4: "P3", 115 5: "P4", 116 } 117 BuganizerPriority_value = map[string]int32{ 118 "BUGANIZER_PRIORITY_UNSPECIFIED": 0, 119 "P0": 1, 120 "P1": 2, 121 "P2": 3, 122 "P3": 4, 123 "P4": 5, 124 } 125 ) 126 127 func (x BuganizerPriority) Enum() *BuganizerPriority { 128 p := new(BuganizerPriority) 129 *p = x 130 return p 131 } 132 133 func (x BuganizerPriority) String() string { 134 return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) 135 } 136 137 func (BuganizerPriority) Descriptor() protoreflect.EnumDescriptor { 138 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_enumTypes[1].Descriptor() 139 } 140 141 func (BuganizerPriority) Type() protoreflect.EnumType { 142 return &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_enumTypes[1] 143 } 144 145 func (x BuganizerPriority) Number() protoreflect.EnumNumber { 146 return protoreflect.EnumNumber(x) 147 } 148 149 // Deprecated: Use BuganizerPriority.Descriptor instead. 150 func (BuganizerPriority) EnumDescriptor() ([]byte, []int) { 151 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{1} 152 } 153 154 // ProjectConfig is the project-specific configuration data for LUCI Analysis. 155 type ProjectConfig struct { 156 state protoimpl.MessageState 157 sizeCache protoimpl.SizeCache 158 unknownFields protoimpl.UnknownFields 159 160 // The project metadata (eg. display name). 161 ProjectMetadata *ProjectMetadata `protobuf:"bytes,6,opt,name=project_metadata,json=projectMetadata,proto3" json:"project_metadata,omitempty"` 162 // The last time this project configuration was updated. 163 // LUCI Analysis sets and stores this value internally. Do not set 164 // in your project's configuration file, it will be ignored. 165 LastUpdated *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"` 166 // Configuration for how to cluster test results. 167 Clustering *Clustering `protobuf:"bytes,5,opt,name=clustering,proto3" json:"clustering,omitempty"` 168 // Configuration for automatic bug management. 169 BugManagement *BugManagement `protobuf:"bytes,9,opt,name=bug_management,json=bugManagement,proto3" json:"bug_management,omitempty"` 170 // Configuration related to metrics in LUCI Analysis. 171 Metrics *Metrics `protobuf:"bytes,11,opt,name=metrics,proto3" json:"metrics,omitempty"` 172 // Configuration for when tests are considered stable enough 173 // to gate code changes. Only relevant for projects which integrate 174 // with the TestVariants.QueryStability RPC to exonerate 175 // unstable tests in presubmit. 176 TestStabilityCriteria *TestStabilityCriteria `protobuf:"bytes,12,opt,name=test_stability_criteria,json=testStabilityCriteria,proto3" json:"test_stability_criteria,omitempty"` 177 // Per realm configurations. 178 Realms []*RealmConfig `protobuf:"bytes,3,rep,name=realms,proto3" json:"realms,omitempty"` 179 // Deprecated. No longer has any effect. Retained for textproto 180 // compatibility only. Use bug_management.default_bug_system instead. 181 BugSystem BugSystem `protobuf:"varint,7,opt,name=bug_system,json=bugSystem,proto3,enum=luci.analysis.config.BugSystem" json:"bug_system,omitempty"` 182 // Deprecated. No longer has any effect. Retained for textproto 183 // compatibility only. Use bug_management.monorail instead. 184 Monorail *MonorailProject `protobuf:"bytes,1,opt,name=monorail,proto3" json:"monorail,omitempty"` 185 // Deprecated. No longer has any effect. Retained for textproto 186 // compatibility only. Use bug_management.buganizer instead. 187 Buganizer *BuganizerProject `protobuf:"bytes,8,opt,name=buganizer,proto3" json:"buganizer,omitempty"` 188 // Deprecated. No longer has any effect. Retained for textproto 189 // compatibility only. Use bug_management.policies instead. 190 BugFilingThreshold *ImpactThreshold `protobuf:"bytes,2,opt,name=bug_filing_threshold,json=bugFilingThreshold,proto3" json:"bug_filing_threshold,omitempty"` 191 // Deprecated. No longer has any effect. Retained for textproto 192 // compatibility only. Use bug_management.policies instead. 193 BugFilingThresholds []*ImpactMetricThreshold `protobuf:"bytes,10,rep,name=bug_filing_thresholds,json=bugFilingThresholds,proto3" json:"bug_filing_thresholds,omitempty"` 194 } 195 196 func (x *ProjectConfig) Reset() { 197 *x = ProjectConfig{} 198 if protoimpl.UnsafeEnabled { 199 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[0] 200 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 201 ms.StoreMessageInfo(mi) 202 } 203 } 204 205 func (x *ProjectConfig) String() string { 206 return protoimpl.X.MessageStringOf(x) 207 } 208 209 func (*ProjectConfig) ProtoMessage() {} 210 211 func (x *ProjectConfig) ProtoReflect() protoreflect.Message { 212 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[0] 213 if protoimpl.UnsafeEnabled && x != nil { 214 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 215 if ms.LoadMessageInfo() == nil { 216 ms.StoreMessageInfo(mi) 217 } 218 return ms 219 } 220 return mi.MessageOf(x) 221 } 222 223 // Deprecated: Use ProjectConfig.ProtoReflect.Descriptor instead. 224 func (*ProjectConfig) Descriptor() ([]byte, []int) { 225 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{0} 226 } 227 228 func (x *ProjectConfig) GetProjectMetadata() *ProjectMetadata { 229 if x != nil { 230 return x.ProjectMetadata 231 } 232 return nil 233 } 234 235 func (x *ProjectConfig) GetLastUpdated() *timestamppb.Timestamp { 236 if x != nil { 237 return x.LastUpdated 238 } 239 return nil 240 } 241 242 func (x *ProjectConfig) GetClustering() *Clustering { 243 if x != nil { 244 return x.Clustering 245 } 246 return nil 247 } 248 249 func (x *ProjectConfig) GetBugManagement() *BugManagement { 250 if x != nil { 251 return x.BugManagement 252 } 253 return nil 254 } 255 256 func (x *ProjectConfig) GetMetrics() *Metrics { 257 if x != nil { 258 return x.Metrics 259 } 260 return nil 261 } 262 263 func (x *ProjectConfig) GetTestStabilityCriteria() *TestStabilityCriteria { 264 if x != nil { 265 return x.TestStabilityCriteria 266 } 267 return nil 268 } 269 270 func (x *ProjectConfig) GetRealms() []*RealmConfig { 271 if x != nil { 272 return x.Realms 273 } 274 return nil 275 } 276 277 func (x *ProjectConfig) GetBugSystem() BugSystem { 278 if x != nil { 279 return x.BugSystem 280 } 281 return BugSystem_BUG_SYSTEM_UNSPECIFIED 282 } 283 284 func (x *ProjectConfig) GetMonorail() *MonorailProject { 285 if x != nil { 286 return x.Monorail 287 } 288 return nil 289 } 290 291 func (x *ProjectConfig) GetBuganizer() *BuganizerProject { 292 if x != nil { 293 return x.Buganizer 294 } 295 return nil 296 } 297 298 func (x *ProjectConfig) GetBugFilingThreshold() *ImpactThreshold { 299 if x != nil { 300 return x.BugFilingThreshold 301 } 302 return nil 303 } 304 305 func (x *ProjectConfig) GetBugFilingThresholds() []*ImpactMetricThreshold { 306 if x != nil { 307 return x.BugFilingThresholds 308 } 309 return nil 310 } 311 312 // ProjectMetadata provides data about the project that are mostly used in ui. 313 type ProjectMetadata struct { 314 state protoimpl.MessageState 315 sizeCache protoimpl.SizeCache 316 unknownFields protoimpl.UnknownFields 317 318 // Indicates the preferred display name for the project in the UI. 319 // Deprecated: not used anymore. 320 DisplayName string `protobuf:"bytes,1,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` 321 } 322 323 func (x *ProjectMetadata) Reset() { 324 *x = ProjectMetadata{} 325 if protoimpl.UnsafeEnabled { 326 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[1] 327 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 328 ms.StoreMessageInfo(mi) 329 } 330 } 331 332 func (x *ProjectMetadata) String() string { 333 return protoimpl.X.MessageStringOf(x) 334 } 335 336 func (*ProjectMetadata) ProtoMessage() {} 337 338 func (x *ProjectMetadata) ProtoReflect() protoreflect.Message { 339 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[1] 340 if protoimpl.UnsafeEnabled && x != nil { 341 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 342 if ms.LoadMessageInfo() == nil { 343 ms.StoreMessageInfo(mi) 344 } 345 return ms 346 } 347 return mi.MessageOf(x) 348 } 349 350 // Deprecated: Use ProjectMetadata.ProtoReflect.Descriptor instead. 351 func (*ProjectMetadata) Descriptor() ([]byte, []int) { 352 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{1} 353 } 354 355 func (x *ProjectMetadata) GetDisplayName() string { 356 if x != nil { 357 return x.DisplayName 358 } 359 return "" 360 } 361 362 // Settings related to metrics used to measure cluster impact. 363 type Metrics struct { 364 state protoimpl.MessageState 365 sizeCache protoimpl.SizeCache 366 unknownFields protoimpl.UnknownFields 367 368 // Overrides to the default metrics configuration for a project. 369 Overrides []*Metrics_MetricOverride `protobuf:"bytes,1,rep,name=overrides,proto3" json:"overrides,omitempty"` 370 } 371 372 func (x *Metrics) Reset() { 373 *x = Metrics{} 374 if protoimpl.UnsafeEnabled { 375 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[2] 376 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 377 ms.StoreMessageInfo(mi) 378 } 379 } 380 381 func (x *Metrics) String() string { 382 return protoimpl.X.MessageStringOf(x) 383 } 384 385 func (*Metrics) ProtoMessage() {} 386 387 func (x *Metrics) ProtoReflect() protoreflect.Message { 388 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[2] 389 if protoimpl.UnsafeEnabled && x != nil { 390 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 391 if ms.LoadMessageInfo() == nil { 392 ms.StoreMessageInfo(mi) 393 } 394 return ms 395 } 396 return mi.MessageOf(x) 397 } 398 399 // Deprecated: Use Metrics.ProtoReflect.Descriptor instead. 400 func (*Metrics) Descriptor() ([]byte, []int) { 401 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{2} 402 } 403 404 func (x *Metrics) GetOverrides() []*Metrics_MetricOverride { 405 if x != nil { 406 return x.Overrides 407 } 408 return nil 409 } 410 411 // Settings related to bug management. 412 type BugManagement struct { 413 state protoimpl.MessageState 414 sizeCache protoimpl.SizeCache 415 unknownFields protoimpl.UnknownFields 416 417 // Disables creation of comments on bugs when LUCI Analysis successfully 418 // handles duplicate bugs by merging/updating failure association rules. 419 // 420 // This setting does not prevent the creation of comments in response 421 // to errors handling duplicate bugs. 422 DisableDuplicateBugComments bool `protobuf:"varint,1,opt,name=disable_duplicate_bug_comments,json=disableDuplicateBugComments,proto3" json:"disable_duplicate_bug_comments,omitempty"` 423 // The set of policies which control the (re-)opening, closure and 424 // prioritization of bugs under the control of LUCI Analysis. 425 Policies []*BugManagementPolicy `protobuf:"bytes,2,rep,name=policies,proto3" json:"policies,omitempty"` 426 // The default bug system to route new bugs to, when the bug system and 427 // component could not be automatically detected from a test metadata. 428 DefaultBugSystem BugSystem `protobuf:"varint,3,opt,name=default_bug_system,json=defaultBugSystem,proto3,enum=luci.analysis.config.BugSystem" json:"default_bug_system,omitempty"` 429 // Buganizer-specific bug filing configuration. 430 Buganizer *BuganizerProject `protobuf:"bytes,4,opt,name=buganizer,proto3" json:"buganizer,omitempty"` 431 // Monorail-specific bug filing configuration. 432 Monorail *MonorailProject `protobuf:"bytes,5,opt,name=monorail,proto3" json:"monorail,omitempty"` 433 } 434 435 func (x *BugManagement) Reset() { 436 *x = BugManagement{} 437 if protoimpl.UnsafeEnabled { 438 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[3] 439 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 440 ms.StoreMessageInfo(mi) 441 } 442 } 443 444 func (x *BugManagement) String() string { 445 return protoimpl.X.MessageStringOf(x) 446 } 447 448 func (*BugManagement) ProtoMessage() {} 449 450 func (x *BugManagement) ProtoReflect() protoreflect.Message { 451 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[3] 452 if protoimpl.UnsafeEnabled && x != nil { 453 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 454 if ms.LoadMessageInfo() == nil { 455 ms.StoreMessageInfo(mi) 456 } 457 return ms 458 } 459 return mi.MessageOf(x) 460 } 461 462 // Deprecated: Use BugManagement.ProtoReflect.Descriptor instead. 463 func (*BugManagement) Descriptor() ([]byte, []int) { 464 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{3} 465 } 466 467 func (x *BugManagement) GetDisableDuplicateBugComments() bool { 468 if x != nil { 469 return x.DisableDuplicateBugComments 470 } 471 return false 472 } 473 474 func (x *BugManagement) GetPolicies() []*BugManagementPolicy { 475 if x != nil { 476 return x.Policies 477 } 478 return nil 479 } 480 481 func (x *BugManagement) GetDefaultBugSystem() BugSystem { 482 if x != nil { 483 return x.DefaultBugSystem 484 } 485 return BugSystem_BUG_SYSTEM_UNSPECIFIED 486 } 487 488 func (x *BugManagement) GetBuganizer() *BuganizerProject { 489 if x != nil { 490 return x.Buganizer 491 } 492 return nil 493 } 494 495 func (x *BugManagement) GetMonorail() *MonorailProject { 496 if x != nil { 497 return x.Monorail 498 } 499 return nil 500 } 501 502 // A bug management policy in LUCI Analysis. 503 // 504 // Bug management policies control when and how bugs are automatically 505 // opened, prioritised, and verified as fixed. Each policy has a user-visible 506 // identity in the UI and can post custom instructions on the bug. 507 // 508 // LUCI Analysis avoids filing multiple bugs for the same failures by 509 // allowing multiple policies to activate on the same failure association 510 // rule. The bug associated with a rule will only be verified if all policies 511 // have de-activated. 512 type BugManagementPolicy struct { 513 state protoimpl.MessageState 514 sizeCache protoimpl.SizeCache 515 unknownFields protoimpl.UnknownFields 516 517 // A unique identifier for the bug management policy. 518 // 519 // Policies are stateful in that LUCI Analysis tracks which bugs have met the 520 // activation condition on the policy (and not since met the deactivation 521 // condition). 522 // 523 // Changing this value changes the identity of the policy and hence results in 524 // the activation state for the policy being lost for all bugs. 525 // 526 // Valid syntax: ^[a-z]([a-z0-9-]{0,62}[a-z0-9])?$. (Syntax designed to comply 527 // with google.aip.dev/122 for resource IDs.) 528 Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` 529 // The owners of the policy, who can be contacted if there are issues/concerns 530 // about the policy. Each item in the list should be an @google.com email 531 // address. At least one owner (preferably a group) is required. 532 Owners []string `protobuf:"bytes,2,rep,name=owners,proto3" json:"owners,omitempty"` 533 // A short one-line description for the problem the policy identifies, which 534 // will appear on the UI and in bugs comments. This is a sentence fragment 535 // and not a sentence, so please do NOT include a full stop and or starting 536 // capital letter. 537 // 538 // For example, "test variant(s) are being exonerated in presubmit". 539 HumanReadableName string `protobuf:"bytes,3,opt,name=human_readable_name,json=humanReadableName,proto3" json:"human_readable_name,omitempty"` 540 // The priority of the problem this policy defines. 541 // 542 // If: 543 // - the priority of the bug associated with a rule 544 // differs from this priority, and 545 // - the policy is activate on the rule (see `metrics`), and 546 // - LUCI Analysis is controlling the priority of the bug 547 // (the "Update bug priority" switch on the rule is enabled), 548 // 549 // the priority of the bug will be updated to match this priority. 550 // 551 // Where are there multiple policies active on the same rule, 552 // the highest priority (of all active policies) will be used. 553 // 554 // For monorail projects, the buganizer priority will be converted to the 555 // equivalent monorail priority (P0 is converted to Pri-0, P1 to Pri-1, 556 // P2 to Pri-2, etc.) until monorail is turned down. 557 Priority BuganizerPriority `protobuf:"varint,4,opt,name=priority,proto3,enum=luci.analysis.config.BuganizerPriority" json:"priority,omitempty"` 558 // The set of metrics which will control activation of the bug-filing policy. 559 // If a policy activates on a suggested cluster, a new bug will be filed. 560 // If a policy activates on an existing rule cluster, the bug will be 561 // updated. 562 // 563 // The policy will activate if the activation threshold is met on *ANY* 564 // metric, and will de-activate only if the deactivation threshold is met 565 // on *ALL* metrics. 566 // 567 // Activation on suggested clusters will be based on the metric values after 568 // excluding failures for which a bug has already been filed. This is to 569 // avoid duplicate bug filing. 570 Metrics []*BugManagementPolicy_Metric `protobuf:"bytes,5,rep,name=metrics,proto3" json:"metrics,omitempty"` 571 // Expanatory text of the problem the policy identified, shown on the 572 // user interface when the user requests more information. Required. 573 Explanation *BugManagementPolicy_Explanation `protobuf:"bytes,6,opt,name=explanation,proto3" json:"explanation,omitempty"` 574 // Settings which affect the contents of a bug for a policy has activated. 575 BugTemplate *BugManagementPolicy_BugTemplate `protobuf:"bytes,7,opt,name=bug_template,json=bugTemplate,proto3" json:"bug_template,omitempty"` 576 } 577 578 func (x *BugManagementPolicy) Reset() { 579 *x = BugManagementPolicy{} 580 if protoimpl.UnsafeEnabled { 581 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[4] 582 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 583 ms.StoreMessageInfo(mi) 584 } 585 } 586 587 func (x *BugManagementPolicy) String() string { 588 return protoimpl.X.MessageStringOf(x) 589 } 590 591 func (*BugManagementPolicy) ProtoMessage() {} 592 593 func (x *BugManagementPolicy) ProtoReflect() protoreflect.Message { 594 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[4] 595 if protoimpl.UnsafeEnabled && x != nil { 596 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 597 if ms.LoadMessageInfo() == nil { 598 ms.StoreMessageInfo(mi) 599 } 600 return ms 601 } 602 return mi.MessageOf(x) 603 } 604 605 // Deprecated: Use BugManagementPolicy.ProtoReflect.Descriptor instead. 606 func (*BugManagementPolicy) Descriptor() ([]byte, []int) { 607 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{4} 608 } 609 610 func (x *BugManagementPolicy) GetId() string { 611 if x != nil { 612 return x.Id 613 } 614 return "" 615 } 616 617 func (x *BugManagementPolicy) GetOwners() []string { 618 if x != nil { 619 return x.Owners 620 } 621 return nil 622 } 623 624 func (x *BugManagementPolicy) GetHumanReadableName() string { 625 if x != nil { 626 return x.HumanReadableName 627 } 628 return "" 629 } 630 631 func (x *BugManagementPolicy) GetPriority() BuganizerPriority { 632 if x != nil { 633 return x.Priority 634 } 635 return BuganizerPriority_BUGANIZER_PRIORITY_UNSPECIFIED 636 } 637 638 func (x *BugManagementPolicy) GetMetrics() []*BugManagementPolicy_Metric { 639 if x != nil { 640 return x.Metrics 641 } 642 return nil 643 } 644 645 func (x *BugManagementPolicy) GetExplanation() *BugManagementPolicy_Explanation { 646 if x != nil { 647 return x.Explanation 648 } 649 return nil 650 } 651 652 func (x *BugManagementPolicy) GetBugTemplate() *BugManagementPolicy_BugTemplate { 653 if x != nil { 654 return x.BugTemplate 655 } 656 return nil 657 } 658 659 // Deprecated. No longer has any effect. Retained for textproto 660 // compatibility only. 661 type ImpactThreshold struct { 662 state protoimpl.MessageState 663 sizeCache protoimpl.SizeCache 664 unknownFields protoimpl.UnknownFields 665 666 TestResultsFailed *MetricThreshold `protobuf:"bytes,4,opt,name=test_results_failed,json=testResultsFailed,proto3" json:"test_results_failed,omitempty"` 667 TestRunsFailed *MetricThreshold `protobuf:"bytes,5,opt,name=test_runs_failed,json=testRunsFailed,proto3" json:"test_runs_failed,omitempty"` 668 PresubmitRunsFailed *MetricThreshold `protobuf:"bytes,6,opt,name=presubmit_runs_failed,json=presubmitRunsFailed,proto3" json:"presubmit_runs_failed,omitempty"` 669 CriticalFailuresExonerated *MetricThreshold `protobuf:"bytes,7,opt,name=critical_failures_exonerated,json=criticalFailuresExonerated,proto3" json:"critical_failures_exonerated,omitempty"` 670 UnexpectedFailures_1D *int64 `protobuf:"varint,1,opt,name=unexpected_failures_1d,json=unexpectedFailures1d,proto3,oneof" json:"unexpected_failures_1d,omitempty"` 671 UnexpectedFailures_3D *int64 `protobuf:"varint,2,opt,name=unexpected_failures_3d,json=unexpectedFailures3d,proto3,oneof" json:"unexpected_failures_3d,omitempty"` 672 UnexpectedFailures_7D *int64 `protobuf:"varint,3,opt,name=unexpected_failures_7d,json=unexpectedFailures7d,proto3,oneof" json:"unexpected_failures_7d,omitempty"` 673 } 674 675 func (x *ImpactThreshold) Reset() { 676 *x = ImpactThreshold{} 677 if protoimpl.UnsafeEnabled { 678 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[5] 679 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 680 ms.StoreMessageInfo(mi) 681 } 682 } 683 684 func (x *ImpactThreshold) String() string { 685 return protoimpl.X.MessageStringOf(x) 686 } 687 688 func (*ImpactThreshold) ProtoMessage() {} 689 690 func (x *ImpactThreshold) ProtoReflect() protoreflect.Message { 691 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[5] 692 if protoimpl.UnsafeEnabled && x != nil { 693 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 694 if ms.LoadMessageInfo() == nil { 695 ms.StoreMessageInfo(mi) 696 } 697 return ms 698 } 699 return mi.MessageOf(x) 700 } 701 702 // Deprecated: Use ImpactThreshold.ProtoReflect.Descriptor instead. 703 func (*ImpactThreshold) Descriptor() ([]byte, []int) { 704 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{5} 705 } 706 707 func (x *ImpactThreshold) GetTestResultsFailed() *MetricThreshold { 708 if x != nil { 709 return x.TestResultsFailed 710 } 711 return nil 712 } 713 714 func (x *ImpactThreshold) GetTestRunsFailed() *MetricThreshold { 715 if x != nil { 716 return x.TestRunsFailed 717 } 718 return nil 719 } 720 721 func (x *ImpactThreshold) GetPresubmitRunsFailed() *MetricThreshold { 722 if x != nil { 723 return x.PresubmitRunsFailed 724 } 725 return nil 726 } 727 728 func (x *ImpactThreshold) GetCriticalFailuresExonerated() *MetricThreshold { 729 if x != nil { 730 return x.CriticalFailuresExonerated 731 } 732 return nil 733 } 734 735 func (x *ImpactThreshold) GetUnexpectedFailures_1D() int64 { 736 if x != nil && x.UnexpectedFailures_1D != nil { 737 return *x.UnexpectedFailures_1D 738 } 739 return 0 740 } 741 742 func (x *ImpactThreshold) GetUnexpectedFailures_3D() int64 { 743 if x != nil && x.UnexpectedFailures_3D != nil { 744 return *x.UnexpectedFailures_3D 745 } 746 return 0 747 } 748 749 func (x *ImpactThreshold) GetUnexpectedFailures_7D() int64 { 750 if x != nil && x.UnexpectedFailures_7D != nil { 751 return *x.UnexpectedFailures_7D 752 } 753 return 0 754 } 755 756 // ImpactMetricThreshold specifies a condition on a cluster's impact metric. 757 type ImpactMetricThreshold struct { 758 state protoimpl.MessageState 759 sizeCache protoimpl.SizeCache 760 unknownFields protoimpl.UnknownFields 761 762 // The id of the impact metric. 763 // e.g. 764 // human-cls-failed-presubmit: The number of presubmit runs that failed. 765 // critical-failures-exonerated: The number of test failures on critical 766 // 767 // builders that were exonerated with an 768 // exoneration reason other than NOT_CRITICAL. 769 // 770 // test-runs-failed: The number of test runs that failed. 771 // 772 // A test run (also known as a 'shard' (chromium) or 773 // 'task' (Chrome OS)) is considered failed if all tries of 774 // test(s) in it unexpectedly failed. The failed test run is 775 // attributed to the last failure of each of the test(s) 776 // that failed on all tries. 777 // 778 // failures: The number of test results that were unexpected failures. 779 // 780 // Full list of available metrics here: 781 // https://source.chromium.org/chromium/infra/infra/+/main:go/src/go.chromium.org/luci/analysis/internal/analysis/metrics/metrics.go 782 MetricId string `protobuf:"bytes,1,opt,name=metric_id,json=metricId,proto3" json:"metric_id,omitempty"` 783 // The thresholds against a metric. 784 Threshold *MetricThreshold `protobuf:"bytes,2,opt,name=threshold,proto3" json:"threshold,omitempty"` 785 } 786 787 func (x *ImpactMetricThreshold) Reset() { 788 *x = ImpactMetricThreshold{} 789 if protoimpl.UnsafeEnabled { 790 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[6] 791 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 792 ms.StoreMessageInfo(mi) 793 } 794 } 795 796 func (x *ImpactMetricThreshold) String() string { 797 return protoimpl.X.MessageStringOf(x) 798 } 799 800 func (*ImpactMetricThreshold) ProtoMessage() {} 801 802 func (x *ImpactMetricThreshold) ProtoReflect() protoreflect.Message { 803 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[6] 804 if protoimpl.UnsafeEnabled && x != nil { 805 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 806 if ms.LoadMessageInfo() == nil { 807 ms.StoreMessageInfo(mi) 808 } 809 return ms 810 } 811 return mi.MessageOf(x) 812 } 813 814 // Deprecated: Use ImpactMetricThreshold.ProtoReflect.Descriptor instead. 815 func (*ImpactMetricThreshold) Descriptor() ([]byte, []int) { 816 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{6} 817 } 818 819 func (x *ImpactMetricThreshold) GetMetricId() string { 820 if x != nil { 821 return x.MetricId 822 } 823 return "" 824 } 825 826 func (x *ImpactMetricThreshold) GetThreshold() *MetricThreshold { 827 if x != nil { 828 return x.Threshold 829 } 830 return nil 831 } 832 833 // MetricThreshold specifies thresholds for a particular metric. 834 // The threshold is considered satisfied if any of the individual metric 835 // thresholds is met or exceeded (i.e. if multiple thresholds are set, they 836 // are combined using an OR-semantic). If no threshold is set, the threshold 837 // as a whole is unsatisfiable. 838 type MetricThreshold struct { 839 state protoimpl.MessageState 840 sizeCache protoimpl.SizeCache 841 unknownFields protoimpl.UnknownFields 842 843 // The threshold for one day. 844 OneDay *int64 `protobuf:"varint,1,opt,name=one_day,json=oneDay,proto3,oneof" json:"one_day,omitempty"` 845 // The threshold for three day. 846 ThreeDay *int64 `protobuf:"varint,2,opt,name=three_day,json=threeDay,proto3,oneof" json:"three_day,omitempty"` 847 // The threshold for seven days. 848 SevenDay *int64 `protobuf:"varint,3,opt,name=seven_day,json=sevenDay,proto3,oneof" json:"seven_day,omitempty"` 849 } 850 851 func (x *MetricThreshold) Reset() { 852 *x = MetricThreshold{} 853 if protoimpl.UnsafeEnabled { 854 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[7] 855 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 856 ms.StoreMessageInfo(mi) 857 } 858 } 859 860 func (x *MetricThreshold) String() string { 861 return protoimpl.X.MessageStringOf(x) 862 } 863 864 func (*MetricThreshold) ProtoMessage() {} 865 866 func (x *MetricThreshold) ProtoReflect() protoreflect.Message { 867 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[7] 868 if protoimpl.UnsafeEnabled && x != nil { 869 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 870 if ms.LoadMessageInfo() == nil { 871 ms.StoreMessageInfo(mi) 872 } 873 return ms 874 } 875 return mi.MessageOf(x) 876 } 877 878 // Deprecated: Use MetricThreshold.ProtoReflect.Descriptor instead. 879 func (*MetricThreshold) Descriptor() ([]byte, []int) { 880 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{7} 881 } 882 883 func (x *MetricThreshold) GetOneDay() int64 { 884 if x != nil && x.OneDay != nil { 885 return *x.OneDay 886 } 887 return 0 888 } 889 890 func (x *MetricThreshold) GetThreeDay() int64 { 891 if x != nil && x.ThreeDay != nil { 892 return *x.ThreeDay 893 } 894 return 0 895 } 896 897 func (x *MetricThreshold) GetSevenDay() int64 { 898 if x != nil && x.SevenDay != nil { 899 return *x.SevenDay 900 } 901 return 0 902 } 903 904 // MonorailProject describes the configuration to use when filing bugs 905 // into a given monorail project. 906 type MonorailProject struct { 907 state protoimpl.MessageState 908 sizeCache protoimpl.SizeCache 909 unknownFields protoimpl.UnknownFields 910 911 // The monorail project being described. 912 // E.g. "chromium". 913 Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` 914 // The field values to use when creating new bugs. 915 // For example, on chromium issue tracker, there is a manadatory 916 // issue type field (field 10), which must be set to "Bug". 917 DefaultFieldValues []*MonorailFieldValue `protobuf:"bytes,2,rep,name=default_field_values,json=defaultFieldValues,proto3" json:"default_field_values,omitempty"` 918 // The ID of the issue's priority field. You can find this by visiting 919 // https://monorail-prod.appspot.com/p/<project>/adminLabels, scrolling 920 // down to Custom fields and finding the ID of the field you wish to set. 921 // 922 // This field must support the values: "Pri-0", "Pri-1", "Pri-2", "Pri-3". 923 PriorityFieldId int64 `protobuf:"varint,3,opt,name=priority_field_id,json=priorityFieldId,proto3" json:"priority_field_id,omitempty"` 924 // Deprecated. No longer has any effect. Retained for textproto 925 // compatibility only. Use bug_management.policies instead. 926 Priorities []*MonorailPriority `protobuf:"bytes,4,rep,name=priorities,proto3" json:"priorities,omitempty"` 927 // Deprecated. No longer has any effect. Retained for textproto 928 // compatibility only. 929 PriorityHysteresisPercent int64 `protobuf:"varint,5,opt,name=priority_hysteresis_percent,json=priorityHysteresisPercent,proto3" json:"priority_hysteresis_percent,omitempty"` 930 // The prefix that should appear when displaying bugs from the 931 // given bug tracking system. E.g. "crbug.com" or "fxbug.dev". 932 // If no prefix is specified, only the bug number will appear. 933 // Otherwise, the supplifed prefix will appear, followed by a 934 // forward slash ("/"), followed by the bug number. 935 // Valid prefixes match `^[a-z0-9\-.]{0,64}$`. 936 DisplayPrefix string `protobuf:"bytes,6,opt,name=display_prefix,json=displayPrefix,proto3" json:"display_prefix,omitempty"` 937 // The preferred hostname to use in links to monorail. For example, 938 // "bugs.chromium.org" or "bugs.fuchsia.dev". 939 MonorailHostname string `protobuf:"bytes,7,opt,name=monorail_hostname,json=monorailHostname,proto3" json:"monorail_hostname,omitempty"` 940 // Whether the Restrict-View-Google tag should be omitted on new 941 // auto-filed bugs. This makes those bugs publically visible. 942 // If unset, defaults to filing with Restrict-View-Google. 943 FileWithoutRestrictViewGoogle bool `protobuf:"varint,8,opt,name=file_without_restrict_view_google,json=fileWithoutRestrictViewGoogle,proto3" json:"file_without_restrict_view_google,omitempty"` 944 } 945 946 func (x *MonorailProject) Reset() { 947 *x = MonorailProject{} 948 if protoimpl.UnsafeEnabled { 949 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[8] 950 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 951 ms.StoreMessageInfo(mi) 952 } 953 } 954 955 func (x *MonorailProject) String() string { 956 return protoimpl.X.MessageStringOf(x) 957 } 958 959 func (*MonorailProject) ProtoMessage() {} 960 961 func (x *MonorailProject) ProtoReflect() protoreflect.Message { 962 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[8] 963 if protoimpl.UnsafeEnabled && x != nil { 964 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 965 if ms.LoadMessageInfo() == nil { 966 ms.StoreMessageInfo(mi) 967 } 968 return ms 969 } 970 return mi.MessageOf(x) 971 } 972 973 // Deprecated: Use MonorailProject.ProtoReflect.Descriptor instead. 974 func (*MonorailProject) Descriptor() ([]byte, []int) { 975 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{8} 976 } 977 978 func (x *MonorailProject) GetProject() string { 979 if x != nil { 980 return x.Project 981 } 982 return "" 983 } 984 985 func (x *MonorailProject) GetDefaultFieldValues() []*MonorailFieldValue { 986 if x != nil { 987 return x.DefaultFieldValues 988 } 989 return nil 990 } 991 992 func (x *MonorailProject) GetPriorityFieldId() int64 { 993 if x != nil { 994 return x.PriorityFieldId 995 } 996 return 0 997 } 998 999 func (x *MonorailProject) GetPriorities() []*MonorailPriority { 1000 if x != nil { 1001 return x.Priorities 1002 } 1003 return nil 1004 } 1005 1006 func (x *MonorailProject) GetPriorityHysteresisPercent() int64 { 1007 if x != nil { 1008 return x.PriorityHysteresisPercent 1009 } 1010 return 0 1011 } 1012 1013 func (x *MonorailProject) GetDisplayPrefix() string { 1014 if x != nil { 1015 return x.DisplayPrefix 1016 } 1017 return "" 1018 } 1019 1020 func (x *MonorailProject) GetMonorailHostname() string { 1021 if x != nil { 1022 return x.MonorailHostname 1023 } 1024 return "" 1025 } 1026 1027 func (x *MonorailProject) GetFileWithoutRestrictViewGoogle() bool { 1028 if x != nil { 1029 return x.FileWithoutRestrictViewGoogle 1030 } 1031 return false 1032 } 1033 1034 // MonorailFieldValue describes a monorail field/value pair. 1035 type MonorailFieldValue struct { 1036 state protoimpl.MessageState 1037 sizeCache protoimpl.SizeCache 1038 unknownFields protoimpl.UnknownFields 1039 1040 // The ID of the field to set. You can find this by visiting 1041 // https://monorail-prod.appspot.com/p/<project>/adminLabels, scrolling 1042 // down to Custom fields and finding the ID of the field you wish to set. 1043 FieldId int64 `protobuf:"varint,1,opt,name=field_id,json=fieldId,proto3" json:"field_id,omitempty"` 1044 // The field value. Values are encoded according to the field type: 1045 // - Enumeration types: the string enumeration value (e.g. "Bug"). 1046 // - Integer types: the integer, converted to a string (e.g. "1052"). 1047 // - String types: the value, included verbatim. 1048 // - User types: the user's resource name (e.g. "users/2627516260"). 1049 // User IDs can be identified by looking at the people listing for a 1050 // project: https://monorail-prod.appspot.com/p/<project>/people/list. 1051 // The User ID is included in the URL as u=<number> when clicking into 1052 // the page for a particular user. For example, "user/3816576959" is 1053 // https://monorail-prod.appspot.com/p/chromium/people/detail?u=3816576959. 1054 // - Date types: the number of seconds since epoch, as a string 1055 // (e.g. "1609459200" for 1 January 2021). 1056 // - URL type: the URL value, as a string (e.g. "https://www.google.com/"). 1057 // 1058 // The source of truth for mapping of field types to values is as 1059 // defined in the Monorail v3 API, found here: 1060 // https://source.chromium.org/chromium/infra/infra/+/main:appengine/monorail/api/v3/api_proto/issue_objects.proto?q=%22message%20FieldValue%22 1061 Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` 1062 } 1063 1064 func (x *MonorailFieldValue) Reset() { 1065 *x = MonorailFieldValue{} 1066 if protoimpl.UnsafeEnabled { 1067 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[9] 1068 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1069 ms.StoreMessageInfo(mi) 1070 } 1071 } 1072 1073 func (x *MonorailFieldValue) String() string { 1074 return protoimpl.X.MessageStringOf(x) 1075 } 1076 1077 func (*MonorailFieldValue) ProtoMessage() {} 1078 1079 func (x *MonorailFieldValue) ProtoReflect() protoreflect.Message { 1080 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[9] 1081 if protoimpl.UnsafeEnabled && x != nil { 1082 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1083 if ms.LoadMessageInfo() == nil { 1084 ms.StoreMessageInfo(mi) 1085 } 1086 return ms 1087 } 1088 return mi.MessageOf(x) 1089 } 1090 1091 // Deprecated: Use MonorailFieldValue.ProtoReflect.Descriptor instead. 1092 func (*MonorailFieldValue) Descriptor() ([]byte, []int) { 1093 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{9} 1094 } 1095 1096 func (x *MonorailFieldValue) GetFieldId() int64 { 1097 if x != nil { 1098 return x.FieldId 1099 } 1100 return 0 1101 } 1102 1103 func (x *MonorailFieldValue) GetValue() string { 1104 if x != nil { 1105 return x.Value 1106 } 1107 return "" 1108 } 1109 1110 // Deprecated. No longer has any effect. Retained for textproto 1111 // compatibility only. 1112 type MonorailPriority struct { 1113 state protoimpl.MessageState 1114 sizeCache protoimpl.SizeCache 1115 unknownFields protoimpl.UnknownFields 1116 1117 Priority string `protobuf:"bytes,1,opt,name=priority,proto3" json:"priority,omitempty"` 1118 Threshold *ImpactThreshold `protobuf:"bytes,2,opt,name=threshold,proto3" json:"threshold,omitempty"` 1119 Thresholds []*ImpactMetricThreshold `protobuf:"bytes,3,rep,name=thresholds,proto3" json:"thresholds,omitempty"` 1120 } 1121 1122 func (x *MonorailPriority) Reset() { 1123 *x = MonorailPriority{} 1124 if protoimpl.UnsafeEnabled { 1125 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[10] 1126 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1127 ms.StoreMessageInfo(mi) 1128 } 1129 } 1130 1131 func (x *MonorailPriority) String() string { 1132 return protoimpl.X.MessageStringOf(x) 1133 } 1134 1135 func (*MonorailPriority) ProtoMessage() {} 1136 1137 func (x *MonorailPriority) ProtoReflect() protoreflect.Message { 1138 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[10] 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 MonorailPriority.ProtoReflect.Descriptor instead. 1150 func (*MonorailPriority) Descriptor() ([]byte, []int) { 1151 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{10} 1152 } 1153 1154 func (x *MonorailPriority) GetPriority() string { 1155 if x != nil { 1156 return x.Priority 1157 } 1158 return "" 1159 } 1160 1161 func (x *MonorailPriority) GetThreshold() *ImpactThreshold { 1162 if x != nil { 1163 return x.Threshold 1164 } 1165 return nil 1166 } 1167 1168 func (x *MonorailPriority) GetThresholds() []*ImpactMetricThreshold { 1169 if x != nil { 1170 return x.Thresholds 1171 } 1172 return nil 1173 } 1174 1175 // Configurations per realm. 1176 type RealmConfig struct { 1177 state protoimpl.MessageState 1178 sizeCache protoimpl.SizeCache 1179 unknownFields protoimpl.UnknownFields 1180 1181 // Name of the realm. 1182 // 1183 // Must match `^[a-z0-9_\.\-/]{1,400}$`. 1184 // Must not contain the project part. I.e. for "chromium:ci" realm the value 1185 // here must be "ci". 1186 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 1187 // Test variant analysis configurations for the realm. 1188 TestVariantAnalysis *TestVariantAnalysisConfig `protobuf:"bytes,2,opt,name=test_variant_analysis,json=testVariantAnalysis,proto3" json:"test_variant_analysis,omitempty"` 1189 } 1190 1191 func (x *RealmConfig) Reset() { 1192 *x = RealmConfig{} 1193 if protoimpl.UnsafeEnabled { 1194 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[11] 1195 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1196 ms.StoreMessageInfo(mi) 1197 } 1198 } 1199 1200 func (x *RealmConfig) String() string { 1201 return protoimpl.X.MessageStringOf(x) 1202 } 1203 1204 func (*RealmConfig) ProtoMessage() {} 1205 1206 func (x *RealmConfig) ProtoReflect() protoreflect.Message { 1207 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[11] 1208 if protoimpl.UnsafeEnabled && x != nil { 1209 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1210 if ms.LoadMessageInfo() == nil { 1211 ms.StoreMessageInfo(mi) 1212 } 1213 return ms 1214 } 1215 return mi.MessageOf(x) 1216 } 1217 1218 // Deprecated: Use RealmConfig.ProtoReflect.Descriptor instead. 1219 func (*RealmConfig) Descriptor() ([]byte, []int) { 1220 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{11} 1221 } 1222 1223 func (x *RealmConfig) GetName() string { 1224 if x != nil { 1225 return x.Name 1226 } 1227 return "" 1228 } 1229 1230 func (x *RealmConfig) GetTestVariantAnalysis() *TestVariantAnalysisConfig { 1231 if x != nil { 1232 return x.TestVariantAnalysis 1233 } 1234 return nil 1235 } 1236 1237 // Configuration for how test results are clustered. 1238 type Clustering struct { 1239 state protoimpl.MessageState 1240 sizeCache protoimpl.SizeCache 1241 unknownFields protoimpl.UnknownFields 1242 1243 // Rules used to cluster test results by test name. 1244 // The order of rules matters; the first matching rule will be used 1245 // to cluster a given test result. 1246 // 1247 // If no rule matches, the test results will be clustered on the 1248 // full test name. This corresponds approximately to the rule: 1249 // 1250 // { 1251 // name: "Full test name" 1252 // pattern: "^(?P<testname>.*)$" 1253 // like_template: "${testname}" 1254 // } 1255 TestNameRules []*TestNameClusteringRule `protobuf:"bytes,1,rep,name=test_name_rules,json=testNameRules,proto3" json:"test_name_rules,omitempty"` 1256 // Regular expressions used to mask out part of a failure reason 1257 // prior to clustering. 1258 // 1259 // The process of generating the clustering key is: 1260 // 1. All '%', '_' and '\' characters in the failure reason are 1261 // escaped to generate a SQL LIKE expression that matches the 1262 // failure reason literally. 1263 // 2. Regular expressions are run over the escaped failure reason 1264 // one by one to identify parts of the failure reason to mask 1265 // out (replace by a SQL LIKE wildcard match). 1266 // 3. The clustering key is used in the failure association rule 1267 // of a newly field bug, or hashed to generate the clustering 1268 // key. 1269 // 1270 // For regular expression run against the failure reason, 1271 // the part of the reason that matches the first (capturing) 1272 // subexpression is masked out in the reason cluster. 1273 // All non-overlapping matches are replaced. 1274 // 1275 // For example, given the masking expression: 1276 // "^\\[Fixture failure\\] (\\w+):" 1277 // The failure reason: 1278 // `[Fixture failure] myFixture: some_error` 1279 // will be escaped to (in step 1): 1280 // `[Fixture failure] myFixture: some\_error` 1281 // and will yield the following output after masking (step 2): 1282 // `[Fixture failure] %: some\_error` 1283 // 1284 // Masking expressions are applied in the order that they appear 1285 // in the list. 1286 ReasonMaskPatterns []string `protobuf:"bytes,2,rep,name=reason_mask_patterns,json=reasonMaskPatterns,proto3" json:"reason_mask_patterns,omitempty"` 1287 } 1288 1289 func (x *Clustering) Reset() { 1290 *x = Clustering{} 1291 if protoimpl.UnsafeEnabled { 1292 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[12] 1293 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1294 ms.StoreMessageInfo(mi) 1295 } 1296 } 1297 1298 func (x *Clustering) String() string { 1299 return protoimpl.X.MessageStringOf(x) 1300 } 1301 1302 func (*Clustering) ProtoMessage() {} 1303 1304 func (x *Clustering) ProtoReflect() protoreflect.Message { 1305 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[12] 1306 if protoimpl.UnsafeEnabled && x != nil { 1307 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1308 if ms.LoadMessageInfo() == nil { 1309 ms.StoreMessageInfo(mi) 1310 } 1311 return ms 1312 } 1313 return mi.MessageOf(x) 1314 } 1315 1316 // Deprecated: Use Clustering.ProtoReflect.Descriptor instead. 1317 func (*Clustering) Descriptor() ([]byte, []int) { 1318 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{12} 1319 } 1320 1321 func (x *Clustering) GetTestNameRules() []*TestNameClusteringRule { 1322 if x != nil { 1323 return x.TestNameRules 1324 } 1325 return nil 1326 } 1327 1328 func (x *Clustering) GetReasonMaskPatterns() []string { 1329 if x != nil { 1330 return x.ReasonMaskPatterns 1331 } 1332 return nil 1333 } 1334 1335 // A rule used to cluster a test result by test name. 1336 type TestNameClusteringRule struct { 1337 state protoimpl.MessageState 1338 sizeCache protoimpl.SizeCache 1339 unknownFields protoimpl.UnknownFields 1340 1341 // A human-readable name for the rule. This should be unique for each rule. 1342 // This may be used by LUCI Analysis to explain why it chose to cluster the 1343 // test name in this way. 1344 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 1345 // The regular expression describing which test names should be clustered 1346 // by this rule. 1347 // 1348 // Example. 1349 // 1350 // Assume our project uploads google test (gtest) results with the test 1351 // name prefix "gtest://". 1352 // If want to cluster value-parameterized google tests 1353 // together based on the test suite and test case name (ignoring 1354 // the value parameter), we may use a pattern like: 1355 // "^gtest://(\w+/)?(?P<testcase>\w+\.\w+)/\w+$" 1356 // 1357 // This will allow us to cluster test names like: 1358 // "gtest://InstantiationOne/ColorSpaceTest.testNullTransform/0" 1359 // "gtest://InstantiationOne/ColorSpaceTest.testNullTransform/1" 1360 // "gtest://InstantiationTwo/ColorSpaceTest.testNullTransform/0" 1361 // together. 1362 // 1363 // See https://github.com/google/googletest/blob/main/docs/advanced.md#how-to-write-value-parameterized-tests 1364 // to understand value-parameterised google tests. 1365 // 1366 // Use ?P<name> to name capture groups, so their values can be used in 1367 // like_template below. 1368 Pattern string `protobuf:"bytes,2,opt,name=pattern,proto3" json:"pattern,omitempty"` 1369 // The template used to generate a LIKE expression on test names 1370 // that defines the test name cluster identified by this rule. 1371 // 1372 // This like expression has two purposes: 1373 // (1) If the test name cluster is large enough to justify the 1374 // 1375 // creation of a bug cluster, the like expression is used to 1376 // generate a failure association rule of the following form: 1377 // test LIKE "<evaluated like_template>" 1378 // 1379 // (2) A hash of the expression is used as the clustering key for the 1380 // 1381 // test name-based suggested cluster. This generally has the desired 1382 // clustering behaviour, i.e. the parts of the test name which 1383 // are important enough to included in the LIKE expression for (1) 1384 // are also those on which clustering should occur. 1385 // 1386 // As is usual for LIKE expressions, the template can contain 1387 // the following operators to do wildcard matching: 1388 // * '%' for wildcard match of an arbitrary number of characters, and 1389 // * '_' for single character wildcard match. 1390 // 1391 // To match literal '%' or '_', escape the operator with a '\', 1392 // i.e. use "\%" or "\_" to match literal '%' and '_' respectively. 1393 // To match literal '\', you should use "\\". 1394 // 1395 // The template can refer to parts of the test name matched by 1396 // the rule pattern using ${name}, where name refers to the capture 1397 // group (see pattern). To insert the literal '$', the sequence '$$' 1398 // should be used. 1399 // 1400 // Example. 1401 // 1402 // Assume our project uploads google test (gtest) results with the test 1403 // name prefix "gtest://". Further assume we used the pattern: 1404 // "^gtest://(\w+/)?(?P<testcase>\w+\.\w+)/\w+$" 1405 // 1406 // We might use the following like_template: 1407 // "gtest://%${testcase}%" 1408 // 1409 // When instantiated for a value-parameterised test, e.g. 1410 // "gtest://InstantiationOne/ColorSpaceTest.testNullTransform/0", 1411 // the result would be a failure association rule like: 1412 // test LIKE "gtest://%ColorSpaceTest.testNullTransform%" 1413 // 1414 // Note the use of ${testcase} to refer to the testname capture group 1415 // specified in the pattern example. 1416 // 1417 // See https://github.com/google/googletest/blob/main/docs/advanced.md#how-to-write-value-parameterized-tests 1418 // to understand value-parameterised google tests. 1419 // 1420 // It is known that not all clusters can be precisely matched by 1421 // a LIKE expression. Nonetheless, LUCI Analysis prefers LIKE expressions 1422 // as they are easier to comprehend and modify by users, and in 1423 // most cases, the added precision is not required. 1424 // 1425 // As such, your rule should try to ensure the generated LIKE statement 1426 // captures your clustering logic as best it can. Your LIKE expression 1427 // MUST match all test names matched by your regex pattern, and MAY 1428 // capture additional test names (though this is preferably minimised, 1429 // to reduce differences between the suggested clusters and eventual 1430 // bug clusters). 1431 // 1432 // LUCI Analysis will automatically escape any '%' '_' and '\' in parts of 1433 // the matched test name before substitution to ensure captured parts 1434 // of the test name are matched literally and not interpreted. 1435 LikeTemplate string `protobuf:"bytes,3,opt,name=like_template,json=likeTemplate,proto3" json:"like_template,omitempty"` 1436 } 1437 1438 func (x *TestNameClusteringRule) Reset() { 1439 *x = TestNameClusteringRule{} 1440 if protoimpl.UnsafeEnabled { 1441 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[13] 1442 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1443 ms.StoreMessageInfo(mi) 1444 } 1445 } 1446 1447 func (x *TestNameClusteringRule) String() string { 1448 return protoimpl.X.MessageStringOf(x) 1449 } 1450 1451 func (*TestNameClusteringRule) ProtoMessage() {} 1452 1453 func (x *TestNameClusteringRule) ProtoReflect() protoreflect.Message { 1454 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[13] 1455 if protoimpl.UnsafeEnabled && x != nil { 1456 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1457 if ms.LoadMessageInfo() == nil { 1458 ms.StoreMessageInfo(mi) 1459 } 1460 return ms 1461 } 1462 return mi.MessageOf(x) 1463 } 1464 1465 // Deprecated: Use TestNameClusteringRule.ProtoReflect.Descriptor instead. 1466 func (*TestNameClusteringRule) Descriptor() ([]byte, []int) { 1467 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{13} 1468 } 1469 1470 func (x *TestNameClusteringRule) GetName() string { 1471 if x != nil { 1472 return x.Name 1473 } 1474 return "" 1475 } 1476 1477 func (x *TestNameClusteringRule) GetPattern() string { 1478 if x != nil { 1479 return x.Pattern 1480 } 1481 return "" 1482 } 1483 1484 func (x *TestNameClusteringRule) GetLikeTemplate() string { 1485 if x != nil { 1486 return x.LikeTemplate 1487 } 1488 return "" 1489 } 1490 1491 // Defines the required details for a Buganizer component. 1492 type BuganizerComponent struct { 1493 state protoimpl.MessageState 1494 sizeCache protoimpl.SizeCache 1495 unknownFields protoimpl.UnknownFields 1496 1497 // The id of the component that we will use to file bugs in. 1498 Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` 1499 } 1500 1501 func (x *BuganizerComponent) Reset() { 1502 *x = BuganizerComponent{} 1503 if protoimpl.UnsafeEnabled { 1504 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[14] 1505 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1506 ms.StoreMessageInfo(mi) 1507 } 1508 } 1509 1510 func (x *BuganizerComponent) String() string { 1511 return protoimpl.X.MessageStringOf(x) 1512 } 1513 1514 func (*BuganizerComponent) ProtoMessage() {} 1515 1516 func (x *BuganizerComponent) ProtoReflect() protoreflect.Message { 1517 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[14] 1518 if protoimpl.UnsafeEnabled && x != nil { 1519 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1520 if ms.LoadMessageInfo() == nil { 1521 ms.StoreMessageInfo(mi) 1522 } 1523 return ms 1524 } 1525 return mi.MessageOf(x) 1526 } 1527 1528 // Deprecated: Use BuganizerComponent.ProtoReflect.Descriptor instead. 1529 func (*BuganizerComponent) Descriptor() ([]byte, []int) { 1530 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{14} 1531 } 1532 1533 func (x *BuganizerComponent) GetId() int64 { 1534 if x != nil { 1535 return x.Id 1536 } 1537 return 0 1538 } 1539 1540 // The Buganizer configuration, this should only be 1541 // used when the bug tracking system ins Buganizer. 1542 type BuganizerProject struct { 1543 state protoimpl.MessageState 1544 sizeCache protoimpl.SizeCache 1545 unknownFields protoimpl.UnknownFields 1546 1547 // The default Buganizer component. 1548 // This component will be used if we failed to find 1549 // a component for a cluster. 1550 DefaultComponent *BuganizerComponent `protobuf:"bytes,1,opt,name=default_component,json=defaultComponent,proto3" json:"default_component,omitempty"` 1551 // Deprecated. No longer has any effect. Retained for textproto 1552 // compatibility only. 1553 PriorityHysteresisPercent int64 `protobuf:"varint,2,opt,name=priority_hysteresis_percent,json=priorityHysteresisPercent,proto3" json:"priority_hysteresis_percent,omitempty"` 1554 // Deprecated. No longer has any effect. Retained for textproto 1555 // compatibility only. Use bug_management.policies instead. 1556 PriorityMappings []*BuganizerProject_PriorityMapping `protobuf:"bytes,3,rep,name=priority_mappings,json=priorityMappings,proto3" json:"priority_mappings,omitempty"` 1557 // Whether the LIMIT_VIEW_TRUSTED access level should be omitted 1558 // on new auto-filed bugs and LIMIT_NONE access level should be set. 1559 // This makes those bugs visible to all those who can see bugs 1560 // in a given component. 1561 FileWithoutLimitViewTrusted bool `protobuf:"varint,4,opt,name=file_without_limit_view_trusted,json=fileWithoutLimitViewTrusted,proto3" json:"file_without_limit_view_trusted,omitempty"` 1562 } 1563 1564 func (x *BuganizerProject) Reset() { 1565 *x = BuganizerProject{} 1566 if protoimpl.UnsafeEnabled { 1567 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[15] 1568 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1569 ms.StoreMessageInfo(mi) 1570 } 1571 } 1572 1573 func (x *BuganizerProject) String() string { 1574 return protoimpl.X.MessageStringOf(x) 1575 } 1576 1577 func (*BuganizerProject) ProtoMessage() {} 1578 1579 func (x *BuganizerProject) ProtoReflect() protoreflect.Message { 1580 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[15] 1581 if protoimpl.UnsafeEnabled && x != nil { 1582 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1583 if ms.LoadMessageInfo() == nil { 1584 ms.StoreMessageInfo(mi) 1585 } 1586 return ms 1587 } 1588 return mi.MessageOf(x) 1589 } 1590 1591 // Deprecated: Use BuganizerProject.ProtoReflect.Descriptor instead. 1592 func (*BuganizerProject) Descriptor() ([]byte, []int) { 1593 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{15} 1594 } 1595 1596 func (x *BuganizerProject) GetDefaultComponent() *BuganizerComponent { 1597 if x != nil { 1598 return x.DefaultComponent 1599 } 1600 return nil 1601 } 1602 1603 func (x *BuganizerProject) GetPriorityHysteresisPercent() int64 { 1604 if x != nil { 1605 return x.PriorityHysteresisPercent 1606 } 1607 return 0 1608 } 1609 1610 func (x *BuganizerProject) GetPriorityMappings() []*BuganizerProject_PriorityMapping { 1611 if x != nil { 1612 return x.PriorityMappings 1613 } 1614 return nil 1615 } 1616 1617 func (x *BuganizerProject) GetFileWithoutLimitViewTrusted() bool { 1618 if x != nil { 1619 return x.FileWithoutLimitViewTrusted 1620 } 1621 return false 1622 } 1623 1624 // Criteria used to determine test stability. This criteria is used 1625 // to inform test exoneration in presubmit via the 1626 // TestVariants.QueryStability RPC. 1627 // 1628 // Criteria is applied using a data source which contains 1629 // the last 14 days' of test result data for all test variants, 1630 // with certain filterings applied. 1631 // 1632 // See go/luci-exoneration-v2 as well each criteria below for more details. 1633 type TestStabilityCriteria struct { 1634 state protoimpl.MessageState 1635 sizeCache protoimpl.SizeCache 1636 unknownFields protoimpl.UnknownFields 1637 1638 // The failure rate criteria to apply. Mandatory. 1639 FailureRate *TestStabilityCriteria_FailureRateCriteria `protobuf:"bytes,1,opt,name=failure_rate,json=failureRate,proto3" json:"failure_rate,omitempty"` 1640 // The flake rate criteria to apply. Mandatory. 1641 FlakeRate *TestStabilityCriteria_FlakeRateCriteria `protobuf:"bytes,2,opt,name=flake_rate,json=flakeRate,proto3" json:"flake_rate,omitempty"` 1642 } 1643 1644 func (x *TestStabilityCriteria) Reset() { 1645 *x = TestStabilityCriteria{} 1646 if protoimpl.UnsafeEnabled { 1647 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[16] 1648 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1649 ms.StoreMessageInfo(mi) 1650 } 1651 } 1652 1653 func (x *TestStabilityCriteria) String() string { 1654 return protoimpl.X.MessageStringOf(x) 1655 } 1656 1657 func (*TestStabilityCriteria) ProtoMessage() {} 1658 1659 func (x *TestStabilityCriteria) ProtoReflect() protoreflect.Message { 1660 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[16] 1661 if protoimpl.UnsafeEnabled && x != nil { 1662 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1663 if ms.LoadMessageInfo() == nil { 1664 ms.StoreMessageInfo(mi) 1665 } 1666 return ms 1667 } 1668 return mi.MessageOf(x) 1669 } 1670 1671 // Deprecated: Use TestStabilityCriteria.ProtoReflect.Descriptor instead. 1672 func (*TestStabilityCriteria) Descriptor() ([]byte, []int) { 1673 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{16} 1674 } 1675 1676 func (x *TestStabilityCriteria) GetFailureRate() *TestStabilityCriteria_FailureRateCriteria { 1677 if x != nil { 1678 return x.FailureRate 1679 } 1680 return nil 1681 } 1682 1683 func (x *TestStabilityCriteria) GetFlakeRate() *TestStabilityCriteria_FlakeRateCriteria { 1684 if x != nil { 1685 return x.FlakeRate 1686 } 1687 return nil 1688 } 1689 1690 type Metrics_MetricOverride struct { 1691 state protoimpl.MessageState 1692 sizeCache protoimpl.SizeCache 1693 unknownFields protoimpl.UnknownFields 1694 1695 // The id of the impact metric. 1696 // 1697 // Full list of available metrics here: 1698 // https://source.chromium.org/chromium/infra/infra/+/main:go/src/go.chromium.org/luci/analysis/internal/analysis/metrics/metrics.go 1699 MetricId string `protobuf:"bytes,1,opt,name=metric_id,json=metricId,proto3" json:"metric_id,omitempty"` 1700 // Whether the metric should be selected by default. 1701 IsDefault *bool `protobuf:"varint,2,opt,name=is_default,json=isDefault,proto3,oneof" json:"is_default,omitempty"` 1702 // Controls the default sort order between metrics. By default, 1703 // a list will sort by the metric with the highest sort priority, 1704 // followed by the metric with second highest sort priority, 1705 // and so on. 1706 SortPriority *int32 `protobuf:"varint,3,opt,name=sort_priority,json=sortPriority,proto3,oneof" json:"sort_priority,omitempty"` 1707 } 1708 1709 func (x *Metrics_MetricOverride) Reset() { 1710 *x = Metrics_MetricOverride{} 1711 if protoimpl.UnsafeEnabled { 1712 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[17] 1713 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1714 ms.StoreMessageInfo(mi) 1715 } 1716 } 1717 1718 func (x *Metrics_MetricOverride) String() string { 1719 return protoimpl.X.MessageStringOf(x) 1720 } 1721 1722 func (*Metrics_MetricOverride) ProtoMessage() {} 1723 1724 func (x *Metrics_MetricOverride) ProtoReflect() protoreflect.Message { 1725 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[17] 1726 if protoimpl.UnsafeEnabled && x != nil { 1727 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1728 if ms.LoadMessageInfo() == nil { 1729 ms.StoreMessageInfo(mi) 1730 } 1731 return ms 1732 } 1733 return mi.MessageOf(x) 1734 } 1735 1736 // Deprecated: Use Metrics_MetricOverride.ProtoReflect.Descriptor instead. 1737 func (*Metrics_MetricOverride) Descriptor() ([]byte, []int) { 1738 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{2, 0} 1739 } 1740 1741 func (x *Metrics_MetricOverride) GetMetricId() string { 1742 if x != nil { 1743 return x.MetricId 1744 } 1745 return "" 1746 } 1747 1748 func (x *Metrics_MetricOverride) GetIsDefault() bool { 1749 if x != nil && x.IsDefault != nil { 1750 return *x.IsDefault 1751 } 1752 return false 1753 } 1754 1755 func (x *Metrics_MetricOverride) GetSortPriority() int32 { 1756 if x != nil && x.SortPriority != nil { 1757 return *x.SortPriority 1758 } 1759 return 0 1760 } 1761 1762 // A metric used to control activation of a bug-filing policy. 1763 type BugManagementPolicy_Metric struct { 1764 state protoimpl.MessageState 1765 sizeCache protoimpl.SizeCache 1766 unknownFields protoimpl.UnknownFields 1767 1768 // The identifier of the metric. 1769 // 1770 // Full list of available metrics here: 1771 // https://source.chromium.org/chromium/infra/infra/+/main:go/src/go.chromium.org/luci/analysis/internal/analysis/metrics/metrics.go 1772 MetricId string `protobuf:"bytes,1,opt,name=metric_id,json=metricId,proto3" json:"metric_id,omitempty"` 1773 // The level at which the policy activates. Activation occurs if the 1774 // cluster impact meets or exceeds this threshold. 1775 // MUST imply deactivation_threshold. 1776 ActivationThreshold *MetricThreshold `protobuf:"bytes,2,opt,name=activation_threshold,json=activationThreshold,proto3" json:"activation_threshold,omitempty"` 1777 // The minimum metric level at which the policy remains active. 1778 // Deactivation occcurs if the cluster impact is below the de-activation 1779 // threshold. Deactivation_threshold should be set significantly lower 1780 // than activation_threshold to prevent policies repeatedly activating 1781 // and deactivating due to noise in the data, e.g. less tests executed 1782 // on weekends. 1783 DeactivationThreshold *MetricThreshold `protobuf:"bytes,3,opt,name=deactivation_threshold,json=deactivationThreshold,proto3" json:"deactivation_threshold,omitempty"` 1784 } 1785 1786 func (x *BugManagementPolicy_Metric) Reset() { 1787 *x = BugManagementPolicy_Metric{} 1788 if protoimpl.UnsafeEnabled { 1789 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[18] 1790 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1791 ms.StoreMessageInfo(mi) 1792 } 1793 } 1794 1795 func (x *BugManagementPolicy_Metric) String() string { 1796 return protoimpl.X.MessageStringOf(x) 1797 } 1798 1799 func (*BugManagementPolicy_Metric) ProtoMessage() {} 1800 1801 func (x *BugManagementPolicy_Metric) ProtoReflect() protoreflect.Message { 1802 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[18] 1803 if protoimpl.UnsafeEnabled && x != nil { 1804 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1805 if ms.LoadMessageInfo() == nil { 1806 ms.StoreMessageInfo(mi) 1807 } 1808 return ms 1809 } 1810 return mi.MessageOf(x) 1811 } 1812 1813 // Deprecated: Use BugManagementPolicy_Metric.ProtoReflect.Descriptor instead. 1814 func (*BugManagementPolicy_Metric) Descriptor() ([]byte, []int) { 1815 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{4, 0} 1816 } 1817 1818 func (x *BugManagementPolicy_Metric) GetMetricId() string { 1819 if x != nil { 1820 return x.MetricId 1821 } 1822 return "" 1823 } 1824 1825 func (x *BugManagementPolicy_Metric) GetActivationThreshold() *MetricThreshold { 1826 if x != nil { 1827 return x.ActivationThreshold 1828 } 1829 return nil 1830 } 1831 1832 func (x *BugManagementPolicy_Metric) GetDeactivationThreshold() *MetricThreshold { 1833 if x != nil { 1834 return x.DeactivationThreshold 1835 } 1836 return nil 1837 } 1838 1839 // Content displayed on the user interface, to explain the problem and 1840 // guide a developer to fix it. 1841 type BugManagementPolicy_Explanation struct { 1842 state protoimpl.MessageState 1843 sizeCache protoimpl.SizeCache 1844 unknownFields protoimpl.UnknownFields 1845 1846 // A longer human-readable description of the problem this policy 1847 // has identified, in HTML. 1848 // 1849 // For example, "Test variant(s) in this cluster are being exonerated 1850 // (ignored) in presubmit because they are too flaky or failing. This 1851 // means they are no longer effective at preventing the breakage of 1852 // the functionality the test(s) cover.". 1853 // 1854 // MUST be sanitised by UI before rendering. Sanitisation is only 1855 // required to support simple uses of the following tags: ul, li, a. 1856 ProblemHtml string `protobuf:"bytes,1,opt,name=problem_html,json=problemHtml,proto3" json:"problem_html,omitempty"` 1857 // A description of how a human should go about trying to fix the 1858 // problem, in HTML. 1859 // 1860 // For example, "<ul> 1861 // <li>View recent failures</li> 1862 // <li><a href="http://goto.google.com/demote-from-cq">Demote</a> the test from CQ</li> 1863 // </ul>" 1864 // 1865 // MUST be sanitised by UI before rendering. Sanitisation is only 1866 // required to support simple uses of the following tags: ul, li, a. 1867 ActionHtml string `protobuf:"bytes,2,opt,name=action_html,json=actionHtml,proto3" json:"action_html,omitempty"` 1868 } 1869 1870 func (x *BugManagementPolicy_Explanation) Reset() { 1871 *x = BugManagementPolicy_Explanation{} 1872 if protoimpl.UnsafeEnabled { 1873 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[19] 1874 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1875 ms.StoreMessageInfo(mi) 1876 } 1877 } 1878 1879 func (x *BugManagementPolicy_Explanation) String() string { 1880 return protoimpl.X.MessageStringOf(x) 1881 } 1882 1883 func (*BugManagementPolicy_Explanation) ProtoMessage() {} 1884 1885 func (x *BugManagementPolicy_Explanation) ProtoReflect() protoreflect.Message { 1886 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[19] 1887 if protoimpl.UnsafeEnabled && x != nil { 1888 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1889 if ms.LoadMessageInfo() == nil { 1890 ms.StoreMessageInfo(mi) 1891 } 1892 return ms 1893 } 1894 return mi.MessageOf(x) 1895 } 1896 1897 // Deprecated: Use BugManagementPolicy_Explanation.ProtoReflect.Descriptor instead. 1898 func (*BugManagementPolicy_Explanation) Descriptor() ([]byte, []int) { 1899 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{4, 1} 1900 } 1901 1902 func (x *BugManagementPolicy_Explanation) GetProblemHtml() string { 1903 if x != nil { 1904 return x.ProblemHtml 1905 } 1906 return "" 1907 } 1908 1909 func (x *BugManagementPolicy_Explanation) GetActionHtml() string { 1910 if x != nil { 1911 return x.ActionHtml 1912 } 1913 return "" 1914 } 1915 1916 // Settings which affect the contents of a bug for a policy has activated. 1917 type BugManagementPolicy_BugTemplate struct { 1918 state protoimpl.MessageState 1919 sizeCache protoimpl.SizeCache 1920 unknownFields protoimpl.UnknownFields 1921 1922 // Text to be included in the bug comment advising of the activation of the 1923 // the policy. Leave blank to post no comment. 1924 // 1925 // The text here will be interpreted as a template by the golang 1926 // template/text library (https://pkg.go.dev/text/template). The following 1927 // fields are available: 1928 // - RuleURL (string): The URL of the rule page. 1929 // - BugID (BugID): The system-specific bug identifier. This type 1930 // exposes the following methods with no arguments: 1931 // - IsBuganizer returns (bool) indicating if the bug is a buganizer bug. 1932 // - IsMonorail returns (bool) indicating if the bug is a monorail bug. 1933 // - MonorailProject returns (string, error) indicating the monorail 1934 // project, if the bug is a monorail bug, and errors otherwise. 1935 // - MonorailBugID returns (string, error) indicating the monorail 1936 // bug ID, if the bug is a monorail bug, and errors otherwise. 1937 // - BuganizerBugID returns (string, error) indicating the buganizer 1938 // bug ID, if the bug is a buganizer bug, and errors otherwise. 1939 // 1940 // Model usage of BugID in a template: 1941 // ``` 1942 // {{if .BugID.IsBuganizer}}Buganizer bug: {{.BugID.BuganizerBugID}}{{end}} 1943 // {{if .BugID.IsMonorail}}Monorail bug: {{.BugID.MonorailProject}}/{{.BugID.MonorailBugID}}{{end}} 1944 // ``` 1945 // 1946 // As for functions, only the standard global functions are available, see: 1947 // https://pkg.go.dev/text/template#hdr-Functions 1948 CommentTemplate string `protobuf:"bytes,1,opt,name=comment_template,json=commentTemplate,proto3" json:"comment_template,omitempty"` 1949 // Bug content options that are specific to Google issue tracker (Buganizer). 1950 Buganizer *BugManagementPolicy_BugTemplate_Buganizer `protobuf:"bytes,2,opt,name=buganizer,proto3" json:"buganizer,omitempty"` 1951 // Bug content options that are specific to monorail. 1952 Monorail *BugManagementPolicy_BugTemplate_Monorail `protobuf:"bytes,3,opt,name=monorail,proto3" json:"monorail,omitempty"` 1953 } 1954 1955 func (x *BugManagementPolicy_BugTemplate) Reset() { 1956 *x = BugManagementPolicy_BugTemplate{} 1957 if protoimpl.UnsafeEnabled { 1958 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[20] 1959 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1960 ms.StoreMessageInfo(mi) 1961 } 1962 } 1963 1964 func (x *BugManagementPolicy_BugTemplate) String() string { 1965 return protoimpl.X.MessageStringOf(x) 1966 } 1967 1968 func (*BugManagementPolicy_BugTemplate) ProtoMessage() {} 1969 1970 func (x *BugManagementPolicy_BugTemplate) ProtoReflect() protoreflect.Message { 1971 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[20] 1972 if protoimpl.UnsafeEnabled && x != nil { 1973 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1974 if ms.LoadMessageInfo() == nil { 1975 ms.StoreMessageInfo(mi) 1976 } 1977 return ms 1978 } 1979 return mi.MessageOf(x) 1980 } 1981 1982 // Deprecated: Use BugManagementPolicy_BugTemplate.ProtoReflect.Descriptor instead. 1983 func (*BugManagementPolicy_BugTemplate) Descriptor() ([]byte, []int) { 1984 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{4, 2} 1985 } 1986 1987 func (x *BugManagementPolicy_BugTemplate) GetCommentTemplate() string { 1988 if x != nil { 1989 return x.CommentTemplate 1990 } 1991 return "" 1992 } 1993 1994 func (x *BugManagementPolicy_BugTemplate) GetBuganizer() *BugManagementPolicy_BugTemplate_Buganizer { 1995 if x != nil { 1996 return x.Buganizer 1997 } 1998 return nil 1999 } 2000 2001 func (x *BugManagementPolicy_BugTemplate) GetMonorail() *BugManagementPolicy_BugTemplate_Monorail { 2002 if x != nil { 2003 return x.Monorail 2004 } 2005 return nil 2006 } 2007 2008 // Policy configuration that is specific to Google issue tracker (Buganizer). 2009 type BugManagementPolicy_BugTemplate_Buganizer struct { 2010 state protoimpl.MessageState 2011 sizeCache protoimpl.SizeCache 2012 unknownFields protoimpl.UnknownFields 2013 2014 // The numeric ID of the buganizer hotlist to add the issue to. Optional. 2015 // The bug is added to the hostlist when the policy transitions to 2016 // activated. The issue is not removed from the hotlist if the policy is 2017 // deactivated, to avoid excessive bug updates. 2018 Hotlists []int64 `protobuf:"varint,1,rep,packed,name=hotlists,proto3" json:"hotlists,omitempty"` 2019 } 2020 2021 func (x *BugManagementPolicy_BugTemplate_Buganizer) Reset() { 2022 *x = BugManagementPolicy_BugTemplate_Buganizer{} 2023 if protoimpl.UnsafeEnabled { 2024 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[21] 2025 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2026 ms.StoreMessageInfo(mi) 2027 } 2028 } 2029 2030 func (x *BugManagementPolicy_BugTemplate_Buganizer) String() string { 2031 return protoimpl.X.MessageStringOf(x) 2032 } 2033 2034 func (*BugManagementPolicy_BugTemplate_Buganizer) ProtoMessage() {} 2035 2036 func (x *BugManagementPolicy_BugTemplate_Buganizer) ProtoReflect() protoreflect.Message { 2037 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[21] 2038 if protoimpl.UnsafeEnabled && x != nil { 2039 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2040 if ms.LoadMessageInfo() == nil { 2041 ms.StoreMessageInfo(mi) 2042 } 2043 return ms 2044 } 2045 return mi.MessageOf(x) 2046 } 2047 2048 // Deprecated: Use BugManagementPolicy_BugTemplate_Buganizer.ProtoReflect.Descriptor instead. 2049 func (*BugManagementPolicy_BugTemplate_Buganizer) Descriptor() ([]byte, []int) { 2050 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{4, 2, 0} 2051 } 2052 2053 func (x *BugManagementPolicy_BugTemplate_Buganizer) GetHotlists() []int64 { 2054 if x != nil { 2055 return x.Hotlists 2056 } 2057 return nil 2058 } 2059 2060 // Policy configuration that is specific to monorail issue tracker. 2061 type BugManagementPolicy_BugTemplate_Monorail struct { 2062 state protoimpl.MessageState 2063 sizeCache protoimpl.SizeCache 2064 unknownFields protoimpl.UnknownFields 2065 2066 // The labels to apply to the bug. 2067 Labels []string `protobuf:"bytes,1,rep,name=labels,proto3" json:"labels,omitempty"` 2068 } 2069 2070 func (x *BugManagementPolicy_BugTemplate_Monorail) Reset() { 2071 *x = BugManagementPolicy_BugTemplate_Monorail{} 2072 if protoimpl.UnsafeEnabled { 2073 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[22] 2074 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2075 ms.StoreMessageInfo(mi) 2076 } 2077 } 2078 2079 func (x *BugManagementPolicy_BugTemplate_Monorail) String() string { 2080 return protoimpl.X.MessageStringOf(x) 2081 } 2082 2083 func (*BugManagementPolicy_BugTemplate_Monorail) ProtoMessage() {} 2084 2085 func (x *BugManagementPolicy_BugTemplate_Monorail) ProtoReflect() protoreflect.Message { 2086 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[22] 2087 if protoimpl.UnsafeEnabled && x != nil { 2088 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2089 if ms.LoadMessageInfo() == nil { 2090 ms.StoreMessageInfo(mi) 2091 } 2092 return ms 2093 } 2094 return mi.MessageOf(x) 2095 } 2096 2097 // Deprecated: Use BugManagementPolicy_BugTemplate_Monorail.ProtoReflect.Descriptor instead. 2098 func (*BugManagementPolicy_BugTemplate_Monorail) Descriptor() ([]byte, []int) { 2099 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{4, 2, 1} 2100 } 2101 2102 func (x *BugManagementPolicy_BugTemplate_Monorail) GetLabels() []string { 2103 if x != nil { 2104 return x.Labels 2105 } 2106 return nil 2107 } 2108 2109 // Deprecated. No longer has any effect. Retained for textproto 2110 // compatibility only. 2111 type BuganizerProject_PriorityMapping struct { 2112 state protoimpl.MessageState 2113 sizeCache protoimpl.SizeCache 2114 unknownFields protoimpl.UnknownFields 2115 2116 Priority BuganizerPriority `protobuf:"varint,1,opt,name=priority,proto3,enum=luci.analysis.config.BuganizerPriority" json:"priority,omitempty"` 2117 Threshold *ImpactThreshold `protobuf:"bytes,2,opt,name=threshold,proto3" json:"threshold,omitempty"` 2118 Thresholds []*ImpactMetricThreshold `protobuf:"bytes,3,rep,name=thresholds,proto3" json:"thresholds,omitempty"` 2119 } 2120 2121 func (x *BuganizerProject_PriorityMapping) Reset() { 2122 *x = BuganizerProject_PriorityMapping{} 2123 if protoimpl.UnsafeEnabled { 2124 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[23] 2125 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2126 ms.StoreMessageInfo(mi) 2127 } 2128 } 2129 2130 func (x *BuganizerProject_PriorityMapping) String() string { 2131 return protoimpl.X.MessageStringOf(x) 2132 } 2133 2134 func (*BuganizerProject_PriorityMapping) ProtoMessage() {} 2135 2136 func (x *BuganizerProject_PriorityMapping) ProtoReflect() protoreflect.Message { 2137 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[23] 2138 if protoimpl.UnsafeEnabled && x != nil { 2139 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2140 if ms.LoadMessageInfo() == nil { 2141 ms.StoreMessageInfo(mi) 2142 } 2143 return ms 2144 } 2145 return mi.MessageOf(x) 2146 } 2147 2148 // Deprecated: Use BuganizerProject_PriorityMapping.ProtoReflect.Descriptor instead. 2149 func (*BuganizerProject_PriorityMapping) Descriptor() ([]byte, []int) { 2150 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{15, 0} 2151 } 2152 2153 func (x *BuganizerProject_PriorityMapping) GetPriority() BuganizerPriority { 2154 if x != nil { 2155 return x.Priority 2156 } 2157 return BuganizerPriority_BUGANIZER_PRIORITY_UNSPECIFIED 2158 } 2159 2160 func (x *BuganizerProject_PriorityMapping) GetThreshold() *ImpactThreshold { 2161 if x != nil { 2162 return x.Threshold 2163 } 2164 return nil 2165 } 2166 2167 func (x *BuganizerProject_PriorityMapping) GetThresholds() []*ImpactMetricThreshold { 2168 if x != nil { 2169 return x.Thresholds 2170 } 2171 return nil 2172 } 2173 2174 // The failure rate criteria detects consistently failing 2175 // and highly flaky tests (e.g. 95%+ failing) by looking for 2176 // a high number of failures at the queried position of the 2177 // test's history. 2178 // 2179 // The criteria obtains from the last 14 days' of filtered test data 2180 // a set of (up to) 20 test runs centered on the queried commit 2181 // position (10 prior and 10 after) and applies criteria 2182 // to this in various ways. 2183 // The 20 test runs are sorted by commit position and then time. 2184 // 2185 // See go/luci-exoneration-v2 for more detail. 2186 type TestStabilityCriteria_FailureRateCriteria struct { 2187 state protoimpl.MessageState 2188 sizeCache protoimpl.SizeCache 2189 unknownFields protoimpl.UnknownFields 2190 2191 // The number of unexpected test runs that must be 2192 // found in a sliding window of size 10 containing the 2193 // queried position to begin exoneration. 2194 // 6 is a good starting value. 2195 // 2196 // The criteria is applied over sliding windows of size 2197 // 10 around the query position. Assuming the full 20 test 2198 // runs are obtained, this means 11 window positions are considered. 2199 // If any window satisifes the threshold, the criteria is met 2200 // and the test is considered unstable. 2201 // 2202 // In the event that 10 test runs cannot be found in the last 2203 // 14 days of test history, a window sized to the available 2204 // test runs is used but the criteria is not scaled. 2205 FailureThreshold int32 `protobuf:"varint,1,opt,name=failure_threshold,json=failureThreshold,proto3" json:"failure_threshold,omitempty"` 2206 // The number of consecutive unexpected test runs, which if 2207 // present at the leading or trailing part of the (up to) 20 2208 // test verdicts, will trigger exoneration. 2209 // 3 is a good starting value. 2210 // 2211 // The consecutive failures must also touch the query position. 2212 // 2213 // This is designed to create a fast path to exoneration for 2214 // 100% failing tests which produce a strong and consistent 2215 // failing signal, leveraging the statistical significance 2216 // of consecutive failures. If this threshold is met, 2217 // the failure_threshold above does NOT need to be met. 2218 // 2219 // E.g. the following scenario WILL trigger this criteria for 2220 // a threshold of four or less. 2221 // 2222 // History: >F F F F< P P P P P P P 2223 // 2224 // ^ 2225 // Query position 2226 // 2227 // The following scenario WILL NOT trigger this criteria: 2228 // 2229 // History:>P F F F F< P P P P P P P 2230 // 2231 // ^ 2232 // Query position 2233 // 2234 // (N.B. Direction of history is irrelevant as criteria is 2235 // applied symmetrically. Either the left or right could 2236 // represent 'later' by commit position.) 2237 ConsecutiveFailureThreshold int32 `protobuf:"varint,2,opt,name=consecutive_failure_threshold,json=consecutiveFailureThreshold,proto3" json:"consecutive_failure_threshold,omitempty"` 2238 } 2239 2240 func (x *TestStabilityCriteria_FailureRateCriteria) Reset() { 2241 *x = TestStabilityCriteria_FailureRateCriteria{} 2242 if protoimpl.UnsafeEnabled { 2243 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[24] 2244 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2245 ms.StoreMessageInfo(mi) 2246 } 2247 } 2248 2249 func (x *TestStabilityCriteria_FailureRateCriteria) String() string { 2250 return protoimpl.X.MessageStringOf(x) 2251 } 2252 2253 func (*TestStabilityCriteria_FailureRateCriteria) ProtoMessage() {} 2254 2255 func (x *TestStabilityCriteria_FailureRateCriteria) ProtoReflect() protoreflect.Message { 2256 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[24] 2257 if protoimpl.UnsafeEnabled && x != nil { 2258 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2259 if ms.LoadMessageInfo() == nil { 2260 ms.StoreMessageInfo(mi) 2261 } 2262 return ms 2263 } 2264 return mi.MessageOf(x) 2265 } 2266 2267 // Deprecated: Use TestStabilityCriteria_FailureRateCriteria.ProtoReflect.Descriptor instead. 2268 func (*TestStabilityCriteria_FailureRateCriteria) Descriptor() ([]byte, []int) { 2269 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{16, 0} 2270 } 2271 2272 func (x *TestStabilityCriteria_FailureRateCriteria) GetFailureThreshold() int32 { 2273 if x != nil { 2274 return x.FailureThreshold 2275 } 2276 return 0 2277 } 2278 2279 func (x *TestStabilityCriteria_FailureRateCriteria) GetConsecutiveFailureThreshold() int32 { 2280 if x != nil { 2281 return x.ConsecutiveFailureThreshold 2282 } 2283 return 0 2284 } 2285 2286 // The flake rate criteria detects flaky tests by looking for 2287 // examples where a test has obtained expected and unexpected 2288 // test runs for the same sources under test. 2289 // 2290 // If there are more flaky source verdicts found than a threshold, 2291 // the test is considered flaky. 2292 // 2293 // The analysis window is all source verdicts for 7 days' worth 2294 // of commit positions either side of the queried position. 2295 // The conversion between time and commit position is discussed 2296 // in go/luci-exoneration-v2. 2297 // 2298 // In the event that an unsatisfactory number of source positions 2299 // are found using this method, the window is enlarged to possibly 2300 // include any verdict in the last 14 days. This is to improve 2301 // detection performance on tests with a low volume of results. 2302 type TestStabilityCriteria_FlakeRateCriteria struct { 2303 state protoimpl.MessageState 2304 sizeCache protoimpl.SizeCache 2305 unknownFields protoimpl.UnknownFields 2306 2307 // The minimum number of source verdicts desired 2308 // for the analysis window. 2309 // 2310 // As standard, all source verdicts for sources 2311 // +/- 7 days from the queried position are used. 2312 // 2313 // However, if the number of verdicts is not equal 2314 // to or greater than min_window, all source verdicts 2315 // from the last 14 days will be used. This is designed 2316 // to prioritise adequate flake detection performance 2317 // for test variants with low result volumes, at the 2318 // cost of data recency. 2319 // 2320 // If the number of source verdicts in the last 14 days 2321 // is less than min_window, then whatever source verdicts 2322 // are available are still used. 2323 // 2324 // 100 is a good starting value. 2325 MinWindow int32 `protobuf:"varint,1,opt,name=min_window,json=minWindow,proto3" json:"min_window,omitempty"` 2326 // The minimum number of flaky source verdicts required 2327 // to trigger the criteria. 2 is a good starting value. 2328 FlakeThreshold int32 `protobuf:"varint,2,opt,name=flake_threshold,json=flakeThreshold,proto3" json:"flake_threshold,omitempty"` 2329 // The minimum flake rate required to trigger the criteria, 2330 // as a proportion of all source verdicts. This must be a 2331 // value between 0.0 and 1.0. 2332 // 0.01 (1%) is a good starting value. 2333 // 2334 // Both flake_threshold AND the flake_rate_threshold must be met 2335 // for a test to be considered unstable. 2336 // 2337 // Note that not even the most flaky (50% flaky) test would 2338 // be expected to produce more than a 25% flake rate if 2339 // failures are retried once. This is because its expected 2340 // outcomes are: 2341 // - Pass on first try = 50% 2342 // - Fail on first try, pass on second try = 25% (flaky) 2343 // - Fail on both tries = 25% 2344 FlakeRateThreshold float64 `protobuf:"fixed64,3,opt,name=flake_rate_threshold,json=flakeRateThreshold,proto3" json:"flake_rate_threshold,omitempty"` 2345 } 2346 2347 func (x *TestStabilityCriteria_FlakeRateCriteria) Reset() { 2348 *x = TestStabilityCriteria_FlakeRateCriteria{} 2349 if protoimpl.UnsafeEnabled { 2350 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[25] 2351 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2352 ms.StoreMessageInfo(mi) 2353 } 2354 } 2355 2356 func (x *TestStabilityCriteria_FlakeRateCriteria) String() string { 2357 return protoimpl.X.MessageStringOf(x) 2358 } 2359 2360 func (*TestStabilityCriteria_FlakeRateCriteria) ProtoMessage() {} 2361 2362 func (x *TestStabilityCriteria_FlakeRateCriteria) ProtoReflect() protoreflect.Message { 2363 mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[25] 2364 if protoimpl.UnsafeEnabled && x != nil { 2365 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 2366 if ms.LoadMessageInfo() == nil { 2367 ms.StoreMessageInfo(mi) 2368 } 2369 return ms 2370 } 2371 return mi.MessageOf(x) 2372 } 2373 2374 // Deprecated: Use TestStabilityCriteria_FlakeRateCriteria.ProtoReflect.Descriptor instead. 2375 func (*TestStabilityCriteria_FlakeRateCriteria) Descriptor() ([]byte, []int) { 2376 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{16, 1} 2377 } 2378 2379 func (x *TestStabilityCriteria_FlakeRateCriteria) GetMinWindow() int32 { 2380 if x != nil { 2381 return x.MinWindow 2382 } 2383 return 0 2384 } 2385 2386 func (x *TestStabilityCriteria_FlakeRateCriteria) GetFlakeThreshold() int32 { 2387 if x != nil { 2388 return x.FlakeThreshold 2389 } 2390 return 0 2391 } 2392 2393 func (x *TestStabilityCriteria_FlakeRateCriteria) GetFlakeRateThreshold() float64 { 2394 if x != nil { 2395 return x.FlakeRateThreshold 2396 } 2397 return 0 2398 } 2399 2400 var File_go_chromium_org_luci_analysis_proto_config_project_config_proto protoreflect.FileDescriptor 2401 2402 var file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDesc = []byte{ 2403 0x0a, 0x3f, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 2404 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 2405 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x70, 0x72, 0x6f, 2406 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 2407 0x6f, 0x12, 0x14, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 2408 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 2409 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 2410 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x4d, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 2411 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 2412 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 2413 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 2414 0x74, 0x5f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 2415 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8a, 0x07, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x6a, 2416 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x50, 0x0a, 0x10, 0x70, 0x72, 0x6f, 2417 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 2418 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 2419 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 2420 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x6a, 2421 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 2422 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 2423 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 2424 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 2425 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x63, 0x6c, 2426 0x75, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 2427 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 2428 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 2429 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x4a, 0x0a, 0x0e, 2430 0x62, 0x75, 0x67, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x09, 2431 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 2432 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x4d, 2433 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0d, 0x62, 0x75, 0x67, 0x4d, 0x61, 2434 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 2435 0x69, 0x63, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x69, 2436 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 2437 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 2438 0x73, 0x12, 0x63, 0x0a, 0x17, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x62, 0x69, 0x6c, 2439 0x69, 0x74, 0x79, 0x5f, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x18, 0x0c, 0x20, 0x01, 2440 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 2441 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 2442 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x52, 2443 0x15, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x72, 2444 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x12, 0x39, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x73, 2445 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 2446 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 2447 0x61, 0x6c, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x72, 0x65, 0x61, 0x6c, 0x6d, 2448 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x62, 0x75, 0x67, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 2449 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 2450 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 2451 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x09, 0x62, 0x75, 0x67, 0x53, 0x79, 0x73, 0x74, 0x65, 2452 0x6d, 0x12, 0x41, 0x0a, 0x08, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 2453 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 2454 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x6f, 0x6e, 0x6f, 0x72, 2455 0x61, 0x69, 0x6c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x6d, 0x6f, 0x6e, 0x6f, 2456 0x72, 0x61, 0x69, 0x6c, 0x12, 0x44, 0x0a, 0x09, 0x62, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 2457 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 2458 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 2459 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 2460 0x09, 0x62, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x57, 0x0a, 0x14, 0x62, 0x75, 2461 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 2462 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 2463 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 2464 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 2465 0x12, 0x62, 0x75, 0x67, 0x46, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 2466 0x6f, 0x6c, 0x64, 0x12, 0x5f, 0x0a, 0x15, 0x62, 0x75, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x69, 0x6e, 2467 0x67, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x03, 2468 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 2469 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 2470 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 2471 0x13, 0x62, 0x75, 0x67, 0x46, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 2472 0x6f, 0x6c, 0x64, 0x73, 0x22, 0x34, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 2473 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 2474 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 2475 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xf4, 0x01, 0x0a, 0x07, 0x4d, 2476 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x4a, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 2477 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x75, 0x63, 0x69, 2478 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 2479 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4f, 2480 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 2481 0x65, 0x73, 0x1a, 0x9c, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4f, 0x76, 0x65, 2482 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 2483 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 2484 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 2485 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x69, 0x73, 0x44, 0x65, 0x66, 0x61, 2486 0x75, 0x6c, 0x74, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x70, 2487 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 2488 0x0c, 0x73, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x88, 0x01, 0x01, 2489 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 2490 0x10, 0x0a, 0x0e, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 2491 0x79, 0x22, 0xf3, 0x02, 0x0a, 0x0d, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 2492 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x1e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 2493 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x75, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 2494 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1b, 0x64, 0x69, 0x73, 2495 0x61, 0x62, 0x6c, 0x65, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x42, 0x75, 0x67, 2496 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x45, 0x0a, 0x08, 0x70, 0x6f, 0x6c, 0x69, 2497 0x63, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6c, 0x75, 0x63, 2498 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 2499 0x67, 0x2e, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 2500 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 2501 0x4d, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x62, 0x75, 0x67, 0x5f, 0x73, 2502 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6c, 0x75, 2503 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 2504 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x10, 0x64, 0x65, 2505 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x75, 0x67, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x44, 2506 0x0a, 0x09, 0x62, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 2507 0x0b, 0x32, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 2508 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 2509 0x65, 0x72, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x09, 0x62, 0x75, 0x67, 0x61, 0x6e, 2510 0x69, 0x7a, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x08, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 2511 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 2512 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x6f, 2513 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x6d, 2514 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x22, 0xa7, 0x08, 0x0a, 0x13, 0x42, 0x75, 0x67, 0x4d, 2515 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 2516 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 2517 0x16, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 2518 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x68, 0x75, 0x6d, 0x61, 0x6e, 2519 0x5f, 0x72, 0x65, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 2520 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x61, 2521 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 2522 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x69, 2523 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 2524 0x2e, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 2525 0x74, 0x79, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x4a, 0x0a, 0x07, 2526 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 2527 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 2528 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 2529 0x6e, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 2530 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x57, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x6c, 2531 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 2532 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 2533 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 2534 0x6e, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 2535 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 2536 0x6e, 0x12, 0x58, 0x0a, 0x0c, 0x62, 0x75, 0x67, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 2537 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 2538 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 2539 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6c, 0x69, 2540 0x63, 0x79, 0x2e, 0x42, 0x75, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x0b, 2541 0x62, 0x75, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, 0xdd, 0x01, 0x0a, 0x06, 2542 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 2543 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x72, 0x69, 2544 0x63, 0x49, 0x64, 0x12, 0x58, 0x0a, 0x14, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 2545 0x6e, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 2546 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 2547 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 2548 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 2549 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x5c, 0x0a, 2550 0x16, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x68, 2551 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 2552 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 2553 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 2554 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x15, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 2555 0x6f, 0x6e, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x1a, 0x51, 0x0a, 0x0b, 0x45, 2556 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 2557 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x5f, 0x68, 0x74, 0x6d, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 2558 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x48, 0x74, 0x6d, 0x6c, 0x12, 0x1f, 0x0a, 2559 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x74, 0x6d, 0x6c, 0x18, 0x02, 0x20, 0x01, 2560 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x74, 0x6d, 0x6c, 0x1a, 0xc0, 2561 0x02, 0x0a, 0x0b, 0x42, 0x75, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x29, 2562 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 2563 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 2564 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x5d, 0x0a, 0x09, 0x62, 0x75, 0x67, 2565 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x6c, 2566 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 2567 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 2568 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x42, 0x75, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 2569 0x61, 0x74, 0x65, 0x2e, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x09, 0x62, 2570 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x08, 0x6d, 0x6f, 0x6e, 0x6f, 2571 0x72, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x6c, 0x75, 0x63, 2572 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 2573 0x67, 0x2e, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 2574 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x42, 0x75, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 2575 0x65, 0x2e, 0x4d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x52, 0x08, 0x6d, 0x6f, 0x6e, 0x6f, 2576 0x72, 0x61, 0x69, 0x6c, 0x1a, 0x27, 0x0a, 0x09, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 2577 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 2578 0x03, 0x28, 0x03, 0x52, 0x08, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x1a, 0x22, 0x0a, 2579 0x08, 0x4d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62, 2580 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 2581 0x73, 0x22, 0xff, 0x04, 0x0a, 0x0f, 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x54, 0x68, 0x72, 0x65, 2582 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x55, 0x0a, 0x13, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 2583 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 2584 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 2585 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 2586 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x11, 0x74, 0x65, 0x73, 0x74, 0x52, 2587 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x4f, 0x0a, 0x10, 2588 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x73, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 2589 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 2590 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 2591 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x0e, 0x74, 2592 0x65, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x59, 0x0a, 2593 0x15, 0x70, 0x72, 0x65, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x73, 0x5f, 2594 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 2595 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 2596 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 2597 0x6f, 0x6c, 0x64, 0x52, 0x13, 0x70, 0x72, 0x65, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x75, 2598 0x6e, 0x73, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x67, 0x0a, 0x1c, 0x63, 0x72, 0x69, 0x74, 2599 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x65, 0x78, 2600 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 2601 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 2602 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 2603 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x1a, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x46, 2604 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x45, 0x78, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 2605 0x64, 0x12, 0x39, 0x0a, 0x16, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 2606 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x31, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 2607 0x03, 0x48, 0x00, 0x52, 0x14, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 2608 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x31, 0x64, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x16, 2609 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 2610 0x72, 0x65, 0x73, 0x5f, 0x33, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14, 2611 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 2612 0x65, 0x73, 0x33, 0x64, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x16, 0x75, 0x6e, 0x65, 0x78, 0x70, 2613 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x37, 2614 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x14, 0x75, 0x6e, 0x65, 0x78, 0x70, 2615 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x37, 0x64, 0x88, 2616 0x01, 0x01, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 2617 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x31, 0x64, 0x42, 0x19, 0x0a, 2618 0x17, 0x5f, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x61, 0x69, 2619 0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x33, 0x64, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x75, 0x6e, 0x65, 2620 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 2621 0x5f, 0x37, 0x64, 0x22, 0x79, 0x0a, 0x15, 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x4d, 0x65, 0x74, 2622 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x1b, 0x0a, 0x09, 2623 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 2624 0x08, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x74, 0x68, 0x72, 2625 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 2626 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 2627 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 2628 0x6f, 0x6c, 0x64, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x9b, 2629 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 2630 0x6c, 0x64, 0x12, 0x1c, 0x0a, 0x07, 0x6f, 0x6e, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x18, 0x01, 0x20, 2631 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x6e, 0x65, 0x44, 0x61, 0x79, 0x88, 0x01, 0x01, 2632 0x12, 0x20, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x18, 0x02, 0x20, 2633 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x08, 0x74, 0x68, 0x72, 0x65, 0x65, 0x44, 0x61, 0x79, 0x88, 2634 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x18, 2635 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 2636 0x79, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6f, 0x6e, 0x65, 0x5f, 0x64, 0x61, 0x79, 2637 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x42, 0x0c, 2638 0x0a, 0x0a, 0x5f, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x22, 0xd9, 0x03, 0x0a, 2639 0x0f, 0x4d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 2640 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 2641 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x5a, 0x0a, 0x14, 0x64, 0x65, 2642 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 2643 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 2644 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 2645 0x4d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 2646 0x75, 0x65, 0x52, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 2647 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 2648 0x74, 0x79, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 2649 0x03, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x46, 0x69, 0x65, 0x6c, 0x64, 2650 0x49, 0x64, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 2651 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 2652 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x6f, 2653 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x0a, 2654 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x1b, 0x70, 0x72, 2655 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x68, 0x79, 0x73, 0x74, 0x65, 0x72, 0x65, 0x73, 0x69, 2656 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 2657 0x19, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x48, 0x79, 0x73, 0x74, 0x65, 0x72, 0x65, 2658 0x73, 0x69, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 2659 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x06, 0x20, 0x01, 2660 0x28, 0x09, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x65, 0x66, 0x69, 2661 0x78, 0x12, 0x2b, 0x0a, 0x11, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x5f, 0x68, 0x6f, 2662 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x6f, 2663 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x48, 2664 0x0a, 0x21, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x5f, 0x72, 2665 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x67, 0x6f, 0x6f, 2666 0x67, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x66, 0x69, 0x6c, 0x65, 0x57, 2667 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x56, 0x69, 2668 0x65, 0x77, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x22, 0x45, 0x0a, 0x12, 0x4d, 0x6f, 0x6e, 0x6f, 2669 0x72, 0x61, 0x69, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x19, 2670 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 2671 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 2672 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 2673 0xc0, 0x01, 0x0a, 0x10, 0x4d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x50, 0x72, 0x69, 0x6f, 2674 0x72, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 2675 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 2676 0x12, 0x43, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 2677 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 2678 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6d, 0x70, 0x61, 0x63, 2679 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 2680 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x4b, 0x0a, 0x0a, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 2681 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x75, 0x63, 0x69, 2682 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 2683 0x2e, 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 2684 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x0a, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 2685 0x64, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x61, 0x6c, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 2686 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 2687 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x63, 0x0a, 0x15, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76, 2688 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x18, 2689 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 2690 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, 2691 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 2692 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x13, 0x74, 0x65, 0x73, 0x74, 0x56, 0x61, 0x72, 0x69, 2693 0x61, 0x6e, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x0a, 2694 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x54, 0x0a, 0x0f, 0x74, 0x65, 2695 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 2696 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 2697 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4e, 2698 0x61, 0x6d, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 2699 0x65, 0x52, 0x0d, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x73, 2700 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x5f, 2701 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 2702 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x4d, 0x61, 0x73, 0x6b, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 2703 0x6e, 0x73, 0x22, 0x6b, 0x0a, 0x16, 0x54, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x6c, 2704 0x75, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 2705 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 2706 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 2707 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x69, 2708 0x6b, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 2709 0x09, 0x52, 0x0c, 0x6c, 0x69, 0x6b, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 2710 0x24, 0x0a, 0x12, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 2711 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 2712 0x03, 0x52, 0x02, 0x69, 0x64, 0x22, 0xbf, 0x04, 0x0a, 0x10, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 2713 0x7a, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x55, 0x0a, 0x11, 0x64, 0x65, 2714 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x18, 2715 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 2716 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 2717 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 2718 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 2719 0x74, 0x12, 0x3e, 0x0a, 0x1b, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x68, 0x79, 2720 0x73, 0x74, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 2721 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x19, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 2722 0x48, 0x79, 0x73, 0x74, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 2723 0x74, 0x12, 0x63, 0x0a, 0x11, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x6d, 0x61, 2724 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x6c, 2725 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 2726 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x50, 0x72, 0x6f, 2727 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x70, 2728 0x70, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x61, 2729 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x44, 0x0a, 0x1f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x77, 2730 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x76, 0x69, 0x65, 2731 0x77, 0x5f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 2732 0x1b, 0x66, 0x69, 0x6c, 0x65, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x4c, 0x69, 0x6d, 0x69, 2733 0x74, 0x56, 0x69, 0x65, 0x77, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x1a, 0xe8, 0x01, 0x0a, 2734 0x0f, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 2735 0x12, 0x43, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 2736 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 2737 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 2738 0x7a, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x08, 0x70, 0x72, 0x69, 2739 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x43, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 2740 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 2741 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 2742 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 2743 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x4b, 0x0a, 0x0a, 0x74, 0x68, 2744 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 2745 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 2746 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x72, 2747 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x0a, 0x74, 0x68, 0x72, 2748 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x22, 0xf2, 0x03, 0x0a, 0x15, 0x54, 0x65, 0x73, 0x74, 2749 0x53, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 2750 0x61, 0x12, 0x62, 0x0a, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x61, 0x74, 2751 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 2752 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 2753 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x72, 0x69, 0x74, 2754 0x65, 0x72, 0x69, 0x61, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x61, 0x74, 0x65, 2755 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x52, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 2756 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x5c, 0x0a, 0x0a, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x5f, 0x72, 2757 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6c, 0x75, 0x63, 0x69, 2758 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 2759 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x72, 2760 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x2e, 0x46, 0x6c, 0x61, 0x6b, 0x65, 0x52, 0x61, 0x74, 0x65, 2761 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x52, 0x09, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x52, 2762 0x61, 0x74, 0x65, 0x1a, 0x86, 0x01, 0x0a, 0x13, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 2763 0x61, 0x74, 0x65, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x12, 0x2b, 0x0a, 0x11, 0x66, 2764 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 2765 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x54, 2766 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x42, 0x0a, 0x1d, 0x63, 0x6f, 0x6e, 0x73, 2767 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 2768 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 2769 0x1b, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x46, 0x61, 0x69, 0x6c, 2770 0x75, 0x72, 0x65, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x1a, 0x8d, 0x01, 0x0a, 2771 0x11, 0x46, 0x6c, 0x61, 0x6b, 0x65, 0x52, 0x61, 0x74, 0x65, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 2772 0x69, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 2773 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 2774 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 2775 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x6c, 0x61, 0x6b, 2776 0x65, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x66, 0x6c, 2777 0x61, 0x6b, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 2778 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x52, 2779 0x61, 0x74, 0x65, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x2a, 0x44, 0x0a, 0x09, 2780 0x42, 0x75, 0x67, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x16, 0x42, 0x55, 0x47, 2781 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 2782 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x4f, 0x4e, 0x4f, 0x52, 0x41, 0x49, 2783 0x4c, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x55, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x45, 0x52, 2784 0x10, 0x02, 0x2a, 0x5f, 0x0a, 0x11, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x50, 2785 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x1e, 0x42, 0x55, 0x47, 0x41, 0x4e, 2786 0x49, 0x5a, 0x45, 0x52, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 2787 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x50, 2788 0x30, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x31, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x50, 2789 0x32, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x33, 0x10, 0x04, 0x12, 0x06, 0x0a, 0x02, 0x50, 2790 0x34, 0x10, 0x05, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 2791 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 2792 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 2793 0x67, 0x3b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 2794 0x6f, 0x33, 2795 } 2796 2797 var ( 2798 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescOnce sync.Once 2799 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescData = file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDesc 2800 ) 2801 2802 func file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP() []byte { 2803 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescOnce.Do(func() { 2804 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescData) 2805 }) 2806 return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescData 2807 } 2808 2809 var file_go_chromium_org_luci_analysis_proto_config_project_config_proto_enumTypes = make([]protoimpl.EnumInfo, 2) 2810 var file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes = make([]protoimpl.MessageInfo, 26) 2811 var file_go_chromium_org_luci_analysis_proto_config_project_config_proto_goTypes = []interface{}{ 2812 (BugSystem)(0), // 0: luci.analysis.config.BugSystem 2813 (BuganizerPriority)(0), // 1: luci.analysis.config.BuganizerPriority 2814 (*ProjectConfig)(nil), // 2: luci.analysis.config.ProjectConfig 2815 (*ProjectMetadata)(nil), // 3: luci.analysis.config.ProjectMetadata 2816 (*Metrics)(nil), // 4: luci.analysis.config.Metrics 2817 (*BugManagement)(nil), // 5: luci.analysis.config.BugManagement 2818 (*BugManagementPolicy)(nil), // 6: luci.analysis.config.BugManagementPolicy 2819 (*ImpactThreshold)(nil), // 7: luci.analysis.config.ImpactThreshold 2820 (*ImpactMetricThreshold)(nil), // 8: luci.analysis.config.ImpactMetricThreshold 2821 (*MetricThreshold)(nil), // 9: luci.analysis.config.MetricThreshold 2822 (*MonorailProject)(nil), // 10: luci.analysis.config.MonorailProject 2823 (*MonorailFieldValue)(nil), // 11: luci.analysis.config.MonorailFieldValue 2824 (*MonorailPriority)(nil), // 12: luci.analysis.config.MonorailPriority 2825 (*RealmConfig)(nil), // 13: luci.analysis.config.RealmConfig 2826 (*Clustering)(nil), // 14: luci.analysis.config.Clustering 2827 (*TestNameClusteringRule)(nil), // 15: luci.analysis.config.TestNameClusteringRule 2828 (*BuganizerComponent)(nil), // 16: luci.analysis.config.BuganizerComponent 2829 (*BuganizerProject)(nil), // 17: luci.analysis.config.BuganizerProject 2830 (*TestStabilityCriteria)(nil), // 18: luci.analysis.config.TestStabilityCriteria 2831 (*Metrics_MetricOverride)(nil), // 19: luci.analysis.config.Metrics.MetricOverride 2832 (*BugManagementPolicy_Metric)(nil), // 20: luci.analysis.config.BugManagementPolicy.Metric 2833 (*BugManagementPolicy_Explanation)(nil), // 21: luci.analysis.config.BugManagementPolicy.Explanation 2834 (*BugManagementPolicy_BugTemplate)(nil), // 22: luci.analysis.config.BugManagementPolicy.BugTemplate 2835 (*BugManagementPolicy_BugTemplate_Buganizer)(nil), // 23: luci.analysis.config.BugManagementPolicy.BugTemplate.Buganizer 2836 (*BugManagementPolicy_BugTemplate_Monorail)(nil), // 24: luci.analysis.config.BugManagementPolicy.BugTemplate.Monorail 2837 (*BuganizerProject_PriorityMapping)(nil), // 25: luci.analysis.config.BuganizerProject.PriorityMapping 2838 (*TestStabilityCriteria_FailureRateCriteria)(nil), // 26: luci.analysis.config.TestStabilityCriteria.FailureRateCriteria 2839 (*TestStabilityCriteria_FlakeRateCriteria)(nil), // 27: luci.analysis.config.TestStabilityCriteria.FlakeRateCriteria 2840 (*timestamppb.Timestamp)(nil), // 28: google.protobuf.Timestamp 2841 (*TestVariantAnalysisConfig)(nil), // 29: luci.analysis.config.TestVariantAnalysisConfig 2842 } 2843 var file_go_chromium_org_luci_analysis_proto_config_project_config_proto_depIdxs = []int32{ 2844 3, // 0: luci.analysis.config.ProjectConfig.project_metadata:type_name -> luci.analysis.config.ProjectMetadata 2845 28, // 1: luci.analysis.config.ProjectConfig.last_updated:type_name -> google.protobuf.Timestamp 2846 14, // 2: luci.analysis.config.ProjectConfig.clustering:type_name -> luci.analysis.config.Clustering 2847 5, // 3: luci.analysis.config.ProjectConfig.bug_management:type_name -> luci.analysis.config.BugManagement 2848 4, // 4: luci.analysis.config.ProjectConfig.metrics:type_name -> luci.analysis.config.Metrics 2849 18, // 5: luci.analysis.config.ProjectConfig.test_stability_criteria:type_name -> luci.analysis.config.TestStabilityCriteria 2850 13, // 6: luci.analysis.config.ProjectConfig.realms:type_name -> luci.analysis.config.RealmConfig 2851 0, // 7: luci.analysis.config.ProjectConfig.bug_system:type_name -> luci.analysis.config.BugSystem 2852 10, // 8: luci.analysis.config.ProjectConfig.monorail:type_name -> luci.analysis.config.MonorailProject 2853 17, // 9: luci.analysis.config.ProjectConfig.buganizer:type_name -> luci.analysis.config.BuganizerProject 2854 7, // 10: luci.analysis.config.ProjectConfig.bug_filing_threshold:type_name -> luci.analysis.config.ImpactThreshold 2855 8, // 11: luci.analysis.config.ProjectConfig.bug_filing_thresholds:type_name -> luci.analysis.config.ImpactMetricThreshold 2856 19, // 12: luci.analysis.config.Metrics.overrides:type_name -> luci.analysis.config.Metrics.MetricOverride 2857 6, // 13: luci.analysis.config.BugManagement.policies:type_name -> luci.analysis.config.BugManagementPolicy 2858 0, // 14: luci.analysis.config.BugManagement.default_bug_system:type_name -> luci.analysis.config.BugSystem 2859 17, // 15: luci.analysis.config.BugManagement.buganizer:type_name -> luci.analysis.config.BuganizerProject 2860 10, // 16: luci.analysis.config.BugManagement.monorail:type_name -> luci.analysis.config.MonorailProject 2861 1, // 17: luci.analysis.config.BugManagementPolicy.priority:type_name -> luci.analysis.config.BuganizerPriority 2862 20, // 18: luci.analysis.config.BugManagementPolicy.metrics:type_name -> luci.analysis.config.BugManagementPolicy.Metric 2863 21, // 19: luci.analysis.config.BugManagementPolicy.explanation:type_name -> luci.analysis.config.BugManagementPolicy.Explanation 2864 22, // 20: luci.analysis.config.BugManagementPolicy.bug_template:type_name -> luci.analysis.config.BugManagementPolicy.BugTemplate 2865 9, // 21: luci.analysis.config.ImpactThreshold.test_results_failed:type_name -> luci.analysis.config.MetricThreshold 2866 9, // 22: luci.analysis.config.ImpactThreshold.test_runs_failed:type_name -> luci.analysis.config.MetricThreshold 2867 9, // 23: luci.analysis.config.ImpactThreshold.presubmit_runs_failed:type_name -> luci.analysis.config.MetricThreshold 2868 9, // 24: luci.analysis.config.ImpactThreshold.critical_failures_exonerated:type_name -> luci.analysis.config.MetricThreshold 2869 9, // 25: luci.analysis.config.ImpactMetricThreshold.threshold:type_name -> luci.analysis.config.MetricThreshold 2870 11, // 26: luci.analysis.config.MonorailProject.default_field_values:type_name -> luci.analysis.config.MonorailFieldValue 2871 12, // 27: luci.analysis.config.MonorailProject.priorities:type_name -> luci.analysis.config.MonorailPriority 2872 7, // 28: luci.analysis.config.MonorailPriority.threshold:type_name -> luci.analysis.config.ImpactThreshold 2873 8, // 29: luci.analysis.config.MonorailPriority.thresholds:type_name -> luci.analysis.config.ImpactMetricThreshold 2874 29, // 30: luci.analysis.config.RealmConfig.test_variant_analysis:type_name -> luci.analysis.config.TestVariantAnalysisConfig 2875 15, // 31: luci.analysis.config.Clustering.test_name_rules:type_name -> luci.analysis.config.TestNameClusteringRule 2876 16, // 32: luci.analysis.config.BuganizerProject.default_component:type_name -> luci.analysis.config.BuganizerComponent 2877 25, // 33: luci.analysis.config.BuganizerProject.priority_mappings:type_name -> luci.analysis.config.BuganizerProject.PriorityMapping 2878 26, // 34: luci.analysis.config.TestStabilityCriteria.failure_rate:type_name -> luci.analysis.config.TestStabilityCriteria.FailureRateCriteria 2879 27, // 35: luci.analysis.config.TestStabilityCriteria.flake_rate:type_name -> luci.analysis.config.TestStabilityCriteria.FlakeRateCriteria 2880 9, // 36: luci.analysis.config.BugManagementPolicy.Metric.activation_threshold:type_name -> luci.analysis.config.MetricThreshold 2881 9, // 37: luci.analysis.config.BugManagementPolicy.Metric.deactivation_threshold:type_name -> luci.analysis.config.MetricThreshold 2882 23, // 38: luci.analysis.config.BugManagementPolicy.BugTemplate.buganizer:type_name -> luci.analysis.config.BugManagementPolicy.BugTemplate.Buganizer 2883 24, // 39: luci.analysis.config.BugManagementPolicy.BugTemplate.monorail:type_name -> luci.analysis.config.BugManagementPolicy.BugTemplate.Monorail 2884 1, // 40: luci.analysis.config.BuganizerProject.PriorityMapping.priority:type_name -> luci.analysis.config.BuganizerPriority 2885 7, // 41: luci.analysis.config.BuganizerProject.PriorityMapping.threshold:type_name -> luci.analysis.config.ImpactThreshold 2886 8, // 42: luci.analysis.config.BuganizerProject.PriorityMapping.thresholds:type_name -> luci.analysis.config.ImpactMetricThreshold 2887 43, // [43:43] is the sub-list for method output_type 2888 43, // [43:43] is the sub-list for method input_type 2889 43, // [43:43] is the sub-list for extension type_name 2890 43, // [43:43] is the sub-list for extension extendee 2891 0, // [0:43] is the sub-list for field type_name 2892 } 2893 2894 func init() { file_go_chromium_org_luci_analysis_proto_config_project_config_proto_init() } 2895 func file_go_chromium_org_luci_analysis_proto_config_project_config_proto_init() { 2896 if File_go_chromium_org_luci_analysis_proto_config_project_config_proto != nil { 2897 return 2898 } 2899 file_go_chromium_org_luci_analysis_proto_config_test_variant_analysis_config_proto_init() 2900 if !protoimpl.UnsafeEnabled { 2901 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { 2902 switch v := v.(*ProjectConfig); i { 2903 case 0: 2904 return &v.state 2905 case 1: 2906 return &v.sizeCache 2907 case 2: 2908 return &v.unknownFields 2909 default: 2910 return nil 2911 } 2912 } 2913 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { 2914 switch v := v.(*ProjectMetadata); i { 2915 case 0: 2916 return &v.state 2917 case 1: 2918 return &v.sizeCache 2919 case 2: 2920 return &v.unknownFields 2921 default: 2922 return nil 2923 } 2924 } 2925 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { 2926 switch v := v.(*Metrics); i { 2927 case 0: 2928 return &v.state 2929 case 1: 2930 return &v.sizeCache 2931 case 2: 2932 return &v.unknownFields 2933 default: 2934 return nil 2935 } 2936 } 2937 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { 2938 switch v := v.(*BugManagement); i { 2939 case 0: 2940 return &v.state 2941 case 1: 2942 return &v.sizeCache 2943 case 2: 2944 return &v.unknownFields 2945 default: 2946 return nil 2947 } 2948 } 2949 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { 2950 switch v := v.(*BugManagementPolicy); i { 2951 case 0: 2952 return &v.state 2953 case 1: 2954 return &v.sizeCache 2955 case 2: 2956 return &v.unknownFields 2957 default: 2958 return nil 2959 } 2960 } 2961 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { 2962 switch v := v.(*ImpactThreshold); i { 2963 case 0: 2964 return &v.state 2965 case 1: 2966 return &v.sizeCache 2967 case 2: 2968 return &v.unknownFields 2969 default: 2970 return nil 2971 } 2972 } 2973 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { 2974 switch v := v.(*ImpactMetricThreshold); i { 2975 case 0: 2976 return &v.state 2977 case 1: 2978 return &v.sizeCache 2979 case 2: 2980 return &v.unknownFields 2981 default: 2982 return nil 2983 } 2984 } 2985 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { 2986 switch v := v.(*MetricThreshold); i { 2987 case 0: 2988 return &v.state 2989 case 1: 2990 return &v.sizeCache 2991 case 2: 2992 return &v.unknownFields 2993 default: 2994 return nil 2995 } 2996 } 2997 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { 2998 switch v := v.(*MonorailProject); i { 2999 case 0: 3000 return &v.state 3001 case 1: 3002 return &v.sizeCache 3003 case 2: 3004 return &v.unknownFields 3005 default: 3006 return nil 3007 } 3008 } 3009 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { 3010 switch v := v.(*MonorailFieldValue); i { 3011 case 0: 3012 return &v.state 3013 case 1: 3014 return &v.sizeCache 3015 case 2: 3016 return &v.unknownFields 3017 default: 3018 return nil 3019 } 3020 } 3021 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { 3022 switch v := v.(*MonorailPriority); i { 3023 case 0: 3024 return &v.state 3025 case 1: 3026 return &v.sizeCache 3027 case 2: 3028 return &v.unknownFields 3029 default: 3030 return nil 3031 } 3032 } 3033 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { 3034 switch v := v.(*RealmConfig); i { 3035 case 0: 3036 return &v.state 3037 case 1: 3038 return &v.sizeCache 3039 case 2: 3040 return &v.unknownFields 3041 default: 3042 return nil 3043 } 3044 } 3045 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { 3046 switch v := v.(*Clustering); i { 3047 case 0: 3048 return &v.state 3049 case 1: 3050 return &v.sizeCache 3051 case 2: 3052 return &v.unknownFields 3053 default: 3054 return nil 3055 } 3056 } 3057 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { 3058 switch v := v.(*TestNameClusteringRule); i { 3059 case 0: 3060 return &v.state 3061 case 1: 3062 return &v.sizeCache 3063 case 2: 3064 return &v.unknownFields 3065 default: 3066 return nil 3067 } 3068 } 3069 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { 3070 switch v := v.(*BuganizerComponent); i { 3071 case 0: 3072 return &v.state 3073 case 1: 3074 return &v.sizeCache 3075 case 2: 3076 return &v.unknownFields 3077 default: 3078 return nil 3079 } 3080 } 3081 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { 3082 switch v := v.(*BuganizerProject); i { 3083 case 0: 3084 return &v.state 3085 case 1: 3086 return &v.sizeCache 3087 case 2: 3088 return &v.unknownFields 3089 default: 3090 return nil 3091 } 3092 } 3093 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { 3094 switch v := v.(*TestStabilityCriteria); i { 3095 case 0: 3096 return &v.state 3097 case 1: 3098 return &v.sizeCache 3099 case 2: 3100 return &v.unknownFields 3101 default: 3102 return nil 3103 } 3104 } 3105 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { 3106 switch v := v.(*Metrics_MetricOverride); i { 3107 case 0: 3108 return &v.state 3109 case 1: 3110 return &v.sizeCache 3111 case 2: 3112 return &v.unknownFields 3113 default: 3114 return nil 3115 } 3116 } 3117 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { 3118 switch v := v.(*BugManagementPolicy_Metric); i { 3119 case 0: 3120 return &v.state 3121 case 1: 3122 return &v.sizeCache 3123 case 2: 3124 return &v.unknownFields 3125 default: 3126 return nil 3127 } 3128 } 3129 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { 3130 switch v := v.(*BugManagementPolicy_Explanation); i { 3131 case 0: 3132 return &v.state 3133 case 1: 3134 return &v.sizeCache 3135 case 2: 3136 return &v.unknownFields 3137 default: 3138 return nil 3139 } 3140 } 3141 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { 3142 switch v := v.(*BugManagementPolicy_BugTemplate); i { 3143 case 0: 3144 return &v.state 3145 case 1: 3146 return &v.sizeCache 3147 case 2: 3148 return &v.unknownFields 3149 default: 3150 return nil 3151 } 3152 } 3153 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { 3154 switch v := v.(*BugManagementPolicy_BugTemplate_Buganizer); i { 3155 case 0: 3156 return &v.state 3157 case 1: 3158 return &v.sizeCache 3159 case 2: 3160 return &v.unknownFields 3161 default: 3162 return nil 3163 } 3164 } 3165 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { 3166 switch v := v.(*BugManagementPolicy_BugTemplate_Monorail); i { 3167 case 0: 3168 return &v.state 3169 case 1: 3170 return &v.sizeCache 3171 case 2: 3172 return &v.unknownFields 3173 default: 3174 return nil 3175 } 3176 } 3177 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { 3178 switch v := v.(*BuganizerProject_PriorityMapping); i { 3179 case 0: 3180 return &v.state 3181 case 1: 3182 return &v.sizeCache 3183 case 2: 3184 return &v.unknownFields 3185 default: 3186 return nil 3187 } 3188 } 3189 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { 3190 switch v := v.(*TestStabilityCriteria_FailureRateCriteria); i { 3191 case 0: 3192 return &v.state 3193 case 1: 3194 return &v.sizeCache 3195 case 2: 3196 return &v.unknownFields 3197 default: 3198 return nil 3199 } 3200 } 3201 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { 3202 switch v := v.(*TestStabilityCriteria_FlakeRateCriteria); i { 3203 case 0: 3204 return &v.state 3205 case 1: 3206 return &v.sizeCache 3207 case 2: 3208 return &v.unknownFields 3209 default: 3210 return nil 3211 } 3212 } 3213 } 3214 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[5].OneofWrappers = []interface{}{} 3215 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[7].OneofWrappers = []interface{}{} 3216 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[17].OneofWrappers = []interface{}{} 3217 type x struct{} 3218 out := protoimpl.TypeBuilder{ 3219 File: protoimpl.DescBuilder{ 3220 GoPackagePath: reflect.TypeOf(x{}).PkgPath(), 3221 RawDescriptor: file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDesc, 3222 NumEnums: 2, 3223 NumMessages: 26, 3224 NumExtensions: 0, 3225 NumServices: 0, 3226 }, 3227 GoTypes: file_go_chromium_org_luci_analysis_proto_config_project_config_proto_goTypes, 3228 DependencyIndexes: file_go_chromium_org_luci_analysis_proto_config_project_config_proto_depIdxs, 3229 EnumInfos: file_go_chromium_org_luci_analysis_proto_config_project_config_proto_enumTypes, 3230 MessageInfos: file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes, 3231 }.Build() 3232 File_go_chromium_org_luci_analysis_proto_config_project_config_proto = out.File 3233 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDesc = nil 3234 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_goTypes = nil 3235 file_go_chromium_org_luci_analysis_proto_config_project_config_proto_depIdxs = nil 3236 }