github.com/GoogleCloudPlatform/testgrid@v0.0.174/pb/state/state.pb.go (about) 1 /* 2 Copyright The TestGrid Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 // Backing state for a test results table of a TestGrid dashboard tab. 18 // Grid is the top-level message; updated and stored by the updater and 19 // tabulator. 20 21 // Code generated by protoc-gen-go. DO NOT EDIT. 22 // versions: 23 // protoc-gen-go v1.28.0 24 // protoc v3.21.1 25 // source: state.proto 26 27 package state 28 29 import ( 30 config "github.com/GoogleCloudPlatform/testgrid/pb/config" 31 protoreflect "google.golang.org/protobuf/reflect/protoreflect" 32 protoimpl "google.golang.org/protobuf/runtime/protoimpl" 33 timestamppb "google.golang.org/protobuf/types/known/timestamppb" 34 reflect "reflect" 35 sync "sync" 36 ) 37 38 const ( 39 // Verify that this generated code is sufficiently up-to-date. 40 _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) 41 // Verify that runtime/protoimpl is sufficiently up-to-date. 42 _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) 43 ) 44 45 type Property struct { 46 state protoimpl.MessageState 47 sizeCache protoimpl.SizeCache 48 unknownFields protoimpl.UnknownFields 49 50 Property map[string]string `protobuf:"bytes,1,rep,name=property,proto3" json:"property,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` 51 } 52 53 func (x *Property) Reset() { 54 *x = Property{} 55 if protoimpl.UnsafeEnabled { 56 mi := &file_state_proto_msgTypes[0] 57 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 58 ms.StoreMessageInfo(mi) 59 } 60 } 61 62 func (x *Property) String() string { 63 return protoimpl.X.MessageStringOf(x) 64 } 65 66 func (*Property) ProtoMessage() {} 67 68 func (x *Property) ProtoReflect() protoreflect.Message { 69 mi := &file_state_proto_msgTypes[0] 70 if protoimpl.UnsafeEnabled && x != nil { 71 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 72 if ms.LoadMessageInfo() == nil { 73 ms.StoreMessageInfo(mi) 74 } 75 return ms 76 } 77 return mi.MessageOf(x) 78 } 79 80 // Deprecated: Use Property.ProtoReflect.Descriptor instead. 81 func (*Property) Descriptor() ([]byte, []int) { 82 return file_state_proto_rawDescGZIP(), []int{0} 83 } 84 85 func (x *Property) GetProperty() map[string]string { 86 if x != nil { 87 return x.Property 88 } 89 return nil 90 } 91 92 // A metric and its values for each test cycle. 93 type Metric struct { 94 state protoimpl.MessageState 95 sizeCache protoimpl.SizeCache 96 unknownFields protoimpl.UnknownFields 97 98 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Name of metric, such as duration 99 // Sparse encoding of values. Indices is a list of pairs of <index, count> 100 // that details columns with metric values. So given: 101 // Indices: [0, 2, 6, 4] 102 // Values: [0.1,0.2,6.1,6.2,6.3,6.4] 103 // Decoded 12-value equivalent is: 104 // [0.1, 0.2, nil, nil, nil, nil, 6.1, 6.2, 6.3, 6.4, nil, nil, ...] 105 Indices []int32 `protobuf:"varint,2,rep,packed,name=indices,proto3" json:"indices,omitempty"` // n=index of first value, n+1=count of filled values 106 Values []float64 `protobuf:"fixed64,3,rep,packed,name=values,proto3" json:"values,omitempty"` // only present for columns with a metric value 107 } 108 109 func (x *Metric) Reset() { 110 *x = Metric{} 111 if protoimpl.UnsafeEnabled { 112 mi := &file_state_proto_msgTypes[1] 113 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 114 ms.StoreMessageInfo(mi) 115 } 116 } 117 118 func (x *Metric) String() string { 119 return protoimpl.X.MessageStringOf(x) 120 } 121 122 func (*Metric) ProtoMessage() {} 123 124 func (x *Metric) ProtoReflect() protoreflect.Message { 125 mi := &file_state_proto_msgTypes[1] 126 if protoimpl.UnsafeEnabled && x != nil { 127 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 128 if ms.LoadMessageInfo() == nil { 129 ms.StoreMessageInfo(mi) 130 } 131 return ms 132 } 133 return mi.MessageOf(x) 134 } 135 136 // Deprecated: Use Metric.ProtoReflect.Descriptor instead. 137 func (*Metric) Descriptor() ([]byte, []int) { 138 return file_state_proto_rawDescGZIP(), []int{1} 139 } 140 141 func (x *Metric) GetName() string { 142 if x != nil { 143 return x.Name 144 } 145 return "" 146 } 147 148 func (x *Metric) GetIndices() []int32 { 149 if x != nil { 150 return x.Indices 151 } 152 return nil 153 } 154 155 func (x *Metric) GetValues() []float64 { 156 if x != nil { 157 return x.Values 158 } 159 return nil 160 } 161 162 type UpdatePhaseData struct { 163 state protoimpl.MessageState 164 sizeCache protoimpl.SizeCache 165 unknownFields protoimpl.UnknownFields 166 167 // The name for a part of the update cycle. 168 PhaseName string `protobuf:"bytes,1,opt,name=phase_name,json=phaseName,proto3" json:"phase_name,omitempty"` 169 // Time taken for a part of the update cycle, in seconds. 170 PhaseSeconds float64 `protobuf:"fixed64,2,opt,name=phase_seconds,json=phaseSeconds,proto3" json:"phase_seconds,omitempty"` 171 } 172 173 func (x *UpdatePhaseData) Reset() { 174 *x = UpdatePhaseData{} 175 if protoimpl.UnsafeEnabled { 176 mi := &file_state_proto_msgTypes[2] 177 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 178 ms.StoreMessageInfo(mi) 179 } 180 } 181 182 func (x *UpdatePhaseData) String() string { 183 return protoimpl.X.MessageStringOf(x) 184 } 185 186 func (*UpdatePhaseData) ProtoMessage() {} 187 188 func (x *UpdatePhaseData) ProtoReflect() protoreflect.Message { 189 mi := &file_state_proto_msgTypes[2] 190 if protoimpl.UnsafeEnabled && x != nil { 191 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 192 if ms.LoadMessageInfo() == nil { 193 ms.StoreMessageInfo(mi) 194 } 195 return ms 196 } 197 return mi.MessageOf(x) 198 } 199 200 // Deprecated: Use UpdatePhaseData.ProtoReflect.Descriptor instead. 201 func (*UpdatePhaseData) Descriptor() ([]byte, []int) { 202 return file_state_proto_rawDescGZIP(), []int{2} 203 } 204 205 func (x *UpdatePhaseData) GetPhaseName() string { 206 if x != nil { 207 return x.PhaseName 208 } 209 return "" 210 } 211 212 func (x *UpdatePhaseData) GetPhaseSeconds() float64 { 213 if x != nil { 214 return x.PhaseSeconds 215 } 216 return 0 217 } 218 219 // Info on time taken to update test results during the last update cycle. 220 type UpdateInfo struct { 221 state protoimpl.MessageState 222 sizeCache protoimpl.SizeCache 223 unknownFields protoimpl.UnknownFields 224 225 // Metrics for how long parts of the update cycle take. 226 UpdatePhaseData []*UpdatePhaseData `protobuf:"bytes,1,rep,name=update_phase_data,json=updatePhaseData,proto3" json:"update_phase_data,omitempty"` 227 } 228 229 func (x *UpdateInfo) Reset() { 230 *x = UpdateInfo{} 231 if protoimpl.UnsafeEnabled { 232 mi := &file_state_proto_msgTypes[3] 233 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 234 ms.StoreMessageInfo(mi) 235 } 236 } 237 238 func (x *UpdateInfo) String() string { 239 return protoimpl.X.MessageStringOf(x) 240 } 241 242 func (*UpdateInfo) ProtoMessage() {} 243 244 func (x *UpdateInfo) ProtoReflect() protoreflect.Message { 245 mi := &file_state_proto_msgTypes[3] 246 if protoimpl.UnsafeEnabled && x != nil { 247 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 248 if ms.LoadMessageInfo() == nil { 249 ms.StoreMessageInfo(mi) 250 } 251 return ms 252 } 253 return mi.MessageOf(x) 254 } 255 256 // Deprecated: Use UpdateInfo.ProtoReflect.Descriptor instead. 257 func (*UpdateInfo) Descriptor() ([]byte, []int) { 258 return file_state_proto_rawDescGZIP(), []int{3} 259 } 260 261 func (x *UpdateInfo) GetUpdatePhaseData() []*UpdatePhaseData { 262 if x != nil { 263 return x.UpdatePhaseData 264 } 265 return nil 266 } 267 268 // Info on a failing test row about the failure. 269 type AlertInfo struct { 270 state protoimpl.MessageState 271 sizeCache protoimpl.SizeCache 272 unknownFields protoimpl.UnknownFields 273 274 // Number of results that have failed. 275 FailCount int32 `protobuf:"varint,1,opt,name=fail_count,json=failCount,proto3" json:"fail_count,omitempty"` 276 // The build ID the test first failed at. 277 FailBuildId string `protobuf:"bytes,2,opt,name=fail_build_id,json=failBuildId,proto3" json:"fail_build_id,omitempty"` 278 // The time the test first failed at. 279 FailTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=fail_time,json=failTime,proto3" json:"fail_time,omitempty"` 280 // The test ID for the first test failure. 281 FailTestId string `protobuf:"bytes,4,opt,name=fail_test_id,json=failTestId,proto3" json:"fail_test_id,omitempty"` 282 // The build ID the test last passed at. 283 PassBuildId string `protobuf:"bytes,5,opt,name=pass_build_id,json=passBuildId,proto3" json:"pass_build_id,omitempty"` 284 // The time the test last passed at. 285 PassTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=pass_time,json=passTime,proto3" json:"pass_time,omitempty"` 286 // A snippet explaining the failure. 287 FailureMessage string `protobuf:"bytes,7,opt,name=failure_message,json=failureMessage,proto3" json:"failure_message,omitempty"` 288 // Link to search for build changes, internally a code-search link. 289 BuildLink string `protobuf:"bytes,8,opt,name=build_link,json=buildLink,proto3" json:"build_link,omitempty"` 290 // Text for option to search for build changes. 291 BuildLinkText string `protobuf:"bytes,9,opt,name=build_link_text,json=buildLinkText,proto3" json:"build_link_text,omitempty"` 292 // Text to display for link to search for build changes. 293 BuildUrlText string `protobuf:"bytes,10,opt,name=build_url_text,json=buildUrlText,proto3" json:"build_url_text,omitempty"` 294 // The build ID for the latest test failure. (Does not indicate the failure is 295 // 'over', just the latest test failure we found.) 296 LatestFailBuildId string `protobuf:"bytes,11,opt,name=latest_fail_build_id,json=latestFailBuildId,proto3" json:"latest_fail_build_id,omitempty"` 297 // The test ID for the latest test failure. 298 LatestFailTestId string `protobuf:"bytes,14,opt,name=latest_fail_test_id,json=latestFailTestId,proto3" json:"latest_fail_test_id,omitempty"` 299 // Maps (property name):(property value) for arbitrary alert properties. 300 Properties map[string]string `protobuf:"bytes,12,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` 301 // A list of IDs for issue hotlists related to this failure. 302 HotlistIds []string `protobuf:"bytes,13,rep,name=hotlist_ids,json=hotlistIds,proto3" json:"hotlist_ids,omitempty"` 303 // Dynamic email list, route email alerts to these instead of the configured 304 // defaults. 305 EmailAddresses []string `protobuf:"bytes,15,rep,name=email_addresses,json=emailAddresses,proto3" json:"email_addresses,omitempty"` 306 // Maps (custom column headers name):(custom column headers value) for arbitrary alert properties. 307 CustomColumnHeaders map[string]string `protobuf:"bytes,16,rep,name=custom_column_headers,json=customColumnHeaders,proto3" json:"custom_column_headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` 308 } 309 310 func (x *AlertInfo) Reset() { 311 *x = AlertInfo{} 312 if protoimpl.UnsafeEnabled { 313 mi := &file_state_proto_msgTypes[4] 314 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 315 ms.StoreMessageInfo(mi) 316 } 317 } 318 319 func (x *AlertInfo) String() string { 320 return protoimpl.X.MessageStringOf(x) 321 } 322 323 func (*AlertInfo) ProtoMessage() {} 324 325 func (x *AlertInfo) ProtoReflect() protoreflect.Message { 326 mi := &file_state_proto_msgTypes[4] 327 if protoimpl.UnsafeEnabled && x != nil { 328 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 329 if ms.LoadMessageInfo() == nil { 330 ms.StoreMessageInfo(mi) 331 } 332 return ms 333 } 334 return mi.MessageOf(x) 335 } 336 337 // Deprecated: Use AlertInfo.ProtoReflect.Descriptor instead. 338 func (*AlertInfo) Descriptor() ([]byte, []int) { 339 return file_state_proto_rawDescGZIP(), []int{4} 340 } 341 342 func (x *AlertInfo) GetFailCount() int32 { 343 if x != nil { 344 return x.FailCount 345 } 346 return 0 347 } 348 349 func (x *AlertInfo) GetFailBuildId() string { 350 if x != nil { 351 return x.FailBuildId 352 } 353 return "" 354 } 355 356 func (x *AlertInfo) GetFailTime() *timestamppb.Timestamp { 357 if x != nil { 358 return x.FailTime 359 } 360 return nil 361 } 362 363 func (x *AlertInfo) GetFailTestId() string { 364 if x != nil { 365 return x.FailTestId 366 } 367 return "" 368 } 369 370 func (x *AlertInfo) GetPassBuildId() string { 371 if x != nil { 372 return x.PassBuildId 373 } 374 return "" 375 } 376 377 func (x *AlertInfo) GetPassTime() *timestamppb.Timestamp { 378 if x != nil { 379 return x.PassTime 380 } 381 return nil 382 } 383 384 func (x *AlertInfo) GetFailureMessage() string { 385 if x != nil { 386 return x.FailureMessage 387 } 388 return "" 389 } 390 391 func (x *AlertInfo) GetBuildLink() string { 392 if x != nil { 393 return x.BuildLink 394 } 395 return "" 396 } 397 398 func (x *AlertInfo) GetBuildLinkText() string { 399 if x != nil { 400 return x.BuildLinkText 401 } 402 return "" 403 } 404 405 func (x *AlertInfo) GetBuildUrlText() string { 406 if x != nil { 407 return x.BuildUrlText 408 } 409 return "" 410 } 411 412 func (x *AlertInfo) GetLatestFailBuildId() string { 413 if x != nil { 414 return x.LatestFailBuildId 415 } 416 return "" 417 } 418 419 func (x *AlertInfo) GetLatestFailTestId() string { 420 if x != nil { 421 return x.LatestFailTestId 422 } 423 return "" 424 } 425 426 func (x *AlertInfo) GetProperties() map[string]string { 427 if x != nil { 428 return x.Properties 429 } 430 return nil 431 } 432 433 func (x *AlertInfo) GetHotlistIds() []string { 434 if x != nil { 435 return x.HotlistIds 436 } 437 return nil 438 } 439 440 func (x *AlertInfo) GetEmailAddresses() []string { 441 if x != nil { 442 return x.EmailAddresses 443 } 444 return nil 445 } 446 447 func (x *AlertInfo) GetCustomColumnHeaders() map[string]string { 448 if x != nil { 449 return x.CustomColumnHeaders 450 } 451 return nil 452 } 453 454 // Info on default test metadata for a dashboard tab. 455 type TestMetadata struct { 456 state protoimpl.MessageState 457 sizeCache protoimpl.SizeCache 458 unknownFields protoimpl.UnknownFields 459 460 // Name of the test with associated test metadata. 461 TestName string `protobuf:"bytes,1,opt,name=test_name,json=testName,proto3" json:"test_name,omitempty"` 462 // Default bug component. 463 BugComponent int32 `protobuf:"varint,2,opt,name=bug_component,json=bugComponent,proto3" json:"bug_component,omitempty"` 464 // Default owner. 465 Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` 466 // Default list of cc's. 467 Cc []string `protobuf:"bytes,4,rep,name=cc,proto3" json:"cc,omitempty"` 468 // When present, only file a bug for failed tests with same error type. 469 // Otherwise, always file a bug. 470 ErrorType string `protobuf:"bytes,5,opt,name=error_type,json=errorType,proto3" json:"error_type,omitempty"` 471 } 472 473 func (x *TestMetadata) Reset() { 474 *x = TestMetadata{} 475 if protoimpl.UnsafeEnabled { 476 mi := &file_state_proto_msgTypes[5] 477 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 478 ms.StoreMessageInfo(mi) 479 } 480 } 481 482 func (x *TestMetadata) String() string { 483 return protoimpl.X.MessageStringOf(x) 484 } 485 486 func (*TestMetadata) ProtoMessage() {} 487 488 func (x *TestMetadata) ProtoReflect() protoreflect.Message { 489 mi := &file_state_proto_msgTypes[5] 490 if protoimpl.UnsafeEnabled && x != nil { 491 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 492 if ms.LoadMessageInfo() == nil { 493 ms.StoreMessageInfo(mi) 494 } 495 return ms 496 } 497 return mi.MessageOf(x) 498 } 499 500 // Deprecated: Use TestMetadata.ProtoReflect.Descriptor instead. 501 func (*TestMetadata) Descriptor() ([]byte, []int) { 502 return file_state_proto_rawDescGZIP(), []int{5} 503 } 504 505 func (x *TestMetadata) GetTestName() string { 506 if x != nil { 507 return x.TestName 508 } 509 return "" 510 } 511 512 func (x *TestMetadata) GetBugComponent() int32 { 513 if x != nil { 514 return x.BugComponent 515 } 516 return 0 517 } 518 519 func (x *TestMetadata) GetOwner() string { 520 if x != nil { 521 return x.Owner 522 } 523 return "" 524 } 525 526 func (x *TestMetadata) GetCc() []string { 527 if x != nil { 528 return x.Cc 529 } 530 return nil 531 } 532 533 func (x *TestMetadata) GetErrorType() string { 534 if x != nil { 535 return x.ErrorType 536 } 537 return "" 538 } 539 540 // TestGrid column headers. Does not contain the individual cells. 541 type Column struct { 542 state protoimpl.MessageState 543 sizeCache protoimpl.SizeCache 544 unknownFields protoimpl.UnknownFields 545 546 // Unique instance of the job, typically BUILD_NUMBER from prow or a guid 547 Build string `protobuf:"bytes,1,opt,name=build,proto3" json:"build,omitempty"` 548 // Name associated with the column (such as the run/invocation ID).No two 549 // columns should have the same build_id and name. The name field allows the 550 // display of multiple columns with the same build_id. 551 Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` 552 // Milliseconds since start of epoch (python time.time() * 1000) 553 // TODO(#683): Use a timestamp, not this double 554 Started float64 `protobuf:"fixed64,3,opt,name=started,proto3" json:"started,omitempty"` 555 // Additional custom headers like commit, image used, etc. 556 Extra []string `protobuf:"bytes,4,rep,name=extra,proto3" json:"extra,omitempty"` 557 // Custom hotlist ids. 558 HotlistIds string `protobuf:"bytes,5,opt,name=hotlist_ids,json=hotlistIds,proto3" json:"hotlist_ids,omitempty"` 559 // An optional hint for the updater. 560 Hint string `protobuf:"bytes,6,opt,name=hint,proto3" json:"hint,omitempty"` 561 // Dynamic email list, route email alerts to these instead of the configured 562 // defaults. 563 EmailAddresses []string `protobuf:"bytes,7,rep,name=email_addresses,json=emailAddresses,proto3" json:"email_addresses,omitempty"` 564 // Status totals for the column. 565 // Only written in tab state, if a broken threshold is defined for columns. 566 Stats *Stats `protobuf:"bytes,8,opt,name=stats,proto3" json:"stats,omitempty"` 567 } 568 569 func (x *Column) Reset() { 570 *x = Column{} 571 if protoimpl.UnsafeEnabled { 572 mi := &file_state_proto_msgTypes[6] 573 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 574 ms.StoreMessageInfo(mi) 575 } 576 } 577 578 func (x *Column) String() string { 579 return protoimpl.X.MessageStringOf(x) 580 } 581 582 func (*Column) ProtoMessage() {} 583 584 func (x *Column) ProtoReflect() protoreflect.Message { 585 mi := &file_state_proto_msgTypes[6] 586 if protoimpl.UnsafeEnabled && x != nil { 587 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 588 if ms.LoadMessageInfo() == nil { 589 ms.StoreMessageInfo(mi) 590 } 591 return ms 592 } 593 return mi.MessageOf(x) 594 } 595 596 // Deprecated: Use Column.ProtoReflect.Descriptor instead. 597 func (*Column) Descriptor() ([]byte, []int) { 598 return file_state_proto_rawDescGZIP(), []int{6} 599 } 600 601 func (x *Column) GetBuild() string { 602 if x != nil { 603 return x.Build 604 } 605 return "" 606 } 607 608 func (x *Column) GetName() string { 609 if x != nil { 610 return x.Name 611 } 612 return "" 613 } 614 615 func (x *Column) GetStarted() float64 { 616 if x != nil { 617 return x.Started 618 } 619 return 0 620 } 621 622 func (x *Column) GetExtra() []string { 623 if x != nil { 624 return x.Extra 625 } 626 return nil 627 } 628 629 func (x *Column) GetHotlistIds() string { 630 if x != nil { 631 return x.HotlistIds 632 } 633 return "" 634 } 635 636 func (x *Column) GetHint() string { 637 if x != nil { 638 return x.Hint 639 } 640 return "" 641 } 642 643 func (x *Column) GetEmailAddresses() []string { 644 if x != nil { 645 return x.EmailAddresses 646 } 647 return nil 648 } 649 650 func (x *Column) GetStats() *Stats { 651 if x != nil { 652 return x.Stats 653 } 654 return nil 655 } 656 657 type Stats struct { 658 state protoimpl.MessageState 659 sizeCache protoimpl.SizeCache 660 unknownFields protoimpl.UnknownFields 661 662 FailCount int32 `protobuf:"varint,1,opt,name=fail_count,json=failCount,proto3" json:"fail_count,omitempty"` 663 PassCount int32 `protobuf:"varint,2,opt,name=pass_count,json=passCount,proto3" json:"pass_count,omitempty"` 664 TotalCount int32 `protobuf:"varint,3,opt,name=total_count,json=totalCount,proto3" json:"total_count,omitempty"` 665 // True if this column has any in-progress runs. 666 Pending bool `protobuf:"varint,4,opt,name=pending,proto3" json:"pending,omitempty"` 667 // True if a broken threshold is defined, and this column's fail/total ratio 668 // exceeds it. 669 Broken bool `protobuf:"varint,5,opt,name=broken,proto3" json:"broken,omitempty"` 670 } 671 672 func (x *Stats) Reset() { 673 *x = Stats{} 674 if protoimpl.UnsafeEnabled { 675 mi := &file_state_proto_msgTypes[7] 676 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 677 ms.StoreMessageInfo(mi) 678 } 679 } 680 681 func (x *Stats) String() string { 682 return protoimpl.X.MessageStringOf(x) 683 } 684 685 func (*Stats) ProtoMessage() {} 686 687 func (x *Stats) ProtoReflect() protoreflect.Message { 688 mi := &file_state_proto_msgTypes[7] 689 if protoimpl.UnsafeEnabled && x != nil { 690 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 691 if ms.LoadMessageInfo() == nil { 692 ms.StoreMessageInfo(mi) 693 } 694 return ms 695 } 696 return mi.MessageOf(x) 697 } 698 699 // Deprecated: Use Stats.ProtoReflect.Descriptor instead. 700 func (*Stats) Descriptor() ([]byte, []int) { 701 return file_state_proto_rawDescGZIP(), []int{7} 702 } 703 704 func (x *Stats) GetFailCount() int32 { 705 if x != nil { 706 return x.FailCount 707 } 708 return 0 709 } 710 711 func (x *Stats) GetPassCount() int32 { 712 if x != nil { 713 return x.PassCount 714 } 715 return 0 716 } 717 718 func (x *Stats) GetTotalCount() int32 { 719 if x != nil { 720 return x.TotalCount 721 } 722 return 0 723 } 724 725 func (x *Stats) GetPending() bool { 726 if x != nil { 727 return x.Pending 728 } 729 return false 730 } 731 732 func (x *Stats) GetBroken() bool { 733 if x != nil { 734 return x.Broken 735 } 736 return false 737 } 738 739 // TestGrid rows 740 type Row struct { 741 state protoimpl.MessageState 742 sizeCache protoimpl.SizeCache 743 unknownFields protoimpl.UnknownFields 744 745 // Display name, which might process id to append/filter info. 746 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 747 // raw id for the row, such as the bazel target or golang package. 748 Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` 749 // Results for this row, run-length encoded to reduce size/improve 750 // performance. Thus (encoded -> decoded equivalent): 751 // [0, 3, 5, 4] -> [0, 0, 0, 5, 5, 5, 5] 752 // [5, 1] -> [5] 753 // [1, 5] -> [1, 1, 1, 1, 1] 754 // The decoded values are Result enums 755 Results []int32 `protobuf:"varint,3,rep,packed,name=results,proto3" json:"results,omitempty"` 756 // Test IDs for each test result in this test case. 757 // Must be present on every column, regardless of status. 758 CellIds []string `protobuf:"bytes,4,rep,name=cell_ids,json=cellIds,proto3" json:"cell_ids,omitempty"` 759 // Short description of the result, displayed on mouseover. 760 // Present for any column with a non-empty status (not NO_RESULT). 761 Messages []string `protobuf:"bytes,5,rep,name=messages,proto3" json:"messages,omitempty"` 762 // Names of metrics associated with this test case. Stored separate from 763 // metric info (which may be omitted). 764 Metric []string `protobuf:"bytes,7,rep,name=metric,proto3" json:"metric,omitempty"` 765 Metrics []*Metric `protobuf:"bytes,8,rep,name=metrics,proto3" json:"metrics,omitempty"` // Numerical performance/timing data, etc. 766 // Short string to place inside the cell (F for fail, etc) 767 // Present for any column with a non-empty status (not NO_RESULT). 768 Icons []string `protobuf:"bytes,9,rep,name=icons,proto3" json:"icons,omitempty"` 769 // IDs for issues associated with this row. 770 Issues []string `protobuf:"bytes,10,rep,name=issues,proto3" json:"issues,omitempty"` 771 // An alert for the failure if there's a recent failure for this row. 772 AlertInfo *AlertInfo `protobuf:"bytes,11,opt,name=alert_info,json=alertInfo,proto3" json:"alert_info,omitempty"` 773 // Values of a user-defined property found in cells for this row. 774 // TODO: Fold this into `properties` field. 775 UserProperty []string `protobuf:"bytes,12,rep,name=user_property,json=userProperty,proto3" json:"user_property,omitempty"` 776 // General key-value pairs associated with cells in this row. 777 // Present for any column with a non-empty status (not NO_RESULT). 778 Properties []*Property `protobuf:"bytes,13,rep,name=properties,proto3" json:"properties,omitempty"` 779 } 780 781 func (x *Row) Reset() { 782 *x = Row{} 783 if protoimpl.UnsafeEnabled { 784 mi := &file_state_proto_msgTypes[8] 785 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 786 ms.StoreMessageInfo(mi) 787 } 788 } 789 790 func (x *Row) String() string { 791 return protoimpl.X.MessageStringOf(x) 792 } 793 794 func (*Row) ProtoMessage() {} 795 796 func (x *Row) ProtoReflect() protoreflect.Message { 797 mi := &file_state_proto_msgTypes[8] 798 if protoimpl.UnsafeEnabled && x != nil { 799 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 800 if ms.LoadMessageInfo() == nil { 801 ms.StoreMessageInfo(mi) 802 } 803 return ms 804 } 805 return mi.MessageOf(x) 806 } 807 808 // Deprecated: Use Row.ProtoReflect.Descriptor instead. 809 func (*Row) Descriptor() ([]byte, []int) { 810 return file_state_proto_rawDescGZIP(), []int{8} 811 } 812 813 func (x *Row) GetName() string { 814 if x != nil { 815 return x.Name 816 } 817 return "" 818 } 819 820 func (x *Row) GetId() string { 821 if x != nil { 822 return x.Id 823 } 824 return "" 825 } 826 827 func (x *Row) GetResults() []int32 { 828 if x != nil { 829 return x.Results 830 } 831 return nil 832 } 833 834 func (x *Row) GetCellIds() []string { 835 if x != nil { 836 return x.CellIds 837 } 838 return nil 839 } 840 841 func (x *Row) GetMessages() []string { 842 if x != nil { 843 return x.Messages 844 } 845 return nil 846 } 847 848 func (x *Row) GetMetric() []string { 849 if x != nil { 850 return x.Metric 851 } 852 return nil 853 } 854 855 func (x *Row) GetMetrics() []*Metric { 856 if x != nil { 857 return x.Metrics 858 } 859 return nil 860 } 861 862 func (x *Row) GetIcons() []string { 863 if x != nil { 864 return x.Icons 865 } 866 return nil 867 } 868 869 func (x *Row) GetIssues() []string { 870 if x != nil { 871 return x.Issues 872 } 873 return nil 874 } 875 876 func (x *Row) GetAlertInfo() *AlertInfo { 877 if x != nil { 878 return x.AlertInfo 879 } 880 return nil 881 } 882 883 func (x *Row) GetUserProperty() []string { 884 if x != nil { 885 return x.UserProperty 886 } 887 return nil 888 } 889 890 func (x *Row) GetProperties() []*Property { 891 if x != nil { 892 return x.Properties 893 } 894 return nil 895 } 896 897 // A single table of test results backing a dashboard tab. 898 type Grid struct { 899 state protoimpl.MessageState 900 sizeCache protoimpl.SizeCache 901 unknownFields protoimpl.UnknownFields 902 903 // A cycle of test results, not including the results. In the TestGrid client, 904 // the cycles define the columns. 905 Columns []*Column `protobuf:"bytes,1,rep,name=columns,proto3" json:"columns,omitempty"` 906 // A test case with test results. In the TestGrid client, the cases define the 907 // rows (and the results define the individual cells). 908 Rows []*Row `protobuf:"bytes,2,rep,name=rows,proto3" json:"rows,omitempty"` 909 // The latest configuration used to generate this test group. 910 Config *config.TestGroup `protobuf:"bytes,4,opt,name=config,proto3" json:"config,omitempty"` 911 // Seconds since epoch for last time this cycle was updated. 912 LastTimeUpdated float64 `protobuf:"fixed64,6,opt,name=last_time_updated,json=lastTimeUpdated,proto3" json:"last_time_updated,omitempty"` 913 // Stored info on previous timing for parts of the update cycle. 914 UpdateInfo []*UpdateInfo `protobuf:"bytes,8,rep,name=update_info,json=updateInfo,proto3" json:"update_info,omitempty"` 915 // Stored info on default test metadata. 916 TestMetadata []*TestMetadata `protobuf:"bytes,9,rep,name=test_metadata,json=testMetadata,proto3" json:"test_metadata,omitempty"` 917 // Clusters of failures for a TestResultTable instance. 918 Cluster []*Cluster `protobuf:"bytes,10,rep,name=cluster,proto3" json:"cluster,omitempty"` 919 // Most recent timestamp that clusters have processed. 920 MostRecentClusterTimestamp float64 `protobuf:"fixed64,11,opt,name=most_recent_cluster_timestamp,json=mostRecentClusterTimestamp,proto3" json:"most_recent_cluster_timestamp,omitempty"` 921 } 922 923 func (x *Grid) Reset() { 924 *x = Grid{} 925 if protoimpl.UnsafeEnabled { 926 mi := &file_state_proto_msgTypes[9] 927 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 928 ms.StoreMessageInfo(mi) 929 } 930 } 931 932 func (x *Grid) String() string { 933 return protoimpl.X.MessageStringOf(x) 934 } 935 936 func (*Grid) ProtoMessage() {} 937 938 func (x *Grid) ProtoReflect() protoreflect.Message { 939 mi := &file_state_proto_msgTypes[9] 940 if protoimpl.UnsafeEnabled && x != nil { 941 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 942 if ms.LoadMessageInfo() == nil { 943 ms.StoreMessageInfo(mi) 944 } 945 return ms 946 } 947 return mi.MessageOf(x) 948 } 949 950 // Deprecated: Use Grid.ProtoReflect.Descriptor instead. 951 func (*Grid) Descriptor() ([]byte, []int) { 952 return file_state_proto_rawDescGZIP(), []int{9} 953 } 954 955 func (x *Grid) GetColumns() []*Column { 956 if x != nil { 957 return x.Columns 958 } 959 return nil 960 } 961 962 func (x *Grid) GetRows() []*Row { 963 if x != nil { 964 return x.Rows 965 } 966 return nil 967 } 968 969 func (x *Grid) GetConfig() *config.TestGroup { 970 if x != nil { 971 return x.Config 972 } 973 return nil 974 } 975 976 func (x *Grid) GetLastTimeUpdated() float64 { 977 if x != nil { 978 return x.LastTimeUpdated 979 } 980 return 0 981 } 982 983 func (x *Grid) GetUpdateInfo() []*UpdateInfo { 984 if x != nil { 985 return x.UpdateInfo 986 } 987 return nil 988 } 989 990 func (x *Grid) GetTestMetadata() []*TestMetadata { 991 if x != nil { 992 return x.TestMetadata 993 } 994 return nil 995 } 996 997 func (x *Grid) GetCluster() []*Cluster { 998 if x != nil { 999 return x.Cluster 1000 } 1001 return nil 1002 } 1003 1004 func (x *Grid) GetMostRecentClusterTimestamp() float64 { 1005 if x != nil { 1006 return x.MostRecentClusterTimestamp 1007 } 1008 return 0 1009 } 1010 1011 // A cluster of failures grouped by test status and message for a test results 1012 // table. 1013 type Cluster struct { 1014 state protoimpl.MessageState 1015 sizeCache protoimpl.SizeCache 1016 unknownFields protoimpl.UnknownFields 1017 1018 // Test status cluster grouped by. 1019 TestStatus int32 `protobuf:"varint,1,opt,name=test_status,json=testStatus,proto3" json:"test_status,omitempty"` 1020 // Error message or testFailureClassification string cluster grouped by. 1021 Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` 1022 // ClusterRows that belong to this cluster. 1023 ClusterRow []*ClusterRow `protobuf:"bytes,3,rep,name=cluster_row,json=clusterRow,proto3" json:"cluster_row,omitempty"` 1024 } 1025 1026 func (x *Cluster) Reset() { 1027 *x = Cluster{} 1028 if protoimpl.UnsafeEnabled { 1029 mi := &file_state_proto_msgTypes[10] 1030 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1031 ms.StoreMessageInfo(mi) 1032 } 1033 } 1034 1035 func (x *Cluster) String() string { 1036 return protoimpl.X.MessageStringOf(x) 1037 } 1038 1039 func (*Cluster) ProtoMessage() {} 1040 1041 func (x *Cluster) ProtoReflect() protoreflect.Message { 1042 mi := &file_state_proto_msgTypes[10] 1043 if protoimpl.UnsafeEnabled && x != nil { 1044 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1045 if ms.LoadMessageInfo() == nil { 1046 ms.StoreMessageInfo(mi) 1047 } 1048 return ms 1049 } 1050 return mi.MessageOf(x) 1051 } 1052 1053 // Deprecated: Use Cluster.ProtoReflect.Descriptor instead. 1054 func (*Cluster) Descriptor() ([]byte, []int) { 1055 return file_state_proto_rawDescGZIP(), []int{10} 1056 } 1057 1058 func (x *Cluster) GetTestStatus() int32 { 1059 if x != nil { 1060 return x.TestStatus 1061 } 1062 return 0 1063 } 1064 1065 func (x *Cluster) GetMessage() string { 1066 if x != nil { 1067 return x.Message 1068 } 1069 return "" 1070 } 1071 1072 func (x *Cluster) GetClusterRow() []*ClusterRow { 1073 if x != nil { 1074 return x.ClusterRow 1075 } 1076 return nil 1077 } 1078 1079 // Cells in a TestRow that belong to a specific Cluster. 1080 type ClusterRow struct { 1081 state protoimpl.MessageState 1082 sizeCache protoimpl.SizeCache 1083 unknownFields protoimpl.UnknownFields 1084 1085 // Name of TestRow. 1086 DisplayName string `protobuf:"bytes,1,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` 1087 // Index within row that belongs to Cluster (refer to columns of the row). 1088 Index []int32 `protobuf:"varint,2,rep,packed,name=index,proto3" json:"index,omitempty"` 1089 } 1090 1091 func (x *ClusterRow) Reset() { 1092 *x = ClusterRow{} 1093 if protoimpl.UnsafeEnabled { 1094 mi := &file_state_proto_msgTypes[11] 1095 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1096 ms.StoreMessageInfo(mi) 1097 } 1098 } 1099 1100 func (x *ClusterRow) String() string { 1101 return protoimpl.X.MessageStringOf(x) 1102 } 1103 1104 func (*ClusterRow) ProtoMessage() {} 1105 1106 func (x *ClusterRow) ProtoReflect() protoreflect.Message { 1107 mi := &file_state_proto_msgTypes[11] 1108 if protoimpl.UnsafeEnabled && x != nil { 1109 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1110 if ms.LoadMessageInfo() == nil { 1111 ms.StoreMessageInfo(mi) 1112 } 1113 return ms 1114 } 1115 return mi.MessageOf(x) 1116 } 1117 1118 // Deprecated: Use ClusterRow.ProtoReflect.Descriptor instead. 1119 func (*ClusterRow) Descriptor() ([]byte, []int) { 1120 return file_state_proto_rawDescGZIP(), []int{11} 1121 } 1122 1123 func (x *ClusterRow) GetDisplayName() string { 1124 if x != nil { 1125 return x.DisplayName 1126 } 1127 return "" 1128 } 1129 1130 func (x *ClusterRow) GetIndex() []int32 { 1131 if x != nil { 1132 return x.Index 1133 } 1134 return nil 1135 } 1136 1137 var File_state_proto protoreflect.FileDescriptor 1138 1139 var file_state_proto_rawDesc = []byte{ 1140 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x74, 1141 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x1f, 0x67, 1142 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 1143 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 1144 0x70, 0x62, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 1145 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8b, 0x01, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x70, 0x65, 1146 0x72, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x18, 1147 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 1148 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x2e, 1149 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x70, 1150 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, 0x65, 1151 0x72, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 1152 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 1153 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 1154 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4e, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x12, 1155 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 1156 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 1157 0x03, 0x28, 0x05, 0x52, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 1158 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x01, 0x52, 0x06, 0x76, 0x61, 1159 0x6c, 0x75, 0x65, 0x73, 0x22, 0x55, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x68, 1160 0x61, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x68, 0x61, 0x73, 0x65, 1161 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x68, 0x61, 1162 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x68, 0x61, 0x73, 0x65, 0x5f, 1163 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x70, 1164 0x68, 0x61, 0x73, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0x59, 0x0a, 0x0a, 0x55, 1165 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4b, 0x0a, 0x11, 0x75, 0x70, 0x64, 1166 0x61, 0x74, 0x65, 0x5f, 0x70, 0x68, 0x61, 0x73, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 1167 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 1168 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x68, 0x61, 0x73, 1169 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x68, 0x61, 1170 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x80, 0x07, 0x0a, 0x09, 0x41, 0x6c, 0x65, 0x72, 0x74, 1171 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 1172 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x61, 0x69, 0x6c, 0x43, 0x6f, 1173 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x62, 0x75, 0x69, 0x6c, 1174 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x61, 0x69, 0x6c, 1175 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x66, 0x61, 0x69, 0x6c, 0x5f, 1176 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 1177 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 1178 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x66, 0x61, 0x69, 0x6c, 0x54, 0x69, 0x6d, 0x65, 1179 0x12, 0x20, 0x0a, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 1180 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x54, 0x65, 0x73, 0x74, 1181 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 1182 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x73, 0x73, 0x42, 1183 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x74, 1184 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 1185 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 1186 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x12, 1187 0x27, 0x0a, 0x0f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 1188 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 1189 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x75, 0x69, 0x6c, 1190 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x75, 1191 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x26, 0x0a, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 1192 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 1193 0x52, 0x0d, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x65, 0x78, 0x74, 0x12, 1194 0x24, 0x0a, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x75, 0x72, 0x6c, 0x5f, 0x74, 0x65, 0x78, 1195 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x55, 0x72, 1196 0x6c, 0x54, 0x65, 0x78, 0x74, 0x12, 0x2f, 0x0a, 0x14, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 1197 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 1198 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x42, 1199 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x13, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 1200 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 1201 0x01, 0x28, 0x09, 0x52, 0x10, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x54, 1202 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x49, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 1203 0x69, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, 0x65, 0x73, 0x74, 1204 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74, 1205 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 1206 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 1207 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 1208 0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x49, 0x64, 1209 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 1210 0x73, 0x73, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x6d, 0x61, 0x69, 1211 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x66, 0x0a, 0x15, 0x63, 0x75, 1212 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x68, 0x65, 0x61, 0x64, 1213 0x65, 0x72, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x74, 0x65, 0x73, 0x74, 1214 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74, 1215 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 1216 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x63, 1217 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 1218 0x72, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 1219 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 1220 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 1221 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 1222 0x01, 0x1a, 0x46, 0x0a, 0x18, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 1223 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 1224 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 1225 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 1226 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9b, 0x01, 0x0a, 0x0c, 0x54, 0x65, 1227 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 1228 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 1229 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x75, 0x67, 0x5f, 0x63, 1230 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 1231 0x62, 0x75, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 1232 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 1233 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x63, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x02, 1234 0x63, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 1235 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 1236 0x65, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0xed, 0x01, 0x0a, 0x06, 0x43, 0x6f, 0x6c, 0x75, 1237 0x6d, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 1238 0x09, 0x52, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 1239 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 1240 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x73, 1241 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 1242 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 1243 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 1244 0x09, 0x52, 0x0a, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x49, 0x64, 0x73, 0x12, 0x12, 0x0a, 1245 0x04, 0x68, 0x69, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x69, 0x6e, 1246 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 1247 0x73, 0x73, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x6d, 0x61, 0x69, 1248 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x05, 0x73, 0x74, 1249 0x61, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x65, 0x73, 0x74, 1250 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 1251 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 1252 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 1253 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x61, 0x69, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 1254 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 1255 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x61, 0x73, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 1256 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 1257 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 1258 0x12, 0x18, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 1259 0x08, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x72, 1260 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x72, 0x6f, 0x6b, 1261 0x65, 0x6e, 0x22, 0x91, 0x03, 0x0a, 0x03, 0x52, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 1262 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 1263 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 1264 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 1265 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x65, 0x6c, 0x6c, 1266 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x65, 0x6c, 0x6c, 1267 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 1268 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 1269 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 1270 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x30, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 1271 0x63, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 1272 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 1273 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x63, 0x6f, 1274 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x69, 0x63, 0x6f, 0x6e, 0x73, 0x12, 1275 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 1276 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x0a, 0x61, 0x6c, 0x65, 0x72, 0x74, 1277 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x65, 1278 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x6c, 0x65, 1279 0x72, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x49, 0x6e, 0x66, 1280 0x6f, 0x12, 0x23, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 1281 0x74, 0x79, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x50, 0x72, 1282 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x38, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 1283 0x74, 0x69, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x65, 0x73, 1284 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 1285 0x65, 0x72, 0x74, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 1286 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0xc9, 0x03, 0x0a, 0x04, 0x47, 0x72, 0x69, 0x64, 0x12, 1287 0x30, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 1288 0x32, 0x16, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 1289 0x65, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 1290 0x73, 0x12, 0x27, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 1291 0x13, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 1292 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x12, 0x32, 0x0a, 0x06, 0x63, 0x6f, 1293 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x65, 0x73, 1294 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, 1295 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 1296 0x0a, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 1297 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x54, 1298 0x69, 0x6d, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 1299 0x64, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 1300 0x1a, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 1301 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x75, 0x70, 0x64, 1302 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x41, 0x0a, 0x0d, 0x74, 0x65, 0x73, 0x74, 0x5f, 1303 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 1304 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 1305 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x74, 0x65, 1306 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6c, 1307 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x65, 1308 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6c, 0x75, 1309 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 1310 0x1d, 0x6d, 0x6f, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6c, 0x75, 1311 0x73, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0b, 1312 0x20, 0x01, 0x28, 0x01, 0x52, 0x1a, 0x6d, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 1313 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 1314 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x07, 1315 0x10, 0x08, 0x22, 0x81, 0x01, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1f, 1316 0x0a, 0x0b, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 1317 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 1318 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 1319 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 1320 0x73, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x77, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 1321 0x2e, 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 1322 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x77, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 1323 0x74, 0x65, 0x72, 0x52, 0x6f, 0x77, 0x22, 0x45, 0x0a, 0x0a, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 1324 0x72, 0x52, 0x6f, 0x77, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 1325 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 1326 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 1327 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x32, 0x5a, 1328 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x47, 0x6f, 0x6f, 0x67, 1329 0x6c, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 1330 0x74, 0x65, 0x73, 0x74, 0x67, 0x72, 0x69, 0x64, 0x2f, 0x70, 0x62, 0x2f, 0x73, 0x74, 0x61, 0x74, 1331 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 1332 } 1333 1334 var ( 1335 file_state_proto_rawDescOnce sync.Once 1336 file_state_proto_rawDescData = file_state_proto_rawDesc 1337 ) 1338 1339 func file_state_proto_rawDescGZIP() []byte { 1340 file_state_proto_rawDescOnce.Do(func() { 1341 file_state_proto_rawDescData = protoimpl.X.CompressGZIP(file_state_proto_rawDescData) 1342 }) 1343 return file_state_proto_rawDescData 1344 } 1345 1346 var file_state_proto_msgTypes = make([]protoimpl.MessageInfo, 15) 1347 var file_state_proto_goTypes = []interface{}{ 1348 (*Property)(nil), // 0: testgrid.state.Property 1349 (*Metric)(nil), // 1: testgrid.state.Metric 1350 (*UpdatePhaseData)(nil), // 2: testgrid.state.UpdatePhaseData 1351 (*UpdateInfo)(nil), // 3: testgrid.state.UpdateInfo 1352 (*AlertInfo)(nil), // 4: testgrid.state.AlertInfo 1353 (*TestMetadata)(nil), // 5: testgrid.state.TestMetadata 1354 (*Column)(nil), // 6: testgrid.state.Column 1355 (*Stats)(nil), // 7: testgrid.state.Stats 1356 (*Row)(nil), // 8: testgrid.state.Row 1357 (*Grid)(nil), // 9: testgrid.state.Grid 1358 (*Cluster)(nil), // 10: testgrid.state.Cluster 1359 (*ClusterRow)(nil), // 11: testgrid.state.ClusterRow 1360 nil, // 12: testgrid.state.Property.PropertyEntry 1361 nil, // 13: testgrid.state.AlertInfo.PropertiesEntry 1362 nil, // 14: testgrid.state.AlertInfo.CustomColumnHeadersEntry 1363 (*timestamppb.Timestamp)(nil), // 15: google.protobuf.Timestamp 1364 (*config.TestGroup)(nil), // 16: testgrid.config.TestGroup 1365 } 1366 var file_state_proto_depIdxs = []int32{ 1367 12, // 0: testgrid.state.Property.property:type_name -> testgrid.state.Property.PropertyEntry 1368 2, // 1: testgrid.state.UpdateInfo.update_phase_data:type_name -> testgrid.state.UpdatePhaseData 1369 15, // 2: testgrid.state.AlertInfo.fail_time:type_name -> google.protobuf.Timestamp 1370 15, // 3: testgrid.state.AlertInfo.pass_time:type_name -> google.protobuf.Timestamp 1371 13, // 4: testgrid.state.AlertInfo.properties:type_name -> testgrid.state.AlertInfo.PropertiesEntry 1372 14, // 5: testgrid.state.AlertInfo.custom_column_headers:type_name -> testgrid.state.AlertInfo.CustomColumnHeadersEntry 1373 7, // 6: testgrid.state.Column.stats:type_name -> testgrid.state.Stats 1374 1, // 7: testgrid.state.Row.metrics:type_name -> testgrid.state.Metric 1375 4, // 8: testgrid.state.Row.alert_info:type_name -> testgrid.state.AlertInfo 1376 0, // 9: testgrid.state.Row.properties:type_name -> testgrid.state.Property 1377 6, // 10: testgrid.state.Grid.columns:type_name -> testgrid.state.Column 1378 8, // 11: testgrid.state.Grid.rows:type_name -> testgrid.state.Row 1379 16, // 12: testgrid.state.Grid.config:type_name -> testgrid.config.TestGroup 1380 3, // 13: testgrid.state.Grid.update_info:type_name -> testgrid.state.UpdateInfo 1381 5, // 14: testgrid.state.Grid.test_metadata:type_name -> testgrid.state.TestMetadata 1382 10, // 15: testgrid.state.Grid.cluster:type_name -> testgrid.state.Cluster 1383 11, // 16: testgrid.state.Cluster.cluster_row:type_name -> testgrid.state.ClusterRow 1384 17, // [17:17] is the sub-list for method output_type 1385 17, // [17:17] is the sub-list for method input_type 1386 17, // [17:17] is the sub-list for extension type_name 1387 17, // [17:17] is the sub-list for extension extendee 1388 0, // [0:17] is the sub-list for field type_name 1389 } 1390 1391 func init() { file_state_proto_init() } 1392 func file_state_proto_init() { 1393 if File_state_proto != nil { 1394 return 1395 } 1396 if !protoimpl.UnsafeEnabled { 1397 file_state_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { 1398 switch v := v.(*Property); i { 1399 case 0: 1400 return &v.state 1401 case 1: 1402 return &v.sizeCache 1403 case 2: 1404 return &v.unknownFields 1405 default: 1406 return nil 1407 } 1408 } 1409 file_state_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { 1410 switch v := v.(*Metric); i { 1411 case 0: 1412 return &v.state 1413 case 1: 1414 return &v.sizeCache 1415 case 2: 1416 return &v.unknownFields 1417 default: 1418 return nil 1419 } 1420 } 1421 file_state_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { 1422 switch v := v.(*UpdatePhaseData); i { 1423 case 0: 1424 return &v.state 1425 case 1: 1426 return &v.sizeCache 1427 case 2: 1428 return &v.unknownFields 1429 default: 1430 return nil 1431 } 1432 } 1433 file_state_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { 1434 switch v := v.(*UpdateInfo); i { 1435 case 0: 1436 return &v.state 1437 case 1: 1438 return &v.sizeCache 1439 case 2: 1440 return &v.unknownFields 1441 default: 1442 return nil 1443 } 1444 } 1445 file_state_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { 1446 switch v := v.(*AlertInfo); i { 1447 case 0: 1448 return &v.state 1449 case 1: 1450 return &v.sizeCache 1451 case 2: 1452 return &v.unknownFields 1453 default: 1454 return nil 1455 } 1456 } 1457 file_state_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { 1458 switch v := v.(*TestMetadata); i { 1459 case 0: 1460 return &v.state 1461 case 1: 1462 return &v.sizeCache 1463 case 2: 1464 return &v.unknownFields 1465 default: 1466 return nil 1467 } 1468 } 1469 file_state_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { 1470 switch v := v.(*Column); i { 1471 case 0: 1472 return &v.state 1473 case 1: 1474 return &v.sizeCache 1475 case 2: 1476 return &v.unknownFields 1477 default: 1478 return nil 1479 } 1480 } 1481 file_state_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { 1482 switch v := v.(*Stats); i { 1483 case 0: 1484 return &v.state 1485 case 1: 1486 return &v.sizeCache 1487 case 2: 1488 return &v.unknownFields 1489 default: 1490 return nil 1491 } 1492 } 1493 file_state_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { 1494 switch v := v.(*Row); i { 1495 case 0: 1496 return &v.state 1497 case 1: 1498 return &v.sizeCache 1499 case 2: 1500 return &v.unknownFields 1501 default: 1502 return nil 1503 } 1504 } 1505 file_state_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { 1506 switch v := v.(*Grid); i { 1507 case 0: 1508 return &v.state 1509 case 1: 1510 return &v.sizeCache 1511 case 2: 1512 return &v.unknownFields 1513 default: 1514 return nil 1515 } 1516 } 1517 file_state_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { 1518 switch v := v.(*Cluster); i { 1519 case 0: 1520 return &v.state 1521 case 1: 1522 return &v.sizeCache 1523 case 2: 1524 return &v.unknownFields 1525 default: 1526 return nil 1527 } 1528 } 1529 file_state_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { 1530 switch v := v.(*ClusterRow); i { 1531 case 0: 1532 return &v.state 1533 case 1: 1534 return &v.sizeCache 1535 case 2: 1536 return &v.unknownFields 1537 default: 1538 return nil 1539 } 1540 } 1541 } 1542 type x struct{} 1543 out := protoimpl.TypeBuilder{ 1544 File: protoimpl.DescBuilder{ 1545 GoPackagePath: reflect.TypeOf(x{}).PkgPath(), 1546 RawDescriptor: file_state_proto_rawDesc, 1547 NumEnums: 0, 1548 NumMessages: 15, 1549 NumExtensions: 0, 1550 NumServices: 0, 1551 }, 1552 GoTypes: file_state_proto_goTypes, 1553 DependencyIndexes: file_state_proto_depIdxs, 1554 MessageInfos: file_state_proto_msgTypes, 1555 }.Build() 1556 File_state_proto = out.File 1557 file_state_proto_rawDesc = nil 1558 file_state_proto_goTypes = nil 1559 file_state_proto_depIdxs = nil 1560 }