| // Copyright 2022 The LUCI Authors. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| // Code generated by protoc-gen-go. DO NOT EDIT. |
| // versions: |
| // protoc-gen-go v1.36.5 |
| // protoc v5.29.3 |
| // source: go.chromium.org/luci/analysis/proto/config/project_config.proto |
| |
| package configpb |
| |
| import ( |
| protoreflect "google.golang.org/protobuf/reflect/protoreflect" |
| protoimpl "google.golang.org/protobuf/runtime/protoimpl" |
| timestamppb "google.golang.org/protobuf/types/known/timestamppb" |
| reflect "reflect" |
| sync "sync" |
| unsafe "unsafe" |
| ) |
| |
| const ( |
| // Verify that this generated code is sufficiently up-to-date. |
| _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) |
| // Verify that runtime/protoimpl is sufficiently up-to-date. |
| _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) |
| ) |
| |
| // An enum that represents the bug filing system that the project uses. |
| type BugSystem int32 |
| |
| const ( |
| // An unspecified bug system, Do not use, this will |
| // break LUCI Analysis bug filing functionality. |
| BugSystem_BUG_SYSTEM_UNSPECIFIED BugSystem = 0 |
| // Use Monorail to file bugs. |
| BugSystem_MONORAIL BugSystem = 1 |
| // Use Buganizer to file bugs. |
| BugSystem_BUGANIZER BugSystem = 2 |
| ) |
| |
| // Enum value maps for BugSystem. |
| var ( |
| BugSystem_name = map[int32]string{ |
| 0: "BUG_SYSTEM_UNSPECIFIED", |
| 1: "MONORAIL", |
| 2: "BUGANIZER", |
| } |
| BugSystem_value = map[string]int32{ |
| "BUG_SYSTEM_UNSPECIFIED": 0, |
| "MONORAIL": 1, |
| "BUGANIZER": 2, |
| } |
| ) |
| |
| func (x BugSystem) Enum() *BugSystem { |
| p := new(BugSystem) |
| *p = x |
| return p |
| } |
| |
| func (x BugSystem) String() string { |
| return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) |
| } |
| |
| func (BugSystem) Descriptor() protoreflect.EnumDescriptor { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_enumTypes[0].Descriptor() |
| } |
| |
| func (BugSystem) Type() protoreflect.EnumType { |
| return &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_enumTypes[0] |
| } |
| |
| func (x BugSystem) Number() protoreflect.EnumNumber { |
| return protoreflect.EnumNumber(x) |
| } |
| |
| // Deprecated: Use BugSystem.Descriptor instead. |
| func (BugSystem) EnumDescriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{0} |
| } |
| |
| // This enum represents the Buganizer priorities. |
| // It is equivalent to the one in Buganizer API. |
| type BuganizerPriority int32 |
| |
| const ( |
| // Priority unspecified, Do not use this value. |
| BuganizerPriority_BUGANIZER_PRIORITY_UNSPECIFIED BuganizerPriority = 0 |
| // P0, Highest priority. |
| BuganizerPriority_P0 BuganizerPriority = 1 |
| BuganizerPriority_P1 BuganizerPriority = 2 |
| BuganizerPriority_P2 BuganizerPriority = 3 |
| BuganizerPriority_P3 BuganizerPriority = 4 |
| BuganizerPriority_P4 BuganizerPriority = 5 |
| ) |
| |
| // Enum value maps for BuganizerPriority. |
| var ( |
| BuganizerPriority_name = map[int32]string{ |
| 0: "BUGANIZER_PRIORITY_UNSPECIFIED", |
| 1: "P0", |
| 2: "P1", |
| 3: "P2", |
| 4: "P3", |
| 5: "P4", |
| } |
| BuganizerPriority_value = map[string]int32{ |
| "BUGANIZER_PRIORITY_UNSPECIFIED": 0, |
| "P0": 1, |
| "P1": 2, |
| "P2": 3, |
| "P3": 4, |
| "P4": 5, |
| } |
| ) |
| |
| func (x BuganizerPriority) Enum() *BuganizerPriority { |
| p := new(BuganizerPriority) |
| *p = x |
| return p |
| } |
| |
| func (x BuganizerPriority) String() string { |
| return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) |
| } |
| |
| func (BuganizerPriority) Descriptor() protoreflect.EnumDescriptor { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_enumTypes[1].Descriptor() |
| } |
| |
| func (BuganizerPriority) Type() protoreflect.EnumType { |
| return &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_enumTypes[1] |
| } |
| |
| func (x BuganizerPriority) Number() protoreflect.EnumNumber { |
| return protoreflect.EnumNumber(x) |
| } |
| |
| // Deprecated: Use BuganizerPriority.Descriptor instead. |
| func (BuganizerPriority) EnumDescriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{1} |
| } |
| |
| // ProjectConfig is the project-specific configuration data for LUCI Analysis. |
| type ProjectConfig struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // The project metadata (eg. display name). |
| ProjectMetadata *ProjectMetadata `protobuf:"bytes,6,opt,name=project_metadata,json=projectMetadata,proto3" json:"project_metadata,omitempty"` |
| // The last time this project configuration was updated. |
| // LUCI Analysis sets and stores this value internally. Do not set |
| // in your project's configuration file, it will be ignored. |
| LastUpdated *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"` |
| // Configuration for how to cluster test results. |
| Clustering *Clustering `protobuf:"bytes,5,opt,name=clustering,proto3" json:"clustering,omitempty"` |
| // Configuration for automatic bug management. |
| BugManagement *BugManagement `protobuf:"bytes,9,opt,name=bug_management,json=bugManagement,proto3" json:"bug_management,omitempty"` |
| // Configuration related to metrics in LUCI Analysis. |
| Metrics *Metrics `protobuf:"bytes,11,opt,name=metrics,proto3" json:"metrics,omitempty"` |
| // Configuration for when tests are considered stable enough |
| // to gate code changes. Only relevant for projects which integrate |
| // with the TestVariants.QueryStability RPC to exonerate |
| // unstable tests in presubmit. |
| TestStabilityCriteria *TestStabilityCriteria `protobuf:"bytes,12,opt,name=test_stability_criteria,json=testStabilityCriteria,proto3" json:"test_stability_criteria,omitempty"` |
| // Per realm configurations. |
| Realms []*RealmConfig `protobuf:"bytes,3,rep,name=realms,proto3" json:"realms,omitempty"` |
| // Deprecated. No longer has any effect. Retained for textproto |
| // compatibility only. Use bug_management.default_bug_system instead. |
| BugSystem BugSystem `protobuf:"varint,7,opt,name=bug_system,json=bugSystem,proto3,enum=luci.analysis.config.BugSystem" json:"bug_system,omitempty"` |
| // Deprecated. No longer has any effect. Retained for textproto |
| // compatibility only. Use bug_management.monorail instead. |
| Monorail *MonorailProject `protobuf:"bytes,1,opt,name=monorail,proto3" json:"monorail,omitempty"` |
| // Deprecated. No longer has any effect. Retained for textproto |
| // compatibility only. Use bug_management.buganizer instead. |
| Buganizer *BuganizerProject `protobuf:"bytes,8,opt,name=buganizer,proto3" json:"buganizer,omitempty"` |
| // Deprecated. No longer has any effect. Retained for textproto |
| // compatibility only. Use bug_management.policies instead. |
| BugFilingThreshold *ImpactThreshold `protobuf:"bytes,2,opt,name=bug_filing_threshold,json=bugFilingThreshold,proto3" json:"bug_filing_threshold,omitempty"` |
| // Deprecated. No longer has any effect. Retained for textproto |
| // compatibility only. Use bug_management.policies instead. |
| BugFilingThresholds []*ImpactMetricThreshold `protobuf:"bytes,10,rep,name=bug_filing_thresholds,json=bugFilingThresholds,proto3" json:"bug_filing_thresholds,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *ProjectConfig) Reset() { |
| *x = ProjectConfig{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[0] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *ProjectConfig) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*ProjectConfig) ProtoMessage() {} |
| |
| func (x *ProjectConfig) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[0] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use ProjectConfig.ProtoReflect.Descriptor instead. |
| func (*ProjectConfig) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{0} |
| } |
| |
| func (x *ProjectConfig) GetProjectMetadata() *ProjectMetadata { |
| if x != nil { |
| return x.ProjectMetadata |
| } |
| return nil |
| } |
| |
| func (x *ProjectConfig) GetLastUpdated() *timestamppb.Timestamp { |
| if x != nil { |
| return x.LastUpdated |
| } |
| return nil |
| } |
| |
| func (x *ProjectConfig) GetClustering() *Clustering { |
| if x != nil { |
| return x.Clustering |
| } |
| return nil |
| } |
| |
| func (x *ProjectConfig) GetBugManagement() *BugManagement { |
| if x != nil { |
| return x.BugManagement |
| } |
| return nil |
| } |
| |
| func (x *ProjectConfig) GetMetrics() *Metrics { |
| if x != nil { |
| return x.Metrics |
| } |
| return nil |
| } |
| |
| func (x *ProjectConfig) GetTestStabilityCriteria() *TestStabilityCriteria { |
| if x != nil { |
| return x.TestStabilityCriteria |
| } |
| return nil |
| } |
| |
| func (x *ProjectConfig) GetRealms() []*RealmConfig { |
| if x != nil { |
| return x.Realms |
| } |
| return nil |
| } |
| |
| func (x *ProjectConfig) GetBugSystem() BugSystem { |
| if x != nil { |
| return x.BugSystem |
| } |
| return BugSystem_BUG_SYSTEM_UNSPECIFIED |
| } |
| |
| func (x *ProjectConfig) GetMonorail() *MonorailProject { |
| if x != nil { |
| return x.Monorail |
| } |
| return nil |
| } |
| |
| func (x *ProjectConfig) GetBuganizer() *BuganizerProject { |
| if x != nil { |
| return x.Buganizer |
| } |
| return nil |
| } |
| |
| func (x *ProjectConfig) GetBugFilingThreshold() *ImpactThreshold { |
| if x != nil { |
| return x.BugFilingThreshold |
| } |
| return nil |
| } |
| |
| func (x *ProjectConfig) GetBugFilingThresholds() []*ImpactMetricThreshold { |
| if x != nil { |
| return x.BugFilingThresholds |
| } |
| return nil |
| } |
| |
| // ProjectMetadata provides data about the project that are mostly used in ui. |
| type ProjectMetadata struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // Indicates the preferred display name for the project in the UI. |
| // Deprecated: not used anymore. |
| DisplayName string `protobuf:"bytes,1,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *ProjectMetadata) Reset() { |
| *x = ProjectMetadata{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[1] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *ProjectMetadata) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*ProjectMetadata) ProtoMessage() {} |
| |
| func (x *ProjectMetadata) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[1] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use ProjectMetadata.ProtoReflect.Descriptor instead. |
| func (*ProjectMetadata) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{1} |
| } |
| |
| func (x *ProjectMetadata) GetDisplayName() string { |
| if x != nil { |
| return x.DisplayName |
| } |
| return "" |
| } |
| |
| // Settings related to metrics used to measure cluster impact. |
| type Metrics struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // Overrides to the default metrics configuration for a project. |
| Overrides []*Metrics_MetricOverride `protobuf:"bytes,1,rep,name=overrides,proto3" json:"overrides,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *Metrics) Reset() { |
| *x = Metrics{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[2] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *Metrics) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*Metrics) ProtoMessage() {} |
| |
| func (x *Metrics) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[2] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use Metrics.ProtoReflect.Descriptor instead. |
| func (*Metrics) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{2} |
| } |
| |
| func (x *Metrics) GetOverrides() []*Metrics_MetricOverride { |
| if x != nil { |
| return x.Overrides |
| } |
| return nil |
| } |
| |
| // Settings related to bug management. |
| type BugManagement struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // Disables creation of comments on bugs when LUCI Analysis successfully |
| // handles duplicate bugs by merging/updating failure association rules. |
| // |
| // This setting does not prevent the creation of comments in response |
| // to errors handling duplicate bugs. |
| DisableDuplicateBugComments bool `protobuf:"varint,1,opt,name=disable_duplicate_bug_comments,json=disableDuplicateBugComments,proto3" json:"disable_duplicate_bug_comments,omitempty"` |
| // The set of policies which control the (re-)opening, closure and |
| // prioritization of bugs under the control of LUCI Analysis. |
| Policies []*BugManagementPolicy `protobuf:"bytes,2,rep,name=policies,proto3" json:"policies,omitempty"` |
| // The default bug system to route new bugs to, when the bug system and |
| // component could not be automatically detected from a test metadata. |
| DefaultBugSystem BugSystem `protobuf:"varint,3,opt,name=default_bug_system,json=defaultBugSystem,proto3,enum=luci.analysis.config.BugSystem" json:"default_bug_system,omitempty"` |
| // Buganizer-specific bug filing configuration. |
| Buganizer *BuganizerProject `protobuf:"bytes,4,opt,name=buganizer,proto3" json:"buganizer,omitempty"` |
| // Monorail-specific bug filing configuration. |
| Monorail *MonorailProject `protobuf:"bytes,5,opt,name=monorail,proto3" json:"monorail,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *BugManagement) Reset() { |
| *x = BugManagement{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[3] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *BugManagement) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*BugManagement) ProtoMessage() {} |
| |
| func (x *BugManagement) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[3] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use BugManagement.ProtoReflect.Descriptor instead. |
| func (*BugManagement) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{3} |
| } |
| |
| func (x *BugManagement) GetDisableDuplicateBugComments() bool { |
| if x != nil { |
| return x.DisableDuplicateBugComments |
| } |
| return false |
| } |
| |
| func (x *BugManagement) GetPolicies() []*BugManagementPolicy { |
| if x != nil { |
| return x.Policies |
| } |
| return nil |
| } |
| |
| func (x *BugManagement) GetDefaultBugSystem() BugSystem { |
| if x != nil { |
| return x.DefaultBugSystem |
| } |
| return BugSystem_BUG_SYSTEM_UNSPECIFIED |
| } |
| |
| func (x *BugManagement) GetBuganizer() *BuganizerProject { |
| if x != nil { |
| return x.Buganizer |
| } |
| return nil |
| } |
| |
| func (x *BugManagement) GetMonorail() *MonorailProject { |
| if x != nil { |
| return x.Monorail |
| } |
| return nil |
| } |
| |
| // A bug management policy in LUCI Analysis. |
| // |
| // Bug management policies control when and how bugs are automatically |
| // opened, prioritised, and verified as fixed. Each policy has a user-visible |
| // identity in the UI and can post custom instructions on the bug. |
| // |
| // LUCI Analysis avoids filing multiple bugs for the same failures by |
| // allowing multiple policies to activate on the same failure association |
| // rule. The bug associated with a rule will only be verified if all policies |
| // have de-activated. |
| type BugManagementPolicy struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // A unique identifier for the bug management policy. |
| // |
| // Policies are stateful in that LUCI Analysis tracks which bugs have met the |
| // activation condition on the policy (and not since met the deactivation |
| // condition). |
| // |
| // Changing this value changes the identity of the policy and hence results in |
| // the activation state for the policy being lost for all bugs. |
| // |
| // Valid syntax: ^[a-z]([a-z0-9-]{0,62}[a-z0-9])?$. (Syntax designed to comply |
| // with google.aip.dev/122 for resource IDs.) |
| Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` |
| // The owners of the policy, who can be contacted if there are issues/concerns |
| // about the policy. Each item in the list should be an @google.com email |
| // address. At least one owner (preferably a group) is required. |
| Owners []string `protobuf:"bytes,2,rep,name=owners,proto3" json:"owners,omitempty"` |
| // A short one-line description for the problem the policy identifies, which |
| // will appear on the UI and in bugs comments. This is a sentence fragment |
| // and not a sentence, so please do NOT include a full stop and or starting |
| // capital letter. |
| // |
| // For example, "test variant(s) are being exonerated in presubmit". |
| HumanReadableName string `protobuf:"bytes,3,opt,name=human_readable_name,json=humanReadableName,proto3" json:"human_readable_name,omitempty"` |
| // The priority of the problem this policy defines. |
| // |
| // If: |
| // - the priority of the bug associated with a rule |
| // differs from this priority, and |
| // - the policy is activate on the rule (see `metrics`), and |
| // - LUCI Analysis is controlling the priority of the bug |
| // (the "Update bug priority" switch on the rule is enabled), |
| // |
| // the priority of the bug will be updated to match this priority. |
| // |
| // Where are there multiple policies active on the same rule, |
| // the highest priority (of all active policies) will be used. |
| // |
| // For monorail projects, the buganizer priority will be converted to the |
| // equivalent monorail priority (P0 is converted to Pri-0, P1 to Pri-1, |
| // P2 to Pri-2, etc.) until monorail is turned down. |
| Priority BuganizerPriority `protobuf:"varint,4,opt,name=priority,proto3,enum=luci.analysis.config.BuganizerPriority" json:"priority,omitempty"` |
| // The set of metrics which will control activation of the bug-filing policy. |
| // If a policy activates on a suggested cluster, a new bug will be filed. |
| // If a policy activates on an existing rule cluster, the bug will be |
| // updated. |
| // |
| // The policy will activate if the activation threshold is met on *ANY* |
| // metric, and will de-activate only if the deactivation threshold is met |
| // on *ALL* metrics. |
| // |
| // Activation on suggested clusters will be based on the metric values after |
| // excluding failures for which a bug has already been filed. This is to |
| // avoid duplicate bug filing. |
| Metrics []*BugManagementPolicy_Metric `protobuf:"bytes,5,rep,name=metrics,proto3" json:"metrics,omitempty"` |
| // Expanatory text of the problem the policy identified, shown on the |
| // user interface when the user requests more information. Required. |
| Explanation *BugManagementPolicy_Explanation `protobuf:"bytes,6,opt,name=explanation,proto3" json:"explanation,omitempty"` |
| // Settings which affect the contents of a bug for a policy has activated. |
| BugTemplate *BugManagementPolicy_BugTemplate `protobuf:"bytes,7,opt,name=bug_template,json=bugTemplate,proto3" json:"bug_template,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *BugManagementPolicy) Reset() { |
| *x = BugManagementPolicy{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[4] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *BugManagementPolicy) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*BugManagementPolicy) ProtoMessage() {} |
| |
| func (x *BugManagementPolicy) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[4] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use BugManagementPolicy.ProtoReflect.Descriptor instead. |
| func (*BugManagementPolicy) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{4} |
| } |
| |
| func (x *BugManagementPolicy) GetId() string { |
| if x != nil { |
| return x.Id |
| } |
| return "" |
| } |
| |
| func (x *BugManagementPolicy) GetOwners() []string { |
| if x != nil { |
| return x.Owners |
| } |
| return nil |
| } |
| |
| func (x *BugManagementPolicy) GetHumanReadableName() string { |
| if x != nil { |
| return x.HumanReadableName |
| } |
| return "" |
| } |
| |
| func (x *BugManagementPolicy) GetPriority() BuganizerPriority { |
| if x != nil { |
| return x.Priority |
| } |
| return BuganizerPriority_BUGANIZER_PRIORITY_UNSPECIFIED |
| } |
| |
| func (x *BugManagementPolicy) GetMetrics() []*BugManagementPolicy_Metric { |
| if x != nil { |
| return x.Metrics |
| } |
| return nil |
| } |
| |
| func (x *BugManagementPolicy) GetExplanation() *BugManagementPolicy_Explanation { |
| if x != nil { |
| return x.Explanation |
| } |
| return nil |
| } |
| |
| func (x *BugManagementPolicy) GetBugTemplate() *BugManagementPolicy_BugTemplate { |
| if x != nil { |
| return x.BugTemplate |
| } |
| return nil |
| } |
| |
| // Deprecated. No longer has any effect. Retained for textproto |
| // compatibility only. |
| type ImpactThreshold struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| TestResultsFailed *MetricThreshold `protobuf:"bytes,4,opt,name=test_results_failed,json=testResultsFailed,proto3" json:"test_results_failed,omitempty"` |
| TestRunsFailed *MetricThreshold `protobuf:"bytes,5,opt,name=test_runs_failed,json=testRunsFailed,proto3" json:"test_runs_failed,omitempty"` |
| PresubmitRunsFailed *MetricThreshold `protobuf:"bytes,6,opt,name=presubmit_runs_failed,json=presubmitRunsFailed,proto3" json:"presubmit_runs_failed,omitempty"` |
| CriticalFailuresExonerated *MetricThreshold `protobuf:"bytes,7,opt,name=critical_failures_exonerated,json=criticalFailuresExonerated,proto3" json:"critical_failures_exonerated,omitempty"` |
| UnexpectedFailures_1D *int64 `protobuf:"varint,1,opt,name=unexpected_failures_1d,json=unexpectedFailures1d,proto3,oneof" json:"unexpected_failures_1d,omitempty"` |
| UnexpectedFailures_3D *int64 `protobuf:"varint,2,opt,name=unexpected_failures_3d,json=unexpectedFailures3d,proto3,oneof" json:"unexpected_failures_3d,omitempty"` |
| UnexpectedFailures_7D *int64 `protobuf:"varint,3,opt,name=unexpected_failures_7d,json=unexpectedFailures7d,proto3,oneof" json:"unexpected_failures_7d,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *ImpactThreshold) Reset() { |
| *x = ImpactThreshold{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[5] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *ImpactThreshold) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*ImpactThreshold) ProtoMessage() {} |
| |
| func (x *ImpactThreshold) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[5] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use ImpactThreshold.ProtoReflect.Descriptor instead. |
| func (*ImpactThreshold) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{5} |
| } |
| |
| func (x *ImpactThreshold) GetTestResultsFailed() *MetricThreshold { |
| if x != nil { |
| return x.TestResultsFailed |
| } |
| return nil |
| } |
| |
| func (x *ImpactThreshold) GetTestRunsFailed() *MetricThreshold { |
| if x != nil { |
| return x.TestRunsFailed |
| } |
| return nil |
| } |
| |
| func (x *ImpactThreshold) GetPresubmitRunsFailed() *MetricThreshold { |
| if x != nil { |
| return x.PresubmitRunsFailed |
| } |
| return nil |
| } |
| |
| func (x *ImpactThreshold) GetCriticalFailuresExonerated() *MetricThreshold { |
| if x != nil { |
| return x.CriticalFailuresExonerated |
| } |
| return nil |
| } |
| |
| func (x *ImpactThreshold) GetUnexpectedFailures_1D() int64 { |
| if x != nil && x.UnexpectedFailures_1D != nil { |
| return *x.UnexpectedFailures_1D |
| } |
| return 0 |
| } |
| |
| func (x *ImpactThreshold) GetUnexpectedFailures_3D() int64 { |
| if x != nil && x.UnexpectedFailures_3D != nil { |
| return *x.UnexpectedFailures_3D |
| } |
| return 0 |
| } |
| |
| func (x *ImpactThreshold) GetUnexpectedFailures_7D() int64 { |
| if x != nil && x.UnexpectedFailures_7D != nil { |
| return *x.UnexpectedFailures_7D |
| } |
| return 0 |
| } |
| |
| // ImpactMetricThreshold specifies a condition on a cluster's impact metric. |
| type ImpactMetricThreshold struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // The id of the impact metric. |
| // e.g. |
| // human-cls-failed-presubmit: The number of presubmit runs that failed. |
| // critical-failures-exonerated: The number of test failures on critical |
| // |
| // builders that were exonerated with an |
| // exoneration reason other than NOT_CRITICAL. |
| // |
| // test-runs-failed: The number of test runs that failed. |
| // |
| // A test run (also known as a 'shard' (chromium) or |
| // 'task' (Chrome OS)) is considered failed if all tries of |
| // test(s) in it unexpectedly failed. The failed test run is |
| // attributed to the last failure of each of the test(s) |
| // that failed on all tries. |
| // |
| // failures: The number of test results that were unexpected failures. |
| // |
| // Full list of available metrics here: |
| // https://source.chromium.org/chromium/infra/infra/+/main:go/src/go.chromium.org/luci/analysis/internal/analysis/metrics/metrics.go |
| MetricId string `protobuf:"bytes,1,opt,name=metric_id,json=metricId,proto3" json:"metric_id,omitempty"` |
| // The thresholds against a metric. |
| Threshold *MetricThreshold `protobuf:"bytes,2,opt,name=threshold,proto3" json:"threshold,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *ImpactMetricThreshold) Reset() { |
| *x = ImpactMetricThreshold{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[6] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *ImpactMetricThreshold) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*ImpactMetricThreshold) ProtoMessage() {} |
| |
| func (x *ImpactMetricThreshold) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[6] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use ImpactMetricThreshold.ProtoReflect.Descriptor instead. |
| func (*ImpactMetricThreshold) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{6} |
| } |
| |
| func (x *ImpactMetricThreshold) GetMetricId() string { |
| if x != nil { |
| return x.MetricId |
| } |
| return "" |
| } |
| |
| func (x *ImpactMetricThreshold) GetThreshold() *MetricThreshold { |
| if x != nil { |
| return x.Threshold |
| } |
| return nil |
| } |
| |
| // MetricThreshold specifies thresholds for a particular metric. |
| // The threshold is considered satisfied if any of the individual metric |
| // thresholds is met or exceeded (i.e. if multiple thresholds are set, they |
| // are combined using an OR-semantic). If no threshold is set, the threshold |
| // as a whole is unsatisfiable. |
| type MetricThreshold struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // The threshold for one day. |
| OneDay *int64 `protobuf:"varint,1,opt,name=one_day,json=oneDay,proto3,oneof" json:"one_day,omitempty"` |
| // The threshold for three day. |
| ThreeDay *int64 `protobuf:"varint,2,opt,name=three_day,json=threeDay,proto3,oneof" json:"three_day,omitempty"` |
| // The threshold for seven days. |
| SevenDay *int64 `protobuf:"varint,3,opt,name=seven_day,json=sevenDay,proto3,oneof" json:"seven_day,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *MetricThreshold) Reset() { |
| *x = MetricThreshold{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[7] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *MetricThreshold) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*MetricThreshold) ProtoMessage() {} |
| |
| func (x *MetricThreshold) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[7] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use MetricThreshold.ProtoReflect.Descriptor instead. |
| func (*MetricThreshold) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{7} |
| } |
| |
| func (x *MetricThreshold) GetOneDay() int64 { |
| if x != nil && x.OneDay != nil { |
| return *x.OneDay |
| } |
| return 0 |
| } |
| |
| func (x *MetricThreshold) GetThreeDay() int64 { |
| if x != nil && x.ThreeDay != nil { |
| return *x.ThreeDay |
| } |
| return 0 |
| } |
| |
| func (x *MetricThreshold) GetSevenDay() int64 { |
| if x != nil && x.SevenDay != nil { |
| return *x.SevenDay |
| } |
| return 0 |
| } |
| |
| // MonorailProject describes the configuration to use when filing bugs |
| // into a given monorail project. |
| type MonorailProject struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // The monorail project being described. |
| // E.g. "chromium". |
| Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` |
| // The field values to use when creating new bugs. |
| // For example, on chromium issue tracker, there is a manadatory |
| // issue type field (field 10), which must be set to "Bug". |
| DefaultFieldValues []*MonorailFieldValue `protobuf:"bytes,2,rep,name=default_field_values,json=defaultFieldValues,proto3" json:"default_field_values,omitempty"` |
| // The ID of the issue's priority field. You can find this by visiting |
| // https://monorail-prod.appspot.com/p/<project>/adminLabels, scrolling |
| // down to Custom fields and finding the ID of the field you wish to set. |
| // |
| // This field must support the values: "Pri-0", "Pri-1", "Pri-2", "Pri-3". |
| PriorityFieldId int64 `protobuf:"varint,3,opt,name=priority_field_id,json=priorityFieldId,proto3" json:"priority_field_id,omitempty"` |
| // Deprecated. No longer has any effect. Retained for textproto |
| // compatibility only. Use bug_management.policies instead. |
| Priorities []*MonorailPriority `protobuf:"bytes,4,rep,name=priorities,proto3" json:"priorities,omitempty"` |
| // Deprecated. No longer has any effect. Retained for textproto |
| // compatibility only. |
| PriorityHysteresisPercent int64 `protobuf:"varint,5,opt,name=priority_hysteresis_percent,json=priorityHysteresisPercent,proto3" json:"priority_hysteresis_percent,omitempty"` |
| // The prefix that should appear when displaying bugs from the |
| // given bug tracking system. E.g. "crbug.com" or "fxbug.dev". |
| // If no prefix is specified, only the bug number will appear. |
| // Otherwise, the supplifed prefix will appear, followed by a |
| // forward slash ("/"), followed by the bug number. |
| // Valid prefixes match `^[a-z0-9\-.]{0,64}$`. |
| DisplayPrefix string `protobuf:"bytes,6,opt,name=display_prefix,json=displayPrefix,proto3" json:"display_prefix,omitempty"` |
| // The preferred hostname to use in links to monorail. For example, |
| // "bugs.chromium.org" or "bugs.fuchsia.dev". |
| MonorailHostname string `protobuf:"bytes,7,opt,name=monorail_hostname,json=monorailHostname,proto3" json:"monorail_hostname,omitempty"` |
| // Whether the Restrict-View-Google tag should be omitted on new |
| // auto-filed bugs. This makes those bugs publically visible. |
| // If unset, defaults to filing with Restrict-View-Google. |
| FileWithoutRestrictViewGoogle bool `protobuf:"varint,8,opt,name=file_without_restrict_view_google,json=fileWithoutRestrictViewGoogle,proto3" json:"file_without_restrict_view_google,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *MonorailProject) Reset() { |
| *x = MonorailProject{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[8] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *MonorailProject) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*MonorailProject) ProtoMessage() {} |
| |
| func (x *MonorailProject) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[8] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use MonorailProject.ProtoReflect.Descriptor instead. |
| func (*MonorailProject) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{8} |
| } |
| |
| func (x *MonorailProject) GetProject() string { |
| if x != nil { |
| return x.Project |
| } |
| return "" |
| } |
| |
| func (x *MonorailProject) GetDefaultFieldValues() []*MonorailFieldValue { |
| if x != nil { |
| return x.DefaultFieldValues |
| } |
| return nil |
| } |
| |
| func (x *MonorailProject) GetPriorityFieldId() int64 { |
| if x != nil { |
| return x.PriorityFieldId |
| } |
| return 0 |
| } |
| |
| func (x *MonorailProject) GetPriorities() []*MonorailPriority { |
| if x != nil { |
| return x.Priorities |
| } |
| return nil |
| } |
| |
| func (x *MonorailProject) GetPriorityHysteresisPercent() int64 { |
| if x != nil { |
| return x.PriorityHysteresisPercent |
| } |
| return 0 |
| } |
| |
| func (x *MonorailProject) GetDisplayPrefix() string { |
| if x != nil { |
| return x.DisplayPrefix |
| } |
| return "" |
| } |
| |
| func (x *MonorailProject) GetMonorailHostname() string { |
| if x != nil { |
| return x.MonorailHostname |
| } |
| return "" |
| } |
| |
| func (x *MonorailProject) GetFileWithoutRestrictViewGoogle() bool { |
| if x != nil { |
| return x.FileWithoutRestrictViewGoogle |
| } |
| return false |
| } |
| |
| // MonorailFieldValue describes a monorail field/value pair. |
| type MonorailFieldValue struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // The ID of the field to set. You can find this by visiting |
| // https://monorail-prod.appspot.com/p/<project>/adminLabels, scrolling |
| // down to Custom fields and finding the ID of the field you wish to set. |
| FieldId int64 `protobuf:"varint,1,opt,name=field_id,json=fieldId,proto3" json:"field_id,omitempty"` |
| // The field value. Values are encoded according to the field type: |
| // - Enumeration types: the string enumeration value (e.g. "Bug"). |
| // - Integer types: the integer, converted to a string (e.g. "1052"). |
| // - String types: the value, included verbatim. |
| // - User types: the user's resource name (e.g. "users/2627516260"). |
| // User IDs can be identified by looking at the people listing for a |
| // project: https://monorail-prod.appspot.com/p/<project>/people/list. |
| // The User ID is included in the URL as u=<number> when clicking into |
| // the page for a particular user. For example, "user/3816576959" is |
| // https://monorail-prod.appspot.com/p/chromium/people/detail?u=3816576959. |
| // - Date types: the number of seconds since epoch, as a string |
| // (e.g. "1609459200" for 1 January 2021). |
| // - URL type: the URL value, as a string (e.g. "https://www.google.com/"). |
| // |
| // The source of truth for mapping of field types to values is as |
| // defined in the Monorail v3 API, found here: |
| // https://source.chromium.org/chromium/infra/infra/+/main:appengine/monorail/api/v3/api_proto/issue_objects.proto?q=%22message%20FieldValue%22 |
| Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *MonorailFieldValue) Reset() { |
| *x = MonorailFieldValue{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[9] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *MonorailFieldValue) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*MonorailFieldValue) ProtoMessage() {} |
| |
| func (x *MonorailFieldValue) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[9] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use MonorailFieldValue.ProtoReflect.Descriptor instead. |
| func (*MonorailFieldValue) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{9} |
| } |
| |
| func (x *MonorailFieldValue) GetFieldId() int64 { |
| if x != nil { |
| return x.FieldId |
| } |
| return 0 |
| } |
| |
| func (x *MonorailFieldValue) GetValue() string { |
| if x != nil { |
| return x.Value |
| } |
| return "" |
| } |
| |
| // Deprecated. No longer has any effect. Retained for textproto |
| // compatibility only. |
| type MonorailPriority struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| Priority string `protobuf:"bytes,1,opt,name=priority,proto3" json:"priority,omitempty"` |
| Threshold *ImpactThreshold `protobuf:"bytes,2,opt,name=threshold,proto3" json:"threshold,omitempty"` |
| Thresholds []*ImpactMetricThreshold `protobuf:"bytes,3,rep,name=thresholds,proto3" json:"thresholds,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *MonorailPriority) Reset() { |
| *x = MonorailPriority{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[10] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *MonorailPriority) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*MonorailPriority) ProtoMessage() {} |
| |
| func (x *MonorailPriority) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[10] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use MonorailPriority.ProtoReflect.Descriptor instead. |
| func (*MonorailPriority) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{10} |
| } |
| |
| func (x *MonorailPriority) GetPriority() string { |
| if x != nil { |
| return x.Priority |
| } |
| return "" |
| } |
| |
| func (x *MonorailPriority) GetThreshold() *ImpactThreshold { |
| if x != nil { |
| return x.Threshold |
| } |
| return nil |
| } |
| |
| func (x *MonorailPriority) GetThresholds() []*ImpactMetricThreshold { |
| if x != nil { |
| return x.Thresholds |
| } |
| return nil |
| } |
| |
| // Configurations per realm. |
| type RealmConfig struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // Name of the realm. |
| // |
| // Must match `^[a-z0-9_\.\-/]{1,400}$`. |
| // Must not contain the project part. I.e. for "chromium:ci" realm the value |
| // here must be "ci". |
| Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` |
| // Test variant analysis configurations for the realm. |
| TestVariantAnalysis *TestVariantAnalysisConfig `protobuf:"bytes,2,opt,name=test_variant_analysis,json=testVariantAnalysis,proto3" json:"test_variant_analysis,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *RealmConfig) Reset() { |
| *x = RealmConfig{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[11] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *RealmConfig) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*RealmConfig) ProtoMessage() {} |
| |
| func (x *RealmConfig) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[11] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use RealmConfig.ProtoReflect.Descriptor instead. |
| func (*RealmConfig) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{11} |
| } |
| |
| func (x *RealmConfig) GetName() string { |
| if x != nil { |
| return x.Name |
| } |
| return "" |
| } |
| |
| func (x *RealmConfig) GetTestVariantAnalysis() *TestVariantAnalysisConfig { |
| if x != nil { |
| return x.TestVariantAnalysis |
| } |
| return nil |
| } |
| |
| // Configuration for how test results are clustered. |
| type Clustering struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // Rules used to cluster test results by test name. |
| // The order of rules matters; the first matching rule will be used |
| // to cluster a given test result. |
| // |
| // If no rule matches, the test results will be clustered on the |
| // full test name. This corresponds approximately to the rule: |
| // |
| // { |
| // name: "Full test name" |
| // pattern: "^(?P<testname>.*)$" |
| // like_template: "${testname}" |
| // } |
| TestNameRules []*TestNameClusteringRule `protobuf:"bytes,1,rep,name=test_name_rules,json=testNameRules,proto3" json:"test_name_rules,omitempty"` |
| // Regular expressions used to mask out part of a failure reason |
| // prior to clustering. |
| // |
| // The process of generating the clustering key is: |
| // 1. All '%', '_' and '\' characters in the failure reason are |
| // escaped to generate a SQL LIKE expression that matches the |
| // failure reason literally. |
| // 2. Regular expressions are run over the escaped failure reason |
| // one by one to identify parts of the failure reason to mask |
| // out (replace by a SQL LIKE wildcard match). |
| // 3. The clustering key is used in the failure association rule |
| // of a newly field bug, or hashed to generate the clustering |
| // key. |
| // |
| // For regular expression run against the failure reason, |
| // the part of the reason that matches the first (capturing) |
| // subexpression is masked out in the reason cluster. |
| // All non-overlapping matches are replaced. |
| // |
| // For example, given the masking expression: |
| // "^\\[Fixture failure\\] (\\w+):" |
| // The failure reason: |
| // `[Fixture failure] myFixture: some_error` |
| // will be escaped to (in step 1): |
| // `[Fixture failure] myFixture: some\_error` |
| // and will yield the following output after masking (step 2): |
| // `[Fixture failure] %: some\_error` |
| // |
| // Masking expressions are applied in the order that they appear |
| // in the list. |
| ReasonMaskPatterns []string `protobuf:"bytes,2,rep,name=reason_mask_patterns,json=reasonMaskPatterns,proto3" json:"reason_mask_patterns,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *Clustering) Reset() { |
| *x = Clustering{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[12] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *Clustering) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*Clustering) ProtoMessage() {} |
| |
| func (x *Clustering) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[12] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use Clustering.ProtoReflect.Descriptor instead. |
| func (*Clustering) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{12} |
| } |
| |
| func (x *Clustering) GetTestNameRules() []*TestNameClusteringRule { |
| if x != nil { |
| return x.TestNameRules |
| } |
| return nil |
| } |
| |
| func (x *Clustering) GetReasonMaskPatterns() []string { |
| if x != nil { |
| return x.ReasonMaskPatterns |
| } |
| return nil |
| } |
| |
| // A rule used to cluster a test result by test name. |
| type TestNameClusteringRule struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // A human-readable name for the rule. This should be unique for each rule. |
| // This may be used by LUCI Analysis to explain why it chose to cluster the |
| // test name in this way. |
| Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` |
| // The regular expression describing which test names should be clustered |
| // by this rule. |
| // |
| // Example. |
| // |
| // Assume our project uploads google test (gtest) results with the test |
| // name prefix "gtest://". |
| // If want to cluster value-parameterized google tests |
| // together based on the test suite and test case name (ignoring |
| // the value parameter), we may use a pattern like: |
| // "^gtest://(\w+/)?(?P<testcase>\w+\.\w+)/\w+$" |
| // |
| // This will allow us to cluster test names like: |
| // "gtest://InstantiationOne/ColorSpaceTest.testNullTransform/0" |
| // "gtest://InstantiationOne/ColorSpaceTest.testNullTransform/1" |
| // "gtest://InstantiationTwo/ColorSpaceTest.testNullTransform/0" |
| // together. |
| // |
| // See https://github.com/google/googletest/blob/main/docs/advanced.md#how-to-write-value-parameterized-tests |
| // to understand value-parameterised google tests. |
| // |
| // Use ?P<name> to name capture groups, so their values can be used in |
| // like_template below. |
| Pattern string `protobuf:"bytes,2,opt,name=pattern,proto3" json:"pattern,omitempty"` |
| // The template used to generate a LIKE expression on test names |
| // that defines the test name cluster identified by this rule. |
| // |
| // This like expression has two purposes: |
| // (1) If the test name cluster is large enough to justify the |
| // |
| // creation of a bug cluster, the like expression is used to |
| // generate a failure association rule of the following form: |
| // test LIKE "<evaluated like_template>" |
| // |
| // (2) A hash of the expression is used as the clustering key for the |
| // |
| // test name-based suggested cluster. This generally has the desired |
| // clustering behaviour, i.e. the parts of the test name which |
| // are important enough to included in the LIKE expression for (1) |
| // are also those on which clustering should occur. |
| // |
| // As is usual for LIKE expressions, the template can contain |
| // the following operators to do wildcard matching: |
| // * '%' for wildcard match of an arbitrary number of characters, and |
| // * '_' for single character wildcard match. |
| // |
| // To match literal '%' or '_', escape the operator with a '\', |
| // i.e. use "\%" or "\_" to match literal '%' and '_' respectively. |
| // To match literal '\', you should use "\\". |
| // |
| // The template can refer to parts of the test name matched by |
| // the rule pattern using ${name}, where name refers to the capture |
| // group (see pattern). To insert the literal '$', the sequence '$$' |
| // should be used. |
| // |
| // Example. |
| // |
| // Assume our project uploads google test (gtest) results with the test |
| // name prefix "gtest://". Further assume we used the pattern: |
| // "^gtest://(\w+/)?(?P<testcase>\w+\.\w+)/\w+$" |
| // |
| // We might use the following like_template: |
| // "gtest://%${testcase}%" |
| // |
| // When instantiated for a value-parameterised test, e.g. |
| // "gtest://InstantiationOne/ColorSpaceTest.testNullTransform/0", |
| // the result would be a failure association rule like: |
| // test LIKE "gtest://%ColorSpaceTest.testNullTransform%" |
| // |
| // Note the use of ${testcase} to refer to the testname capture group |
| // specified in the pattern example. |
| // |
| // See https://github.com/google/googletest/blob/main/docs/advanced.md#how-to-write-value-parameterized-tests |
| // to understand value-parameterised google tests. |
| // |
| // It is known that not all clusters can be precisely matched by |
| // a LIKE expression. Nonetheless, LUCI Analysis prefers LIKE expressions |
| // as they are easier to comprehend and modify by users, and in |
| // most cases, the added precision is not required. |
| // |
| // As such, your rule should try to ensure the generated LIKE statement |
| // captures your clustering logic as best it can. Your LIKE expression |
| // MUST match all test names matched by your regex pattern, and MAY |
| // capture additional test names (though this is preferably minimised, |
| // to reduce differences between the suggested clusters and eventual |
| // bug clusters). |
| // |
| // LUCI Analysis will automatically escape any '%' '_' and '\' in parts of |
| // the matched test name before substitution to ensure captured parts |
| // of the test name are matched literally and not interpreted. |
| LikeTemplate string `protobuf:"bytes,3,opt,name=like_template,json=likeTemplate,proto3" json:"like_template,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *TestNameClusteringRule) Reset() { |
| *x = TestNameClusteringRule{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[13] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *TestNameClusteringRule) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*TestNameClusteringRule) ProtoMessage() {} |
| |
| func (x *TestNameClusteringRule) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[13] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use TestNameClusteringRule.ProtoReflect.Descriptor instead. |
| func (*TestNameClusteringRule) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{13} |
| } |
| |
| func (x *TestNameClusteringRule) GetName() string { |
| if x != nil { |
| return x.Name |
| } |
| return "" |
| } |
| |
| func (x *TestNameClusteringRule) GetPattern() string { |
| if x != nil { |
| return x.Pattern |
| } |
| return "" |
| } |
| |
| func (x *TestNameClusteringRule) GetLikeTemplate() string { |
| if x != nil { |
| return x.LikeTemplate |
| } |
| return "" |
| } |
| |
| // Defines the required details for a Buganizer component. |
| type BuganizerComponent struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // The id of the component that we will use to file bugs in. |
| Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *BuganizerComponent) Reset() { |
| *x = BuganizerComponent{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[14] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *BuganizerComponent) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*BuganizerComponent) ProtoMessage() {} |
| |
| func (x *BuganizerComponent) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[14] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use BuganizerComponent.ProtoReflect.Descriptor instead. |
| func (*BuganizerComponent) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{14} |
| } |
| |
| func (x *BuganizerComponent) GetId() int64 { |
| if x != nil { |
| return x.Id |
| } |
| return 0 |
| } |
| |
| // The Buganizer configuration, this should only be |
| // used when the bug tracking system ins Buganizer. |
| type BuganizerProject struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // The default Buganizer component. |
| // This component will be used if we failed to find |
| // a component for a cluster. |
| DefaultComponent *BuganizerComponent `protobuf:"bytes,1,opt,name=default_component,json=defaultComponent,proto3" json:"default_component,omitempty"` |
| // Deprecated. No longer has any effect. Retained for textproto |
| // compatibility only. |
| PriorityHysteresisPercent int64 `protobuf:"varint,2,opt,name=priority_hysteresis_percent,json=priorityHysteresisPercent,proto3" json:"priority_hysteresis_percent,omitempty"` |
| // Deprecated. No longer has any effect. Retained for textproto |
| // compatibility only. Use bug_management.policies instead. |
| PriorityMappings []*BuganizerProject_PriorityMapping `protobuf:"bytes,3,rep,name=priority_mappings,json=priorityMappings,proto3" json:"priority_mappings,omitempty"` |
| // Whether the LIMIT_VIEW_TRUSTED access level should be omitted |
| // on new auto-filed bugs and LIMIT_NONE access level should be set. |
| // This makes those bugs visible to all those who can see bugs |
| // in a given component. |
| FileWithoutLimitViewTrusted bool `protobuf:"varint,4,opt,name=file_without_limit_view_trusted,json=fileWithoutLimitViewTrusted,proto3" json:"file_without_limit_view_trusted,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *BuganizerProject) Reset() { |
| *x = BuganizerProject{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[15] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *BuganizerProject) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*BuganizerProject) ProtoMessage() {} |
| |
| func (x *BuganizerProject) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[15] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use BuganizerProject.ProtoReflect.Descriptor instead. |
| func (*BuganizerProject) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{15} |
| } |
| |
| func (x *BuganizerProject) GetDefaultComponent() *BuganizerComponent { |
| if x != nil { |
| return x.DefaultComponent |
| } |
| return nil |
| } |
| |
| func (x *BuganizerProject) GetPriorityHysteresisPercent() int64 { |
| if x != nil { |
| return x.PriorityHysteresisPercent |
| } |
| return 0 |
| } |
| |
| func (x *BuganizerProject) GetPriorityMappings() []*BuganizerProject_PriorityMapping { |
| if x != nil { |
| return x.PriorityMappings |
| } |
| return nil |
| } |
| |
| func (x *BuganizerProject) GetFileWithoutLimitViewTrusted() bool { |
| if x != nil { |
| return x.FileWithoutLimitViewTrusted |
| } |
| return false |
| } |
| |
| // Criteria used to determine test stability. This criteria is used |
| // to inform test exoneration in presubmit via the |
| // TestVariants.QueryStability RPC. |
| // |
| // Criteria is applied using a data source which contains |
| // the last 14 days' of test result data for all test variants, |
| // with certain filterings applied. |
| // |
| // See go/luci-exoneration-v2 as well each criteria below for more details. |
| type TestStabilityCriteria struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // The failure rate criteria to apply. Mandatory. |
| FailureRate *TestStabilityCriteria_FailureRateCriteria `protobuf:"bytes,1,opt,name=failure_rate,json=failureRate,proto3" json:"failure_rate,omitempty"` |
| // The flake rate criteria to apply. Mandatory. |
| FlakeRate *TestStabilityCriteria_FlakeRateCriteria `protobuf:"bytes,2,opt,name=flake_rate,json=flakeRate,proto3" json:"flake_rate,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *TestStabilityCriteria) Reset() { |
| *x = TestStabilityCriteria{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[16] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *TestStabilityCriteria) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*TestStabilityCriteria) ProtoMessage() {} |
| |
| func (x *TestStabilityCriteria) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[16] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use TestStabilityCriteria.ProtoReflect.Descriptor instead. |
| func (*TestStabilityCriteria) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{16} |
| } |
| |
| func (x *TestStabilityCriteria) GetFailureRate() *TestStabilityCriteria_FailureRateCriteria { |
| if x != nil { |
| return x.FailureRate |
| } |
| return nil |
| } |
| |
| func (x *TestStabilityCriteria) GetFlakeRate() *TestStabilityCriteria_FlakeRateCriteria { |
| if x != nil { |
| return x.FlakeRate |
| } |
| return nil |
| } |
| |
| type Metrics_MetricOverride struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // The id of the impact metric. |
| // |
| // Full list of available metrics here: |
| // https://source.chromium.org/chromium/infra/infra/+/main:go/src/go.chromium.org/luci/analysis/internal/analysis/metrics/metrics.go |
| MetricId string `protobuf:"bytes,1,opt,name=metric_id,json=metricId,proto3" json:"metric_id,omitempty"` |
| // Whether the metric should be selected by default. |
| IsDefault *bool `protobuf:"varint,2,opt,name=is_default,json=isDefault,proto3,oneof" json:"is_default,omitempty"` |
| // Controls the default sort order between metrics. By default, |
| // a list will sort by the metric with the highest sort priority, |
| // followed by the metric with second highest sort priority, |
| // and so on. |
| SortPriority *int32 `protobuf:"varint,3,opt,name=sort_priority,json=sortPriority,proto3,oneof" json:"sort_priority,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *Metrics_MetricOverride) Reset() { |
| *x = Metrics_MetricOverride{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[17] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *Metrics_MetricOverride) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*Metrics_MetricOverride) ProtoMessage() {} |
| |
| func (x *Metrics_MetricOverride) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[17] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use Metrics_MetricOverride.ProtoReflect.Descriptor instead. |
| func (*Metrics_MetricOverride) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{2, 0} |
| } |
| |
| func (x *Metrics_MetricOverride) GetMetricId() string { |
| if x != nil { |
| return x.MetricId |
| } |
| return "" |
| } |
| |
| func (x *Metrics_MetricOverride) GetIsDefault() bool { |
| if x != nil && x.IsDefault != nil { |
| return *x.IsDefault |
| } |
| return false |
| } |
| |
| func (x *Metrics_MetricOverride) GetSortPriority() int32 { |
| if x != nil && x.SortPriority != nil { |
| return *x.SortPriority |
| } |
| return 0 |
| } |
| |
| // A metric used to control activation of a bug-filing policy. |
| type BugManagementPolicy_Metric struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // The identifier of the metric. |
| // |
| // Full list of available metrics here: |
| // https://source.chromium.org/chromium/infra/infra/+/main:go/src/go.chromium.org/luci/analysis/internal/analysis/metrics/metrics.go |
| MetricId string `protobuf:"bytes,1,opt,name=metric_id,json=metricId,proto3" json:"metric_id,omitempty"` |
| // The level at which the policy activates. Activation occurs if the |
| // cluster impact meets or exceeds this threshold. |
| // MUST imply deactivation_threshold. |
| ActivationThreshold *MetricThreshold `protobuf:"bytes,2,opt,name=activation_threshold,json=activationThreshold,proto3" json:"activation_threshold,omitempty"` |
| // The minimum metric level at which the policy remains active. |
| // Deactivation occcurs if the cluster impact is below the de-activation |
| // threshold. Deactivation_threshold should be set significantly lower |
| // than activation_threshold to prevent policies repeatedly activating |
| // and deactivating due to noise in the data, e.g. less tests executed |
| // on weekends. |
| DeactivationThreshold *MetricThreshold `protobuf:"bytes,3,opt,name=deactivation_threshold,json=deactivationThreshold,proto3" json:"deactivation_threshold,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *BugManagementPolicy_Metric) Reset() { |
| *x = BugManagementPolicy_Metric{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[18] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *BugManagementPolicy_Metric) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*BugManagementPolicy_Metric) ProtoMessage() {} |
| |
| func (x *BugManagementPolicy_Metric) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[18] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use BugManagementPolicy_Metric.ProtoReflect.Descriptor instead. |
| func (*BugManagementPolicy_Metric) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{4, 0} |
| } |
| |
| func (x *BugManagementPolicy_Metric) GetMetricId() string { |
| if x != nil { |
| return x.MetricId |
| } |
| return "" |
| } |
| |
| func (x *BugManagementPolicy_Metric) GetActivationThreshold() *MetricThreshold { |
| if x != nil { |
| return x.ActivationThreshold |
| } |
| return nil |
| } |
| |
| func (x *BugManagementPolicy_Metric) GetDeactivationThreshold() *MetricThreshold { |
| if x != nil { |
| return x.DeactivationThreshold |
| } |
| return nil |
| } |
| |
| // Content displayed on the user interface, to explain the problem and |
| // guide a developer to fix it. |
| type BugManagementPolicy_Explanation struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // A longer human-readable description of the problem this policy |
| // has identified, in HTML. |
| // |
| // For example, "Test variant(s) in this cluster are being exonerated |
| // (ignored) in presubmit because they are too flaky or failing. This |
| // means they are no longer effective at preventing the breakage of |
| // the functionality the test(s) cover.". |
| // |
| // MUST be sanitised by UI before rendering. Sanitisation is only |
| // required to support simple uses of the following tags: ul, li, a. |
| ProblemHtml string `protobuf:"bytes,1,opt,name=problem_html,json=problemHtml,proto3" json:"problem_html,omitempty"` |
| // A description of how a human should go about trying to fix the |
| // problem, in HTML. |
| // |
| // For example, "<ul> |
| // <li>View recent failures</li> |
| // <li><a href="http://goto.google.com/demote-from-cq">Demote</a> the test from CQ</li> |
| // </ul>" |
| // |
| // MUST be sanitised by UI before rendering. Sanitisation is only |
| // required to support simple uses of the following tags: ul, li, a. |
| ActionHtml string `protobuf:"bytes,2,opt,name=action_html,json=actionHtml,proto3" json:"action_html,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *BugManagementPolicy_Explanation) Reset() { |
| *x = BugManagementPolicy_Explanation{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[19] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *BugManagementPolicy_Explanation) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*BugManagementPolicy_Explanation) ProtoMessage() {} |
| |
| func (x *BugManagementPolicy_Explanation) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[19] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use BugManagementPolicy_Explanation.ProtoReflect.Descriptor instead. |
| func (*BugManagementPolicy_Explanation) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{4, 1} |
| } |
| |
| func (x *BugManagementPolicy_Explanation) GetProblemHtml() string { |
| if x != nil { |
| return x.ProblemHtml |
| } |
| return "" |
| } |
| |
| func (x *BugManagementPolicy_Explanation) GetActionHtml() string { |
| if x != nil { |
| return x.ActionHtml |
| } |
| return "" |
| } |
| |
| // Settings which affect the contents of a bug for a policy has activated. |
| type BugManagementPolicy_BugTemplate struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // Text to be included in the bug comment advising of the activation of the |
| // the policy. Leave blank to post no comment. |
| // |
| // The text here will be interpreted as a template by the golang |
| // template/text library (https://pkg.go.dev/text/template). The following |
| // fields are available: |
| // - RuleURL (string): The URL of the rule page. |
| // - BugID (BugID): The system-specific bug identifier. This type |
| // exposes the following methods with no arguments: |
| // - IsBuganizer returns (bool) indicating if the bug is a buganizer bug. |
| // - IsMonorail returns (bool) indicating if the bug is a monorail bug. |
| // - MonorailProject returns (string, error) indicating the monorail |
| // project, if the bug is a monorail bug, and errors otherwise. |
| // - MonorailBugID returns (string, error) indicating the monorail |
| // bug ID, if the bug is a monorail bug, and errors otherwise. |
| // - BuganizerBugID returns (string, error) indicating the buganizer |
| // bug ID, if the bug is a buganizer bug, and errors otherwise. |
| // |
| // Model usage of BugID in a template: |
| // ``` |
| // {{if .BugID.IsBuganizer}}Buganizer bug: {{.BugID.BuganizerBugID}}{{end}} |
| // {{if .BugID.IsMonorail}}Monorail bug: {{.BugID.MonorailProject}}/{{.BugID.MonorailBugID}}{{end}} |
| // ``` |
| // |
| // As for functions, only the standard global functions are available, see: |
| // https://pkg.go.dev/text/template#hdr-Functions |
| CommentTemplate string `protobuf:"bytes,1,opt,name=comment_template,json=commentTemplate,proto3" json:"comment_template,omitempty"` |
| // Bug content options that are specific to Google issue tracker (Buganizer). |
| Buganizer *BugManagementPolicy_BugTemplate_Buganizer `protobuf:"bytes,2,opt,name=buganizer,proto3" json:"buganizer,omitempty"` |
| // Bug content options that are specific to monorail. |
| Monorail *BugManagementPolicy_BugTemplate_Monorail `protobuf:"bytes,3,opt,name=monorail,proto3" json:"monorail,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *BugManagementPolicy_BugTemplate) Reset() { |
| *x = BugManagementPolicy_BugTemplate{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[20] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *BugManagementPolicy_BugTemplate) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*BugManagementPolicy_BugTemplate) ProtoMessage() {} |
| |
| func (x *BugManagementPolicy_BugTemplate) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[20] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use BugManagementPolicy_BugTemplate.ProtoReflect.Descriptor instead. |
| func (*BugManagementPolicy_BugTemplate) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{4, 2} |
| } |
| |
| func (x *BugManagementPolicy_BugTemplate) GetCommentTemplate() string { |
| if x != nil { |
| return x.CommentTemplate |
| } |
| return "" |
| } |
| |
| func (x *BugManagementPolicy_BugTemplate) GetBuganizer() *BugManagementPolicy_BugTemplate_Buganizer { |
| if x != nil { |
| return x.Buganizer |
| } |
| return nil |
| } |
| |
| func (x *BugManagementPolicy_BugTemplate) GetMonorail() *BugManagementPolicy_BugTemplate_Monorail { |
| if x != nil { |
| return x.Monorail |
| } |
| return nil |
| } |
| |
| // Policy configuration that is specific to Google issue tracker (Buganizer). |
| type BugManagementPolicy_BugTemplate_Buganizer struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // The numeric ID of the buganizer hotlist to add the issue to. Optional. |
| // The bug is added to the hostlist when the policy transitions to |
| // activated. The issue is not removed from the hotlist if the policy is |
| // deactivated, to avoid excessive bug updates. |
| Hotlists []int64 `protobuf:"varint,1,rep,packed,name=hotlists,proto3" json:"hotlists,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *BugManagementPolicy_BugTemplate_Buganizer) Reset() { |
| *x = BugManagementPolicy_BugTemplate_Buganizer{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[21] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *BugManagementPolicy_BugTemplate_Buganizer) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*BugManagementPolicy_BugTemplate_Buganizer) ProtoMessage() {} |
| |
| func (x *BugManagementPolicy_BugTemplate_Buganizer) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[21] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use BugManagementPolicy_BugTemplate_Buganizer.ProtoReflect.Descriptor instead. |
| func (*BugManagementPolicy_BugTemplate_Buganizer) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{4, 2, 0} |
| } |
| |
| func (x *BugManagementPolicy_BugTemplate_Buganizer) GetHotlists() []int64 { |
| if x != nil { |
| return x.Hotlists |
| } |
| return nil |
| } |
| |
| // Policy configuration that is specific to monorail issue tracker. |
| type BugManagementPolicy_BugTemplate_Monorail struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // The labels to apply to the bug. |
| Labels []string `protobuf:"bytes,1,rep,name=labels,proto3" json:"labels,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *BugManagementPolicy_BugTemplate_Monorail) Reset() { |
| *x = BugManagementPolicy_BugTemplate_Monorail{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[22] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *BugManagementPolicy_BugTemplate_Monorail) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*BugManagementPolicy_BugTemplate_Monorail) ProtoMessage() {} |
| |
| func (x *BugManagementPolicy_BugTemplate_Monorail) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[22] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use BugManagementPolicy_BugTemplate_Monorail.ProtoReflect.Descriptor instead. |
| func (*BugManagementPolicy_BugTemplate_Monorail) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{4, 2, 1} |
| } |
| |
| func (x *BugManagementPolicy_BugTemplate_Monorail) GetLabels() []string { |
| if x != nil { |
| return x.Labels |
| } |
| return nil |
| } |
| |
| // Deprecated. No longer has any effect. Retained for textproto |
| // compatibility only. |
| type BuganizerProject_PriorityMapping struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| Priority BuganizerPriority `protobuf:"varint,1,opt,name=priority,proto3,enum=luci.analysis.config.BuganizerPriority" json:"priority,omitempty"` |
| Threshold *ImpactThreshold `protobuf:"bytes,2,opt,name=threshold,proto3" json:"threshold,omitempty"` |
| Thresholds []*ImpactMetricThreshold `protobuf:"bytes,3,rep,name=thresholds,proto3" json:"thresholds,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *BuganizerProject_PriorityMapping) Reset() { |
| *x = BuganizerProject_PriorityMapping{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[23] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *BuganizerProject_PriorityMapping) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*BuganizerProject_PriorityMapping) ProtoMessage() {} |
| |
| func (x *BuganizerProject_PriorityMapping) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[23] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use BuganizerProject_PriorityMapping.ProtoReflect.Descriptor instead. |
| func (*BuganizerProject_PriorityMapping) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{15, 0} |
| } |
| |
| func (x *BuganizerProject_PriorityMapping) GetPriority() BuganizerPriority { |
| if x != nil { |
| return x.Priority |
| } |
| return BuganizerPriority_BUGANIZER_PRIORITY_UNSPECIFIED |
| } |
| |
| func (x *BuganizerProject_PriorityMapping) GetThreshold() *ImpactThreshold { |
| if x != nil { |
| return x.Threshold |
| } |
| return nil |
| } |
| |
| func (x *BuganizerProject_PriorityMapping) GetThresholds() []*ImpactMetricThreshold { |
| if x != nil { |
| return x.Thresholds |
| } |
| return nil |
| } |
| |
| // The failure rate criteria detects consistently failing |
| // and highly flaky tests (e.g. 95%+ failing) by looking for |
| // a high number of failures at the queried position of the |
| // test's history. |
| // |
| // The criteria obtains from the last 14 days' of filtered test data |
| // a set of (up to) 20 test runs centered on the queried commit |
| // position (10 prior and 10 after) and applies criteria |
| // to this in various ways. |
| // The 20 test runs are sorted by commit position and then time. |
| // |
| // See go/luci-exoneration-v2 for more detail. |
| type TestStabilityCriteria_FailureRateCriteria struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // The number of unexpected test runs that must be |
| // found in a sliding window of size 10 containing the |
| // queried position to begin exoneration. |
| // 6 is a good starting value. |
| // |
| // The criteria is applied over sliding windows of size |
| // 10 around the query position. Assuming the full 20 test |
| // runs are obtained, this means 11 window positions are considered. |
| // If any window satisifes the threshold, the criteria is met |
| // and the test is considered unstable. |
| // |
| // In the event that 10 test runs cannot be found in the last |
| // 14 days of test history, a window sized to the available |
| // test runs is used but the criteria is not scaled. |
| FailureThreshold int32 `protobuf:"varint,1,opt,name=failure_threshold,json=failureThreshold,proto3" json:"failure_threshold,omitempty"` |
| // The number of consecutive unexpected test runs, which if |
| // present at the leading or trailing part of the (up to) 20 |
| // test verdicts, will trigger exoneration. |
| // 3 is a good starting value. |
| // |
| // The consecutive failures must also touch the query position. |
| // |
| // This is designed to create a fast path to exoneration for |
| // 100% failing tests which produce a strong and consistent |
| // failing signal, leveraging the statistical significance |
| // of consecutive failures. If this threshold is met, |
| // the failure_threshold above does NOT need to be met. |
| // |
| // E.g. the following scenario WILL trigger this criteria for |
| // a threshold of four or less. |
| // |
| // History: >F F F F< P P P P P P P |
| // |
| // ^ |
| // Query position |
| // |
| // The following scenario WILL NOT trigger this criteria: |
| // |
| // History:>P F F F F< P P P P P P P |
| // |
| // ^ |
| // Query position |
| // |
| // (N.B. Direction of history is irrelevant as criteria is |
| // applied symmetrically. Either the left or right could |
| // represent 'later' by commit position.) |
| ConsecutiveFailureThreshold int32 `protobuf:"varint,2,opt,name=consecutive_failure_threshold,json=consecutiveFailureThreshold,proto3" json:"consecutive_failure_threshold,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *TestStabilityCriteria_FailureRateCriteria) Reset() { |
| *x = TestStabilityCriteria_FailureRateCriteria{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[24] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *TestStabilityCriteria_FailureRateCriteria) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*TestStabilityCriteria_FailureRateCriteria) ProtoMessage() {} |
| |
| func (x *TestStabilityCriteria_FailureRateCriteria) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[24] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use TestStabilityCriteria_FailureRateCriteria.ProtoReflect.Descriptor instead. |
| func (*TestStabilityCriteria_FailureRateCriteria) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{16, 0} |
| } |
| |
| func (x *TestStabilityCriteria_FailureRateCriteria) GetFailureThreshold() int32 { |
| if x != nil { |
| return x.FailureThreshold |
| } |
| return 0 |
| } |
| |
| func (x *TestStabilityCriteria_FailureRateCriteria) GetConsecutiveFailureThreshold() int32 { |
| if x != nil { |
| return x.ConsecutiveFailureThreshold |
| } |
| return 0 |
| } |
| |
| // The flake rate criteria detects flaky tests by looking for |
| // examples where a test has obtained expected and unexpected |
| // test runs for the same sources under test. |
| // |
| // If there are more flaky source verdicts found than a threshold, |
| // the test is considered flaky. |
| // |
| // To be satisfied, ALL of the criteria must be met: |
| // - flake_threshold |
| // - flake_rate_threshold |
| // - flake_threshold_1wd |
| // To ignore criteria, set the threshold to zero. |
| type TestStabilityCriteria_FlakeRateCriteria struct { |
| state protoimpl.MessageState `protogen:"open.v1"` |
| // The minimum number of source verdicts desired |
| // for the analysis window. |
| // |
| // As standard, all source verdicts for sources |
| // +/- 7 days from the queried position are used. |
| // The conversion between time and commit position is discussed |
| // in go/luci-exoneration-v2. |
| // |
| // However, if the number of verdicts is not equal |
| // to or greater than min_window, all source verdicts |
| // from the last 14 days will be used. This is designed |
| // to prioritise adequate flake detection performance |
| // for test variants with low result volumes, at the |
| // cost of data recency. |
| // |
| // If the number of source verdicts in the last 14 days |
| // is less than min_window, then whatever source verdicts |
| // are available are still used. This is to improve |
| // detection performance on tests with a low volume of results. |
| // |
| // 100 is a good starting value. |
| MinWindow int32 `protobuf:"varint,1,opt,name=min_window,json=minWindow,proto3" json:"min_window,omitempty"` |
| // The minimum number of flaky source verdicts required |
| // to trigger the criteria. 2 is a good starting value. |
| FlakeThreshold int32 `protobuf:"varint,2,opt,name=flake_threshold,json=flakeThreshold,proto3" json:"flake_threshold,omitempty"` |
| // The minimum flake rate required to trigger the criteria, |
| // as a proportion of all source verdicts. This must be a |
| // value between 0.0 and 1.0. |
| // 0.01 (1%) is a good starting value. |
| // |
| // Note that not even the most flaky (50% flaky) test would |
| // be expected to produce more than a 25% flake rate if |
| // failures are retried once. This is because its expected |
| // outcomes are: |
| // - Pass on first try = 50% |
| // - Fail on first try, pass on second try = 25% (flaky) |
| // - Fail on both tries = 25% |
| FlakeRateThreshold float64 `protobuf:"fixed64,3,opt,name=flake_rate_threshold,json=flakeRateThreshold,proto3" json:"flake_rate_threshold,omitempty"` |
| // The minimum number of flaky source verdicts required to |
| // occur on sources within one weekday either side of the |
| // queried source position. |
| // |
| // The conversion between time and commit position is discussed |
| // in go/luci-exoneration-v2. |
| // |
| // One weekday means 24 hours on a weekday as observed in |
| // UTC, and includes any intervening weekend. For example: |
| // - if the queried source position corresponds to 8:00 UTC |
| // on Monday, the queried interval will be from 8:00 UTC |
| // the previous Friday to 8:00 UTC on the following Tuesday. |
| // - if the queried source position corresponds to 15:00 UTC |
| // on Wednesday, the queried interval will be from 15:00 UTC |
| // on Tuesday to 15:00 UTC on Thursday. |
| // - if the queried source position corresponds to 12:00 UTC |
| // on Saturday, the queried interval will be from 0:00 UTC |
| // on Friday to 0:00 UTC on Tuesday. |
| // |
| // Setting this thresold to a non-zero value may substantially |
| // desensitise flaky test detection, but offers more guarantees |
| // that exoneration will stop within a given period of time |
| // if a test is fixed. |
| FlakeThreshold_1Wd int32 `protobuf:"varint,4,opt,name=flake_threshold_1wd,json=flakeThreshold1wd,proto3" json:"flake_threshold_1wd,omitempty"` |
| unknownFields protoimpl.UnknownFields |
| sizeCache protoimpl.SizeCache |
| } |
| |
| func (x *TestStabilityCriteria_FlakeRateCriteria) Reset() { |
| *x = TestStabilityCriteria_FlakeRateCriteria{} |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[25] |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| ms.StoreMessageInfo(mi) |
| } |
| |
| func (x *TestStabilityCriteria_FlakeRateCriteria) String() string { |
| return protoimpl.X.MessageStringOf(x) |
| } |
| |
| func (*TestStabilityCriteria_FlakeRateCriteria) ProtoMessage() {} |
| |
| func (x *TestStabilityCriteria_FlakeRateCriteria) ProtoReflect() protoreflect.Message { |
| mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[25] |
| if x != nil { |
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
| if ms.LoadMessageInfo() == nil { |
| ms.StoreMessageInfo(mi) |
| } |
| return ms |
| } |
| return mi.MessageOf(x) |
| } |
| |
| // Deprecated: Use TestStabilityCriteria_FlakeRateCriteria.ProtoReflect.Descriptor instead. |
| func (*TestStabilityCriteria_FlakeRateCriteria) Descriptor() ([]byte, []int) { |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{16, 1} |
| } |
| |
| func (x *TestStabilityCriteria_FlakeRateCriteria) GetMinWindow() int32 { |
| if x != nil { |
| return x.MinWindow |
| } |
| return 0 |
| } |
| |
| func (x *TestStabilityCriteria_FlakeRateCriteria) GetFlakeThreshold() int32 { |
| if x != nil { |
| return x.FlakeThreshold |
| } |
| return 0 |
| } |
| |
| func (x *TestStabilityCriteria_FlakeRateCriteria) GetFlakeRateThreshold() float64 { |
| if x != nil { |
| return x.FlakeRateThreshold |
| } |
| return 0 |
| } |
| |
| func (x *TestStabilityCriteria_FlakeRateCriteria) GetFlakeThreshold_1Wd() int32 { |
| if x != nil { |
| return x.FlakeThreshold_1Wd |
| } |
| return 0 |
| } |
| |
| var File_go_chromium_org_luci_analysis_proto_config_project_config_proto protoreflect.FileDescriptor |
| |
| var file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDesc = string([]byte{ |
| 0x0a, 0x3f, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, |
| 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, |
| 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x70, 0x72, 0x6f, |
| 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, |
| 0x6f, 0x12, 0x14, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, |
| 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, |
| 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, |
| 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x4d, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, |
| 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, |
| 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, |
| 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, |
| 0x74, 0x5f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, |
| 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8a, 0x07, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x6a, |
| 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x50, 0x0a, 0x10, 0x70, 0x72, 0x6f, |
| 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, |
| 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, |
| 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, |
| 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x6a, |
| 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, |
| 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, |
| 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, |
| 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, |
| 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x63, 0x6c, |
| 0x75, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, |
| 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, |
| 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, |
| 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x4a, 0x0a, 0x0e, |
| 0x62, 0x75, 0x67, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x09, |
| 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, |
| 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x4d, |
| 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0d, 0x62, 0x75, 0x67, 0x4d, 0x61, |
| 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, |
| 0x69, 0x63, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x69, |
| 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, |
| 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, |
| 0x73, 0x12, 0x63, 0x0a, 0x17, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x62, 0x69, 0x6c, |
| 0x69, 0x74, 0x79, 0x5f, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x18, 0x0c, 0x20, 0x01, |
| 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, |
| 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, |
| 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x52, |
| 0x15, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x72, |
| 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x12, 0x39, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x73, |
| 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, |
| 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, |
| 0x61, 0x6c, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x72, 0x65, 0x61, 0x6c, 0x6d, |
| 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x62, 0x75, 0x67, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, |
| 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, |
| 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, |
| 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x09, 0x62, 0x75, 0x67, 0x53, 0x79, 0x73, 0x74, 0x65, |
| 0x6d, 0x12, 0x41, 0x0a, 0x08, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, |
| 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, |
| 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x6f, 0x6e, 0x6f, 0x72, |
| 0x61, 0x69, 0x6c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x6d, 0x6f, 0x6e, 0x6f, |
| 0x72, 0x61, 0x69, 0x6c, 0x12, 0x44, 0x0a, 0x09, 0x62, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, |
| 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, |
| 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, |
| 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, |
| 0x09, 0x62, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x57, 0x0a, 0x14, 0x62, 0x75, |
| 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, |
| 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, |
| 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, |
| 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, |
| 0x12, 0x62, 0x75, 0x67, 0x46, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, |
| 0x6f, 0x6c, 0x64, 0x12, 0x5f, 0x0a, 0x15, 0x62, 0x75, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x69, 0x6e, |
| 0x67, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x03, |
| 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, |
| 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, |
| 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, |
| 0x13, 0x62, 0x75, 0x67, 0x46, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, |
| 0x6f, 0x6c, 0x64, 0x73, 0x22, 0x34, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, |
| 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, |
| 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, |
| 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xf4, 0x01, 0x0a, 0x07, 0x4d, |
| 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x4a, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, |
| 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x75, 0x63, 0x69, |
| 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, |
| 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4f, |
| 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, |
| 0x65, 0x73, 0x1a, 0x9c, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4f, 0x76, 0x65, |
| 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, |
| 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, |
| 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, |
| 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x69, 0x73, 0x44, 0x65, 0x66, 0x61, |
| 0x75, 0x6c, 0x74, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x70, |
| 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, |
| 0x0c, 0x73, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x88, 0x01, 0x01, |
| 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, |
| 0x10, 0x0a, 0x0e, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, |
| 0x79, 0x22, 0xf3, 0x02, 0x0a, 0x0d, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, |
| 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x1e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, |
| 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x75, 0x67, 0x5f, 0x63, 0x6f, 0x6d, |
| 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1b, 0x64, 0x69, 0x73, |
| 0x61, 0x62, 0x6c, 0x65, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x42, 0x75, 0x67, |
| 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x45, 0x0a, 0x08, 0x70, 0x6f, 0x6c, 0x69, |
| 0x63, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6c, 0x75, 0x63, |
| 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, |
| 0x67, 0x2e, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, |
| 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, |
| 0x4d, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x62, 0x75, 0x67, 0x5f, 0x73, |
| 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6c, 0x75, |
| 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, |
| 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x10, 0x64, 0x65, |
| 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x75, 0x67, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x44, |
| 0x0a, 0x09, 0x62, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, |
| 0x0b, 0x32, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, |
| 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, |
| 0x65, 0x72, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x09, 0x62, 0x75, 0x67, 0x61, 0x6e, |
| 0x69, 0x7a, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x08, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, |
| 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, |
| 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x6f, |
| 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x6d, |
| 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x22, 0xa7, 0x08, 0x0a, 0x13, 0x42, 0x75, 0x67, 0x4d, |
| 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, |
| 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, |
| 0x16, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, |
| 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x68, 0x75, 0x6d, 0x61, 0x6e, |
| 0x5f, 0x72, 0x65, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, |
| 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x61, |
| 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, |
| 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x69, |
| 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, |
| 0x2e, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, |
| 0x74, 0x79, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x4a, 0x0a, 0x07, |
| 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, |
| 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, |
| 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, |
| 0x6e, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, |
| 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x57, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x6c, |
| 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, |
| 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, |
| 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, |
| 0x6e, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, |
| 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, |
| 0x6e, 0x12, 0x58, 0x0a, 0x0c, 0x62, 0x75, 0x67, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, |
| 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, |
| 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, |
| 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6c, 0x69, |
| 0x63, 0x79, 0x2e, 0x42, 0x75, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x0b, |
| 0x62, 0x75, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, 0xdd, 0x01, 0x0a, 0x06, |
| 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, |
| 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x72, 0x69, |
| 0x63, 0x49, 0x64, 0x12, 0x58, 0x0a, 0x14, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, |
| 0x6e, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, |
| 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, |
| 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, |
| 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, |
| 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x5c, 0x0a, |
| 0x16, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x68, |
| 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, |
| 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, |
| 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, |
| 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x15, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, |
| 0x6f, 0x6e, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x1a, 0x51, 0x0a, 0x0b, 0x45, |
| 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, |
| 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x5f, 0x68, 0x74, 0x6d, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, |
| 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x48, 0x74, 0x6d, 0x6c, 0x12, 0x1f, 0x0a, |
| 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x74, 0x6d, 0x6c, 0x18, 0x02, 0x20, 0x01, |
| 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x74, 0x6d, 0x6c, 0x1a, 0xc0, |
| 0x02, 0x0a, 0x0b, 0x42, 0x75, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x29, |
| 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, |
| 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, |
| 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x5d, 0x0a, 0x09, 0x62, 0x75, 0x67, |
| 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x6c, |
| 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, |
| 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, |
| 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x42, 0x75, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, |
| 0x61, 0x74, 0x65, 0x2e, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x09, 0x62, |
| 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x08, 0x6d, 0x6f, 0x6e, 0x6f, |
| 0x72, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x6c, 0x75, 0x63, |
| 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, |
| 0x67, 0x2e, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, |
| 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x42, 0x75, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, |
| 0x65, 0x2e, 0x4d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x52, 0x08, 0x6d, 0x6f, 0x6e, 0x6f, |
| 0x72, 0x61, 0x69, 0x6c, 0x1a, 0x27, 0x0a, 0x09, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, |
| 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, |
| 0x03, 0x28, 0x03, 0x52, 0x08, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x1a, 0x22, 0x0a, |
| 0x08, 0x4d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62, |
| 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, |
| 0x73, 0x22, 0xff, 0x04, 0x0a, 0x0f, 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x54, 0x68, 0x72, 0x65, |
| 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x55, 0x0a, 0x13, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, |
| 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, |
| 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, |
| 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, |
| 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x11, 0x74, 0x65, 0x73, 0x74, 0x52, |
| 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x4f, 0x0a, 0x10, |
| 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x73, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, |
| 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, |
| 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, |
| 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x0e, 0x74, |
| 0x65, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x59, 0x0a, |
| 0x15, 0x70, 0x72, 0x65, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x73, 0x5f, |
| 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, |
| 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, |
| 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, |
| 0x6f, 0x6c, 0x64, 0x52, 0x13, 0x70, 0x72, 0x65, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x75, |
| 0x6e, 0x73, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x67, 0x0a, 0x1c, 0x63, 0x72, 0x69, 0x74, |
| 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x65, 0x78, |
| 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, |
| 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, |
| 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, |
| 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x1a, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x46, |
| 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x45, 0x78, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, |
| 0x64, 0x12, 0x39, 0x0a, 0x16, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, |
| 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x31, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, |
| 0x03, 0x48, 0x00, 0x52, 0x14, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, |
| 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x31, 0x64, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x16, |
| 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, |
| 0x72, 0x65, 0x73, 0x5f, 0x33, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14, |
| 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, |
| 0x65, 0x73, 0x33, 0x64, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x16, 0x75, 0x6e, 0x65, 0x78, 0x70, |
| 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x37, |
| 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x14, 0x75, 0x6e, 0x65, 0x78, 0x70, |
| 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x37, 0x64, 0x88, |
| 0x01, 0x01, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, |
| 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x31, 0x64, 0x42, 0x19, 0x0a, |
| 0x17, 0x5f, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x61, 0x69, |
| 0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x33, 0x64, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x75, 0x6e, 0x65, |
| 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, |
| 0x5f, 0x37, 0x64, 0x22, 0x79, 0x0a, 0x15, 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x4d, 0x65, 0x74, |
| 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x1b, 0x0a, 0x09, |
| 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, |
| 0x08, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x74, 0x68, 0x72, |
| 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, |
| 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, |
| 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, |
| 0x6f, 0x6c, 0x64, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x9b, |
| 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, |
| 0x6c, 0x64, 0x12, 0x1c, 0x0a, 0x07, 0x6f, 0x6e, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x18, 0x01, 0x20, |
| 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x6e, 0x65, 0x44, 0x61, 0x79, 0x88, 0x01, 0x01, |
| 0x12, 0x20, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x18, 0x02, 0x20, |
| 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x08, 0x74, 0x68, 0x72, 0x65, 0x65, 0x44, 0x61, 0x79, 0x88, |
| 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x18, |
| 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, |
| 0x79, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6f, 0x6e, 0x65, 0x5f, 0x64, 0x61, 0x79, |
| 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x42, 0x0c, |
| 0x0a, 0x0a, 0x5f, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x22, 0xd9, 0x03, 0x0a, |
| 0x0f, 0x4d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, |
| 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, |
| 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x5a, 0x0a, 0x14, 0x64, 0x65, |
| 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, |
| 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, |
| 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, |
| 0x4d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, |
| 0x75, 0x65, 0x52, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, |
| 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, |
| 0x74, 0x79, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, |
| 0x03, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x46, 0x69, 0x65, 0x6c, 0x64, |
| 0x49, 0x64, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, |
| 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, |
| 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x6f, |
| 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x0a, |
| 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x1b, 0x70, 0x72, |
| 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x68, 0x79, 0x73, 0x74, 0x65, 0x72, 0x65, 0x73, 0x69, |
| 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, |
| 0x19, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x48, 0x79, 0x73, 0x74, 0x65, 0x72, 0x65, |
| 0x73, 0x69, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, |
| 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x06, 0x20, 0x01, |
| 0x28, 0x09, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x65, 0x66, 0x69, |
| 0x78, 0x12, 0x2b, 0x0a, 0x11, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x5f, 0x68, 0x6f, |
| 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x6f, |
| 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x48, |
| 0x0a, 0x21, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x5f, 0x72, |
| 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x67, 0x6f, 0x6f, |
| 0x67, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x66, 0x69, 0x6c, 0x65, 0x57, |
| 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x56, 0x69, |
| 0x65, 0x77, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x22, 0x45, 0x0a, 0x12, 0x4d, 0x6f, 0x6e, 0x6f, |
| 0x72, 0x61, 0x69, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x19, |
| 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, |
| 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, |
| 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, |
| 0xc0, 0x01, 0x0a, 0x10, 0x4d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x50, 0x72, 0x69, 0x6f, |
| 0x72, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, |
| 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, |
| 0x12, 0x43, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, |
| 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, |
| 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6d, 0x70, 0x61, 0x63, |
| 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, |
| 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x4b, 0x0a, 0x0a, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, |
| 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x75, 0x63, 0x69, |
| 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, |
| 0x2e, 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, |
| 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x0a, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, |
| 0x64, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x61, 0x6c, 0x6d, 0x43, 0x6f, 0x6e, 0x66, |
| 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, |
| 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x63, 0x0a, 0x15, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76, |
| 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x18, |
| 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, |
| 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, |
| 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, |
| 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x13, 0x74, 0x65, 0x73, 0x74, 0x56, 0x61, 0x72, 0x69, |
| 0x61, 0x6e, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x0a, |
| 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x54, 0x0a, 0x0f, 0x74, 0x65, |
| 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, |
| 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, |
| 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4e, |
| 0x61, 0x6d, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, |
| 0x65, 0x52, 0x0d, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x73, |
| 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x5f, |
| 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, |
| 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x4d, 0x61, 0x73, 0x6b, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, |
| 0x6e, 0x73, 0x22, 0x6b, 0x0a, 0x16, 0x54, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x6c, |
| 0x75, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, |
| 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, |
| 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, |
| 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x69, |
| 0x6b, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, |
| 0x09, 0x52, 0x0c, 0x6c, 0x69, 0x6b, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, |
| 0x24, 0x0a, 0x12, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, |
| 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, |
| 0x03, 0x52, 0x02, 0x69, 0x64, 0x22, 0xbf, 0x04, 0x0a, 0x10, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, |
| 0x7a, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x55, 0x0a, 0x11, 0x64, 0x65, |
| 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x18, |
| 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, |
| 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, |
| 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, |
| 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, |
| 0x74, 0x12, 0x3e, 0x0a, 0x1b, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x68, 0x79, |
| 0x73, 0x74, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, |
| 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x19, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, |
| 0x48, 0x79, 0x73, 0x74, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, |
| 0x74, 0x12, 0x63, 0x0a, 0x11, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x6d, 0x61, |
| 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x6c, |
| 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, |
| 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x50, 0x72, 0x6f, |
| 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x70, |
| 0x70, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x61, |
| 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x44, 0x0a, 0x1f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x77, |
| 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x76, 0x69, 0x65, |
| 0x77, 0x5f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, |
| 0x1b, 0x66, 0x69, 0x6c, 0x65, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x4c, 0x69, 0x6d, 0x69, |
| 0x74, 0x56, 0x69, 0x65, 0x77, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x1a, 0xe8, 0x01, 0x0a, |
| 0x0f, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, |
| 0x12, 0x43, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, |
| 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, |
| 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, |
| 0x7a, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x08, 0x70, 0x72, 0x69, |
| 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x43, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, |
| 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, |
| 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, |
| 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, |
| 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x4b, 0x0a, 0x0a, 0x74, 0x68, |
| 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, |
| 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, |
| 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x72, |
| 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x0a, 0x74, 0x68, 0x72, |
| 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x22, 0xa2, 0x04, 0x0a, 0x15, 0x54, 0x65, 0x73, 0x74, |
| 0x53, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, |
| 0x61, 0x12, 0x62, 0x0a, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x61, 0x74, |
| 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, |
| 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, |
| 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x72, 0x69, 0x74, |
| 0x65, 0x72, 0x69, 0x61, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x61, 0x74, 0x65, |
| 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x52, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, |
| 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x5c, 0x0a, 0x0a, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x5f, 0x72, |
| 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6c, 0x75, 0x63, 0x69, |
| 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, |
| 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x72, |
| 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x2e, 0x46, 0x6c, 0x61, 0x6b, 0x65, 0x52, 0x61, 0x74, 0x65, |
| 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x52, 0x09, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x52, |
| 0x61, 0x74, 0x65, 0x1a, 0x86, 0x01, 0x0a, 0x13, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, |
| 0x61, 0x74, 0x65, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x12, 0x2b, 0x0a, 0x11, 0x66, |
| 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, |
| 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x54, |
| 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x42, 0x0a, 0x1d, 0x63, 0x6f, 0x6e, 0x73, |
| 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, |
| 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, |
| 0x1b, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x46, 0x61, 0x69, 0x6c, |
| 0x75, 0x72, 0x65, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x1a, 0xbd, 0x01, 0x0a, |
| 0x11, 0x46, 0x6c, 0x61, 0x6b, 0x65, 0x52, 0x61, 0x74, 0x65, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, |
| 0x69, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, |
| 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64, 0x6f, |
| 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, |
| 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x6c, 0x61, 0x6b, |
| 0x65, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x66, 0x6c, |
| 0x61, 0x6b, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, |
| 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x52, |
| 0x61, 0x74, 0x65, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x2e, 0x0a, 0x13, |
| 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, |
| 0x31, 0x77, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x66, 0x6c, 0x61, 0x6b, 0x65, |
| 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x31, 0x77, 0x64, 0x2a, 0x44, 0x0a, 0x09, |
| 0x42, 0x75, 0x67, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x16, 0x42, 0x55, 0x47, |
| 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, |
| 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x4f, 0x4e, 0x4f, 0x52, 0x41, 0x49, |
| 0x4c, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x55, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x45, 0x52, |
| 0x10, 0x02, 0x2a, 0x5f, 0x0a, 0x11, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x50, |
| 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x1e, 0x42, 0x55, 0x47, 0x41, 0x4e, |
| 0x49, 0x5a, 0x45, 0x52, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, |
| 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x50, |
| 0x30, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x31, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x50, |
| 0x32, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x33, 0x10, 0x04, 0x12, 0x06, 0x0a, 0x02, 0x50, |
| 0x34, 0x10, 0x05, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, |
| 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, |
| 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, |
| 0x67, 0x3b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, |
| 0x6f, 0x33, |
| }) |
| |
| var ( |
| file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescOnce sync.Once |
| file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescData []byte |
| ) |
| |
| func file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP() []byte { |
| file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescOnce.Do(func() { |
| file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDesc), len(file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDesc))) |
| }) |
| return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescData |
| } |
| |
| var file_go_chromium_org_luci_analysis_proto_config_project_config_proto_enumTypes = make([]protoimpl.EnumInfo, 2) |
| var file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes = make([]protoimpl.MessageInfo, 26) |
| var file_go_chromium_org_luci_analysis_proto_config_project_config_proto_goTypes = []any{ |
| (BugSystem)(0), // 0: luci.analysis.config.BugSystem |
| (BuganizerPriority)(0), // 1: luci.analysis.config.BuganizerPriority |
| (*ProjectConfig)(nil), // 2: luci.analysis.config.ProjectConfig |
| (*ProjectMetadata)(nil), // 3: luci.analysis.config.ProjectMetadata |
| (*Metrics)(nil), // 4: luci.analysis.config.Metrics |
| (*BugManagement)(nil), // 5: luci.analysis.config.BugManagement |
| (*BugManagementPolicy)(nil), // 6: luci.analysis.config.BugManagementPolicy |
| (*ImpactThreshold)(nil), // 7: luci.analysis.config.ImpactThreshold |
| (*ImpactMetricThreshold)(nil), // 8: luci.analysis.config.ImpactMetricThreshold |
| (*MetricThreshold)(nil), // 9: luci.analysis.config.MetricThreshold |
| (*MonorailProject)(nil), // 10: luci.analysis.config.MonorailProject |
| (*MonorailFieldValue)(nil), // 11: luci.analysis.config.MonorailFieldValue |
| (*MonorailPriority)(nil), // 12: luci.analysis.config.MonorailPriority |
| (*RealmConfig)(nil), // 13: luci.analysis.config.RealmConfig |
| (*Clustering)(nil), // 14: luci.analysis.config.Clustering |
| (*TestNameClusteringRule)(nil), // 15: luci.analysis.config.TestNameClusteringRule |
| (*BuganizerComponent)(nil), // 16: luci.analysis.config.BuganizerComponent |
| (*BuganizerProject)(nil), // 17: luci.analysis.config.BuganizerProject |
| (*TestStabilityCriteria)(nil), // 18: luci.analysis.config.TestStabilityCriteria |
| (*Metrics_MetricOverride)(nil), // 19: luci.analysis.config.Metrics.MetricOverride |
| (*BugManagementPolicy_Metric)(nil), // 20: luci.analysis.config.BugManagementPolicy.Metric |
| (*BugManagementPolicy_Explanation)(nil), // 21: luci.analysis.config.BugManagementPolicy.Explanation |
| (*BugManagementPolicy_BugTemplate)(nil), // 22: luci.analysis.config.BugManagementPolicy.BugTemplate |
| (*BugManagementPolicy_BugTemplate_Buganizer)(nil), // 23: luci.analysis.config.BugManagementPolicy.BugTemplate.Buganizer |
| (*BugManagementPolicy_BugTemplate_Monorail)(nil), // 24: luci.analysis.config.BugManagementPolicy.BugTemplate.Monorail |
| (*BuganizerProject_PriorityMapping)(nil), // 25: luci.analysis.config.BuganizerProject.PriorityMapping |
| (*TestStabilityCriteria_FailureRateCriteria)(nil), // 26: luci.analysis.config.TestStabilityCriteria.FailureRateCriteria |
| (*TestStabilityCriteria_FlakeRateCriteria)(nil), // 27: luci.analysis.config.TestStabilityCriteria.FlakeRateCriteria |
| (*timestamppb.Timestamp)(nil), // 28: google.protobuf.Timestamp |
| (*TestVariantAnalysisConfig)(nil), // 29: luci.analysis.config.TestVariantAnalysisConfig |
| } |
| var file_go_chromium_org_luci_analysis_proto_config_project_config_proto_depIdxs = []int32{ |
| 3, // 0: luci.analysis.config.ProjectConfig.project_metadata:type_name -> luci.analysis.config.ProjectMetadata |
| 28, // 1: luci.analysis.config.ProjectConfig.last_updated:type_name -> google.protobuf.Timestamp |
| 14, // 2: luci.analysis.config.ProjectConfig.clustering:type_name -> luci.analysis.config.Clustering |
| 5, // 3: luci.analysis.config.ProjectConfig.bug_management:type_name -> luci.analysis.config.BugManagement |
| 4, // 4: luci.analysis.config.ProjectConfig.metrics:type_name -> luci.analysis.config.Metrics |
| 18, // 5: luci.analysis.config.ProjectConfig.test_stability_criteria:type_name -> luci.analysis.config.TestStabilityCriteria |
| 13, // 6: luci.analysis.config.ProjectConfig.realms:type_name -> luci.analysis.config.RealmConfig |
| 0, // 7: luci.analysis.config.ProjectConfig.bug_system:type_name -> luci.analysis.config.BugSystem |
| 10, // 8: luci.analysis.config.ProjectConfig.monorail:type_name -> luci.analysis.config.MonorailProject |
| 17, // 9: luci.analysis.config.ProjectConfig.buganizer:type_name -> luci.analysis.config.BuganizerProject |
| 7, // 10: luci.analysis.config.ProjectConfig.bug_filing_threshold:type_name -> luci.analysis.config.ImpactThreshold |
| 8, // 11: luci.analysis.config.ProjectConfig.bug_filing_thresholds:type_name -> luci.analysis.config.ImpactMetricThreshold |
| 19, // 12: luci.analysis.config.Metrics.overrides:type_name -> luci.analysis.config.Metrics.MetricOverride |
| 6, // 13: luci.analysis.config.BugManagement.policies:type_name -> luci.analysis.config.BugManagementPolicy |
| 0, // 14: luci.analysis.config.BugManagement.default_bug_system:type_name -> luci.analysis.config.BugSystem |
| 17, // 15: luci.analysis.config.BugManagement.buganizer:type_name -> luci.analysis.config.BuganizerProject |
| 10, // 16: luci.analysis.config.BugManagement.monorail:type_name -> luci.analysis.config.MonorailProject |
| 1, // 17: luci.analysis.config.BugManagementPolicy.priority:type_name -> luci.analysis.config.BuganizerPriority |
| 20, // 18: luci.analysis.config.BugManagementPolicy.metrics:type_name -> luci.analysis.config.BugManagementPolicy.Metric |
| 21, // 19: luci.analysis.config.BugManagementPolicy.explanation:type_name -> luci.analysis.config.BugManagementPolicy.Explanation |
| 22, // 20: luci.analysis.config.BugManagementPolicy.bug_template:type_name -> luci.analysis.config.BugManagementPolicy.BugTemplate |
| 9, // 21: luci.analysis.config.ImpactThreshold.test_results_failed:type_name -> luci.analysis.config.MetricThreshold |
| 9, // 22: luci.analysis.config.ImpactThreshold.test_runs_failed:type_name -> luci.analysis.config.MetricThreshold |
| 9, // 23: luci.analysis.config.ImpactThreshold.presubmit_runs_failed:type_name -> luci.analysis.config.MetricThreshold |
| 9, // 24: luci.analysis.config.ImpactThreshold.critical_failures_exonerated:type_name -> luci.analysis.config.MetricThreshold |
| 9, // 25: luci.analysis.config.ImpactMetricThreshold.threshold:type_name -> luci.analysis.config.MetricThreshold |
| 11, // 26: luci.analysis.config.MonorailProject.default_field_values:type_name -> luci.analysis.config.MonorailFieldValue |
| 12, // 27: luci.analysis.config.MonorailProject.priorities:type_name -> luci.analysis.config.MonorailPriority |
| 7, // 28: luci.analysis.config.MonorailPriority.threshold:type_name -> luci.analysis.config.ImpactThreshold |
| 8, // 29: luci.analysis.config.MonorailPriority.thresholds:type_name -> luci.analysis.config.ImpactMetricThreshold |
| 29, // 30: luci.analysis.config.RealmConfig.test_variant_analysis:type_name -> luci.analysis.config.TestVariantAnalysisConfig |
| 15, // 31: luci.analysis.config.Clustering.test_name_rules:type_name -> luci.analysis.config.TestNameClusteringRule |
| 16, // 32: luci.analysis.config.BuganizerProject.default_component:type_name -> luci.analysis.config.BuganizerComponent |
| 25, // 33: luci.analysis.config.BuganizerProject.priority_mappings:type_name -> luci.analysis.config.BuganizerProject.PriorityMapping |
| 26, // 34: luci.analysis.config.TestStabilityCriteria.failure_rate:type_name -> luci.analysis.config.TestStabilityCriteria.FailureRateCriteria |
| 27, // 35: luci.analysis.config.TestStabilityCriteria.flake_rate:type_name -> luci.analysis.config.TestStabilityCriteria.FlakeRateCriteria |
| 9, // 36: luci.analysis.config.BugManagementPolicy.Metric.activation_threshold:type_name -> luci.analysis.config.MetricThreshold |
| 9, // 37: luci.analysis.config.BugManagementPolicy.Metric.deactivation_threshold:type_name -> luci.analysis.config.MetricThreshold |
| 23, // 38: luci.analysis.config.BugManagementPolicy.BugTemplate.buganizer:type_name -> luci.analysis.config.BugManagementPolicy.BugTemplate.Buganizer |
| 24, // 39: luci.analysis.config.BugManagementPolicy.BugTemplate.monorail:type_name -> luci.analysis.config.BugManagementPolicy.BugTemplate.Monorail |
| 1, // 40: luci.analysis.config.BuganizerProject.PriorityMapping.priority:type_name -> luci.analysis.config.BuganizerPriority |
| 7, // 41: luci.analysis.config.BuganizerProject.PriorityMapping.threshold:type_name -> luci.analysis.config.ImpactThreshold |
| 8, // 42: luci.analysis.config.BuganizerProject.PriorityMapping.thresholds:type_name -> luci.analysis.config.ImpactMetricThreshold |
| 43, // [43:43] is the sub-list for method output_type |
| 43, // [43:43] is the sub-list for method input_type |
| 43, // [43:43] is the sub-list for extension type_name |
| 43, // [43:43] is the sub-list for extension extendee |
| 0, // [0:43] is the sub-list for field type_name |
| } |
| |
| func init() { file_go_chromium_org_luci_analysis_proto_config_project_config_proto_init() } |
| func file_go_chromium_org_luci_analysis_proto_config_project_config_proto_init() { |
| if File_go_chromium_org_luci_analysis_proto_config_project_config_proto != nil { |
| return |
| } |
| file_go_chromium_org_luci_analysis_proto_config_test_variant_analysis_config_proto_init() |
| file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[5].OneofWrappers = []any{} |
| file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[7].OneofWrappers = []any{} |
| file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[17].OneofWrappers = []any{} |
| type x struct{} |
| out := protoimpl.TypeBuilder{ |
| File: protoimpl.DescBuilder{ |
| GoPackagePath: reflect.TypeOf(x{}).PkgPath(), |
| RawDescriptor: unsafe.Slice(unsafe.StringData(file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDesc), len(file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDesc)), |
| NumEnums: 2, |
| NumMessages: 26, |
| NumExtensions: 0, |
| NumServices: 0, |
| }, |
| GoTypes: file_go_chromium_org_luci_analysis_proto_config_project_config_proto_goTypes, |
| DependencyIndexes: file_go_chromium_org_luci_analysis_proto_config_project_config_proto_depIdxs, |
| EnumInfos: file_go_chromium_org_luci_analysis_proto_config_project_config_proto_enumTypes, |
| MessageInfos: file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes, |
| }.Build() |
| File_go_chromium_org_luci_analysis_proto_config_project_config_proto = out.File |
| file_go_chromium_org_luci_analysis_proto_config_project_config_proto_goTypes = nil |
| file_go_chromium_org_luci_analysis_proto_config_project_config_proto_depIdxs = nil |
| } |