blob: 7376299bbc24f986327f206b42395e2d5fd5a404 [file] [log] [blame]
// 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
}