go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/analysis/internal/changepoints/proto/spanner.pb.go (about)

     1  // Copyright 2023 The LUCI Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  // Code generated by protoc-gen-go. DO NOT EDIT.
    16  // versions:
    17  // 	protoc-gen-go v1.31.0
    18  // 	protoc        v3.21.7
    19  // source: go.chromium.org/luci/analysis/internal/changepoints/proto/spanner.proto
    20  
    21  package changepointspb
    22  
    23  import (
    24  	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
    25  	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
    26  	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
    27  	reflect "reflect"
    28  	sync "sync"
    29  )
    30  
    31  const (
    32  	// Verify that this generated code is sufficiently up-to-date.
    33  	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
    34  	// Verify that runtime/protoimpl is sufficiently up-to-date.
    35  	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
    36  )
    37  
    38  type SegmentState int32
    39  
    40  const (
    41  	SegmentState_SEGMENT_STATE_UNSPECIFIED SegmentState = 0
    42  	// Both the start and end commit positions of the segment are the result
    43  	// of analysis on the current input buffer.
    44  	SegmentState_ACTIVE SegmentState = 1
    45  	// The end commit position of the segment is the result of analysis on the
    46  	// current input buffer, but the start commit position is the result of
    47  	// past analysis.
    48  	SegmentState_FINALIZING SegmentState = 2
    49  	// Both the start and end commit positions of the segment are the result
    50  	// of past analysis.
    51  	SegmentState_FINALIZED SegmentState = 3
    52  )
    53  
    54  // Enum value maps for SegmentState.
    55  var (
    56  	SegmentState_name = map[int32]string{
    57  		0: "SEGMENT_STATE_UNSPECIFIED",
    58  		1: "ACTIVE",
    59  		2: "FINALIZING",
    60  		3: "FINALIZED",
    61  	}
    62  	SegmentState_value = map[string]int32{
    63  		"SEGMENT_STATE_UNSPECIFIED": 0,
    64  		"ACTIVE":                    1,
    65  		"FINALIZING":                2,
    66  		"FINALIZED":                 3,
    67  	}
    68  )
    69  
    70  func (x SegmentState) Enum() *SegmentState {
    71  	p := new(SegmentState)
    72  	*p = x
    73  	return p
    74  }
    75  
    76  func (x SegmentState) String() string {
    77  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
    78  }
    79  
    80  func (SegmentState) Descriptor() protoreflect.EnumDescriptor {
    81  	return file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_enumTypes[0].Descriptor()
    82  }
    83  
    84  func (SegmentState) Type() protoreflect.EnumType {
    85  	return &file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_enumTypes[0]
    86  }
    87  
    88  func (x SegmentState) Number() protoreflect.EnumNumber {
    89  	return protoreflect.EnumNumber(x)
    90  }
    91  
    92  // Deprecated: Use SegmentState.Descriptor instead.
    93  func (SegmentState) EnumDescriptor() ([]byte, []int) {
    94  	return file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_rawDescGZIP(), []int{0}
    95  }
    96  
    97  // Segments is used to store the finalized segments in Spanner.
    98  type Segments struct {
    99  	state         protoimpl.MessageState
   100  	sizeCache     protoimpl.SizeCache
   101  	unknownFields protoimpl.UnknownFields
   102  
   103  	// Segments, in ascending commit position order (oldest segment first).
   104  	Segments []*Segment `protobuf:"bytes,1,rep,name=segments,proto3" json:"segments,omitempty"`
   105  }
   106  
   107  func (x *Segments) Reset() {
   108  	*x = Segments{}
   109  	if protoimpl.UnsafeEnabled {
   110  		mi := &file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_msgTypes[0]
   111  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   112  		ms.StoreMessageInfo(mi)
   113  	}
   114  }
   115  
   116  func (x *Segments) String() string {
   117  	return protoimpl.X.MessageStringOf(x)
   118  }
   119  
   120  func (*Segments) ProtoMessage() {}
   121  
   122  func (x *Segments) ProtoReflect() protoreflect.Message {
   123  	mi := &file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_msgTypes[0]
   124  	if protoimpl.UnsafeEnabled && x != nil {
   125  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   126  		if ms.LoadMessageInfo() == nil {
   127  			ms.StoreMessageInfo(mi)
   128  		}
   129  		return ms
   130  	}
   131  	return mi.MessageOf(x)
   132  }
   133  
   134  // Deprecated: Use Segments.ProtoReflect.Descriptor instead.
   135  func (*Segments) Descriptor() ([]byte, []int) {
   136  	return file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_rawDescGZIP(), []int{0}
   137  }
   138  
   139  func (x *Segments) GetSegments() []*Segment {
   140  	if x != nil {
   141  		return x.Segments
   142  	}
   143  	return nil
   144  }
   145  
   146  // Segment stores the finalized parts of finalizing and finalized segments
   147  // in Spanner.
   148  // Finalized segments will be stored in full.
   149  // Only the finalized part of a finalizing segment will be stored.
   150  // The unfinalized parts of segments can be computed from the input buffer.
   151  type Segment struct {
   152  	state         protoimpl.MessageState
   153  	sizeCache     protoimpl.SizeCache
   154  	unknownFields protoimpl.UnknownFields
   155  
   156  	// The state of the segment.
   157  	// Only finalizing or finalized segments will be stored in spanner.
   158  	State SegmentState `protobuf:"varint,1,opt,name=state,proto3,enum=luci.analysis.internal.changepoints.SegmentState" json:"state,omitempty"`
   159  	// If set, means the start of the segment is as a result of a change point
   160  	// being identified.
   161  	// If unset, means the segment started because this was the first result in
   162  	// the known history of the test.
   163  	HasStartChangepoint bool `protobuf:"varint,2,opt,name=has_start_changepoint,json=hasStartChangepoint,proto3" json:"has_start_changepoint,omitempty"`
   164  	// The earliest commit position included in the segment.
   165  	StartPosition int64 `protobuf:"varint,3,opt,name=start_position,json=startPosition,proto3" json:"start_position,omitempty"`
   166  	// The earliest hour a verdict with the given start_position was recorded.
   167  	StartHour *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=start_hour,json=startHour,proto3" json:"start_hour,omitempty"`
   168  	// The end commit position of the segment.
   169  	// If set, the invariant end_position >= start_position holds.
   170  	EndPosition int64 `protobuf:"varint,5,opt,name=end_position,json=endPosition,proto3" json:"end_position,omitempty"`
   171  	// The latest hour a verdict with the last commit position in the segment
   172  	// was recorded.
   173  	EndHour *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=end_hour,json=endHour,proto3" json:"end_hour,omitempty"`
   174  	// The lower bound of the change point position at the start of the segment
   175  	// in a 99% two-tailed confidence interval. Inclusive.
   176  	// Only set if has_start_changepoint is set. If set, the invariant
   177  	// previous_segment.start_position <= start_position_lower_bound_99th <= start_position.
   178  	StartPositionLowerBound_99Th int64 `protobuf:"varint,7,opt,name=start_position_lower_bound_99th,json=startPositionLowerBound99th,proto3" json:"start_position_lower_bound_99th,omitempty"`
   179  	// The upper bound of the change point position at the start of the segment
   180  	// in a 99% two-tailed confidence interval. Inclusive.
   181  	// Only set if has_start_changepoint is set. If set, the invariant
   182  	// start_position <= start_position_upper_bound_99th <= end_position
   183  	// holds.
   184  	StartPositionUpperBound_99Th int64 `protobuf:"varint,8,opt,name=start_position_upper_bound_99th,json=startPositionUpperBound99th,proto3" json:"start_position_upper_bound_99th,omitempty"`
   185  	// The hour the most recent verdict with an unexpected test result
   186  	// was produced. *Only* captures the most recent hour for verdicts
   187  	// that are no longer in the input buffer. Used to set
   188  	// has_recent_unexpected_results on the output.
   189  	MostRecentUnexpectedResultHour *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=most_recent_unexpected_result_hour,json=mostRecentUnexpectedResultHour,proto3" json:"most_recent_unexpected_result_hour,omitempty"`
   190  	// Finalized counts for the segment. Note that this should
   191  	// *only* capture counts for verdicts that are no longer in
   192  	// the input buffer.
   193  	// Counts for verdicts in the input buffer can be obtained from the input
   194  	// buffer.
   195  	FinalizedCounts *Counts `protobuf:"bytes,10,opt,name=finalized_counts,json=finalizedCounts,proto3" json:"finalized_counts,omitempty"`
   196  }
   197  
   198  func (x *Segment) Reset() {
   199  	*x = Segment{}
   200  	if protoimpl.UnsafeEnabled {
   201  		mi := &file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_msgTypes[1]
   202  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   203  		ms.StoreMessageInfo(mi)
   204  	}
   205  }
   206  
   207  func (x *Segment) String() string {
   208  	return protoimpl.X.MessageStringOf(x)
   209  }
   210  
   211  func (*Segment) ProtoMessage() {}
   212  
   213  func (x *Segment) ProtoReflect() protoreflect.Message {
   214  	mi := &file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_msgTypes[1]
   215  	if protoimpl.UnsafeEnabled && x != nil {
   216  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   217  		if ms.LoadMessageInfo() == nil {
   218  			ms.StoreMessageInfo(mi)
   219  		}
   220  		return ms
   221  	}
   222  	return mi.MessageOf(x)
   223  }
   224  
   225  // Deprecated: Use Segment.ProtoReflect.Descriptor instead.
   226  func (*Segment) Descriptor() ([]byte, []int) {
   227  	return file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_rawDescGZIP(), []int{1}
   228  }
   229  
   230  func (x *Segment) GetState() SegmentState {
   231  	if x != nil {
   232  		return x.State
   233  	}
   234  	return SegmentState_SEGMENT_STATE_UNSPECIFIED
   235  }
   236  
   237  func (x *Segment) GetHasStartChangepoint() bool {
   238  	if x != nil {
   239  		return x.HasStartChangepoint
   240  	}
   241  	return false
   242  }
   243  
   244  func (x *Segment) GetStartPosition() int64 {
   245  	if x != nil {
   246  		return x.StartPosition
   247  	}
   248  	return 0
   249  }
   250  
   251  func (x *Segment) GetStartHour() *timestamppb.Timestamp {
   252  	if x != nil {
   253  		return x.StartHour
   254  	}
   255  	return nil
   256  }
   257  
   258  func (x *Segment) GetEndPosition() int64 {
   259  	if x != nil {
   260  		return x.EndPosition
   261  	}
   262  	return 0
   263  }
   264  
   265  func (x *Segment) GetEndHour() *timestamppb.Timestamp {
   266  	if x != nil {
   267  		return x.EndHour
   268  	}
   269  	return nil
   270  }
   271  
   272  func (x *Segment) GetStartPositionLowerBound_99Th() int64 {
   273  	if x != nil {
   274  		return x.StartPositionLowerBound_99Th
   275  	}
   276  	return 0
   277  }
   278  
   279  func (x *Segment) GetStartPositionUpperBound_99Th() int64 {
   280  	if x != nil {
   281  		return x.StartPositionUpperBound_99Th
   282  	}
   283  	return 0
   284  }
   285  
   286  func (x *Segment) GetMostRecentUnexpectedResultHour() *timestamppb.Timestamp {
   287  	if x != nil {
   288  		return x.MostRecentUnexpectedResultHour
   289  	}
   290  	return nil
   291  }
   292  
   293  func (x *Segment) GetFinalizedCounts() *Counts {
   294  	if x != nil {
   295  		return x.FinalizedCounts
   296  	}
   297  	return nil
   298  }
   299  
   300  // All exclude the effect of skipped test results.
   301  // Next ID: 18
   302  type Counts struct {
   303  	state         protoimpl.MessageState
   304  	sizeCache     protoimpl.SizeCache
   305  	unknownFields protoimpl.UnknownFields
   306  
   307  	// The number of unexpected non-skipped test results.
   308  	UnexpectedResults int64 `protobuf:"varint,1,opt,name=unexpected_results,json=unexpectedResults,proto3" json:"unexpected_results,omitempty"`
   309  	// The total number of non-skipped test results.
   310  	TotalResults int64 `protobuf:"varint,2,opt,name=total_results,json=totalResults,proto3" json:"total_results,omitempty"`
   311  	// The number of expected passed test results.
   312  	ExpectedPassedResults int64 `protobuf:"varint,10,opt,name=expected_passed_results,json=expectedPassedResults,proto3" json:"expected_passed_results,omitempty"`
   313  	// The number of expected failed test results.
   314  	ExpectedFailedResults int64 `protobuf:"varint,11,opt,name=expected_failed_results,json=expectedFailedResults,proto3" json:"expected_failed_results,omitempty"`
   315  	// The number of expected crashed test results.
   316  	ExpectedCrashedResults int64 `protobuf:"varint,12,opt,name=expected_crashed_results,json=expectedCrashedResults,proto3" json:"expected_crashed_results,omitempty"`
   317  	// The number of expected aborted test results.
   318  	ExpectedAbortedResults int64 `protobuf:"varint,13,opt,name=expected_aborted_results,json=expectedAbortedResults,proto3" json:"expected_aborted_results,omitempty"`
   319  	// The number of unexpected passed test results.
   320  	UnexpectedPassedResults int64 `protobuf:"varint,14,opt,name=unexpected_passed_results,json=unexpectedPassedResults,proto3" json:"unexpected_passed_results,omitempty"`
   321  	// The number of unexpected failed test results.
   322  	UnexpectedFailedResults int64 `protobuf:"varint,15,opt,name=unexpected_failed_results,json=unexpectedFailedResults,proto3" json:"unexpected_failed_results,omitempty"`
   323  	// The number of unexpected crashed test results.
   324  	UnexpectedCrashedResults int64 `protobuf:"varint,16,opt,name=unexpected_crashed_results,json=unexpectedCrashedResults,proto3" json:"unexpected_crashed_results,omitempty"`
   325  	// The number of unexpected aborted test results.
   326  	UnexpectedAbortedResults int64 `protobuf:"varint,17,opt,name=unexpected_aborted_results,json=unexpectedAbortedResults,proto3" json:"unexpected_aborted_results,omitempty"`
   327  	// The number of test runs which had an unexpected test result but were
   328  	// not retried.
   329  	UnexpectedUnretriedRuns int64 `protobuf:"varint,3,opt,name=unexpected_unretried_runs,json=unexpectedUnretriedRuns,proto3" json:"unexpected_unretried_runs,omitempty"`
   330  	// The number of test run which had an unexpected test result, were
   331  	// retried, and still contained only unexpected test results.
   332  	UnexpectedAfterRetryRuns int64 `protobuf:"varint,4,opt,name=unexpected_after_retry_runs,json=unexpectedAfterRetryRuns,proto3" json:"unexpected_after_retry_runs,omitempty"`
   333  	// The number of test runs which had an unexpected test result, were
   334  	// retried, and eventually recorded an expected test result.
   335  	FlakyRuns int64 `protobuf:"varint,5,opt,name=flaky_runs,json=flakyRuns,proto3" json:"flaky_runs,omitempty"`
   336  	// The total number of test runs.
   337  	TotalRuns int64 `protobuf:"varint,6,opt,name=total_runs,json=totalRuns,proto3" json:"total_runs,omitempty"`
   338  	// The following verdict statistics exclude the effect of exonerations,
   339  	// and skipped test results. Verdicts with only skipped results are not counted
   340  	// at all.
   341  	// The number of verdicts with only unexpected test results.
   342  	UnexpectedVerdicts int64 `protobuf:"varint,7,opt,name=unexpected_verdicts,json=unexpectedVerdicts,proto3" json:"unexpected_verdicts,omitempty"`
   343  	// The number of verdicts with a mix of expected and unexpected test results.
   344  	FlakyVerdicts int64 `protobuf:"varint,8,opt,name=flaky_verdicts,json=flakyVerdicts,proto3" json:"flaky_verdicts,omitempty"`
   345  	// The total number of verdicts.
   346  	TotalVerdicts int64 `protobuf:"varint,9,opt,name=total_verdicts,json=totalVerdicts,proto3" json:"total_verdicts,omitempty"`
   347  }
   348  
   349  func (x *Counts) Reset() {
   350  	*x = Counts{}
   351  	if protoimpl.UnsafeEnabled {
   352  		mi := &file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_msgTypes[2]
   353  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   354  		ms.StoreMessageInfo(mi)
   355  	}
   356  }
   357  
   358  func (x *Counts) String() string {
   359  	return protoimpl.X.MessageStringOf(x)
   360  }
   361  
   362  func (*Counts) ProtoMessage() {}
   363  
   364  func (x *Counts) ProtoReflect() protoreflect.Message {
   365  	mi := &file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_msgTypes[2]
   366  	if protoimpl.UnsafeEnabled && x != nil {
   367  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   368  		if ms.LoadMessageInfo() == nil {
   369  			ms.StoreMessageInfo(mi)
   370  		}
   371  		return ms
   372  	}
   373  	return mi.MessageOf(x)
   374  }
   375  
   376  // Deprecated: Use Counts.ProtoReflect.Descriptor instead.
   377  func (*Counts) Descriptor() ([]byte, []int) {
   378  	return file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_rawDescGZIP(), []int{2}
   379  }
   380  
   381  func (x *Counts) GetUnexpectedResults() int64 {
   382  	if x != nil {
   383  		return x.UnexpectedResults
   384  	}
   385  	return 0
   386  }
   387  
   388  func (x *Counts) GetTotalResults() int64 {
   389  	if x != nil {
   390  		return x.TotalResults
   391  	}
   392  	return 0
   393  }
   394  
   395  func (x *Counts) GetExpectedPassedResults() int64 {
   396  	if x != nil {
   397  		return x.ExpectedPassedResults
   398  	}
   399  	return 0
   400  }
   401  
   402  func (x *Counts) GetExpectedFailedResults() int64 {
   403  	if x != nil {
   404  		return x.ExpectedFailedResults
   405  	}
   406  	return 0
   407  }
   408  
   409  func (x *Counts) GetExpectedCrashedResults() int64 {
   410  	if x != nil {
   411  		return x.ExpectedCrashedResults
   412  	}
   413  	return 0
   414  }
   415  
   416  func (x *Counts) GetExpectedAbortedResults() int64 {
   417  	if x != nil {
   418  		return x.ExpectedAbortedResults
   419  	}
   420  	return 0
   421  }
   422  
   423  func (x *Counts) GetUnexpectedPassedResults() int64 {
   424  	if x != nil {
   425  		return x.UnexpectedPassedResults
   426  	}
   427  	return 0
   428  }
   429  
   430  func (x *Counts) GetUnexpectedFailedResults() int64 {
   431  	if x != nil {
   432  		return x.UnexpectedFailedResults
   433  	}
   434  	return 0
   435  }
   436  
   437  func (x *Counts) GetUnexpectedCrashedResults() int64 {
   438  	if x != nil {
   439  		return x.UnexpectedCrashedResults
   440  	}
   441  	return 0
   442  }
   443  
   444  func (x *Counts) GetUnexpectedAbortedResults() int64 {
   445  	if x != nil {
   446  		return x.UnexpectedAbortedResults
   447  	}
   448  	return 0
   449  }
   450  
   451  func (x *Counts) GetUnexpectedUnretriedRuns() int64 {
   452  	if x != nil {
   453  		return x.UnexpectedUnretriedRuns
   454  	}
   455  	return 0
   456  }
   457  
   458  func (x *Counts) GetUnexpectedAfterRetryRuns() int64 {
   459  	if x != nil {
   460  		return x.UnexpectedAfterRetryRuns
   461  	}
   462  	return 0
   463  }
   464  
   465  func (x *Counts) GetFlakyRuns() int64 {
   466  	if x != nil {
   467  		return x.FlakyRuns
   468  	}
   469  	return 0
   470  }
   471  
   472  func (x *Counts) GetTotalRuns() int64 {
   473  	if x != nil {
   474  		return x.TotalRuns
   475  	}
   476  	return 0
   477  }
   478  
   479  func (x *Counts) GetUnexpectedVerdicts() int64 {
   480  	if x != nil {
   481  		return x.UnexpectedVerdicts
   482  	}
   483  	return 0
   484  }
   485  
   486  func (x *Counts) GetFlakyVerdicts() int64 {
   487  	if x != nil {
   488  		return x.FlakyVerdicts
   489  	}
   490  	return 0
   491  }
   492  
   493  func (x *Counts) GetTotalVerdicts() int64 {
   494  	if x != nil {
   495  		return x.TotalVerdicts
   496  	}
   497  	return 0
   498  }
   499  
   500  // Store statistics about verdicts evicted from the input buffer in Spanner.
   501  //
   502  // Purpose is described in go/luci-analysis-test-variant-analysis-in-clusters.
   503  //
   504  // Statistics about verdicts not yet evicted from the input buffer are not
   505  // stored here because they can be computed directly from the input buffer.
   506  // This means this proto only needs to be updated in Spanner when
   507  // verdicts are evicted from the input buffer (approximately every 1/100
   508  // verdict ingestions), rather than on every verdict ingestion, reducing the
   509  // number of writes required.
   510  type Statistics struct {
   511  	state         protoimpl.MessageState
   512  	sizeCache     protoimpl.SizeCache
   513  	unknownFields protoimpl.UnknownFields
   514  
   515  	// Statistics by partition time hour. Stored in ascending order (oldest
   516  	// hour first).
   517  	//
   518  	// Retained for 11 days (as 1 + 3 + 7 days):
   519  	//   - 1 day to support the functional requirement of calculating flakiness
   520  	//     using data from up to the last 24 hours.
   521  	//   - 3 days to account for the fact that some builds may be long-running
   522  	//     and could take up to 3 days to complete, so we need flakiness as at
   523  	//     a partition time of up to 3 days ago.
   524  	//   - 7 days to allow time to respond to operational incidents that involve
   525  	//     delayed or stuck ingestion tasks, without losing data.
   526  	HourlyBuckets []*Statistics_HourBucket `protobuf:"bytes,1,rep,name=hourly_buckets,json=hourlyBuckets,proto3" json:"hourly_buckets,omitempty"`
   527  }
   528  
   529  func (x *Statistics) Reset() {
   530  	*x = Statistics{}
   531  	if protoimpl.UnsafeEnabled {
   532  		mi := &file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_msgTypes[3]
   533  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   534  		ms.StoreMessageInfo(mi)
   535  	}
   536  }
   537  
   538  func (x *Statistics) String() string {
   539  	return protoimpl.X.MessageStringOf(x)
   540  }
   541  
   542  func (*Statistics) ProtoMessage() {}
   543  
   544  func (x *Statistics) ProtoReflect() protoreflect.Message {
   545  	mi := &file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_msgTypes[3]
   546  	if protoimpl.UnsafeEnabled && x != nil {
   547  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   548  		if ms.LoadMessageInfo() == nil {
   549  			ms.StoreMessageInfo(mi)
   550  		}
   551  		return ms
   552  	}
   553  	return mi.MessageOf(x)
   554  }
   555  
   556  // Deprecated: Use Statistics.ProtoReflect.Descriptor instead.
   557  func (*Statistics) Descriptor() ([]byte, []int) {
   558  	return file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_rawDescGZIP(), []int{3}
   559  }
   560  
   561  func (x *Statistics) GetHourlyBuckets() []*Statistics_HourBucket {
   562  	if x != nil {
   563  		return x.HourlyBuckets
   564  	}
   565  	return nil
   566  }
   567  
   568  type Statistics_HourBucket struct {
   569  	state         protoimpl.MessageState
   570  	sizeCache     protoimpl.SizeCache
   571  	unknownFields protoimpl.UnknownFields
   572  
   573  	// The hour of the verdict's partition time.
   574  	// This is the partition time, as the number of seconds since January 1, 1970 UTC
   575  	// (i.e. as a unix timestamp), divided by 3600.
   576  	Hour int64 `protobuf:"varint,1,opt,name=hour,proto3" json:"hour,omitempty"`
   577  	// The number of verdicts with only unexpected test results (excluding skips).
   578  	UnexpectedVerdicts int64 `protobuf:"varint,2,opt,name=unexpected_verdicts,json=unexpectedVerdicts,proto3" json:"unexpected_verdicts,omitempty"`
   579  	// The number of verdicts with a mix of expected and unexpected test results
   580  	// (excluding skips.)
   581  	FlakyVerdicts int64 `protobuf:"varint,3,opt,name=flaky_verdicts,json=flakyVerdicts,proto3" json:"flaky_verdicts,omitempty"`
   582  	// The total number of verdicts.
   583  	TotalVerdicts int64 `protobuf:"varint,4,opt,name=total_verdicts,json=totalVerdicts,proto3" json:"total_verdicts,omitempty"`
   584  }
   585  
   586  func (x *Statistics_HourBucket) Reset() {
   587  	*x = Statistics_HourBucket{}
   588  	if protoimpl.UnsafeEnabled {
   589  		mi := &file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_msgTypes[4]
   590  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   591  		ms.StoreMessageInfo(mi)
   592  	}
   593  }
   594  
   595  func (x *Statistics_HourBucket) String() string {
   596  	return protoimpl.X.MessageStringOf(x)
   597  }
   598  
   599  func (*Statistics_HourBucket) ProtoMessage() {}
   600  
   601  func (x *Statistics_HourBucket) ProtoReflect() protoreflect.Message {
   602  	mi := &file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_msgTypes[4]
   603  	if protoimpl.UnsafeEnabled && x != nil {
   604  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   605  		if ms.LoadMessageInfo() == nil {
   606  			ms.StoreMessageInfo(mi)
   607  		}
   608  		return ms
   609  	}
   610  	return mi.MessageOf(x)
   611  }
   612  
   613  // Deprecated: Use Statistics_HourBucket.ProtoReflect.Descriptor instead.
   614  func (*Statistics_HourBucket) Descriptor() ([]byte, []int) {
   615  	return file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_rawDescGZIP(), []int{3, 0}
   616  }
   617  
   618  func (x *Statistics_HourBucket) GetHour() int64 {
   619  	if x != nil {
   620  		return x.Hour
   621  	}
   622  	return 0
   623  }
   624  
   625  func (x *Statistics_HourBucket) GetUnexpectedVerdicts() int64 {
   626  	if x != nil {
   627  		return x.UnexpectedVerdicts
   628  	}
   629  	return 0
   630  }
   631  
   632  func (x *Statistics_HourBucket) GetFlakyVerdicts() int64 {
   633  	if x != nil {
   634  		return x.FlakyVerdicts
   635  	}
   636  	return 0
   637  }
   638  
   639  func (x *Statistics_HourBucket) GetTotalVerdicts() int64 {
   640  	if x != nil {
   641  		return x.TotalVerdicts
   642  	}
   643  	return 0
   644  }
   645  
   646  var File_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto protoreflect.FileDescriptor
   647  
   648  var file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_rawDesc = []byte{
   649  	0x0a, 0x47, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72,
   650  	0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f,
   651  	0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70,
   652  	0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x61, 0x6e,
   653  	0x6e, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x23, 0x6c, 0x75, 0x63, 0x69, 0x2e,
   654  	0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
   655  	0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x1a, 0x1f,
   656  	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f,
   657  	0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22,
   658  	0x54, 0x0a, 0x08, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x48, 0x0a, 0x08, 0x73,
   659  	0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e,
   660  	0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x69, 0x6e,
   661  	0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69,
   662  	0x6e, 0x74, 0x73, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x73, 0x65, 0x67,
   663  	0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x8e, 0x05, 0x0a, 0x07, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e,
   664  	0x74, 0x12, 0x47, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e,
   665  	0x32, 0x31, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73,
   666  	0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
   667  	0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74,
   668  	0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x68, 0x61,
   669  	0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f,
   670  	0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x68, 0x61, 0x73, 0x53, 0x74,
   671  	0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x25,
   672  	0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
   673  	0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73,
   674  	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68,
   675  	0x6f, 0x75, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
   676  	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
   677  	0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x6f, 0x75, 0x72,
   678  	0x12, 0x21, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
   679  	0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74,
   680  	0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18,
   681  	0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
   682  	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
   683  	0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x44, 0x0a, 0x1f, 0x73, 0x74,
   684  	0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x77,
   685  	0x65, 0x72, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x39, 0x39, 0x74, 0x68, 0x18, 0x07, 0x20,
   686  	0x01, 0x28, 0x03, 0x52, 0x1b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69,
   687  	0x6f, 0x6e, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x39, 0x39, 0x74, 0x68,
   688  	0x12, 0x44, 0x0a, 0x1f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
   689  	0x6f, 0x6e, 0x5f, 0x75, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x39,
   690  	0x39, 0x74, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1b, 0x73, 0x74, 0x61, 0x72, 0x74,
   691  	0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x70, 0x65, 0x72, 0x42, 0x6f, 0x75,
   692  	0x6e, 0x64, 0x39, 0x39, 0x74, 0x68, 0x12, 0x66, 0x0a, 0x22, 0x6d, 0x6f, 0x73, 0x74, 0x5f, 0x72,
   693  	0x65, 0x63, 0x65, 0x6e, 0x74, 0x5f, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64,
   694  	0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x09, 0x20, 0x01,
   695  	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
   696  	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x1e,
   697  	0x6d, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x55, 0x6e, 0x65, 0x78, 0x70, 0x65,
   698  	0x63, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x56,
   699  	0x0a, 0x10, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e,
   700  	0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e,
   701  	0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
   702  	0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2e, 0x43,
   703  	0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x0f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64,
   704  	0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0xec, 0x06, 0x0a, 0x06, 0x43, 0x6f, 0x75, 0x6e, 0x74,
   705  	0x73, 0x12, 0x2d, 0x0a, 0x12, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f,
   706  	0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x75,
   707  	0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
   708  	0x12, 0x23, 0x0a, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
   709  	0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65,
   710  	0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65,
   711  	0x64, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
   712  	0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64,
   713  	0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x36, 0x0a,
   714  	0x17, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64,
   715  	0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15,
   716  	0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65,
   717  	0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65,
   718  	0x64, 0x5f, 0x63, 0x72, 0x61, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
   719  	0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65,
   720  	0x64, 0x43, 0x72, 0x61, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12,
   721  	0x38, 0x0a, 0x18, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x62, 0x6f, 0x72,
   722  	0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28,
   723  	0x03, 0x52, 0x16, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x62, 0x6f, 0x72, 0x74,
   724  	0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x75, 0x6e, 0x65,
   725  	0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x72,
   726  	0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x75, 0x6e,
   727  	0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x52, 0x65,
   728  	0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63,
   729  	0x74, 0x65, 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c,
   730  	0x74, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65,
   731  	0x63, 0x74, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
   732  	0x73, 0x12, 0x3c, 0x0a, 0x1a, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f,
   733  	0x63, 0x72, 0x61, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18,
   734  	0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65,
   735  	0x64, 0x43, 0x72, 0x61, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12,
   736  	0x3c, 0x0a, 0x1a, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x62,
   737  	0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x11, 0x20,
   738  	0x01, 0x28, 0x03, 0x52, 0x18, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41,
   739  	0x62, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x3a, 0x0a,
   740  	0x19, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x6e, 0x72, 0x65,
   741  	0x74, 0x72, 0x69, 0x65, 0x64, 0x5f, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
   742  	0x52, 0x17, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x55, 0x6e, 0x72, 0x65,
   743  	0x74, 0x72, 0x69, 0x65, 0x64, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x75, 0x6e, 0x65,
   744  	0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65,
   745  	0x74, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18,
   746  	0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x52,
   747  	0x65, 0x74, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x6c, 0x61, 0x6b,
   748  	0x79, 0x5f, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x66, 0x6c,
   749  	0x61, 0x6b, 0x79, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c,
   750  	0x5f, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x74,
   751  	0x61, 0x6c, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65,
   752  	0x63, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x18, 0x07, 0x20,
   753  	0x01, 0x28, 0x03, 0x52, 0x12, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x56,
   754  	0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x6c, 0x61, 0x6b, 0x79,
   755  	0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52,
   756  	0x0d, 0x66, 0x6c, 0x61, 0x6b, 0x79, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x12, 0x25,
   757  	0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73,
   758  	0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x56, 0x65, 0x72,
   759  	0x64, 0x69, 0x63, 0x74, 0x73, 0x22, 0x91, 0x02, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73,
   760  	0x74, 0x69, 0x63, 0x73, 0x12, 0x61, 0x0a, 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x6c, 0x79, 0x5f, 0x62,
   761  	0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x6c,
   762  	0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x69, 0x6e, 0x74,
   763  	0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e,
   764  	0x74, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x48, 0x6f,
   765  	0x75, 0x72, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x0d, 0x68, 0x6f, 0x75, 0x72, 0x6c, 0x79,
   766  	0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x1a, 0x9f, 0x01, 0x0a, 0x0a, 0x48, 0x6f, 0x75, 0x72,
   767  	0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x01,
   768  	0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x12, 0x2f, 0x0a, 0x13, 0x75, 0x6e,
   769  	0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74,
   770  	0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63,
   771  	0x74, 0x65, 0x64, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x66,
   772  	0x6c, 0x61, 0x6b, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x18, 0x03, 0x20,
   773  	0x01, 0x28, 0x03, 0x52, 0x0d, 0x66, 0x6c, 0x61, 0x6b, 0x79, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63,
   774  	0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x64,
   775  	0x69, 0x63, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61,
   776  	0x6c, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x2a, 0x58, 0x0a, 0x0c, 0x53, 0x65, 0x67,
   777  	0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x45, 0x47,
   778  	0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
   779  	0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49,
   780  	0x56, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x49,
   781  	0x4e, 0x47, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45,
   782  	0x44, 0x10, 0x03, 0x42, 0x4a, 0x5a, 0x48, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
   783  	0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c,
   784  	0x79, 0x73, 0x69, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x63, 0x68,
   785  	0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
   786  	0x3b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x70, 0x62, 0x62,
   787  	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
   788  }
   789  
   790  var (
   791  	file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_rawDescOnce sync.Once
   792  	file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_rawDescData = file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_rawDesc
   793  )
   794  
   795  func file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_rawDescGZIP() []byte {
   796  	file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_rawDescOnce.Do(func() {
   797  		file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_rawDescData = protoimpl.X.CompressGZIP(file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_rawDescData)
   798  	})
   799  	return file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_rawDescData
   800  }
   801  
   802  var file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
   803  var file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_msgTypes = make([]protoimpl.MessageInfo, 5)
   804  var file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_goTypes = []interface{}{
   805  	(SegmentState)(0),             // 0: luci.analysis.internal.changepoints.SegmentState
   806  	(*Segments)(nil),              // 1: luci.analysis.internal.changepoints.Segments
   807  	(*Segment)(nil),               // 2: luci.analysis.internal.changepoints.Segment
   808  	(*Counts)(nil),                // 3: luci.analysis.internal.changepoints.Counts
   809  	(*Statistics)(nil),            // 4: luci.analysis.internal.changepoints.Statistics
   810  	(*Statistics_HourBucket)(nil), // 5: luci.analysis.internal.changepoints.Statistics.HourBucket
   811  	(*timestamppb.Timestamp)(nil), // 6: google.protobuf.Timestamp
   812  }
   813  var file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_depIdxs = []int32{
   814  	2, // 0: luci.analysis.internal.changepoints.Segments.segments:type_name -> luci.analysis.internal.changepoints.Segment
   815  	0, // 1: luci.analysis.internal.changepoints.Segment.state:type_name -> luci.analysis.internal.changepoints.SegmentState
   816  	6, // 2: luci.analysis.internal.changepoints.Segment.start_hour:type_name -> google.protobuf.Timestamp
   817  	6, // 3: luci.analysis.internal.changepoints.Segment.end_hour:type_name -> google.protobuf.Timestamp
   818  	6, // 4: luci.analysis.internal.changepoints.Segment.most_recent_unexpected_result_hour:type_name -> google.protobuf.Timestamp
   819  	3, // 5: luci.analysis.internal.changepoints.Segment.finalized_counts:type_name -> luci.analysis.internal.changepoints.Counts
   820  	5, // 6: luci.analysis.internal.changepoints.Statistics.hourly_buckets:type_name -> luci.analysis.internal.changepoints.Statistics.HourBucket
   821  	7, // [7:7] is the sub-list for method output_type
   822  	7, // [7:7] is the sub-list for method input_type
   823  	7, // [7:7] is the sub-list for extension type_name
   824  	7, // [7:7] is the sub-list for extension extendee
   825  	0, // [0:7] is the sub-list for field type_name
   826  }
   827  
   828  func init() { file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_init() }
   829  func file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_init() {
   830  	if File_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto != nil {
   831  		return
   832  	}
   833  	if !protoimpl.UnsafeEnabled {
   834  		file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
   835  			switch v := v.(*Segments); i {
   836  			case 0:
   837  				return &v.state
   838  			case 1:
   839  				return &v.sizeCache
   840  			case 2:
   841  				return &v.unknownFields
   842  			default:
   843  				return nil
   844  			}
   845  		}
   846  		file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
   847  			switch v := v.(*Segment); i {
   848  			case 0:
   849  				return &v.state
   850  			case 1:
   851  				return &v.sizeCache
   852  			case 2:
   853  				return &v.unknownFields
   854  			default:
   855  				return nil
   856  			}
   857  		}
   858  		file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
   859  			switch v := v.(*Counts); i {
   860  			case 0:
   861  				return &v.state
   862  			case 1:
   863  				return &v.sizeCache
   864  			case 2:
   865  				return &v.unknownFields
   866  			default:
   867  				return nil
   868  			}
   869  		}
   870  		file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
   871  			switch v := v.(*Statistics); i {
   872  			case 0:
   873  				return &v.state
   874  			case 1:
   875  				return &v.sizeCache
   876  			case 2:
   877  				return &v.unknownFields
   878  			default:
   879  				return nil
   880  			}
   881  		}
   882  		file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
   883  			switch v := v.(*Statistics_HourBucket); i {
   884  			case 0:
   885  				return &v.state
   886  			case 1:
   887  				return &v.sizeCache
   888  			case 2:
   889  				return &v.unknownFields
   890  			default:
   891  				return nil
   892  			}
   893  		}
   894  	}
   895  	type x struct{}
   896  	out := protoimpl.TypeBuilder{
   897  		File: protoimpl.DescBuilder{
   898  			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
   899  			RawDescriptor: file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_rawDesc,
   900  			NumEnums:      1,
   901  			NumMessages:   5,
   902  			NumExtensions: 0,
   903  			NumServices:   0,
   904  		},
   905  		GoTypes:           file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_goTypes,
   906  		DependencyIndexes: file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_depIdxs,
   907  		EnumInfos:         file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_enumTypes,
   908  		MessageInfos:      file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_msgTypes,
   909  	}.Build()
   910  	File_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto = out.File
   911  	file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_rawDesc = nil
   912  	file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_goTypes = nil
   913  	file_go_chromium_org_luci_analysis_internal_changepoints_proto_spanner_proto_depIdxs = nil
   914  }