go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/analysis/proto/v1/changepoints.pb.go (about) 1 // Copyright 2024 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.32.0 18 // protoc v3.21.7 19 // source: go.chromium.org/luci/analysis/proto/v1/changepoints.proto 20 21 package analysispb 22 23 import prpc "go.chromium.org/luci/grpc/prpc" 24 25 import ( 26 context "context" 27 grpc "google.golang.org/grpc" 28 codes "google.golang.org/grpc/codes" 29 status "google.golang.org/grpc/status" 30 protoreflect "google.golang.org/protobuf/reflect/protoreflect" 31 protoimpl "google.golang.org/protobuf/runtime/protoimpl" 32 timestamppb "google.golang.org/protobuf/types/known/timestamppb" 33 reflect "reflect" 34 sync "sync" 35 ) 36 37 const ( 38 // Verify that this generated code is sufficiently up-to-date. 39 _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) 40 // Verify that runtime/protoimpl is sufficiently up-to-date. 41 _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) 42 ) 43 44 type QueryChangepointGroupSummariesRequest struct { 45 state protoimpl.MessageState 46 sizeCache protoimpl.SizeCache 47 unknownFields protoimpl.UnknownFields 48 49 // The LUCI project. Mandatory field. 50 Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` 51 // A filter to be applied to each changepoint in the groups. 52 // If all changepoints in a group are filtered out, this group will not be returned. 53 Predicate *ChangepointPredicate `protobuf:"bytes,2,opt,name=predicate,proto3" json:"predicate,omitempty"` 54 } 55 56 func (x *QueryChangepointGroupSummariesRequest) Reset() { 57 *x = QueryChangepointGroupSummariesRequest{} 58 if protoimpl.UnsafeEnabled { 59 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[0] 60 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 61 ms.StoreMessageInfo(mi) 62 } 63 } 64 65 func (x *QueryChangepointGroupSummariesRequest) String() string { 66 return protoimpl.X.MessageStringOf(x) 67 } 68 69 func (*QueryChangepointGroupSummariesRequest) ProtoMessage() {} 70 71 func (x *QueryChangepointGroupSummariesRequest) ProtoReflect() protoreflect.Message { 72 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[0] 73 if protoimpl.UnsafeEnabled && x != nil { 74 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 75 if ms.LoadMessageInfo() == nil { 76 ms.StoreMessageInfo(mi) 77 } 78 return ms 79 } 80 return mi.MessageOf(x) 81 } 82 83 // Deprecated: Use QueryChangepointGroupSummariesRequest.ProtoReflect.Descriptor instead. 84 func (*QueryChangepointGroupSummariesRequest) Descriptor() ([]byte, []int) { 85 return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{0} 86 } 87 88 func (x *QueryChangepointGroupSummariesRequest) GetProject() string { 89 if x != nil { 90 return x.Project 91 } 92 return "" 93 } 94 95 func (x *QueryChangepointGroupSummariesRequest) GetPredicate() *ChangepointPredicate { 96 if x != nil { 97 return x.Predicate 98 } 99 return nil 100 } 101 102 // Represent a function Changepoint -> bool 103 type ChangepointPredicate struct { 104 state protoimpl.MessageState 105 sizeCache protoimpl.SizeCache 106 unknownFields protoimpl.UnknownFields 107 108 // The test id of this changepoint matches this prefix. 109 TestIdPrefix string `protobuf:"bytes,1,opt,name=test_id_prefix,json=testIdPrefix,proto3" json:"test_id_prefix,omitempty"` 110 // Specify a range. The unexpected verdict rate change on this changepoint needs to fall into this range. 111 // Unexpected verdict rate change is calculated by (unexpected verdict rate after changepoint - unexpected verdict rate before changepoint). Negative number means unexpected verdict rate decreases, positive number means increases. 112 // eg. {lower_bound:0.1, upper_bound:0.9} means keep changepoint which has a unexpected verdict rate increase >= 10% and <= 90%. 113 UnexpectedVerdictRateChangeRange *NumericRange `protobuf:"bytes,2,opt,name=unexpected_verdict_rate_change_range,json=unexpectedVerdictRateChangeRange,proto3" json:"unexpected_verdict_rate_change_range,omitempty"` 114 } 115 116 func (x *ChangepointPredicate) Reset() { 117 *x = ChangepointPredicate{} 118 if protoimpl.UnsafeEnabled { 119 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[1] 120 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 121 ms.StoreMessageInfo(mi) 122 } 123 } 124 125 func (x *ChangepointPredicate) String() string { 126 return protoimpl.X.MessageStringOf(x) 127 } 128 129 func (*ChangepointPredicate) ProtoMessage() {} 130 131 func (x *ChangepointPredicate) ProtoReflect() protoreflect.Message { 132 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[1] 133 if protoimpl.UnsafeEnabled && x != nil { 134 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 135 if ms.LoadMessageInfo() == nil { 136 ms.StoreMessageInfo(mi) 137 } 138 return ms 139 } 140 return mi.MessageOf(x) 141 } 142 143 // Deprecated: Use ChangepointPredicate.ProtoReflect.Descriptor instead. 144 func (*ChangepointPredicate) Descriptor() ([]byte, []int) { 145 return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{1} 146 } 147 148 func (x *ChangepointPredicate) GetTestIdPrefix() string { 149 if x != nil { 150 return x.TestIdPrefix 151 } 152 return "" 153 } 154 155 func (x *ChangepointPredicate) GetUnexpectedVerdictRateChangeRange() *NumericRange { 156 if x != nil { 157 return x.UnexpectedVerdictRateChangeRange 158 } 159 return nil 160 } 161 162 type QueryChangepointGroupSummariesResponse struct { 163 state protoimpl.MessageState 164 sizeCache protoimpl.SizeCache 165 unknownFields protoimpl.UnknownFields 166 167 // A list of changepoint group summaries. 168 GroupSummaries []*ChangepointGroupSummary `protobuf:"bytes,1,rep,name=group_summaries,json=groupSummaries,proto3" json:"group_summaries,omitempty"` 169 } 170 171 func (x *QueryChangepointGroupSummariesResponse) Reset() { 172 *x = QueryChangepointGroupSummariesResponse{} 173 if protoimpl.UnsafeEnabled { 174 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[2] 175 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 176 ms.StoreMessageInfo(mi) 177 } 178 } 179 180 func (x *QueryChangepointGroupSummariesResponse) String() string { 181 return protoimpl.X.MessageStringOf(x) 182 } 183 184 func (*QueryChangepointGroupSummariesResponse) ProtoMessage() {} 185 186 func (x *QueryChangepointGroupSummariesResponse) ProtoReflect() protoreflect.Message { 187 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[2] 188 if protoimpl.UnsafeEnabled && x != nil { 189 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 190 if ms.LoadMessageInfo() == nil { 191 ms.StoreMessageInfo(mi) 192 } 193 return ms 194 } 195 return mi.MessageOf(x) 196 } 197 198 // Deprecated: Use QueryChangepointGroupSummariesResponse.ProtoReflect.Descriptor instead. 199 func (*QueryChangepointGroupSummariesResponse) Descriptor() ([]byte, []int) { 200 return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{2} 201 } 202 203 func (x *QueryChangepointGroupSummariesResponse) GetGroupSummaries() []*ChangepointGroupSummary { 204 if x != nil { 205 return x.GroupSummaries 206 } 207 return nil 208 } 209 210 // Represent the summary of a changepoint group. 211 type ChangepointGroupSummary struct { 212 state protoimpl.MessageState 213 sizeCache protoimpl.SizeCache 214 unknownFields protoimpl.UnknownFields 215 216 // The canonical changepoint in the group. This is the changepoint with minimum (test_id, variant_hash, ref_hash, nominal_start_position) combination. 217 CanonicalChangepoint *Changepoint `protobuf:"bytes,1,opt,name=canonical_changepoint,json=canonicalChangepoint,proto3" json:"canonical_changepoint,omitempty"` 218 // Statistics of this group. 219 Statistics *ChangepointGroupStatistics `protobuf:"bytes,2,opt,name=statistics,proto3" json:"statistics,omitempty"` 220 } 221 222 func (x *ChangepointGroupSummary) Reset() { 223 *x = ChangepointGroupSummary{} 224 if protoimpl.UnsafeEnabled { 225 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[3] 226 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 227 ms.StoreMessageInfo(mi) 228 } 229 } 230 231 func (x *ChangepointGroupSummary) String() string { 232 return protoimpl.X.MessageStringOf(x) 233 } 234 235 func (*ChangepointGroupSummary) ProtoMessage() {} 236 237 func (x *ChangepointGroupSummary) ProtoReflect() protoreflect.Message { 238 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[3] 239 if protoimpl.UnsafeEnabled && x != nil { 240 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 241 if ms.LoadMessageInfo() == nil { 242 ms.StoreMessageInfo(mi) 243 } 244 return ms 245 } 246 return mi.MessageOf(x) 247 } 248 249 // Deprecated: Use ChangepointGroupSummary.ProtoReflect.Descriptor instead. 250 func (*ChangepointGroupSummary) Descriptor() ([]byte, []int) { 251 return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{3} 252 } 253 254 func (x *ChangepointGroupSummary) GetCanonicalChangepoint() *Changepoint { 255 if x != nil { 256 return x.CanonicalChangepoint 257 } 258 return nil 259 } 260 261 func (x *ChangepointGroupSummary) GetStatistics() *ChangepointGroupStatistics { 262 if x != nil { 263 return x.Statistics 264 } 265 return nil 266 } 267 268 type ChangepointGroupStatistics struct { 269 state protoimpl.MessageState 270 sizeCache protoimpl.SizeCache 271 unknownFields protoimpl.UnknownFields 272 273 // The number of test variant branches in this group. 274 Count int32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` 275 // Unexpected verdict rate before the changepoint. 276 // The per test variant branch, unexpected verdict rate is calculated as (count of unexpected verdict/count of all verdicts). 277 UnexpectedVerdictRateBefore *ChangepointGroupStatistics_RateDistribution `protobuf:"bytes,2,opt,name=unexpected_verdict_rate_before,json=unexpectedVerdictRateBefore,proto3" json:"unexpected_verdict_rate_before,omitempty"` 278 // Unexpected verdict rate after the changepoint. 279 UnexpectedVerdictRateAfter *ChangepointGroupStatistics_RateDistribution `protobuf:"bytes,3,opt,name=unexpected_verdict_rate_after,json=unexpectedVerdictRateAfter,proto3" json:"unexpected_verdict_rate_after,omitempty"` 280 // The current unexpected verdict rate. 281 UnexpectedVerdictRateCurrent *ChangepointGroupStatistics_RateDistribution `protobuf:"bytes,4,opt,name=unexpected_verdict_rate_current,json=unexpectedVerdictRateCurrent,proto3" json:"unexpected_verdict_rate_current,omitempty"` 282 // The amount of change in unexpected verdict rate before and after the changepoint. 283 UnexpectedVerdictRateChange *ChangepointGroupStatistics_RateChangeBuckets `protobuf:"bytes,5,opt,name=unexpected_verdict_rate_change,json=unexpectedVerdictRateChange,proto3" json:"unexpected_verdict_rate_change,omitempty"` 284 } 285 286 func (x *ChangepointGroupStatistics) Reset() { 287 *x = ChangepointGroupStatistics{} 288 if protoimpl.UnsafeEnabled { 289 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[4] 290 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 291 ms.StoreMessageInfo(mi) 292 } 293 } 294 295 func (x *ChangepointGroupStatistics) String() string { 296 return protoimpl.X.MessageStringOf(x) 297 } 298 299 func (*ChangepointGroupStatistics) ProtoMessage() {} 300 301 func (x *ChangepointGroupStatistics) ProtoReflect() protoreflect.Message { 302 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[4] 303 if protoimpl.UnsafeEnabled && x != nil { 304 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 305 if ms.LoadMessageInfo() == nil { 306 ms.StoreMessageInfo(mi) 307 } 308 return ms 309 } 310 return mi.MessageOf(x) 311 } 312 313 // Deprecated: Use ChangepointGroupStatistics.ProtoReflect.Descriptor instead. 314 func (*ChangepointGroupStatistics) Descriptor() ([]byte, []int) { 315 return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{4} 316 } 317 318 func (x *ChangepointGroupStatistics) GetCount() int32 { 319 if x != nil { 320 return x.Count 321 } 322 return 0 323 } 324 325 func (x *ChangepointGroupStatistics) GetUnexpectedVerdictRateBefore() *ChangepointGroupStatistics_RateDistribution { 326 if x != nil { 327 return x.UnexpectedVerdictRateBefore 328 } 329 return nil 330 } 331 332 func (x *ChangepointGroupStatistics) GetUnexpectedVerdictRateAfter() *ChangepointGroupStatistics_RateDistribution { 333 if x != nil { 334 return x.UnexpectedVerdictRateAfter 335 } 336 return nil 337 } 338 339 func (x *ChangepointGroupStatistics) GetUnexpectedVerdictRateCurrent() *ChangepointGroupStatistics_RateDistribution { 340 if x != nil { 341 return x.UnexpectedVerdictRateCurrent 342 } 343 return nil 344 } 345 346 func (x *ChangepointGroupStatistics) GetUnexpectedVerdictRateChange() *ChangepointGroupStatistics_RateChangeBuckets { 347 if x != nil { 348 return x.UnexpectedVerdictRateChange 349 } 350 return nil 351 } 352 353 type QueryChangepointsInGroupRequest struct { 354 state protoimpl.MessageState 355 sizeCache protoimpl.SizeCache 356 unknownFields protoimpl.UnknownFields 357 358 // The LUCI project. Mandatory field. 359 Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` 360 // Identify a group with this changepoint. Mandatory field. 361 GroupKey *QueryChangepointsInGroupRequest_ChangepointIdentifier `protobuf:"bytes,2,opt,name=group_key,json=groupKey,proto3" json:"group_key,omitempty"` 362 // A filter to be applied to each changepoint. 363 Predicate *ChangepointPredicate `protobuf:"bytes,3,opt,name=predicate,proto3" json:"predicate,omitempty"` 364 } 365 366 func (x *QueryChangepointsInGroupRequest) Reset() { 367 *x = QueryChangepointsInGroupRequest{} 368 if protoimpl.UnsafeEnabled { 369 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[5] 370 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 371 ms.StoreMessageInfo(mi) 372 } 373 } 374 375 func (x *QueryChangepointsInGroupRequest) String() string { 376 return protoimpl.X.MessageStringOf(x) 377 } 378 379 func (*QueryChangepointsInGroupRequest) ProtoMessage() {} 380 381 func (x *QueryChangepointsInGroupRequest) ProtoReflect() protoreflect.Message { 382 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[5] 383 if protoimpl.UnsafeEnabled && x != nil { 384 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 385 if ms.LoadMessageInfo() == nil { 386 ms.StoreMessageInfo(mi) 387 } 388 return ms 389 } 390 return mi.MessageOf(x) 391 } 392 393 // Deprecated: Use QueryChangepointsInGroupRequest.ProtoReflect.Descriptor instead. 394 func (*QueryChangepointsInGroupRequest) Descriptor() ([]byte, []int) { 395 return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{5} 396 } 397 398 func (x *QueryChangepointsInGroupRequest) GetProject() string { 399 if x != nil { 400 return x.Project 401 } 402 return "" 403 } 404 405 func (x *QueryChangepointsInGroupRequest) GetGroupKey() *QueryChangepointsInGroupRequest_ChangepointIdentifier { 406 if x != nil { 407 return x.GroupKey 408 } 409 return nil 410 } 411 412 func (x *QueryChangepointsInGroupRequest) GetPredicate() *ChangepointPredicate { 413 if x != nil { 414 return x.Predicate 415 } 416 return nil 417 } 418 419 // TODO: Implement pagination, currently just return at most 1000 changepoints. 420 type QueryChangepointsInGroupResponse struct { 421 state protoimpl.MessageState 422 sizeCache protoimpl.SizeCache 423 unknownFields protoimpl.UnknownFields 424 425 // A list of changepoints in a group. 426 Changepoints []*Changepoint `protobuf:"bytes,1,rep,name=changepoints,proto3" json:"changepoints,omitempty"` 427 } 428 429 func (x *QueryChangepointsInGroupResponse) Reset() { 430 *x = QueryChangepointsInGroupResponse{} 431 if protoimpl.UnsafeEnabled { 432 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[6] 433 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 434 ms.StoreMessageInfo(mi) 435 } 436 } 437 438 func (x *QueryChangepointsInGroupResponse) String() string { 439 return protoimpl.X.MessageStringOf(x) 440 } 441 442 func (*QueryChangepointsInGroupResponse) ProtoMessage() {} 443 444 func (x *QueryChangepointsInGroupResponse) ProtoReflect() protoreflect.Message { 445 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[6] 446 if protoimpl.UnsafeEnabled && x != nil { 447 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 448 if ms.LoadMessageInfo() == nil { 449 ms.StoreMessageInfo(mi) 450 } 451 return ms 452 } 453 return mi.MessageOf(x) 454 } 455 456 // Deprecated: Use QueryChangepointsInGroupResponse.ProtoReflect.Descriptor instead. 457 func (*QueryChangepointsInGroupResponse) Descriptor() ([]byte, []int) { 458 return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{6} 459 } 460 461 func (x *QueryChangepointsInGroupResponse) GetChangepoints() []*Changepoint { 462 if x != nil { 463 return x.Changepoints 464 } 465 return nil 466 } 467 468 // Represent a changepoint of a test variant branch. 469 // Next ID: 15. 470 type Changepoint struct { 471 state protoimpl.MessageState 472 sizeCache protoimpl.SizeCache 473 unknownFields protoimpl.UnknownFields 474 475 // The LUCI Project. E.g. "chromium". 476 Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` 477 // The identity of the test. 478 TestId string `protobuf:"bytes,2,opt,name=test_id,json=testId,proto3" json:"test_id,omitempty"` 479 // Hash of the variant, as 16 lowercase hexadecimal characters. 480 // E.g. "96c68dc946ab4068". 481 VariantHash string `protobuf:"bytes,3,opt,name=variant_hash,json=variantHash,proto3" json:"variant_hash,omitempty"` 482 // key:value pairs to specify the way of running a particular test. 483 // e.g. a specific bucket, builder and a test suite. 484 Variant *Variant `protobuf:"bytes,14,opt,name=variant,proto3" json:"variant,omitempty"` 485 // Hash of the source branch, as 16 lowercase hexadecimal characters. 486 RefHash string `protobuf:"bytes,4,opt,name=ref_hash,json=refHash,proto3" json:"ref_hash,omitempty"` 487 // The branch in source control. 488 Ref *SourceRef `protobuf:"bytes,5,opt,name=ref,proto3" json:"ref,omitempty"` 489 // The nominal start hour of this changepoint. 490 StartHour *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=start_hour,json=startHour,proto3" json:"start_hour,omitempty"` 491 // The lower bound of the starting changepoint position in a 99% two-tailed 492 // confidence interval. Inclusive. 493 StartPositionLowerBound_99Th int64 `protobuf:"varint,10,opt,name=start_position_lower_bound_99th,json=startPositionLowerBound99th,proto3" json:"start_position_lower_bound_99th,omitempty"` 494 // The upper bound of the starting changepoint position in a 99% two-tailed 495 // confidence interval. Inclusive. 496 StartPositionUpperBound_99Th int64 `protobuf:"varint,11,opt,name=start_position_upper_bound_99th,json=startPositionUpperBound99th,proto3" json:"start_position_upper_bound_99th,omitempty"` 497 // The nominal commit position at which the segment starts (inclusive). 498 NominalStartPosition int64 `protobuf:"varint,12,opt,name=nominal_start_position,json=nominalStartPosition,proto3" json:"nominal_start_position,omitempty"` 499 // The nominal commit position at which the previous segment ends (inclusive). 500 PreviousSegmentNominalEndPosition int64 `protobuf:"varint,13,opt,name=previous_segment_nominal_end_position,json=previousSegmentNominalEndPosition,proto3" json:"previous_segment_nominal_end_position,omitempty"` 501 } 502 503 func (x *Changepoint) Reset() { 504 *x = Changepoint{} 505 if protoimpl.UnsafeEnabled { 506 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[7] 507 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 508 ms.StoreMessageInfo(mi) 509 } 510 } 511 512 func (x *Changepoint) String() string { 513 return protoimpl.X.MessageStringOf(x) 514 } 515 516 func (*Changepoint) ProtoMessage() {} 517 518 func (x *Changepoint) ProtoReflect() protoreflect.Message { 519 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[7] 520 if protoimpl.UnsafeEnabled && x != nil { 521 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 522 if ms.LoadMessageInfo() == nil { 523 ms.StoreMessageInfo(mi) 524 } 525 return ms 526 } 527 return mi.MessageOf(x) 528 } 529 530 // Deprecated: Use Changepoint.ProtoReflect.Descriptor instead. 531 func (*Changepoint) Descriptor() ([]byte, []int) { 532 return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{7} 533 } 534 535 func (x *Changepoint) GetProject() string { 536 if x != nil { 537 return x.Project 538 } 539 return "" 540 } 541 542 func (x *Changepoint) GetTestId() string { 543 if x != nil { 544 return x.TestId 545 } 546 return "" 547 } 548 549 func (x *Changepoint) GetVariantHash() string { 550 if x != nil { 551 return x.VariantHash 552 } 553 return "" 554 } 555 556 func (x *Changepoint) GetVariant() *Variant { 557 if x != nil { 558 return x.Variant 559 } 560 return nil 561 } 562 563 func (x *Changepoint) GetRefHash() string { 564 if x != nil { 565 return x.RefHash 566 } 567 return "" 568 } 569 570 func (x *Changepoint) GetRef() *SourceRef { 571 if x != nil { 572 return x.Ref 573 } 574 return nil 575 } 576 577 func (x *Changepoint) GetStartHour() *timestamppb.Timestamp { 578 if x != nil { 579 return x.StartHour 580 } 581 return nil 582 } 583 584 func (x *Changepoint) GetStartPositionLowerBound_99Th() int64 { 585 if x != nil { 586 return x.StartPositionLowerBound_99Th 587 } 588 return 0 589 } 590 591 func (x *Changepoint) GetStartPositionUpperBound_99Th() int64 { 592 if x != nil { 593 return x.StartPositionUpperBound_99Th 594 } 595 return 0 596 } 597 598 func (x *Changepoint) GetNominalStartPosition() int64 { 599 if x != nil { 600 return x.NominalStartPosition 601 } 602 return 0 603 } 604 605 func (x *Changepoint) GetPreviousSegmentNominalEndPosition() int64 { 606 if x != nil { 607 return x.PreviousSegmentNominalEndPosition 608 } 609 return 0 610 } 611 612 type ChangepointGroupStatistics_RateDistribution struct { 613 state protoimpl.MessageState 614 sizeCache protoimpl.SizeCache 615 unknownFields protoimpl.UnknownFields 616 617 // Average unexpected verdict rate of all test variant branches in the group. This is a value between 0.0 and 1.0. 618 // Consequently, this is an ‘average of averages’. 619 Average float32 `protobuf:"fixed32,1,opt,name=average,proto3" json:"average,omitempty"` 620 // Count the number of changepoint that fall into each rate bucket. 621 Buckets *ChangepointGroupStatistics_RateDistribution_RateBuckets `protobuf:"bytes,2,opt,name=buckets,proto3" json:"buckets,omitempty"` 622 } 623 624 func (x *ChangepointGroupStatistics_RateDistribution) Reset() { 625 *x = ChangepointGroupStatistics_RateDistribution{} 626 if protoimpl.UnsafeEnabled { 627 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[8] 628 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 629 ms.StoreMessageInfo(mi) 630 } 631 } 632 633 func (x *ChangepointGroupStatistics_RateDistribution) String() string { 634 return protoimpl.X.MessageStringOf(x) 635 } 636 637 func (*ChangepointGroupStatistics_RateDistribution) ProtoMessage() {} 638 639 func (x *ChangepointGroupStatistics_RateDistribution) ProtoReflect() protoreflect.Message { 640 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[8] 641 if protoimpl.UnsafeEnabled && x != nil { 642 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 643 if ms.LoadMessageInfo() == nil { 644 ms.StoreMessageInfo(mi) 645 } 646 return ms 647 } 648 return mi.MessageOf(x) 649 } 650 651 // Deprecated: Use ChangepointGroupStatistics_RateDistribution.ProtoReflect.Descriptor instead. 652 func (*ChangepointGroupStatistics_RateDistribution) Descriptor() ([]byte, []int) { 653 return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{4, 0} 654 } 655 656 func (x *ChangepointGroupStatistics_RateDistribution) GetAverage() float32 { 657 if x != nil { 658 return x.Average 659 } 660 return 0 661 } 662 663 func (x *ChangepointGroupStatistics_RateDistribution) GetBuckets() *ChangepointGroupStatistics_RateDistribution_RateBuckets { 664 if x != nil { 665 return x.Buckets 666 } 667 return nil 668 } 669 670 // Unexpected verdict rate change is calculated by (unexpected verdict rate after changepoint - unexpected verdict rate before changepoint). 671 // TODO: we need to add buckets for unexpected verdict rate decrease when we support grouping fixes. Unexpected verdict rate decrease will be represented as negative number. 672 type ChangepointGroupStatistics_RateChangeBuckets struct { 673 state protoimpl.MessageState 674 sizeCache protoimpl.SizeCache 675 unknownFields protoimpl.UnknownFields 676 677 // Counts the number of test variant branches which saw their unexpected verdict rate increase by between 0% (inclusive) and 20% (exclusive). 678 CountIncreased_0To_20Percent int32 `protobuf:"varint,1,opt,name=count_increased_0_to_20_percent,json=countIncreased0To20Percent,proto3" json:"count_increased_0_to_20_percent,omitempty"` 679 // Counts the number of test variant branches which saw their unexpected verdict rate increase by between 20% (inclusive) and 50% (exclusive). 680 CountIncreased_20To_50Percent int32 `protobuf:"varint,2,opt,name=count_increased_20_to_50_percent,json=countIncreased20To50Percent,proto3" json:"count_increased_20_to_50_percent,omitempty"` 681 // Counts the number of test variant branches which saw their unexpected verdict rate increase by between 50% (inclusive) or more. 682 CountIncreased_50To_100Percent int32 `protobuf:"varint,3,opt,name=count_increased_50_to_100_percent,json=countIncreased50To100Percent,proto3" json:"count_increased_50_to_100_percent,omitempty"` 683 } 684 685 func (x *ChangepointGroupStatistics_RateChangeBuckets) Reset() { 686 *x = ChangepointGroupStatistics_RateChangeBuckets{} 687 if protoimpl.UnsafeEnabled { 688 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[9] 689 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 690 ms.StoreMessageInfo(mi) 691 } 692 } 693 694 func (x *ChangepointGroupStatistics_RateChangeBuckets) String() string { 695 return protoimpl.X.MessageStringOf(x) 696 } 697 698 func (*ChangepointGroupStatistics_RateChangeBuckets) ProtoMessage() {} 699 700 func (x *ChangepointGroupStatistics_RateChangeBuckets) ProtoReflect() protoreflect.Message { 701 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[9] 702 if protoimpl.UnsafeEnabled && x != nil { 703 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 704 if ms.LoadMessageInfo() == nil { 705 ms.StoreMessageInfo(mi) 706 } 707 return ms 708 } 709 return mi.MessageOf(x) 710 } 711 712 // Deprecated: Use ChangepointGroupStatistics_RateChangeBuckets.ProtoReflect.Descriptor instead. 713 func (*ChangepointGroupStatistics_RateChangeBuckets) Descriptor() ([]byte, []int) { 714 return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{4, 1} 715 } 716 717 func (x *ChangepointGroupStatistics_RateChangeBuckets) GetCountIncreased_0To_20Percent() int32 { 718 if x != nil { 719 return x.CountIncreased_0To_20Percent 720 } 721 return 0 722 } 723 724 func (x *ChangepointGroupStatistics_RateChangeBuckets) GetCountIncreased_20To_50Percent() int32 { 725 if x != nil { 726 return x.CountIncreased_20To_50Percent 727 } 728 return 0 729 } 730 731 func (x *ChangepointGroupStatistics_RateChangeBuckets) GetCountIncreased_50To_100Percent() int32 { 732 if x != nil { 733 return x.CountIncreased_50To_100Percent 734 } 735 return 0 736 } 737 738 type ChangepointGroupStatistics_RateDistribution_RateBuckets struct { 739 state protoimpl.MessageState 740 sizeCache protoimpl.SizeCache 741 unknownFields protoimpl.UnknownFields 742 743 // Counts the number of test variant branches with a unexpected verdict rate less than 5% (exclusive). 744 CountLess_5Percent int32 `protobuf:"varint,1,opt,name=count_less_5_percent,json=countLess5Percent,proto3" json:"count_less_5_percent,omitempty"` 745 // Counts the number of test variant branches with a unexpected verdict rate greater than or equal to 5%, but less than 95%. 746 CountAbove_5LessThan_95Percent int32 `protobuf:"varint,2,opt,name=count_above_5_less_than_95_percent,json=countAbove5LessThan95Percent,proto3" json:"count_above_5_less_than_95_percent,omitempty"` 747 // Counts the number of test variant branches with a unexpected verdict rate equal to or greater than 95%. 748 CountAbove_95Percent int32 `protobuf:"varint,3,opt,name=count_above_95_percent,json=countAbove95Percent,proto3" json:"count_above_95_percent,omitempty"` 749 } 750 751 func (x *ChangepointGroupStatistics_RateDistribution_RateBuckets) Reset() { 752 *x = ChangepointGroupStatistics_RateDistribution_RateBuckets{} 753 if protoimpl.UnsafeEnabled { 754 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[10] 755 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 756 ms.StoreMessageInfo(mi) 757 } 758 } 759 760 func (x *ChangepointGroupStatistics_RateDistribution_RateBuckets) String() string { 761 return protoimpl.X.MessageStringOf(x) 762 } 763 764 func (*ChangepointGroupStatistics_RateDistribution_RateBuckets) ProtoMessage() {} 765 766 func (x *ChangepointGroupStatistics_RateDistribution_RateBuckets) ProtoReflect() protoreflect.Message { 767 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[10] 768 if protoimpl.UnsafeEnabled && x != nil { 769 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 770 if ms.LoadMessageInfo() == nil { 771 ms.StoreMessageInfo(mi) 772 } 773 return ms 774 } 775 return mi.MessageOf(x) 776 } 777 778 // Deprecated: Use ChangepointGroupStatistics_RateDistribution_RateBuckets.ProtoReflect.Descriptor instead. 779 func (*ChangepointGroupStatistics_RateDistribution_RateBuckets) Descriptor() ([]byte, []int) { 780 return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{4, 0, 0} 781 } 782 783 func (x *ChangepointGroupStatistics_RateDistribution_RateBuckets) GetCountLess_5Percent() int32 { 784 if x != nil { 785 return x.CountLess_5Percent 786 } 787 return 0 788 } 789 790 func (x *ChangepointGroupStatistics_RateDistribution_RateBuckets) GetCountAbove_5LessThan_95Percent() int32 { 791 if x != nil { 792 return x.CountAbove_5LessThan_95Percent 793 } 794 return 0 795 } 796 797 func (x *ChangepointGroupStatistics_RateDistribution_RateBuckets) GetCountAbove_95Percent() int32 { 798 if x != nil { 799 return x.CountAbove_95Percent 800 } 801 return 0 802 } 803 804 // We consider two changepoints matches if 805 // - their test_id, variant_hash, ref_hash are exactly the same, 806 // AND 807 // - nominal_start_position is within the other changepoint's 99% confidence interval (inclusive). 808 // 809 // Most of the time there should be only one matching changepoint. 810 // However, in rare cases adjacent segments can have an overlapping 99% confidence interval. 811 // It makes it possible that more than one changepoint matches. In this case, we select the one with the closest nominal start position. 812 type QueryChangepointsInGroupRequest_ChangepointIdentifier struct { 813 state protoimpl.MessageState 814 sizeCache protoimpl.SizeCache 815 unknownFields protoimpl.UnknownFields 816 817 TestId string `protobuf:"bytes,1,opt,name=test_id,json=testId,proto3" json:"test_id,omitempty"` 818 VariantHash string `protobuf:"bytes,2,opt,name=variant_hash,json=variantHash,proto3" json:"variant_hash,omitempty"` 819 RefHash string `protobuf:"bytes,3,opt,name=ref_hash,json=refHash,proto3" json:"ref_hash,omitempty"` 820 NominalStartPosition int64 `protobuf:"varint,4,opt,name=nominal_start_position,json=nominalStartPosition,proto3" json:"nominal_start_position,omitempty"` 821 // The nominal start hour of this changepoint in UTC. 822 // This is used to locate a week in UTC (Saturday to Sunday) to generate changepoint groups. 823 StartHour *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=start_hour,json=startHour,proto3" json:"start_hour,omitempty"` 824 } 825 826 func (x *QueryChangepointsInGroupRequest_ChangepointIdentifier) Reset() { 827 *x = QueryChangepointsInGroupRequest_ChangepointIdentifier{} 828 if protoimpl.UnsafeEnabled { 829 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[11] 830 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 831 ms.StoreMessageInfo(mi) 832 } 833 } 834 835 func (x *QueryChangepointsInGroupRequest_ChangepointIdentifier) String() string { 836 return protoimpl.X.MessageStringOf(x) 837 } 838 839 func (*QueryChangepointsInGroupRequest_ChangepointIdentifier) ProtoMessage() {} 840 841 func (x *QueryChangepointsInGroupRequest_ChangepointIdentifier) ProtoReflect() protoreflect.Message { 842 mi := &file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[11] 843 if protoimpl.UnsafeEnabled && x != nil { 844 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 845 if ms.LoadMessageInfo() == nil { 846 ms.StoreMessageInfo(mi) 847 } 848 return ms 849 } 850 return mi.MessageOf(x) 851 } 852 853 // Deprecated: Use QueryChangepointsInGroupRequest_ChangepointIdentifier.ProtoReflect.Descriptor instead. 854 func (*QueryChangepointsInGroupRequest_ChangepointIdentifier) Descriptor() ([]byte, []int) { 855 return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP(), []int{5, 0} 856 } 857 858 func (x *QueryChangepointsInGroupRequest_ChangepointIdentifier) GetTestId() string { 859 if x != nil { 860 return x.TestId 861 } 862 return "" 863 } 864 865 func (x *QueryChangepointsInGroupRequest_ChangepointIdentifier) GetVariantHash() string { 866 if x != nil { 867 return x.VariantHash 868 } 869 return "" 870 } 871 872 func (x *QueryChangepointsInGroupRequest_ChangepointIdentifier) GetRefHash() string { 873 if x != nil { 874 return x.RefHash 875 } 876 return "" 877 } 878 879 func (x *QueryChangepointsInGroupRequest_ChangepointIdentifier) GetNominalStartPosition() int64 { 880 if x != nil { 881 return x.NominalStartPosition 882 } 883 return 0 884 } 885 886 func (x *QueryChangepointsInGroupRequest_ChangepointIdentifier) GetStartHour() *timestamppb.Timestamp { 887 if x != nil { 888 return x.StartHour 889 } 890 return nil 891 } 892 893 var File_go_chromium_org_luci_analysis_proto_v1_changepoints_proto protoreflect.FileDescriptor 894 895 var file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDesc = []byte{ 896 0x0a, 0x39, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 897 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 898 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 899 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x6c, 0x75, 0x63, 900 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x67, 901 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 902 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 903 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 904 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 905 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x70, 906 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x33, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 907 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 908 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 909 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x87, 0x01, 0x0a, 0x25, 0x51, 0x75, 910 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 911 0x6f, 0x75, 0x70, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 912 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 913 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x44, 0x0a, 914 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 915 0x32, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 916 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x50, 917 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 918 0x61, 0x74, 0x65, 0x22, 0xac, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 919 0x69, 0x6e, 0x74, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0e, 920 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 921 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x65, 0x73, 0x74, 0x49, 0x64, 0x50, 0x72, 0x65, 0x66, 922 0x69, 0x78, 0x12, 0x6e, 0x0a, 0x24, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 923 0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 924 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 925 0x32, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 926 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x52, 0x61, 0x6e, 0x67, 0x65, 927 0x52, 0x20, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x56, 0x65, 0x72, 0x64, 928 0x69, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x61, 0x6e, 929 0x67, 0x65, 0x22, 0x7c, 0x0a, 0x26, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 930 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x75, 0x6d, 0x6d, 0x61, 931 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0f, 932 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 933 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 934 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 935 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 936 0x52, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 937 0x22, 0xbb, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 938 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x52, 0x0a, 0x15, 939 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 940 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 941 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 942 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x14, 0x63, 0x61, 0x6e, 0x6f, 943 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 944 0x12, 0x4c, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 945 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 946 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 947 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 948 0x63, 0x73, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0x86, 949 0x09, 0x0a, 0x1a, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 950 0x6f, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x14, 0x0a, 951 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 952 0x75, 0x6e, 0x74, 0x12, 0x82, 0x01, 0x0a, 0x1e, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 953 0x65, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 954 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6c, 955 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 956 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 957 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 958 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1b, 0x75, 0x6e, 0x65, 959 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x52, 0x61, 960 0x74, 0x65, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x1d, 0x75, 0x6e, 0x65, 961 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x5f, 962 0x72, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 963 0x32, 0x3d, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 964 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 965 0x72, 0x6f, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x52, 966 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 967 0x1a, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x56, 0x65, 0x72, 0x64, 0x69, 968 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x84, 0x01, 0x0a, 0x1f, 969 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 970 0x63, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 971 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 972 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 973 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 974 0x69, 0x63, 0x73, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 975 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1c, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 976 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 977 0x6e, 0x74, 0x12, 0x83, 0x01, 0x0a, 0x1e, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 978 0x64, 0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x63, 979 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x6c, 0x75, 980 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 981 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 982 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x43, 0x68, 983 0x61, 0x6e, 0x67, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x1b, 0x75, 0x6e, 0x65, 984 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x52, 0x61, 985 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x1a, 0xd1, 0x02, 0x0a, 0x10, 0x52, 0x61, 0x74, 986 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 987 0x07, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 988 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x12, 0x63, 0x0a, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, 989 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 990 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 991 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 992 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, 993 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 994 0x65, 0x74, 0x73, 0x52, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x1a, 0xbd, 0x01, 0x0a, 995 0x0b, 0x52, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x2f, 0x0a, 0x14, 996 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x35, 0x5f, 0x70, 0x65, 0x72, 997 0x63, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x63, 0x6f, 0x75, 0x6e, 998 0x74, 0x4c, 0x65, 0x73, 0x73, 0x35, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 999 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x5f, 0x35, 0x5f, 0x6c, 1000 0x65, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x5f, 0x39, 0x35, 0x5f, 0x70, 0x65, 0x72, 0x63, 1001 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 1002 0x41, 0x62, 0x6f, 0x76, 0x65, 0x35, 0x4c, 0x65, 0x73, 0x73, 0x54, 0x68, 0x61, 0x6e, 0x39, 0x35, 1003 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x16, 0x63, 0x6f, 0x75, 0x6e, 0x74, 1004 0x5f, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x5f, 0x39, 0x35, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 1005 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x62, 1006 0x6f, 0x76, 0x65, 0x39, 0x35, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x1a, 0xe8, 0x01, 0x0a, 1007 0x11, 0x52, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 1008 0x74, 0x73, 0x12, 0x43, 0x0a, 0x1f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x63, 0x72, 1009 0x65, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x30, 0x5f, 0x74, 0x6f, 0x5f, 0x32, 0x30, 0x5f, 0x70, 0x65, 1010 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1a, 0x63, 0x6f, 0x75, 1011 0x6e, 0x74, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x64, 0x30, 0x54, 0x6f, 0x32, 0x30, 1012 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 1013 0x5f, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x32, 0x30, 0x5f, 0x74, 0x6f, 1014 0x5f, 0x35, 0x30, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 1015 0x05, 0x52, 0x1b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 1016 0x64, 0x32, 0x30, 0x54, 0x6f, 0x35, 0x30, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x47, 1017 0x0a, 0x21, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 1018 0x64, 0x5f, 0x35, 0x30, 0x5f, 0x74, 0x6f, 0x5f, 0x31, 0x30, 0x30, 0x5f, 0x70, 0x65, 0x72, 0x63, 1019 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 1020 0x49, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x64, 0x35, 0x30, 0x54, 0x6f, 0x31, 0x30, 0x30, 1021 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0xc9, 0x03, 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72, 1022 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x49, 0x6e, 0x47, 1023 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 1024 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 1025 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x64, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6b, 1026 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 1027 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 1028 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x49, 0x6e, 0x47, 1029 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 1030 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 1031 0x72, 0x52, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x09, 0x70, 1032 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 1033 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 1034 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, 0x65, 1035 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 1036 0x65, 0x1a, 0xdf, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 1037 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x74, 1038 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 1039 0x73, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 1040 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 1041 0x61, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x66, 0x5f, 0x68, 1042 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x66, 0x48, 0x61, 1043 0x73, 0x68, 0x12, 0x34, 0x0a, 0x16, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 1044 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 1045 0x28, 0x03, 0x52, 0x14, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 1046 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 1047 0x74, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 1048 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 1049 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 1050 0x6f, 0x75, 0x72, 0x22, 0x65, 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x6e, 1051 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x49, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 1052 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x6e, 0x67, 1053 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 1054 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 1055 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0c, 0x63, 0x68, 1056 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x22, 0xb1, 0x04, 0x0a, 0x0b, 0x43, 1057 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 1058 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 1059 0x6a, 0x65, 0x63, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 1060 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 1061 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 1062 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 1063 0x12, 0x33, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 1064 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 1065 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x52, 0x07, 0x76, 0x61, 1066 0x72, 0x69, 0x61, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x66, 0x5f, 0x68, 0x61, 0x73, 1067 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x66, 0x48, 0x61, 0x73, 0x68, 1068 0x12, 0x2d, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 1069 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 1070 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 1071 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x09, 0x20, 1072 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 1073 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 1074 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x44, 0x0a, 0x1f, 0x73, 0x74, 1075 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x77, 1076 0x65, 0x72, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x39, 0x39, 0x74, 0x68, 0x18, 0x0a, 0x20, 1077 0x01, 0x28, 0x03, 0x52, 0x1b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 1078 0x6f, 0x6e, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x39, 0x39, 0x74, 0x68, 1079 0x12, 0x44, 0x0a, 0x1f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 1080 0x6f, 0x6e, 0x5f, 0x75, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x39, 1081 0x39, 0x74, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1b, 0x73, 0x74, 0x61, 0x72, 0x74, 1082 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x70, 0x65, 0x72, 0x42, 0x6f, 0x75, 1083 0x6e, 0x64, 0x39, 0x39, 0x74, 0x68, 0x12, 0x34, 0x0a, 0x16, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 1084 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 1085 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x53, 1086 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x25, 1087 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 1088 0x5f, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x70, 0x6f, 0x73, 1089 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x21, 0x70, 0x72, 0x65, 1090 0x76, 0x69, 0x6f, 0x75, 0x73, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x6d, 0x69, 1091 0x6e, 0x61, 0x6c, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x32, 0xac, 1092 0x02, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 1093 0x95, 0x01, 0x0a, 0x1e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 1094 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 1095 0x65, 0x73, 0x12, 0x37, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 1096 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 1097 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x75, 0x6d, 0x6d, 0x61, 1098 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x6c, 0x75, 1099 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 1100 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x47, 1101 0x72, 0x6f, 0x75, 0x70, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 1102 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x51, 0x75, 0x65, 0x72, 1103 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x49, 0x6e, 0x47, 1104 0x72, 0x6f, 0x75, 0x70, 0x12, 0x31, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 1105 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x68, 0x61, 1106 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x49, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 1107 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 1108 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 1109 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x49, 0x6e, 0x47, 0x72, 1110 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x33, 0x5a, 1111 0x31, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 1112 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 1113 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 1114 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 1115 } 1116 1117 var ( 1118 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescOnce sync.Once 1119 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescData = file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDesc 1120 ) 1121 1122 func file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescGZIP() []byte { 1123 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescOnce.Do(func() { 1124 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescData = protoimpl.X.CompressGZIP(file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescData) 1125 }) 1126 return file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDescData 1127 } 1128 1129 var file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes = make([]protoimpl.MessageInfo, 12) 1130 var file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_goTypes = []interface{}{ 1131 (*QueryChangepointGroupSummariesRequest)(nil), // 0: luci.analysis.v1.QueryChangepointGroupSummariesRequest 1132 (*ChangepointPredicate)(nil), // 1: luci.analysis.v1.ChangepointPredicate 1133 (*QueryChangepointGroupSummariesResponse)(nil), // 2: luci.analysis.v1.QueryChangepointGroupSummariesResponse 1134 (*ChangepointGroupSummary)(nil), // 3: luci.analysis.v1.ChangepointGroupSummary 1135 (*ChangepointGroupStatistics)(nil), // 4: luci.analysis.v1.ChangepointGroupStatistics 1136 (*QueryChangepointsInGroupRequest)(nil), // 5: luci.analysis.v1.QueryChangepointsInGroupRequest 1137 (*QueryChangepointsInGroupResponse)(nil), // 6: luci.analysis.v1.QueryChangepointsInGroupResponse 1138 (*Changepoint)(nil), // 7: luci.analysis.v1.Changepoint 1139 (*ChangepointGroupStatistics_RateDistribution)(nil), // 8: luci.analysis.v1.ChangepointGroupStatistics.RateDistribution 1140 (*ChangepointGroupStatistics_RateChangeBuckets)(nil), // 9: luci.analysis.v1.ChangepointGroupStatistics.RateChangeBuckets 1141 (*ChangepointGroupStatistics_RateDistribution_RateBuckets)(nil), // 10: luci.analysis.v1.ChangepointGroupStatistics.RateDistribution.RateBuckets 1142 (*QueryChangepointsInGroupRequest_ChangepointIdentifier)(nil), // 11: luci.analysis.v1.QueryChangepointsInGroupRequest.ChangepointIdentifier 1143 (*NumericRange)(nil), // 12: luci.analysis.v1.NumericRange 1144 (*Variant)(nil), // 13: luci.analysis.v1.Variant 1145 (*SourceRef)(nil), // 14: luci.analysis.v1.SourceRef 1146 (*timestamppb.Timestamp)(nil), // 15: google.protobuf.Timestamp 1147 } 1148 var file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_depIdxs = []int32{ 1149 1, // 0: luci.analysis.v1.QueryChangepointGroupSummariesRequest.predicate:type_name -> luci.analysis.v1.ChangepointPredicate 1150 12, // 1: luci.analysis.v1.ChangepointPredicate.unexpected_verdict_rate_change_range:type_name -> luci.analysis.v1.NumericRange 1151 3, // 2: luci.analysis.v1.QueryChangepointGroupSummariesResponse.group_summaries:type_name -> luci.analysis.v1.ChangepointGroupSummary 1152 7, // 3: luci.analysis.v1.ChangepointGroupSummary.canonical_changepoint:type_name -> luci.analysis.v1.Changepoint 1153 4, // 4: luci.analysis.v1.ChangepointGroupSummary.statistics:type_name -> luci.analysis.v1.ChangepointGroupStatistics 1154 8, // 5: luci.analysis.v1.ChangepointGroupStatistics.unexpected_verdict_rate_before:type_name -> luci.analysis.v1.ChangepointGroupStatistics.RateDistribution 1155 8, // 6: luci.analysis.v1.ChangepointGroupStatistics.unexpected_verdict_rate_after:type_name -> luci.analysis.v1.ChangepointGroupStatistics.RateDistribution 1156 8, // 7: luci.analysis.v1.ChangepointGroupStatistics.unexpected_verdict_rate_current:type_name -> luci.analysis.v1.ChangepointGroupStatistics.RateDistribution 1157 9, // 8: luci.analysis.v1.ChangepointGroupStatistics.unexpected_verdict_rate_change:type_name -> luci.analysis.v1.ChangepointGroupStatistics.RateChangeBuckets 1158 11, // 9: luci.analysis.v1.QueryChangepointsInGroupRequest.group_key:type_name -> luci.analysis.v1.QueryChangepointsInGroupRequest.ChangepointIdentifier 1159 1, // 10: luci.analysis.v1.QueryChangepointsInGroupRequest.predicate:type_name -> luci.analysis.v1.ChangepointPredicate 1160 7, // 11: luci.analysis.v1.QueryChangepointsInGroupResponse.changepoints:type_name -> luci.analysis.v1.Changepoint 1161 13, // 12: luci.analysis.v1.Changepoint.variant:type_name -> luci.analysis.v1.Variant 1162 14, // 13: luci.analysis.v1.Changepoint.ref:type_name -> luci.analysis.v1.SourceRef 1163 15, // 14: luci.analysis.v1.Changepoint.start_hour:type_name -> google.protobuf.Timestamp 1164 10, // 15: luci.analysis.v1.ChangepointGroupStatistics.RateDistribution.buckets:type_name -> luci.analysis.v1.ChangepointGroupStatistics.RateDistribution.RateBuckets 1165 15, // 16: luci.analysis.v1.QueryChangepointsInGroupRequest.ChangepointIdentifier.start_hour:type_name -> google.protobuf.Timestamp 1166 0, // 17: luci.analysis.v1.Changepoints.QueryChangepointGroupSummaries:input_type -> luci.analysis.v1.QueryChangepointGroupSummariesRequest 1167 5, // 18: luci.analysis.v1.Changepoints.QueryChangepointsInGroup:input_type -> luci.analysis.v1.QueryChangepointsInGroupRequest 1168 2, // 19: luci.analysis.v1.Changepoints.QueryChangepointGroupSummaries:output_type -> luci.analysis.v1.QueryChangepointGroupSummariesResponse 1169 6, // 20: luci.analysis.v1.Changepoints.QueryChangepointsInGroup:output_type -> luci.analysis.v1.QueryChangepointsInGroupResponse 1170 19, // [19:21] is the sub-list for method output_type 1171 17, // [17:19] is the sub-list for method input_type 1172 17, // [17:17] is the sub-list for extension type_name 1173 17, // [17:17] is the sub-list for extension extendee 1174 0, // [0:17] is the sub-list for field type_name 1175 } 1176 1177 func init() { file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_init() } 1178 func file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_init() { 1179 if File_go_chromium_org_luci_analysis_proto_v1_changepoints_proto != nil { 1180 return 1181 } 1182 file_go_chromium_org_luci_analysis_proto_v1_sources_proto_init() 1183 file_go_chromium_org_luci_analysis_proto_v1_common_proto_init() 1184 if !protoimpl.UnsafeEnabled { 1185 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { 1186 switch v := v.(*QueryChangepointGroupSummariesRequest); i { 1187 case 0: 1188 return &v.state 1189 case 1: 1190 return &v.sizeCache 1191 case 2: 1192 return &v.unknownFields 1193 default: 1194 return nil 1195 } 1196 } 1197 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { 1198 switch v := v.(*ChangepointPredicate); i { 1199 case 0: 1200 return &v.state 1201 case 1: 1202 return &v.sizeCache 1203 case 2: 1204 return &v.unknownFields 1205 default: 1206 return nil 1207 } 1208 } 1209 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { 1210 switch v := v.(*QueryChangepointGroupSummariesResponse); i { 1211 case 0: 1212 return &v.state 1213 case 1: 1214 return &v.sizeCache 1215 case 2: 1216 return &v.unknownFields 1217 default: 1218 return nil 1219 } 1220 } 1221 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { 1222 switch v := v.(*ChangepointGroupSummary); i { 1223 case 0: 1224 return &v.state 1225 case 1: 1226 return &v.sizeCache 1227 case 2: 1228 return &v.unknownFields 1229 default: 1230 return nil 1231 } 1232 } 1233 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { 1234 switch v := v.(*ChangepointGroupStatistics); i { 1235 case 0: 1236 return &v.state 1237 case 1: 1238 return &v.sizeCache 1239 case 2: 1240 return &v.unknownFields 1241 default: 1242 return nil 1243 } 1244 } 1245 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { 1246 switch v := v.(*QueryChangepointsInGroupRequest); i { 1247 case 0: 1248 return &v.state 1249 case 1: 1250 return &v.sizeCache 1251 case 2: 1252 return &v.unknownFields 1253 default: 1254 return nil 1255 } 1256 } 1257 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { 1258 switch v := v.(*QueryChangepointsInGroupResponse); i { 1259 case 0: 1260 return &v.state 1261 case 1: 1262 return &v.sizeCache 1263 case 2: 1264 return &v.unknownFields 1265 default: 1266 return nil 1267 } 1268 } 1269 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { 1270 switch v := v.(*Changepoint); i { 1271 case 0: 1272 return &v.state 1273 case 1: 1274 return &v.sizeCache 1275 case 2: 1276 return &v.unknownFields 1277 default: 1278 return nil 1279 } 1280 } 1281 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { 1282 switch v := v.(*ChangepointGroupStatistics_RateDistribution); i { 1283 case 0: 1284 return &v.state 1285 case 1: 1286 return &v.sizeCache 1287 case 2: 1288 return &v.unknownFields 1289 default: 1290 return nil 1291 } 1292 } 1293 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { 1294 switch v := v.(*ChangepointGroupStatistics_RateChangeBuckets); i { 1295 case 0: 1296 return &v.state 1297 case 1: 1298 return &v.sizeCache 1299 case 2: 1300 return &v.unknownFields 1301 default: 1302 return nil 1303 } 1304 } 1305 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { 1306 switch v := v.(*ChangepointGroupStatistics_RateDistribution_RateBuckets); i { 1307 case 0: 1308 return &v.state 1309 case 1: 1310 return &v.sizeCache 1311 case 2: 1312 return &v.unknownFields 1313 default: 1314 return nil 1315 } 1316 } 1317 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { 1318 switch v := v.(*QueryChangepointsInGroupRequest_ChangepointIdentifier); i { 1319 case 0: 1320 return &v.state 1321 case 1: 1322 return &v.sizeCache 1323 case 2: 1324 return &v.unknownFields 1325 default: 1326 return nil 1327 } 1328 } 1329 } 1330 type x struct{} 1331 out := protoimpl.TypeBuilder{ 1332 File: protoimpl.DescBuilder{ 1333 GoPackagePath: reflect.TypeOf(x{}).PkgPath(), 1334 RawDescriptor: file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDesc, 1335 NumEnums: 0, 1336 NumMessages: 12, 1337 NumExtensions: 0, 1338 NumServices: 1, 1339 }, 1340 GoTypes: file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_goTypes, 1341 DependencyIndexes: file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_depIdxs, 1342 MessageInfos: file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_msgTypes, 1343 }.Build() 1344 File_go_chromium_org_luci_analysis_proto_v1_changepoints_proto = out.File 1345 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_rawDesc = nil 1346 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_goTypes = nil 1347 file_go_chromium_org_luci_analysis_proto_v1_changepoints_proto_depIdxs = nil 1348 } 1349 1350 // Reference imports to suppress errors if they are not otherwise used. 1351 var _ context.Context 1352 var _ grpc.ClientConnInterface 1353 1354 // This is a compile-time assertion to ensure that this generated file 1355 // is compatible with the grpc package it is being compiled against. 1356 const _ = grpc.SupportPackageIsVersion6 1357 1358 // ChangepointsClient is the client API for Changepoints service. 1359 // 1360 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. 1361 type ChangepointsClient interface { 1362 // Query the changepoint group summaries. 1363 // Currently this RPC only returns at most 1000 changepoint groups starting at the current week. 1364 // TODO: Add pagination to this RPC so that more changepoint history can be seen. 1365 QueryChangepointGroupSummaries(ctx context.Context, in *QueryChangepointGroupSummariesRequest, opts ...grpc.CallOption) (*QueryChangepointGroupSummariesResponse, error) 1366 // Query the changepoints in a particular group. 1367 // TODO: Implement pagination, currently just return at most 1000 changepoints. 1368 QueryChangepointsInGroup(ctx context.Context, in *QueryChangepointsInGroupRequest, opts ...grpc.CallOption) (*QueryChangepointsInGroupResponse, error) 1369 } 1370 type changepointsPRPCClient struct { 1371 client *prpc.Client 1372 } 1373 1374 func NewChangepointsPRPCClient(client *prpc.Client) ChangepointsClient { 1375 return &changepointsPRPCClient{client} 1376 } 1377 1378 func (c *changepointsPRPCClient) QueryChangepointGroupSummaries(ctx context.Context, in *QueryChangepointGroupSummariesRequest, opts ...grpc.CallOption) (*QueryChangepointGroupSummariesResponse, error) { 1379 out := new(QueryChangepointGroupSummariesResponse) 1380 err := c.client.Call(ctx, "luci.analysis.v1.Changepoints", "QueryChangepointGroupSummaries", in, out, opts...) 1381 if err != nil { 1382 return nil, err 1383 } 1384 return out, nil 1385 } 1386 1387 func (c *changepointsPRPCClient) QueryChangepointsInGroup(ctx context.Context, in *QueryChangepointsInGroupRequest, opts ...grpc.CallOption) (*QueryChangepointsInGroupResponse, error) { 1388 out := new(QueryChangepointsInGroupResponse) 1389 err := c.client.Call(ctx, "luci.analysis.v1.Changepoints", "QueryChangepointsInGroup", in, out, opts...) 1390 if err != nil { 1391 return nil, err 1392 } 1393 return out, nil 1394 } 1395 1396 type changepointsClient struct { 1397 cc grpc.ClientConnInterface 1398 } 1399 1400 func NewChangepointsClient(cc grpc.ClientConnInterface) ChangepointsClient { 1401 return &changepointsClient{cc} 1402 } 1403 1404 func (c *changepointsClient) QueryChangepointGroupSummaries(ctx context.Context, in *QueryChangepointGroupSummariesRequest, opts ...grpc.CallOption) (*QueryChangepointGroupSummariesResponse, error) { 1405 out := new(QueryChangepointGroupSummariesResponse) 1406 err := c.cc.Invoke(ctx, "/luci.analysis.v1.Changepoints/QueryChangepointGroupSummaries", in, out, opts...) 1407 if err != nil { 1408 return nil, err 1409 } 1410 return out, nil 1411 } 1412 1413 func (c *changepointsClient) QueryChangepointsInGroup(ctx context.Context, in *QueryChangepointsInGroupRequest, opts ...grpc.CallOption) (*QueryChangepointsInGroupResponse, error) { 1414 out := new(QueryChangepointsInGroupResponse) 1415 err := c.cc.Invoke(ctx, "/luci.analysis.v1.Changepoints/QueryChangepointsInGroup", in, out, opts...) 1416 if err != nil { 1417 return nil, err 1418 } 1419 return out, nil 1420 } 1421 1422 // ChangepointsServer is the server API for Changepoints service. 1423 type ChangepointsServer interface { 1424 // Query the changepoint group summaries. 1425 // Currently this RPC only returns at most 1000 changepoint groups starting at the current week. 1426 // TODO: Add pagination to this RPC so that more changepoint history can be seen. 1427 QueryChangepointGroupSummaries(context.Context, *QueryChangepointGroupSummariesRequest) (*QueryChangepointGroupSummariesResponse, error) 1428 // Query the changepoints in a particular group. 1429 // TODO: Implement pagination, currently just return at most 1000 changepoints. 1430 QueryChangepointsInGroup(context.Context, *QueryChangepointsInGroupRequest) (*QueryChangepointsInGroupResponse, error) 1431 } 1432 1433 // UnimplementedChangepointsServer can be embedded to have forward compatible implementations. 1434 type UnimplementedChangepointsServer struct { 1435 } 1436 1437 func (*UnimplementedChangepointsServer) QueryChangepointGroupSummaries(context.Context, *QueryChangepointGroupSummariesRequest) (*QueryChangepointGroupSummariesResponse, error) { 1438 return nil, status.Errorf(codes.Unimplemented, "method QueryChangepointGroupSummaries not implemented") 1439 } 1440 func (*UnimplementedChangepointsServer) QueryChangepointsInGroup(context.Context, *QueryChangepointsInGroupRequest) (*QueryChangepointsInGroupResponse, error) { 1441 return nil, status.Errorf(codes.Unimplemented, "method QueryChangepointsInGroup not implemented") 1442 } 1443 1444 func RegisterChangepointsServer(s prpc.Registrar, srv ChangepointsServer) { 1445 s.RegisterService(&_Changepoints_serviceDesc, srv) 1446 } 1447 1448 func _Changepoints_QueryChangepointGroupSummaries_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { 1449 in := new(QueryChangepointGroupSummariesRequest) 1450 if err := dec(in); err != nil { 1451 return nil, err 1452 } 1453 if interceptor == nil { 1454 return srv.(ChangepointsServer).QueryChangepointGroupSummaries(ctx, in) 1455 } 1456 info := &grpc.UnaryServerInfo{ 1457 Server: srv, 1458 FullMethod: "/luci.analysis.v1.Changepoints/QueryChangepointGroupSummaries", 1459 } 1460 handler := func(ctx context.Context, req interface{}) (interface{}, error) { 1461 return srv.(ChangepointsServer).QueryChangepointGroupSummaries(ctx, req.(*QueryChangepointGroupSummariesRequest)) 1462 } 1463 return interceptor(ctx, in, info, handler) 1464 } 1465 1466 func _Changepoints_QueryChangepointsInGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { 1467 in := new(QueryChangepointsInGroupRequest) 1468 if err := dec(in); err != nil { 1469 return nil, err 1470 } 1471 if interceptor == nil { 1472 return srv.(ChangepointsServer).QueryChangepointsInGroup(ctx, in) 1473 } 1474 info := &grpc.UnaryServerInfo{ 1475 Server: srv, 1476 FullMethod: "/luci.analysis.v1.Changepoints/QueryChangepointsInGroup", 1477 } 1478 handler := func(ctx context.Context, req interface{}) (interface{}, error) { 1479 return srv.(ChangepointsServer).QueryChangepointsInGroup(ctx, req.(*QueryChangepointsInGroupRequest)) 1480 } 1481 return interceptor(ctx, in, info, handler) 1482 } 1483 1484 var _Changepoints_serviceDesc = grpc.ServiceDesc{ 1485 ServiceName: "luci.analysis.v1.Changepoints", 1486 HandlerType: (*ChangepointsServer)(nil), 1487 Methods: []grpc.MethodDesc{ 1488 { 1489 MethodName: "QueryChangepointGroupSummaries", 1490 Handler: _Changepoints_QueryChangepointGroupSummaries_Handler, 1491 }, 1492 { 1493 MethodName: "QueryChangepointsInGroup", 1494 Handler: _Changepoints_QueryChangepointsInGroup_Handler, 1495 }, 1496 }, 1497 Streams: []grpc.StreamDesc{}, 1498 Metadata: "go.chromium.org/luci/analysis/proto/v1/changepoints.proto", 1499 }