diff --git a/components/gitpod-db/src/typeorm/entity/db-workspace-instance.ts b/components/gitpod-db/src/typeorm/entity/db-workspace-instance.ts index 975822b14c3ba4..c4b009ef922b4e 100644 --- a/components/gitpod-db/src/typeorm/entity/db-workspace-instance.ts +++ b/components/gitpod-db/src/typeorm/entity/db-workspace-instance.ts @@ -13,6 +13,7 @@ import { WorkspaceInstanceConfiguration, ImageBuildInfo, WorkspaceInstanceRepoStatus, + WorkspaceInstanceMetrics, } from "@gitpod/gitpod-protocol"; import { TypeORM } from "../typeorm"; import { Transformer } from "../transformer"; @@ -84,7 +85,7 @@ export class DBWorkspaceInstance implements WorkspaceInstance { gitStatus?: WorkspaceInstanceRepoStatus; /** - * This field is a databse-only copy of status.phase for the sole purpose of creating indexes on it. + * This field is a database-only copy of status.phase for the sole purpose of creating indexes on it. * Is replicated inside workspace-db-impl.ts/storeInstance. */ @Column({ @@ -117,4 +118,10 @@ export class DBWorkspaceInstance implements WorkspaceInstance { transformer: Transformer.MAP_EMPTY_STR_TO_UNDEFINED, }) usageAttributionId?: string; + + @Column({ + type: "simple-json", + nullable: true, + }) + metrics?: WorkspaceInstanceMetrics; } diff --git a/components/gitpod-db/src/typeorm/migration/1733397172273-AddWorkspaceInstanceMetrics.ts b/components/gitpod-db/src/typeorm/migration/1733397172273-AddWorkspaceInstanceMetrics.ts new file mode 100644 index 00000000000000..1bdaad174592db --- /dev/null +++ b/components/gitpod-db/src/typeorm/migration/1733397172273-AddWorkspaceInstanceMetrics.ts @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2024 Gitpod GmbH. All rights reserved. + * Licensed under the GNU Affero General Public License (AGPL). + * See License.AGPL.txt in the project root for license information. + */ + +import { MigrationInterface, QueryRunner } from "typeorm"; +import { columnExists } from "./helper/helper"; + +const table = "d_b_workspace_instance"; +const newColumn = "metrics"; + +export class AddWorkspaceInstanceMetrics1733397172273 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + if (!(await columnExists(queryRunner, table, newColumn))) { + await queryRunner.query(`ALTER TABLE ${table} ADD COLUMN ${newColumn} JSON NULL`); + } + } + + public async down(queryRunner: QueryRunner): Promise { + if (await columnExists(queryRunner, table, newColumn)) { + await queryRunner.query(`ALTER TABLE ${table} DROP COLUMN ${newColumn}`); + } + } +} diff --git a/components/gitpod-protocol/src/workspace-instance.ts b/components/gitpod-protocol/src/workspace-instance.ts index 9054ae551e87bc..cc0eea7ed08285 100644 --- a/components/gitpod-protocol/src/workspace-instance.ts +++ b/components/gitpod-protocol/src/workspace-instance.ts @@ -75,7 +75,7 @@ export interface WorkspaceInstance { // WorkspaceInstanceStatus describes the current state of a workspace instance export interface WorkspaceInstanceStatus { // version is the current version of the workspace instance status - // Note: consider this value opague. The only guarantee given is that it imposes + // Note: consider this value opaque. The only guarantee given is that it imposes // a partial order on status updates, i.e. a.version > b.version -> a newer than b. version?: number; @@ -105,6 +105,9 @@ export interface WorkspaceInstanceStatus { // ownerToken is the token one needs to access the workspace. Its presence is checked by ws-proxy. ownerToken?: string; + + // metrics contains metrics about the workspace instance + metrics?: WorkspaceInstanceMetrics; } // WorkspaceInstancePhase describes a high-level state of a workspace instance @@ -122,11 +125,11 @@ export type WorkspaceInstancePhase = | "building" // Pending means the workspace does not yet consume resources in the cluster, but rather is looking for - // some space within the cluster. If for example the cluster needs to scale up to accomodate the + // some space within the cluster. If for example the cluster needs to scale up to accommodate the // workspace, the workspace will be in Pending state until that happened. | "pending" - // Creating means the workspace is currently being created. Thati includes downloading the images required + // Creating means the workspace is currently being created. That includes downloading the images required // to run the workspace over the network. The time spent in this phase varies widely and depends on the current // network speed, image size and cache states. | "creating" @@ -193,7 +196,7 @@ export interface WorkspaceInstancePort { // The outward-facing port number port: number; - // The visiblity of this port. Optional for backwards compatibility. + // The visibility of this port. Optional for backwards compatibility. visibility?: PortVisibility; // Public, outward-facing URL where the port can be accessed on. @@ -280,7 +283,7 @@ export interface IdeSetup { // WorkspaceInstanceConfiguration contains all per-instance configuration export interface WorkspaceInstanceConfiguration { // theiaVersion is the version of Theia this workspace instance uses - // @deprected: replaced with the ideImage field + // @deprecated: replaced with the ideImage field theiaVersion?: string; // feature flags are the lowercase feature-flag names as passed to ws-manager @@ -324,3 +327,19 @@ export interface ImageBuildLogInfo { url: string; headers: { [key: string]: string }; } + +/** + * Holds metrics about the workspace instance + */ +export interface WorkspaceInstanceMetrics { + image?: Partial<{ + /** + * the total size of the image in bytes (includes Gitpod-specific layers like IDE) + */ + totalSize: number; + /** + * the size of the workspace image in bytes + */ + workspaceImageSize: number; + }>; +} diff --git a/components/public-api/gitpod/v1/workspace.proto b/components/public-api/gitpod/v1/workspace.proto index 57679e9ac6a2c3..71734784471cfa 100644 --- a/components/public-api/gitpod/v1/workspace.proto +++ b/components/public-api/gitpod/v1/workspace.proto @@ -884,6 +884,14 @@ message WorkspaceSnapshot { } message WorkspaceSession { + message Metrics { + // workspace_image_size is the size of the workspace image in bytes + int64 workspace_image_size = 1; + + // total_image_size is the total size of the image in bytes (includes Gitpod-specific layers like IDE) + int64 total_image_size = 2; + } + string id = 1; Workspace workspace = 2; @@ -893,4 +901,6 @@ message WorkspaceSession { google.protobuf.Timestamp started_time = 5; google.protobuf.Timestamp stopping_time = 6; google.protobuf.Timestamp stopped_time = 7; + + Metrics metrics = 8; } diff --git a/components/public-api/go/v1/workspace.pb.go b/components/public-api/go/v1/workspace.pb.go index 55e97f1d4fd64e..4299bc3e255776 100644 --- a/components/public-api/go/v1/workspace.pb.go +++ b/components/public-api/go/v1/workspace.pb.go @@ -3740,13 +3740,14 @@ type WorkspaceSession struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Workspace *Workspace `protobuf:"bytes,2,opt,name=workspace,proto3" json:"workspace,omitempty"` - CreationTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=creation_time,json=creationTime,proto3" json:"creation_time,omitempty"` - DeployedTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=deployed_time,json=deployedTime,proto3" json:"deployed_time,omitempty"` - StartedTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=started_time,json=startedTime,proto3" json:"started_time,omitempty"` - StoppingTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=stopping_time,json=stoppingTime,proto3" json:"stopping_time,omitempty"` - StoppedTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=stopped_time,json=stoppedTime,proto3" json:"stopped_time,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Workspace *Workspace `protobuf:"bytes,2,opt,name=workspace,proto3" json:"workspace,omitempty"` + CreationTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=creation_time,json=creationTime,proto3" json:"creation_time,omitempty"` + DeployedTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=deployed_time,json=deployedTime,proto3" json:"deployed_time,omitempty"` + StartedTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=started_time,json=startedTime,proto3" json:"started_time,omitempty"` + StoppingTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=stopping_time,json=stoppingTime,proto3" json:"stopping_time,omitempty"` + StoppedTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=stopped_time,json=stoppedTime,proto3" json:"stopped_time,omitempty"` + Metrics *WorkspaceSession_Metrics `protobuf:"bytes,8,opt,name=metrics,proto3" json:"metrics,omitempty"` } func (x *WorkspaceSession) Reset() { @@ -3830,6 +3831,13 @@ func (x *WorkspaceSession) GetStoppedTime() *timestamppb.Timestamp { return nil } +func (x *WorkspaceSession) GetMetrics() *WorkspaceSession_Metrics { + if x != nil { + return x.Metrics + } + return nil +} + type CreateAndStartWorkspaceRequest_ContextURL struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4604,6 +4612,63 @@ func (x *UpdateWorkspaceRequest_UpdateWorkspaceSpec) GetSshPublicKeys() []string return nil } +type WorkspaceSession_Metrics struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // workspace_image_size is the size of the workspace image in bytes + WorkspaceImageSize int64 `protobuf:"varint,1,opt,name=workspace_image_size,json=workspaceImageSize,proto3" json:"workspace_image_size,omitempty"` + // total_image_size is the total size of the image in bytes (includes Gitpod-specific layers like IDE) + TotalImageSize int64 `protobuf:"varint,2,opt,name=total_image_size,json=totalImageSize,proto3" json:"total_image_size,omitempty"` +} + +func (x *WorkspaceSession_Metrics) Reset() { + *x = WorkspaceSession_Metrics{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_workspace_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WorkspaceSession_Metrics) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkspaceSession_Metrics) ProtoMessage() {} + +func (x *WorkspaceSession_Metrics) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_workspace_proto_msgTypes[65] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WorkspaceSession_Metrics.ProtoReflect.Descriptor instead. +func (*WorkspaceSession_Metrics) Descriptor() ([]byte, []int) { + return file_gitpod_v1_workspace_proto_rawDescGZIP(), []int{51, 0} +} + +func (x *WorkspaceSession_Metrics) GetWorkspaceImageSize() int64 { + if x != nil { + return x.WorkspaceImageSize + } + return 0 +} + +func (x *WorkspaceSession_Metrics) GetTotalImageSize() int64 { + if x != nil { + return x.TotalImageSize + } + return 0 +} + var File_gitpod_v1_workspace_proto protoreflect.FileDescriptor var file_gitpod_v1_workspace_proto_rawDesc = []byte{ @@ -5273,7 +5338,7 @@ var file_gitpod_v1_workspace_proto_rawDesc = []byte{ 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x97, 0x03, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xbd, 0x04, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, @@ -5299,137 +5364,147 @@ var file_gitpod_v1_workspace_proto_rawDesc = []byte{ 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, - 0x2a, 0x6f, 0x0a, 0x0e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x44, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, - 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x44, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, - 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x4f, 0x57, 0x4e, 0x45, 0x52, 0x5f, 0x4f, 0x4e, 0x4c, - 0x59, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x44, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, - 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x45, 0x56, 0x45, 0x52, 0x59, 0x4f, 0x4e, 0x45, 0x10, - 0x02, 0x32, 0xd3, 0x0e, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6b, 0x0a, 0x14, 0x57, 0x61, 0x74, - 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, - 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x70, - 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x57, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, - 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x6c, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, - 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x2e, - 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, - 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, - 0x52, 0x4c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x70, - 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x75, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x2e, 0x67, 0x69, - 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, - 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, - 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x16, - 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, - 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, + 0x12, 0x3d, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x1a, + 0x65, 0x0a, 0x07, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x77, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x28, 0x0a, 0x10, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x2a, 0x6f, 0x0a, 0x0e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x44, 0x4d, 0x49, + 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x44, 0x4d, + 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x4f, 0x57, 0x4e, + 0x45, 0x52, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x44, 0x4d, + 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x45, 0x56, 0x45, + 0x52, 0x59, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x32, 0xd3, 0x0e, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, + 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1e, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x6b, 0x0a, 0x14, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x27, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, + 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x57, 0x0a, 0x0e, + 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x20, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x29, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, + 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x70, + 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, + 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x5a, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, + 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x2e, + 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, + 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, + 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x50, 0x61, 0x72, + 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x12, 0x21, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x22, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x73, + 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x12, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, + 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, + 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, 0x12, 0x1f, 0x2e, + 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, + 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, + 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x28, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, - 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, - 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, - 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, - 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x30, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, - 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, - 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x18, 0x57, 0x61, 0x69, 0x74, - 0x46, 0x6f, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x12, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, - 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x64, + 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, + 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, - 0x74, 0x46, 0x6f, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x66, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, - 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x51, 0x0a, 0x16, 0x69, 0x6f, 0x2e, 0x67, 0x69, - 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, - 0x74, 0x70, 0x6f, 0x64, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2f, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, + 0x0a, 0x18, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x2a, 0x2e, 0x67, 0x69, 0x74, + 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x25, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, + 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x51, 0x0a, + 0x16, 0x69, 0x6f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x69, + 0x74, 0x70, 0x6f, 0x64, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -5445,7 +5520,7 @@ func file_gitpod_v1_workspace_proto_rawDescGZIP() []byte { } var file_gitpod_v1_workspace_proto_enumTypes = make([]protoimpl.EnumInfo, 8) -var file_gitpod_v1_workspace_proto_msgTypes = make([]protoimpl.MessageInfo, 65) +var file_gitpod_v1_workspace_proto_msgTypes = make([]protoimpl.MessageInfo, 66) var file_gitpod_v1_workspace_proto_goTypes = []interface{}{ (AdmissionLevel)(0), // 0: gitpod.v1.AdmissionLevel (GetWorkspaceDefaultImageResponse_Source)(0), // 1: gitpod.v1.GetWorkspaceDefaultImageResponse.Source @@ -5520,25 +5595,26 @@ var file_gitpod_v1_workspace_proto_goTypes = []interface{}{ (*UpdateWorkspaceRequest_UpdateWorkspaceMetadata)(nil), // 70: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceMetadata (*UpdateWorkspaceRequest_UpdateTimeout)(nil), // 71: gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout (*UpdateWorkspaceRequest_UpdateWorkspaceSpec)(nil), // 72: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec - (*PaginationRequest)(nil), // 73: gitpod.v1.PaginationRequest - (*PaginationResponse)(nil), // 74: gitpod.v1.PaginationResponse - (*timestamppb.Timestamp)(nil), // 75: google.protobuf.Timestamp - (*EnvironmentVariable)(nil), // 76: gitpod.v1.EnvironmentVariable - (*EditorReference)(nil), // 77: gitpod.v1.EditorReference - (*durationpb.Duration)(nil), // 78: google.protobuf.Duration + (*WorkspaceSession_Metrics)(nil), // 73: gitpod.v1.WorkspaceSession.Metrics + (*PaginationRequest)(nil), // 74: gitpod.v1.PaginationRequest + (*PaginationResponse)(nil), // 75: gitpod.v1.PaginationResponse + (*timestamppb.Timestamp)(nil), // 76: google.protobuf.Timestamp + (*EnvironmentVariable)(nil), // 77: gitpod.v1.EnvironmentVariable + (*EditorReference)(nil), // 78: gitpod.v1.EditorReference + (*durationpb.Duration)(nil), // 79: google.protobuf.Duration } var file_gitpod_v1_workspace_proto_depIdxs = []int32{ 0, // 0: gitpod.v1.UpdateWorkspacePortRequest.admission:type_name -> gitpod.v1.AdmissionLevel 4, // 1: gitpod.v1.UpdateWorkspacePortRequest.protocol:type_name -> gitpod.v1.WorkspacePort.Protocol 30, // 2: gitpod.v1.GetWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace 33, // 3: gitpod.v1.WatchWorkspaceStatusResponse.status:type_name -> gitpod.v1.WorkspaceStatus - 73, // 4: gitpod.v1.ListWorkspacesRequest.pagination:type_name -> gitpod.v1.PaginationRequest - 74, // 5: gitpod.v1.ListWorkspacesResponse.pagination:type_name -> gitpod.v1.PaginationResponse + 74, // 4: gitpod.v1.ListWorkspacesRequest.pagination:type_name -> gitpod.v1.PaginationRequest + 75, // 5: gitpod.v1.ListWorkspacesResponse.pagination:type_name -> gitpod.v1.PaginationResponse 30, // 6: gitpod.v1.ListWorkspacesResponse.workspaces:type_name -> gitpod.v1.Workspace - 73, // 7: gitpod.v1.ListWorkspaceSessionsRequest.pagination:type_name -> gitpod.v1.PaginationRequest - 75, // 8: gitpod.v1.ListWorkspaceSessionsRequest.from:type_name -> google.protobuf.Timestamp - 75, // 9: gitpod.v1.ListWorkspaceSessionsRequest.to:type_name -> google.protobuf.Timestamp - 74, // 10: gitpod.v1.ListWorkspaceSessionsResponse.pagination:type_name -> gitpod.v1.PaginationResponse + 74, // 7: gitpod.v1.ListWorkspaceSessionsRequest.pagination:type_name -> gitpod.v1.PaginationRequest + 76, // 8: gitpod.v1.ListWorkspaceSessionsRequest.from:type_name -> google.protobuf.Timestamp + 76, // 9: gitpod.v1.ListWorkspaceSessionsRequest.to:type_name -> google.protobuf.Timestamp + 75, // 10: gitpod.v1.ListWorkspaceSessionsResponse.pagination:type_name -> gitpod.v1.PaginationResponse 59, // 11: gitpod.v1.ListWorkspaceSessionsResponse.workspace_sessions:type_name -> gitpod.v1.WorkspaceSession 31, // 12: gitpod.v1.CreateAndStartWorkspaceRequest.metadata:type_name -> gitpod.v1.WorkspaceMetadata 60, // 13: gitpod.v1.CreateAndStartWorkspaceRequest.context_url:type_name -> gitpod.v1.CreateAndStartWorkspaceRequest.ContextURL @@ -5553,12 +5629,12 @@ var file_gitpod_v1_workspace_proto_depIdxs = []int32{ 37, // 22: gitpod.v1.WorkspaceSpec.initializer:type_name -> gitpod.v1.WorkspaceInitializer 2, // 23: gitpod.v1.WorkspaceSpec.type:type_name -> gitpod.v1.WorkspaceSpec.WorkspaceType 34, // 24: gitpod.v1.WorkspaceSpec.ports:type_name -> gitpod.v1.WorkspacePort - 76, // 25: gitpod.v1.WorkspaceSpec.environment_variables:type_name -> gitpod.v1.EnvironmentVariable + 77, // 25: gitpod.v1.WorkspaceSpec.environment_variables:type_name -> gitpod.v1.EnvironmentVariable 63, // 26: gitpod.v1.WorkspaceSpec.git:type_name -> gitpod.v1.WorkspaceSpec.GitSpec 62, // 27: gitpod.v1.WorkspaceSpec.timeout:type_name -> gitpod.v1.WorkspaceSpec.Timeout 0, // 28: gitpod.v1.WorkspaceSpec.admission:type_name -> gitpod.v1.AdmissionLevel - 75, // 29: gitpod.v1.WorkspaceSpec.last_user_activity:type_name -> google.protobuf.Timestamp - 77, // 30: gitpod.v1.WorkspaceSpec.editor:type_name -> gitpod.v1.EditorReference + 76, // 29: gitpod.v1.WorkspaceSpec.last_user_activity:type_name -> google.protobuf.Timestamp + 78, // 30: gitpod.v1.WorkspaceSpec.editor:type_name -> gitpod.v1.EditorReference 36, // 31: gitpod.v1.WorkspaceStatus.phase:type_name -> gitpod.v1.WorkspacePhase 64, // 32: gitpod.v1.WorkspaceStatus.conditions:type_name -> gitpod.v1.WorkspaceStatus.WorkspaceConditions 65, // 33: gitpod.v1.WorkspaceStatus.prebuild_result:type_name -> gitpod.v1.WorkspaceStatus.PrebuildResult @@ -5566,7 +5642,7 @@ var file_gitpod_v1_workspace_proto_depIdxs = []int32{ 0, // 35: gitpod.v1.WorkspacePort.admission:type_name -> gitpod.v1.AdmissionLevel 4, // 36: gitpod.v1.WorkspacePort.protocol:type_name -> gitpod.v1.WorkspacePort.Protocol 5, // 37: gitpod.v1.WorkspacePhase.name:type_name -> gitpod.v1.WorkspacePhase.Phase - 75, // 38: gitpod.v1.WorkspacePhase.last_transition_time:type_name -> google.protobuf.Timestamp + 76, // 38: gitpod.v1.WorkspacePhase.last_transition_time:type_name -> google.protobuf.Timestamp 66, // 39: gitpod.v1.WorkspaceInitializer.specs:type_name -> gitpod.v1.WorkspaceInitializer.Spec 6, // 40: gitpod.v1.GitInitializer.target_mode:type_name -> gitpod.v1.GitInitializer.CloneTargetMode 67, // 41: gitpod.v1.GitInitializer.config:type_name -> gitpod.v1.GitInitializer.GitConfig @@ -5575,75 +5651,76 @@ var file_gitpod_v1_workspace_proto_depIdxs = []int32{ 72, // 44: gitpod.v1.UpdateWorkspaceRequest.spec:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec 35, // 45: gitpod.v1.UpdateWorkspaceRequest.git_status:type_name -> gitpod.v1.WorkspaceGitStatus 30, // 46: gitpod.v1.UpdateWorkspaceResponse.workspace:type_name -> gitpod.v1.Workspace - 73, // 47: gitpod.v1.ListWorkspaceClassesRequest.pagination:type_name -> gitpod.v1.PaginationRequest - 74, // 48: gitpod.v1.ListWorkspaceClassesResponse.pagination:type_name -> gitpod.v1.PaginationResponse + 74, // 47: gitpod.v1.ListWorkspaceClassesRequest.pagination:type_name -> gitpod.v1.PaginationRequest + 75, // 48: gitpod.v1.ListWorkspaceClassesResponse.pagination:type_name -> gitpod.v1.PaginationResponse 53, // 49: gitpod.v1.ListWorkspaceClassesResponse.workspace_classes:type_name -> gitpod.v1.WorkspaceClass 31, // 50: gitpod.v1.ParseContextURLResponse.metadata:type_name -> gitpod.v1.WorkspaceMetadata 32, // 51: gitpod.v1.ParseContextURLResponse.spec:type_name -> gitpod.v1.WorkspaceSpec 58, // 52: gitpod.v1.CreateWorkspaceSnapshotResponse.snapshot:type_name -> gitpod.v1.WorkspaceSnapshot - 75, // 53: gitpod.v1.WorkspaceSnapshot.creation_time:type_name -> google.protobuf.Timestamp + 76, // 53: gitpod.v1.WorkspaceSnapshot.creation_time:type_name -> google.protobuf.Timestamp 30, // 54: gitpod.v1.WorkspaceSession.workspace:type_name -> gitpod.v1.Workspace - 75, // 55: gitpod.v1.WorkspaceSession.creation_time:type_name -> google.protobuf.Timestamp - 75, // 56: gitpod.v1.WorkspaceSession.deployed_time:type_name -> google.protobuf.Timestamp - 75, // 57: gitpod.v1.WorkspaceSession.started_time:type_name -> google.protobuf.Timestamp - 75, // 58: gitpod.v1.WorkspaceSession.stopping_time:type_name -> google.protobuf.Timestamp - 75, // 59: gitpod.v1.WorkspaceSession.stopped_time:type_name -> google.protobuf.Timestamp - 77, // 60: gitpod.v1.CreateAndStartWorkspaceRequest.ContextURL.editor:type_name -> gitpod.v1.EditorReference - 78, // 61: gitpod.v1.WorkspaceSpec.Timeout.inactivity:type_name -> google.protobuf.Duration - 78, // 62: gitpod.v1.WorkspaceSpec.Timeout.disconnected:type_name -> google.protobuf.Duration - 78, // 63: gitpod.v1.WorkspaceSpec.Timeout.maximum_lifetime:type_name -> google.protobuf.Duration - 3, // 64: gitpod.v1.WorkspaceStatus.WorkspaceConditions.failed_reason:type_name -> gitpod.v1.WorkspaceStatus.WorkspaceConditions.FailedReason - 38, // 65: gitpod.v1.WorkspaceInitializer.Spec.git:type_name -> gitpod.v1.GitInitializer - 39, // 66: gitpod.v1.WorkspaceInitializer.Spec.snapshot:type_name -> gitpod.v1.SnapshotInitializer - 40, // 67: gitpod.v1.WorkspaceInitializer.Spec.prebuild:type_name -> gitpod.v1.PrebuildInitializer - 41, // 68: gitpod.v1.WorkspaceInitializer.Spec.download:type_name -> gitpod.v1.FileDownloadInitializer - 68, // 69: gitpod.v1.GitInitializer.GitConfig.custom_config:type_name -> gitpod.v1.GitInitializer.GitConfig.CustomConfigEntry - 7, // 70: gitpod.v1.GitInitializer.GitConfig.authentication:type_name -> gitpod.v1.GitInitializer.AuthMethod - 78, // 71: gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout.inactivity:type_name -> google.protobuf.Duration - 78, // 72: gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout.disconnected:type_name -> google.protobuf.Duration - 71, // 73: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec.timeout:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout - 0, // 74: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec.admission:type_name -> gitpod.v1.AdmissionLevel - 10, // 75: gitpod.v1.WorkspaceService.GetWorkspace:input_type -> gitpod.v1.GetWorkspaceRequest - 12, // 76: gitpod.v1.WorkspaceService.WatchWorkspaceStatus:input_type -> gitpod.v1.WatchWorkspaceStatusRequest - 14, // 77: gitpod.v1.WorkspaceService.ListWorkspaces:input_type -> gitpod.v1.ListWorkspacesRequest - 16, // 78: gitpod.v1.WorkspaceService.ListWorkspaceSessions:input_type -> gitpod.v1.ListWorkspaceSessionsRequest - 18, // 79: gitpod.v1.WorkspaceService.CreateAndStartWorkspace:input_type -> gitpod.v1.CreateAndStartWorkspaceRequest - 20, // 80: gitpod.v1.WorkspaceService.StartWorkspace:input_type -> gitpod.v1.StartWorkspaceRequest - 43, // 81: gitpod.v1.WorkspaceService.UpdateWorkspace:input_type -> gitpod.v1.UpdateWorkspaceRequest - 45, // 82: gitpod.v1.WorkspaceService.StopWorkspace:input_type -> gitpod.v1.StopWorkspaceRequest - 47, // 83: gitpod.v1.WorkspaceService.DeleteWorkspace:input_type -> gitpod.v1.DeleteWorkspaceRequest - 49, // 84: gitpod.v1.WorkspaceService.ListWorkspaceClasses:input_type -> gitpod.v1.ListWorkspaceClassesRequest - 51, // 85: gitpod.v1.WorkspaceService.ParseContextURL:input_type -> gitpod.v1.ParseContextURLRequest - 22, // 86: gitpod.v1.WorkspaceService.GetWorkspaceDefaultImage:input_type -> gitpod.v1.GetWorkspaceDefaultImageRequest - 24, // 87: gitpod.v1.WorkspaceService.SendHeartBeat:input_type -> gitpod.v1.SendHeartBeatRequest - 26, // 88: gitpod.v1.WorkspaceService.GetWorkspaceOwnerToken:input_type -> gitpod.v1.GetWorkspaceOwnerTokenRequest - 28, // 89: gitpod.v1.WorkspaceService.GetWorkspaceEditorCredentials:input_type -> gitpod.v1.GetWorkspaceEditorCredentialsRequest - 54, // 90: gitpod.v1.WorkspaceService.CreateWorkspaceSnapshot:input_type -> gitpod.v1.CreateWorkspaceSnapshotRequest - 56, // 91: gitpod.v1.WorkspaceService.WaitForWorkspaceSnapshot:input_type -> gitpod.v1.WaitForWorkspaceSnapshotRequest - 8, // 92: gitpod.v1.WorkspaceService.UpdateWorkspacePort:input_type -> gitpod.v1.UpdateWorkspacePortRequest - 11, // 93: gitpod.v1.WorkspaceService.GetWorkspace:output_type -> gitpod.v1.GetWorkspaceResponse - 13, // 94: gitpod.v1.WorkspaceService.WatchWorkspaceStatus:output_type -> gitpod.v1.WatchWorkspaceStatusResponse - 15, // 95: gitpod.v1.WorkspaceService.ListWorkspaces:output_type -> gitpod.v1.ListWorkspacesResponse - 17, // 96: gitpod.v1.WorkspaceService.ListWorkspaceSessions:output_type -> gitpod.v1.ListWorkspaceSessionsResponse - 19, // 97: gitpod.v1.WorkspaceService.CreateAndStartWorkspace:output_type -> gitpod.v1.CreateAndStartWorkspaceResponse - 21, // 98: gitpod.v1.WorkspaceService.StartWorkspace:output_type -> gitpod.v1.StartWorkspaceResponse - 44, // 99: gitpod.v1.WorkspaceService.UpdateWorkspace:output_type -> gitpod.v1.UpdateWorkspaceResponse - 46, // 100: gitpod.v1.WorkspaceService.StopWorkspace:output_type -> gitpod.v1.StopWorkspaceResponse - 48, // 101: gitpod.v1.WorkspaceService.DeleteWorkspace:output_type -> gitpod.v1.DeleteWorkspaceResponse - 50, // 102: gitpod.v1.WorkspaceService.ListWorkspaceClasses:output_type -> gitpod.v1.ListWorkspaceClassesResponse - 52, // 103: gitpod.v1.WorkspaceService.ParseContextURL:output_type -> gitpod.v1.ParseContextURLResponse - 23, // 104: gitpod.v1.WorkspaceService.GetWorkspaceDefaultImage:output_type -> gitpod.v1.GetWorkspaceDefaultImageResponse - 25, // 105: gitpod.v1.WorkspaceService.SendHeartBeat:output_type -> gitpod.v1.SendHeartBeatResponse - 27, // 106: gitpod.v1.WorkspaceService.GetWorkspaceOwnerToken:output_type -> gitpod.v1.GetWorkspaceOwnerTokenResponse - 29, // 107: gitpod.v1.WorkspaceService.GetWorkspaceEditorCredentials:output_type -> gitpod.v1.GetWorkspaceEditorCredentialsResponse - 55, // 108: gitpod.v1.WorkspaceService.CreateWorkspaceSnapshot:output_type -> gitpod.v1.CreateWorkspaceSnapshotResponse - 57, // 109: gitpod.v1.WorkspaceService.WaitForWorkspaceSnapshot:output_type -> gitpod.v1.WaitForWorkspaceSnapshotResponse - 9, // 110: gitpod.v1.WorkspaceService.UpdateWorkspacePort:output_type -> gitpod.v1.UpdateWorkspacePortResponse - 93, // [93:111] is the sub-list for method output_type - 75, // [75:93] is the sub-list for method input_type - 75, // [75:75] is the sub-list for extension type_name - 75, // [75:75] is the sub-list for extension extendee - 0, // [0:75] is the sub-list for field type_name + 76, // 55: gitpod.v1.WorkspaceSession.creation_time:type_name -> google.protobuf.Timestamp + 76, // 56: gitpod.v1.WorkspaceSession.deployed_time:type_name -> google.protobuf.Timestamp + 76, // 57: gitpod.v1.WorkspaceSession.started_time:type_name -> google.protobuf.Timestamp + 76, // 58: gitpod.v1.WorkspaceSession.stopping_time:type_name -> google.protobuf.Timestamp + 76, // 59: gitpod.v1.WorkspaceSession.stopped_time:type_name -> google.protobuf.Timestamp + 73, // 60: gitpod.v1.WorkspaceSession.metrics:type_name -> gitpod.v1.WorkspaceSession.Metrics + 78, // 61: gitpod.v1.CreateAndStartWorkspaceRequest.ContextURL.editor:type_name -> gitpod.v1.EditorReference + 79, // 62: gitpod.v1.WorkspaceSpec.Timeout.inactivity:type_name -> google.protobuf.Duration + 79, // 63: gitpod.v1.WorkspaceSpec.Timeout.disconnected:type_name -> google.protobuf.Duration + 79, // 64: gitpod.v1.WorkspaceSpec.Timeout.maximum_lifetime:type_name -> google.protobuf.Duration + 3, // 65: gitpod.v1.WorkspaceStatus.WorkspaceConditions.failed_reason:type_name -> gitpod.v1.WorkspaceStatus.WorkspaceConditions.FailedReason + 38, // 66: gitpod.v1.WorkspaceInitializer.Spec.git:type_name -> gitpod.v1.GitInitializer + 39, // 67: gitpod.v1.WorkspaceInitializer.Spec.snapshot:type_name -> gitpod.v1.SnapshotInitializer + 40, // 68: gitpod.v1.WorkspaceInitializer.Spec.prebuild:type_name -> gitpod.v1.PrebuildInitializer + 41, // 69: gitpod.v1.WorkspaceInitializer.Spec.download:type_name -> gitpod.v1.FileDownloadInitializer + 68, // 70: gitpod.v1.GitInitializer.GitConfig.custom_config:type_name -> gitpod.v1.GitInitializer.GitConfig.CustomConfigEntry + 7, // 71: gitpod.v1.GitInitializer.GitConfig.authentication:type_name -> gitpod.v1.GitInitializer.AuthMethod + 79, // 72: gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout.inactivity:type_name -> google.protobuf.Duration + 79, // 73: gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout.disconnected:type_name -> google.protobuf.Duration + 71, // 74: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec.timeout:type_name -> gitpod.v1.UpdateWorkspaceRequest.UpdateTimeout + 0, // 75: gitpod.v1.UpdateWorkspaceRequest.UpdateWorkspaceSpec.admission:type_name -> gitpod.v1.AdmissionLevel + 10, // 76: gitpod.v1.WorkspaceService.GetWorkspace:input_type -> gitpod.v1.GetWorkspaceRequest + 12, // 77: gitpod.v1.WorkspaceService.WatchWorkspaceStatus:input_type -> gitpod.v1.WatchWorkspaceStatusRequest + 14, // 78: gitpod.v1.WorkspaceService.ListWorkspaces:input_type -> gitpod.v1.ListWorkspacesRequest + 16, // 79: gitpod.v1.WorkspaceService.ListWorkspaceSessions:input_type -> gitpod.v1.ListWorkspaceSessionsRequest + 18, // 80: gitpod.v1.WorkspaceService.CreateAndStartWorkspace:input_type -> gitpod.v1.CreateAndStartWorkspaceRequest + 20, // 81: gitpod.v1.WorkspaceService.StartWorkspace:input_type -> gitpod.v1.StartWorkspaceRequest + 43, // 82: gitpod.v1.WorkspaceService.UpdateWorkspace:input_type -> gitpod.v1.UpdateWorkspaceRequest + 45, // 83: gitpod.v1.WorkspaceService.StopWorkspace:input_type -> gitpod.v1.StopWorkspaceRequest + 47, // 84: gitpod.v1.WorkspaceService.DeleteWorkspace:input_type -> gitpod.v1.DeleteWorkspaceRequest + 49, // 85: gitpod.v1.WorkspaceService.ListWorkspaceClasses:input_type -> gitpod.v1.ListWorkspaceClassesRequest + 51, // 86: gitpod.v1.WorkspaceService.ParseContextURL:input_type -> gitpod.v1.ParseContextURLRequest + 22, // 87: gitpod.v1.WorkspaceService.GetWorkspaceDefaultImage:input_type -> gitpod.v1.GetWorkspaceDefaultImageRequest + 24, // 88: gitpod.v1.WorkspaceService.SendHeartBeat:input_type -> gitpod.v1.SendHeartBeatRequest + 26, // 89: gitpod.v1.WorkspaceService.GetWorkspaceOwnerToken:input_type -> gitpod.v1.GetWorkspaceOwnerTokenRequest + 28, // 90: gitpod.v1.WorkspaceService.GetWorkspaceEditorCredentials:input_type -> gitpod.v1.GetWorkspaceEditorCredentialsRequest + 54, // 91: gitpod.v1.WorkspaceService.CreateWorkspaceSnapshot:input_type -> gitpod.v1.CreateWorkspaceSnapshotRequest + 56, // 92: gitpod.v1.WorkspaceService.WaitForWorkspaceSnapshot:input_type -> gitpod.v1.WaitForWorkspaceSnapshotRequest + 8, // 93: gitpod.v1.WorkspaceService.UpdateWorkspacePort:input_type -> gitpod.v1.UpdateWorkspacePortRequest + 11, // 94: gitpod.v1.WorkspaceService.GetWorkspace:output_type -> gitpod.v1.GetWorkspaceResponse + 13, // 95: gitpod.v1.WorkspaceService.WatchWorkspaceStatus:output_type -> gitpod.v1.WatchWorkspaceStatusResponse + 15, // 96: gitpod.v1.WorkspaceService.ListWorkspaces:output_type -> gitpod.v1.ListWorkspacesResponse + 17, // 97: gitpod.v1.WorkspaceService.ListWorkspaceSessions:output_type -> gitpod.v1.ListWorkspaceSessionsResponse + 19, // 98: gitpod.v1.WorkspaceService.CreateAndStartWorkspace:output_type -> gitpod.v1.CreateAndStartWorkspaceResponse + 21, // 99: gitpod.v1.WorkspaceService.StartWorkspace:output_type -> gitpod.v1.StartWorkspaceResponse + 44, // 100: gitpod.v1.WorkspaceService.UpdateWorkspace:output_type -> gitpod.v1.UpdateWorkspaceResponse + 46, // 101: gitpod.v1.WorkspaceService.StopWorkspace:output_type -> gitpod.v1.StopWorkspaceResponse + 48, // 102: gitpod.v1.WorkspaceService.DeleteWorkspace:output_type -> gitpod.v1.DeleteWorkspaceResponse + 50, // 103: gitpod.v1.WorkspaceService.ListWorkspaceClasses:output_type -> gitpod.v1.ListWorkspaceClassesResponse + 52, // 104: gitpod.v1.WorkspaceService.ParseContextURL:output_type -> gitpod.v1.ParseContextURLResponse + 23, // 105: gitpod.v1.WorkspaceService.GetWorkspaceDefaultImage:output_type -> gitpod.v1.GetWorkspaceDefaultImageResponse + 25, // 106: gitpod.v1.WorkspaceService.SendHeartBeat:output_type -> gitpod.v1.SendHeartBeatResponse + 27, // 107: gitpod.v1.WorkspaceService.GetWorkspaceOwnerToken:output_type -> gitpod.v1.GetWorkspaceOwnerTokenResponse + 29, // 108: gitpod.v1.WorkspaceService.GetWorkspaceEditorCredentials:output_type -> gitpod.v1.GetWorkspaceEditorCredentialsResponse + 55, // 109: gitpod.v1.WorkspaceService.CreateWorkspaceSnapshot:output_type -> gitpod.v1.CreateWorkspaceSnapshotResponse + 57, // 110: gitpod.v1.WorkspaceService.WaitForWorkspaceSnapshot:output_type -> gitpod.v1.WaitForWorkspaceSnapshotResponse + 9, // 111: gitpod.v1.WorkspaceService.UpdateWorkspacePort:output_type -> gitpod.v1.UpdateWorkspacePortResponse + 94, // [94:112] is the sub-list for method output_type + 76, // [76:94] is the sub-list for method input_type + 76, // [76:76] is the sub-list for extension type_name + 76, // [76:76] is the sub-list for extension extendee + 0, // [0:76] is the sub-list for field type_name } func init() { file_gitpod_v1_workspace_proto_init() } @@ -6411,6 +6488,18 @@ func file_gitpod_v1_workspace_proto_init() { return nil } } + file_gitpod_v1_workspace_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WorkspaceSession_Metrics); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_gitpod_v1_workspace_proto_msgTypes[0].OneofWrappers = []interface{}{} file_gitpod_v1_workspace_proto_msgTypes[10].OneofWrappers = []interface{}{ @@ -6433,7 +6522,7 @@ func file_gitpod_v1_workspace_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_gitpod_v1_workspace_proto_rawDesc, NumEnums: 8, - NumMessages: 65, + NumMessages: 66, NumExtensions: 0, NumServices: 1, }, diff --git a/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/WorkspaceOuterClass.java b/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/WorkspaceOuterClass.java index 9377b84f44131a..23ffaeabebd481 100644 --- a/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/WorkspaceOuterClass.java +++ b/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/WorkspaceOuterClass.java @@ -58630,6 +58630,21 @@ public interface WorkspaceSessionOrBuilder extends * .google.protobuf.Timestamp stopped_time = 7 [json_name = "stoppedTime"]; */ com.google.protobuf.TimestampOrBuilder getStoppedTimeOrBuilder(); + + /** + * .gitpod.v1.WorkspaceSession.Metrics metrics = 8 [json_name = "metrics"]; + * @return Whether the metrics field is set. + */ + boolean hasMetrics(); + /** + * .gitpod.v1.WorkspaceSession.Metrics metrics = 8 [json_name = "metrics"]; + * @return The metrics. + */ + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics getMetrics(); + /** + * .gitpod.v1.WorkspaceSession.Metrics metrics = 8 [json_name = "metrics"]; + */ + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.MetricsOrBuilder getMetricsOrBuilder(); } /** * Protobuf type {@code gitpod.v1.WorkspaceSession} @@ -58669,6 +58684,554 @@ private WorkspaceSession() { io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.class, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Builder.class); } + public interface MetricsOrBuilder extends + // @@protoc_insertion_point(interface_extends:gitpod.v1.WorkspaceSession.Metrics) + com.google.protobuf.MessageOrBuilder { + + /** + *
+       * workspace_image_size is the size of the workspace image in bytes
+       * 
+ * + * int64 workspace_image_size = 1 [json_name = "workspaceImageSize"]; + * @return The workspaceImageSize. + */ + long getWorkspaceImageSize(); + + /** + *
+       * total_image_size is the total size of the image in bytes (includes Gitpod-specific layers like IDE)
+       * 
+ * + * int64 total_image_size = 2 [json_name = "totalImageSize"]; + * @return The totalImageSize. + */ + long getTotalImageSize(); + } + /** + * Protobuf type {@code gitpod.v1.WorkspaceSession.Metrics} + */ + public static final class Metrics extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:gitpod.v1.WorkspaceSession.Metrics) + MetricsOrBuilder { + private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 27, + /* patch= */ 2, + /* suffix= */ "", + Metrics.class.getName()); + } + // Use Metrics.newBuilder() to construct. + private Metrics(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private Metrics() { + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Metrics_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Metrics_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.class, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.Builder.class); + } + + public static final int WORKSPACE_IMAGE_SIZE_FIELD_NUMBER = 1; + private long workspaceImageSize_ = 0L; + /** + *
+       * workspace_image_size is the size of the workspace image in bytes
+       * 
+ * + * int64 workspace_image_size = 1 [json_name = "workspaceImageSize"]; + * @return The workspaceImageSize. + */ + @java.lang.Override + public long getWorkspaceImageSize() { + return workspaceImageSize_; + } + + public static final int TOTAL_IMAGE_SIZE_FIELD_NUMBER = 2; + private long totalImageSize_ = 0L; + /** + *
+       * total_image_size is the total size of the image in bytes (includes Gitpod-specific layers like IDE)
+       * 
+ * + * int64 total_image_size = 2 [json_name = "totalImageSize"]; + * @return The totalImageSize. + */ + @java.lang.Override + public long getTotalImageSize() { + return totalImageSize_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (workspaceImageSize_ != 0L) { + output.writeInt64(1, workspaceImageSize_); + } + if (totalImageSize_ != 0L) { + output.writeInt64(2, totalImageSize_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (workspaceImageSize_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, workspaceImageSize_); + } + if (totalImageSize_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(2, totalImageSize_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics)) { + return super.equals(obj); + } + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics other = (io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics) obj; + + if (getWorkspaceImageSize() + != other.getWorkspaceImageSize()) return false; + if (getTotalImageSize() + != other.getTotalImageSize()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + WORKSPACE_IMAGE_SIZE_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getWorkspaceImageSize()); + hash = (37 * hash) + TOTAL_IMAGE_SIZE_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getTotalImageSize()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code gitpod.v1.WorkspaceSession.Metrics} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:gitpod.v1.WorkspaceSession.Metrics) + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.MetricsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Metrics_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Metrics_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.class, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.Builder.class); + } + + // Construct using io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + workspaceImageSize_ = 0L; + totalImageSize_ = 0L; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.internal_static_gitpod_v1_WorkspaceSession_Metrics_descriptor; + } + + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics getDefaultInstanceForType() { + return io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.getDefaultInstance(); + } + + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics build() { + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics buildPartial() { + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics result = new io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.workspaceImageSize_ = workspaceImageSize_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.totalImageSize_ = totalImageSize_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics) { + return mergeFrom((io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics other) { + if (other == io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.getDefaultInstance()) return this; + if (other.getWorkspaceImageSize() != 0L) { + setWorkspaceImageSize(other.getWorkspaceImageSize()); + } + if (other.getTotalImageSize() != 0L) { + setTotalImageSize(other.getTotalImageSize()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + workspaceImageSize_ = input.readInt64(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: { + totalImageSize_ = input.readInt64(); + bitField0_ |= 0x00000002; + break; + } // case 16 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private long workspaceImageSize_ ; + /** + *
+         * workspace_image_size is the size of the workspace image in bytes
+         * 
+ * + * int64 workspace_image_size = 1 [json_name = "workspaceImageSize"]; + * @return The workspaceImageSize. + */ + @java.lang.Override + public long getWorkspaceImageSize() { + return workspaceImageSize_; + } + /** + *
+         * workspace_image_size is the size of the workspace image in bytes
+         * 
+ * + * int64 workspace_image_size = 1 [json_name = "workspaceImageSize"]; + * @param value The workspaceImageSize to set. + * @return This builder for chaining. + */ + public Builder setWorkspaceImageSize(long value) { + + workspaceImageSize_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + *
+         * workspace_image_size is the size of the workspace image in bytes
+         * 
+ * + * int64 workspace_image_size = 1 [json_name = "workspaceImageSize"]; + * @return This builder for chaining. + */ + public Builder clearWorkspaceImageSize() { + bitField0_ = (bitField0_ & ~0x00000001); + workspaceImageSize_ = 0L; + onChanged(); + return this; + } + + private long totalImageSize_ ; + /** + *
+         * total_image_size is the total size of the image in bytes (includes Gitpod-specific layers like IDE)
+         * 
+ * + * int64 total_image_size = 2 [json_name = "totalImageSize"]; + * @return The totalImageSize. + */ + @java.lang.Override + public long getTotalImageSize() { + return totalImageSize_; + } + /** + *
+         * total_image_size is the total size of the image in bytes (includes Gitpod-specific layers like IDE)
+         * 
+ * + * int64 total_image_size = 2 [json_name = "totalImageSize"]; + * @param value The totalImageSize to set. + * @return This builder for chaining. + */ + public Builder setTotalImageSize(long value) { + + totalImageSize_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *
+         * total_image_size is the total size of the image in bytes (includes Gitpod-specific layers like IDE)
+         * 
+ * + * int64 total_image_size = 2 [json_name = "totalImageSize"]; + * @return This builder for chaining. + */ + public Builder clearTotalImageSize() { + bitField0_ = (bitField0_ & ~0x00000002); + totalImageSize_ = 0L; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:gitpod.v1.WorkspaceSession.Metrics) + } + + // @@protoc_insertion_point(class_scope:gitpod.v1.WorkspaceSession.Metrics) + private static final io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics(); + } + + public static io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Metrics parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + private int bitField0_; public static final int ID_FIELD_NUMBER = 1; @SuppressWarnings("serial") @@ -58865,6 +59428,32 @@ public com.google.protobuf.TimestampOrBuilder getStoppedTimeOrBuilder() { return stoppedTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : stoppedTime_; } + public static final int METRICS_FIELD_NUMBER = 8; + private io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics metrics_; + /** + * .gitpod.v1.WorkspaceSession.Metrics metrics = 8 [json_name = "metrics"]; + * @return Whether the metrics field is set. + */ + @java.lang.Override + public boolean hasMetrics() { + return ((bitField0_ & 0x00000040) != 0); + } + /** + * .gitpod.v1.WorkspaceSession.Metrics metrics = 8 [json_name = "metrics"]; + * @return The metrics. + */ + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics getMetrics() { + return metrics_ == null ? io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.getDefaultInstance() : metrics_; + } + /** + * .gitpod.v1.WorkspaceSession.Metrics metrics = 8 [json_name = "metrics"]; + */ + @java.lang.Override + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.MetricsOrBuilder getMetricsOrBuilder() { + return metrics_ == null ? io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.getDefaultInstance() : metrics_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -58900,6 +59489,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (((bitField0_ & 0x00000020) != 0)) { output.writeMessage(7, getStoppedTime()); } + if (((bitField0_ & 0x00000040) != 0)) { + output.writeMessage(8, getMetrics()); + } getUnknownFields().writeTo(output); } @@ -58936,6 +59528,10 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeMessageSize(7, getStoppedTime()); } + if (((bitField0_ & 0x00000040) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, getMetrics()); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -58983,6 +59579,11 @@ public boolean equals(final java.lang.Object obj) { if (!getStoppedTime() .equals(other.getStoppedTime())) return false; } + if (hasMetrics() != other.hasMetrics()) return false; + if (hasMetrics()) { + if (!getMetrics() + .equals(other.getMetrics())) return false; + } if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -59020,6 +59621,10 @@ public int hashCode() { hash = (37 * hash) + STOPPED_TIME_FIELD_NUMBER; hash = (53 * hash) + getStoppedTime().hashCode(); } + if (hasMetrics()) { + hash = (37 * hash) + METRICS_FIELD_NUMBER; + hash = (53 * hash) + getMetrics().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -59156,6 +59761,7 @@ private void maybeForceBuilderInitialization() { getStartedTimeFieldBuilder(); getStoppingTimeFieldBuilder(); getStoppedTimeFieldBuilder(); + getMetricsFieldBuilder(); } } @java.lang.Override @@ -59193,6 +59799,11 @@ public Builder clear() { stoppedTimeBuilder_.dispose(); stoppedTimeBuilder_ = null; } + metrics_ = null; + if (metricsBuilder_ != null) { + metricsBuilder_.dispose(); + metricsBuilder_ = null; + } return this; } @@ -59266,6 +59877,12 @@ private void buildPartial0(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceS : stoppedTimeBuilder_.build(); to_bitField0_ |= 0x00000020; } + if (((from_bitField0_ & 0x00000080) != 0)) { + result.metrics_ = metricsBuilder_ == null + ? metrics_ + : metricsBuilder_.build(); + to_bitField0_ |= 0x00000040; + } result.bitField0_ |= to_bitField0_; } @@ -59304,6 +59921,9 @@ public Builder mergeFrom(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSes if (other.hasStoppedTime()) { mergeStoppedTime(other.getStoppedTime()); } + if (other.hasMetrics()) { + mergeMetrics(other.getMetrics()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -59377,6 +59997,13 @@ public Builder mergeFrom( bitField0_ |= 0x00000040; break; } // case 58 + case 66: { + input.readMessage( + getMetricsFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000080; + break; + } // case 66 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { done = true; // was an endgroup tag @@ -60192,6 +60819,127 @@ public com.google.protobuf.TimestampOrBuilder getStoppedTimeOrBuilder() { return stoppedTimeBuilder_; } + private io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics metrics_; + private com.google.protobuf.SingleFieldBuilder< + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.Builder, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.MetricsOrBuilder> metricsBuilder_; + /** + * .gitpod.v1.WorkspaceSession.Metrics metrics = 8 [json_name = "metrics"]; + * @return Whether the metrics field is set. + */ + public boolean hasMetrics() { + return ((bitField0_ & 0x00000080) != 0); + } + /** + * .gitpod.v1.WorkspaceSession.Metrics metrics = 8 [json_name = "metrics"]; + * @return The metrics. + */ + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics getMetrics() { + if (metricsBuilder_ == null) { + return metrics_ == null ? io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.getDefaultInstance() : metrics_; + } else { + return metricsBuilder_.getMessage(); + } + } + /** + * .gitpod.v1.WorkspaceSession.Metrics metrics = 8 [json_name = "metrics"]; + */ + public Builder setMetrics(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics value) { + if (metricsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + metrics_ = value; + } else { + metricsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + /** + * .gitpod.v1.WorkspaceSession.Metrics metrics = 8 [json_name = "metrics"]; + */ + public Builder setMetrics( + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.Builder builderForValue) { + if (metricsBuilder_ == null) { + metrics_ = builderForValue.build(); + } else { + metricsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + /** + * .gitpod.v1.WorkspaceSession.Metrics metrics = 8 [json_name = "metrics"]; + */ + public Builder mergeMetrics(io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics value) { + if (metricsBuilder_ == null) { + if (((bitField0_ & 0x00000080) != 0) && + metrics_ != null && + metrics_ != io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.getDefaultInstance()) { + getMetricsBuilder().mergeFrom(value); + } else { + metrics_ = value; + } + } else { + metricsBuilder_.mergeFrom(value); + } + if (metrics_ != null) { + bitField0_ |= 0x00000080; + onChanged(); + } + return this; + } + /** + * .gitpod.v1.WorkspaceSession.Metrics metrics = 8 [json_name = "metrics"]; + */ + public Builder clearMetrics() { + bitField0_ = (bitField0_ & ~0x00000080); + metrics_ = null; + if (metricsBuilder_ != null) { + metricsBuilder_.dispose(); + metricsBuilder_ = null; + } + onChanged(); + return this; + } + /** + * .gitpod.v1.WorkspaceSession.Metrics metrics = 8 [json_name = "metrics"]; + */ + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.Builder getMetricsBuilder() { + bitField0_ |= 0x00000080; + onChanged(); + return getMetricsFieldBuilder().getBuilder(); + } + /** + * .gitpod.v1.WorkspaceSession.Metrics metrics = 8 [json_name = "metrics"]; + */ + public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.MetricsOrBuilder getMetricsOrBuilder() { + if (metricsBuilder_ != null) { + return metricsBuilder_.getMessageOrBuilder(); + } else { + return metrics_ == null ? + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.getDefaultInstance() : metrics_; + } + } + /** + * .gitpod.v1.WorkspaceSession.Metrics metrics = 8 [json_name = "metrics"]; + */ + private com.google.protobuf.SingleFieldBuilder< + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.Builder, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.MetricsOrBuilder> + getMetricsFieldBuilder() { + if (metricsBuilder_ == null) { + metricsBuilder_ = new com.google.protobuf.SingleFieldBuilder< + io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.Metrics.Builder, io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession.MetricsOrBuilder>( + getMetrics(), + getParentForChildren(), + isClean()); + metrics_ = null; + } + return metricsBuilder_; + } + // @@protoc_insertion_point(builder_scope:gitpod.v1.WorkspaceSession) } @@ -60568,6 +61316,11 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession getDefaultIns private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_gitpod_v1_WorkspaceSession_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_gitpod_v1_WorkspaceSession_Metrics_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_gitpod_v1_WorkspaceSession_Metrics_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -60843,7 +61596,7 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession getDefaultIns "onse\"\207\001\n\021WorkspaceSnapshot\022\016\n\002id\030\001 \001(\tR\002" + "id\022!\n\014workspace_id\030\002 \001(\tR\013workspaceId\022?\n" + "\rcreation_time\030\003 \001(\0132\032.google.protobuf.T" + - "imestampR\014creationTime\"\227\003\n\020WorkspaceSess" + + "imestampR\014creationTime\"\275\004\n\020WorkspaceSess" + "ion\022\016\n\002id\030\001 \001(\tR\002id\0222\n\tworkspace\030\002 \001(\0132\024" + ".gitpod.v1.WorkspaceR\tworkspace\022?\n\rcreat" + "ion_time\030\003 \001(\0132\032.google.protobuf.Timesta" + @@ -60853,59 +61606,63 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession getDefaultIns "f.TimestampR\013startedTime\022?\n\rstopping_tim" + "e\030\006 \001(\0132\032.google.protobuf.TimestampR\014sto" + "ppingTime\022=\n\014stopped_time\030\007 \001(\0132\032.google" + - ".protobuf.TimestampR\013stoppedTime*o\n\016Admi" + - "ssionLevel\022\037\n\033ADMISSION_LEVEL_UNSPECIFIE" + - "D\020\000\022\036\n\032ADMISSION_LEVEL_OWNER_ONLY\020\001\022\034\n\030A" + - "DMISSION_LEVEL_EVERYONE\020\0022\323\016\n\020WorkspaceS" + - "ervice\022Q\n\014GetWorkspace\022\036.gitpod.v1.GetWo" + - "rkspaceRequest\032\037.gitpod.v1.GetWorkspaceR" + - "esponse\"\000\022k\n\024WatchWorkspaceStatus\022&.gitp" + - "od.v1.WatchWorkspaceStatusRequest\032\'.gitp" + - "od.v1.WatchWorkspaceStatusResponse\"\0000\001\022W" + - "\n\016ListWorkspaces\022 .gitpod.v1.ListWorkspa" + - "cesRequest\032!.gitpod.v1.ListWorkspacesRes" + - "ponse\"\000\022l\n\025ListWorkspaceSessions\022\'.gitpo" + - "d.v1.ListWorkspaceSessionsRequest\032(.gitp" + - "od.v1.ListWorkspaceSessionsResponse\"\000\022r\n" + - "\027CreateAndStartWorkspace\022).gitpod.v1.Cre" + - "ateAndStartWorkspaceRequest\032*.gitpod.v1." + - "CreateAndStartWorkspaceResponse\"\000\022W\n\016Sta" + - "rtWorkspace\022 .gitpod.v1.StartWorkspaceRe" + - "quest\032!.gitpod.v1.StartWorkspaceResponse" + - "\"\000\022Z\n\017UpdateWorkspace\022!.gitpod.v1.Update" + - "WorkspaceRequest\032\".gitpod.v1.UpdateWorks" + - "paceResponse\"\000\022T\n\rStopWorkspace\022\037.gitpod" + - ".v1.StopWorkspaceRequest\032 .gitpod.v1.Sto" + - "pWorkspaceResponse\"\000\022Z\n\017DeleteWorkspace\022" + - "!.gitpod.v1.DeleteWorkspaceRequest\032\".git" + - "pod.v1.DeleteWorkspaceResponse\"\000\022i\n\024List" + - "WorkspaceClasses\022&.gitpod.v1.ListWorkspa" + - "ceClassesRequest\032\'.gitpod.v1.ListWorkspa" + - "ceClassesResponse\"\000\022Z\n\017ParseContextURL\022!" + - ".gitpod.v1.ParseContextURLRequest\032\".gitp" + - "od.v1.ParseContextURLResponse\"\000\022u\n\030GetWo" + - "rkspaceDefaultImage\022*.gitpod.v1.GetWorks" + - "paceDefaultImageRequest\032+.gitpod.v1.GetW" + - "orkspaceDefaultImageResponse\"\000\022T\n\rSendHe" + - "artBeat\022\037.gitpod.v1.SendHeartBeatRequest" + - "\032 .gitpod.v1.SendHeartBeatResponse\"\000\022o\n\026" + - "GetWorkspaceOwnerToken\022(.gitpod.v1.GetWo" + - "rkspaceOwnerTokenRequest\032).gitpod.v1.Get" + - "WorkspaceOwnerTokenResponse\"\000\022\204\001\n\035GetWor" + - "kspaceEditorCredentials\022/.gitpod.v1.GetW" + - "orkspaceEditorCredentialsRequest\0320.gitpo" + - "d.v1.GetWorkspaceEditorCredentialsRespon" + - "se\"\000\022r\n\027CreateWorkspaceSnapshot\022).gitpod" + - ".v1.CreateWorkspaceSnapshotRequest\032*.git" + - "pod.v1.CreateWorkspaceSnapshotResponse\"\000" + - "\022u\n\030WaitForWorkspaceSnapshot\022*.gitpod.v1" + - ".WaitForWorkspaceSnapshotRequest\032+.gitpo" + - "d.v1.WaitForWorkspaceSnapshotResponse\"\000\022" + - "f\n\023UpdateWorkspacePort\022%.gitpod.v1.Updat" + - "eWorkspacePortRequest\032&.gitpod.v1.Update" + - "WorkspacePortResponse\"\000BQ\n\026io.gitpod.pub" + - "licapi.v1Z7github.com/gitpod-io/gitpod/c" + - "omponents/public-api/go/v1b\006proto3" + ".protobuf.TimestampR\013stoppedTime\022=\n\007metr" + + "ics\030\010 \001(\0132#.gitpod.v1.WorkspaceSession.M" + + "etricsR\007metrics\032e\n\007Metrics\0220\n\024workspace_" + + "image_size\030\001 \001(\003R\022workspaceImageSize\022(\n\020" + + "total_image_size\030\002 \001(\003R\016totalImageSize*o" + + "\n\016AdmissionLevel\022\037\n\033ADMISSION_LEVEL_UNSP" + + "ECIFIED\020\000\022\036\n\032ADMISSION_LEVEL_OWNER_ONLY\020" + + "\001\022\034\n\030ADMISSION_LEVEL_EVERYONE\020\0022\323\016\n\020Work" + + "spaceService\022Q\n\014GetWorkspace\022\036.gitpod.v1" + + ".GetWorkspaceRequest\032\037.gitpod.v1.GetWork" + + "spaceResponse\"\000\022k\n\024WatchWorkspaceStatus\022" + + "&.gitpod.v1.WatchWorkspaceStatusRequest\032" + + "\'.gitpod.v1.WatchWorkspaceStatusResponse" + + "\"\0000\001\022W\n\016ListWorkspaces\022 .gitpod.v1.ListW" + + "orkspacesRequest\032!.gitpod.v1.ListWorkspa" + + "cesResponse\"\000\022l\n\025ListWorkspaceSessions\022\'" + + ".gitpod.v1.ListWorkspaceSessionsRequest\032" + + "(.gitpod.v1.ListWorkspaceSessionsRespons" + + "e\"\000\022r\n\027CreateAndStartWorkspace\022).gitpod." + + "v1.CreateAndStartWorkspaceRequest\032*.gitp" + + "od.v1.CreateAndStartWorkspaceResponse\"\000\022" + + "W\n\016StartWorkspace\022 .gitpod.v1.StartWorks" + + "paceRequest\032!.gitpod.v1.StartWorkspaceRe" + + "sponse\"\000\022Z\n\017UpdateWorkspace\022!.gitpod.v1." + + "UpdateWorkspaceRequest\032\".gitpod.v1.Updat" + + "eWorkspaceResponse\"\000\022T\n\rStopWorkspace\022\037." + + "gitpod.v1.StopWorkspaceRequest\032 .gitpod." + + "v1.StopWorkspaceResponse\"\000\022Z\n\017DeleteWork" + + "space\022!.gitpod.v1.DeleteWorkspaceRequest" + + "\032\".gitpod.v1.DeleteWorkspaceResponse\"\000\022i" + + "\n\024ListWorkspaceClasses\022&.gitpod.v1.ListW" + + "orkspaceClassesRequest\032\'.gitpod.v1.ListW" + + "orkspaceClassesResponse\"\000\022Z\n\017ParseContex" + + "tURL\022!.gitpod.v1.ParseContextURLRequest\032" + + "\".gitpod.v1.ParseContextURLResponse\"\000\022u\n" + + "\030GetWorkspaceDefaultImage\022*.gitpod.v1.Ge" + + "tWorkspaceDefaultImageRequest\032+.gitpod.v" + + "1.GetWorkspaceDefaultImageResponse\"\000\022T\n\r" + + "SendHeartBeat\022\037.gitpod.v1.SendHeartBeatR" + + "equest\032 .gitpod.v1.SendHeartBeatResponse" + + "\"\000\022o\n\026GetWorkspaceOwnerToken\022(.gitpod.v1" + + ".GetWorkspaceOwnerTokenRequest\032).gitpod." + + "v1.GetWorkspaceOwnerTokenResponse\"\000\022\204\001\n\035" + + "GetWorkspaceEditorCredentials\022/.gitpod.v" + + "1.GetWorkspaceEditorCredentialsRequest\0320" + + ".gitpod.v1.GetWorkspaceEditorCredentials" + + "Response\"\000\022r\n\027CreateWorkspaceSnapshot\022)." + + "gitpod.v1.CreateWorkspaceSnapshotRequest" + + "\032*.gitpod.v1.CreateWorkspaceSnapshotResp" + + "onse\"\000\022u\n\030WaitForWorkspaceSnapshot\022*.git" + + "pod.v1.WaitForWorkspaceSnapshotRequest\032+" + + ".gitpod.v1.WaitForWorkspaceSnapshotRespo" + + "nse\"\000\022f\n\023UpdateWorkspacePort\022%.gitpod.v1" + + ".UpdateWorkspacePortRequest\032&.gitpod.v1." + + "UpdateWorkspacePortResponse\"\000BQ\n\026io.gitp" + + "od.publicapi.v1Z7github.com/gitpod-io/gi" + + "tpod/components/public-api/go/v1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, @@ -61305,7 +62062,13 @@ public io.gitpod.publicapi.v1.WorkspaceOuterClass.WorkspaceSession getDefaultIns internal_static_gitpod_v1_WorkspaceSession_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_gitpod_v1_WorkspaceSession_descriptor, - new java.lang.String[] { "Id", "Workspace", "CreationTime", "DeployedTime", "StartedTime", "StoppingTime", "StoppedTime", }); + new java.lang.String[] { "Id", "Workspace", "CreationTime", "DeployedTime", "StartedTime", "StoppingTime", "StoppedTime", "Metrics", }); + internal_static_gitpod_v1_WorkspaceSession_Metrics_descriptor = + internal_static_gitpod_v1_WorkspaceSession_descriptor.getNestedTypes().get(0); + internal_static_gitpod_v1_WorkspaceSession_Metrics_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_gitpod_v1_WorkspaceSession_Metrics_descriptor, + new java.lang.String[] { "WorkspaceImageSize", "TotalImageSize", }); descriptor.resolveAllFeaturesImmutable(); io.gitpod.publicapi.v1.Editor.getDescriptor(); io.gitpod.publicapi.v1.Envvar.getDescriptor(); diff --git a/components/public-api/typescript-common/fixtures/toWorkspaceSession_1.golden b/components/public-api/typescript-common/fixtures/toWorkspaceSession_1.golden index 5663bff6bf9f45..a87fcdc95bea0b 100644 --- a/components/public-api/typescript-common/fixtures/toWorkspaceSession_1.golden +++ b/components/public-api/typescript-common/fixtures/toWorkspaceSession_1.golden @@ -85,7 +85,11 @@ "creationTime": "2023-10-16T20:18:24.923Z", "startedTime": "2023-10-16T20:18:26.923Z", "stoppingTime": "2023-10-16T20:28:24.923Z", - "stoppedTime": "2023-10-16T20:28:44.923Z" + "stoppedTime": "2023-10-16T20:28:44.923Z", + "metrics": { + "workspaceImageSize": "25600000", + "totalImageSize": "35600000" + } }, "err": "" } diff --git a/components/public-api/typescript-common/fixtures/toWorkspaceSession_1.json b/components/public-api/typescript-common/fixtures/toWorkspaceSession_1.json index c723dd1d28a929..880586c683d13b 100644 --- a/components/public-api/typescript-common/fixtures/toWorkspaceSession_1.json +++ b/components/public-api/typescript-common/fixtures/toWorkspaceSession_1.json @@ -75,7 +75,13 @@ "stoppedByRequest": false, "headlessTaskFailed": "" }, - "exposedPorts": [] + "exposedPorts": [], + "metrics": { + "image": { + "totalSize": 35600000, + "workspaceImageSize": 25600000 + } + } }, "gitStatus": null, "phasePersisted": "creating", diff --git a/components/public-api/typescript-common/fixtures/toWorkspaceSession_2.golden b/components/public-api/typescript-common/fixtures/toWorkspaceSession_2.golden index 12b8625f300645..1e379c588d737c 100644 --- a/components/public-api/typescript-common/fixtures/toWorkspaceSession_2.golden +++ b/components/public-api/typescript-common/fixtures/toWorkspaceSession_2.golden @@ -87,7 +87,11 @@ "creationTime": "2024-05-13T07:06:47.659Z", "startedTime": "2024-05-13T07:09:16.390Z", "stoppingTime": "2024-05-13T07:09:16.615Z", - "stoppedTime": "2024-05-13T07:09:29.912Z" + "stoppedTime": "2024-05-13T07:09:29.912Z", + "metrics": { + "workspaceImageSize": "25600000", + "totalImageSize": "0" + } }, "err": "" } diff --git a/components/public-api/typescript-common/fixtures/toWorkspaceSession_2.json b/components/public-api/typescript-common/fixtures/toWorkspaceSession_2.json index f8b07e2ab742e7..4f9e63421fa785 100644 --- a/components/public-api/typescript-common/fixtures/toWorkspaceSession_2.json +++ b/components/public-api/typescript-common/fixtures/toWorkspaceSession_2.json @@ -90,7 +90,12 @@ "headlessTaskFailed": "" }, "ownerToken": "M4GknXYd6ihLf6PLyPlVEghWy3TLvj7X", - "exposedPorts": [] + "exposedPorts": [], + "metrics": { + "image": { + "workspaceImageSize": 25600000 + } + } }, "gitStatus": { "branch": "master", diff --git a/components/public-api/typescript-common/fixtures/toWorkspaceSession_3.golden b/components/public-api/typescript-common/fixtures/toWorkspaceSession_3.golden index c98174fe866ebd..fb76ed3629bb2a 100644 --- a/components/public-api/typescript-common/fixtures/toWorkspaceSession_3.golden +++ b/components/public-api/typescript-common/fixtures/toWorkspaceSession_3.golden @@ -87,7 +87,11 @@ "creationTime": "2024-05-13T07:12:42.536Z", "startedTime": "2024-05-13T07:12:45.421Z", "stoppingTime": "2024-05-13T07:12:51.802Z", - "stoppedTime": "2024-05-13T07:12:52.461Z" + "stoppedTime": "2024-05-13T07:12:52.461Z", + "metrics": { + "workspaceImageSize": "0", + "totalImageSize": "0" + } }, "err": "" } diff --git a/components/public-api/typescript-common/fixtures/toWorkspaceSession_3.json b/components/public-api/typescript-common/fixtures/toWorkspaceSession_3.json index 8139db9502a03b..79c577176e649a 100644 --- a/components/public-api/typescript-common/fixtures/toWorkspaceSession_3.json +++ b/components/public-api/typescript-common/fixtures/toWorkspaceSession_3.json @@ -90,7 +90,10 @@ "headlessTaskFailed": "" }, "ownerToken": "6BCmFzg6t0e9hDrPP8.pc8KGee8rxWKA", - "exposedPorts": [] + "exposedPorts": [], + "metrics": { + "image": {} + } }, "gitStatus": { "branch": "master", diff --git a/components/public-api/typescript-common/fixtures/toWorkspaceSession_4.golden b/components/public-api/typescript-common/fixtures/toWorkspaceSession_4.golden index fc5e4148a5452c..f9a8d050976f9e 100644 --- a/components/public-api/typescript-common/fixtures/toWorkspaceSession_4.golden +++ b/components/public-api/typescript-common/fixtures/toWorkspaceSession_4.golden @@ -87,7 +87,11 @@ "creationTime": "2024-05-13T07:14:11.048Z", "startedTime": "2024-05-13T07:14:13.406Z", "stoppingTime": "2024-05-13T07:14:45.263Z", - "stoppedTime": "2024-05-13T07:14:45.466Z" + "stoppedTime": "2024-05-13T07:14:45.466Z", + "metrics": { + "workspaceImageSize": "0", + "totalImageSize": "0" + } }, "err": "" } diff --git a/components/public-api/typescript-common/src/public-api-converter.ts b/components/public-api/typescript-common/src/public-api-converter.ts index 416127462680ec..c200a0bc5c66ab 100644 --- a/components/public-api/typescript-common/src/public-api-converter.ts +++ b/components/public-api/typescript-common/src/public-api-converter.ts @@ -155,6 +155,7 @@ import { WorkspacePort, WorkspacePort_Protocol, WorkspaceSession, + WorkspaceSession_Metrics, WorkspaceSnapshot, WorkspaceSpec, WorkspaceSpec_GitSpec, @@ -198,6 +199,13 @@ export class PublicAPIConverter { if (arg.instance.stoppedTime) { result.stoppedTime = Timestamp.fromDate(new Date(arg.instance.stoppedTime)); } + + const { metrics } = arg.instance.status; + result.metrics = new WorkspaceSession_Metrics({ + totalImageSize: metrics?.image?.totalSize ? BigInt(metrics.image.totalSize) : undefined, + workspaceImageSize: metrics?.image?.workspaceImageSize ? BigInt(metrics.image.workspaceImageSize) : undefined, + }); + return result; } diff --git a/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts b/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts index 678138f3d5342a..fd83ed19c52097 100644 --- a/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts +++ b/components/public-api/typescript/src/gitpod/v1/workspace_pb.ts @@ -3696,6 +3696,11 @@ export class WorkspaceSession extends Message { */ stoppedTime?: Timestamp; + /** + * @generated from field: gitpod.v1.WorkspaceSession.Metrics metrics = 8; + */ + metrics?: WorkspaceSession_Metrics; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -3711,6 +3716,7 @@ export class WorkspaceSession extends Message { { no: 5, name: "started_time", kind: "message", T: Timestamp }, { no: 6, name: "stopping_time", kind: "message", T: Timestamp }, { no: 7, name: "stopped_time", kind: "message", T: Timestamp }, + { no: 8, name: "metrics", kind: "message", T: WorkspaceSession_Metrics }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceSession { @@ -3729,3 +3735,50 @@ export class WorkspaceSession extends Message { return proto3.util.equals(WorkspaceSession, a, b); } } + +/** + * @generated from message gitpod.v1.WorkspaceSession.Metrics + */ +export class WorkspaceSession_Metrics extends Message { + /** + * workspace_image_size is the size of the workspace image in bytes + * + * @generated from field: int64 workspace_image_size = 1; + */ + workspaceImageSize = protoInt64.zero; + + /** + * total_image_size is the total size of the image in bytes (includes Gitpod-specific layers like IDE) + * + * @generated from field: int64 total_image_size = 2; + */ + totalImageSize = protoInt64.zero; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.WorkspaceSession.Metrics"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "workspace_image_size", kind: "scalar", T: 3 /* ScalarType.INT64 */ }, + { no: 2, name: "total_image_size", kind: "scalar", T: 3 /* ScalarType.INT64 */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): WorkspaceSession_Metrics { + return new WorkspaceSession_Metrics().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): WorkspaceSession_Metrics { + return new WorkspaceSession_Metrics().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): WorkspaceSession_Metrics { + return new WorkspaceSession_Metrics().fromJsonString(jsonString, options); + } + + static equals(a: WorkspaceSession_Metrics | PlainMessage | undefined, b: WorkspaceSession_Metrics | PlainMessage | undefined): boolean { + return proto3.util.equals(WorkspaceSession_Metrics, a, b); + } +} diff --git a/components/ws-manager-api/core.proto b/components/ws-manager-api/core.proto index 5ec107358c1ab2..e298640cdd4ea6 100644 --- a/components/ws-manager-api/core.proto +++ b/components/ws-manager-api/core.proto @@ -97,7 +97,7 @@ message StartWorkspaceRequest { // see https://developers.google.com/protocol-buffers/docs/proto3#reserved reg. gRPC field deprecation reserved 5; - // Type denots the kind of workspace we ought to start + // Type denotes the kind of workspace we ought to start WorkspaceType type = 6; } @@ -290,9 +290,9 @@ message WorkspaceStatus { string id = 1; // version of the status update. Workspace instances themselves are unversioned, - // but their statuus has different versions. + // but their status has different versions. // The value of this field has no semantic meaning (e.g. don't interpret it as - // as a timestemp), but it can be used to impose a partial order. + // as a timestamp), but it can be used to impose a partial order. // If a.status_version < b.status_version then a was the status before b. uint64 status_version = 10; @@ -510,6 +510,17 @@ enum WorkspacePhase { // WorkspaceMetadata is data associated with a workspace that's required for other parts of the system to function message WorkspaceMetadata { + message ImageInfo { + // TotalSize is the total size of the image + int64 total_size = 1; + + // WorkspaceImageSize is the size of the workspace image + int64 workspace_image_size = 2; + } + message Metrics { + ImageInfo image = 1; + } + // owner is the ID of the Gitpod user to whom we'll bill this workspace and who we consider responsible for its content string owner = 1; @@ -528,10 +539,13 @@ message WorkspaceMetadata { // project the workspace belongs to, if the workspace is not associated with a project, this property will be empty optional string project = 6; + + // metrics contains metrics about the workspace + Metrics metrics = 7; } // WorkspaceRuntimeInfo details the workspace's runtime, e.g. executing system, node other information -// about the environment the workspace runs in. This information serves a diangostic purpose only and +// about the environment the workspace runs in. This information serves a diagnostic purpose only and // should not be directly acted upon. message WorkspaceRuntimeInfo { // node_name is the name of the node the workspace runs on diff --git a/components/ws-manager-api/go/core.pb.go b/components/ws-manager-api/go/core.pb.go index bce29eda42cf41..3a2916d4b1847b 100644 --- a/components/ws-manager-api/go/core.pb.go +++ b/components/ws-manager-api/go/core.pb.go @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Gitpod GmbH. All rights reserved. +// Copyright (c) 2024 Gitpod GmbH. All rights reserved. // Licensed under the GNU Affero General Public License (AGPL). // See License.AGPL.txt in the project root for license information. @@ -695,7 +695,7 @@ type StartWorkspaceRequest struct { Metadata *WorkspaceMetadata `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"` // Spec is the configuration of the workspace that's required for the ws-manager to start the workspace Spec *StartWorkspaceSpec `protobuf:"bytes,4,opt,name=spec,proto3" json:"spec,omitempty"` - // Type denots the kind of workspace we ought to start + // Type denotes the kind of workspace we ought to start Type WorkspaceType `protobuf:"varint,6,opt,name=type,proto3,enum=wsman.WorkspaceType" json:"type,omitempty"` } @@ -1981,9 +1981,9 @@ type WorkspaceStatus struct { // ID is the unique identifier of the workspace Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // version of the status update. Workspace instances themselves are unversioned, - // but their statuus has different versions. + // but their status has different versions. // The value of this field has no semantic meaning (e.g. don't interpret it as - // as a timestemp), but it can be used to impose a partial order. + // as a timestamp), but it can be used to impose a partial order. // If a.status_version < b.status_version then a was the status before b. StatusVersion uint64 `protobuf:"varint,10,opt,name=status_version,json=statusVersion,proto3" json:"status_version,omitempty"` // Metadata is data associated with this workspace that's required for other parts of Gitpod to function @@ -2600,6 +2600,8 @@ type WorkspaceMetadata struct { Team *string `protobuf:"bytes,5,opt,name=team,proto3,oneof" json:"team,omitempty"` // project the workspace belongs to, if the workspace is not associated with a project, this property will be empty Project *string `protobuf:"bytes,6,opt,name=project,proto3,oneof" json:"project,omitempty"` + // metrics contains metrics about the workspace + Metrics *WorkspaceMetadata_Metrics `protobuf:"bytes,7,opt,name=metrics,proto3" json:"metrics,omitempty"` } func (x *WorkspaceMetadata) Reset() { @@ -2676,8 +2678,15 @@ func (x *WorkspaceMetadata) GetProject() string { return "" } +func (x *WorkspaceMetadata) GetMetrics() *WorkspaceMetadata_Metrics { + if x != nil { + return x.Metrics + } + return nil +} + // WorkspaceRuntimeInfo details the workspace's runtime, e.g. executing system, node other information -// about the environment the workspace runs in. This information serves a diangostic purpose only and +// about the environment the workspace runs in. This information serves a diagnostic purpose only and // should not be directly acted upon. type WorkspaceRuntimeInfo struct { state protoimpl.MessageState @@ -3385,6 +3394,110 @@ func (x *WorkspaceClass) GetCreditsPerMinute() float32 { return 0 } +type WorkspaceMetadata_ImageInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // TotalSize is the total size of the image + TotalSize int64 `protobuf:"varint,1,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"` + // WorkspaceImageSize is the size of the workspace image + WorkspaceImageSize int64 `protobuf:"varint,2,opt,name=workspace_image_size,json=workspaceImageSize,proto3" json:"workspace_image_size,omitempty"` +} + +func (x *WorkspaceMetadata_ImageInfo) Reset() { + *x = WorkspaceMetadata_ImageInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_core_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WorkspaceMetadata_ImageInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkspaceMetadata_ImageInfo) ProtoMessage() {} + +func (x *WorkspaceMetadata_ImageInfo) ProtoReflect() protoreflect.Message { + mi := &file_core_proto_msgTypes[46] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WorkspaceMetadata_ImageInfo.ProtoReflect.Descriptor instead. +func (*WorkspaceMetadata_ImageInfo) Descriptor() ([]byte, []int) { + return file_core_proto_rawDescGZIP(), []int{33, 0} +} + +func (x *WorkspaceMetadata_ImageInfo) GetTotalSize() int64 { + if x != nil { + return x.TotalSize + } + return 0 +} + +func (x *WorkspaceMetadata_ImageInfo) GetWorkspaceImageSize() int64 { + if x != nil { + return x.WorkspaceImageSize + } + return 0 +} + +type WorkspaceMetadata_Metrics struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Image *WorkspaceMetadata_ImageInfo `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"` +} + +func (x *WorkspaceMetadata_Metrics) Reset() { + *x = WorkspaceMetadata_Metrics{} + if protoimpl.UnsafeEnabled { + mi := &file_core_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WorkspaceMetadata_Metrics) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkspaceMetadata_Metrics) ProtoMessage() {} + +func (x *WorkspaceMetadata_Metrics) ProtoReflect() protoreflect.Message { + mi := &file_core_proto_msgTypes[47] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WorkspaceMetadata_Metrics.ProtoReflect.Descriptor instead. +func (*WorkspaceMetadata_Metrics) Descriptor() ([]byte, []int) { + return file_core_proto_rawDescGZIP(), []int{33, 1} +} + +func (x *WorkspaceMetadata_Metrics) GetImage() *WorkspaceMetadata_ImageInfo { + if x != nil { + return x.Image + } + return nil +} + type EnvironmentVariable_SecretKeyRef struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3397,7 +3510,7 @@ type EnvironmentVariable_SecretKeyRef struct { func (x *EnvironmentVariable_SecretKeyRef) Reset() { *x = EnvironmentVariable_SecretKeyRef{} if protoimpl.UnsafeEnabled { - mi := &file_core_proto_msgTypes[47] + mi := &file_core_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3410,7 +3523,7 @@ func (x *EnvironmentVariable_SecretKeyRef) String() string { func (*EnvironmentVariable_SecretKeyRef) ProtoMessage() {} func (x *EnvironmentVariable_SecretKeyRef) ProtoReflect() protoreflect.Message { - mi := &file_core_proto_msgTypes[47] + mi := &file_core_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3708,7 +3821,7 @@ var file_core_proto_rawDesc = []byte{ 0x07, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x07, 0x61, - 0x62, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0xd7, 0x02, 0x0a, + 0x62, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0xb6, 0x04, 0x0a, 0x11, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x61, @@ -3725,236 +3838,250 @@ var file_core_proto_rawDesc = []byte{ 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x88, 0x01, - 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x67, 0x0a, 0x14, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, - 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, - 0x6f, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, - 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, - 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x70, 0x22, - 0x6f, 0x0a, 0x17, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, - 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x09, 0x61, 0x64, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, - 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x52, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x1f, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x22, 0xfb, 0x05, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x12, 0x40, 0x0a, 0x0d, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x67, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x46, 0x6c, 0x61, 0x67, 0x52, 0x0c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, - 0x67, 0x73, 0x12, 0x46, 0x0a, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, - 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x0b, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x05, 0x70, 0x6f, - 0x72, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x73, 0x6d, 0x61, - 0x6e, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, - 0x73, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x6e, 0x76, 0x76, 0x61, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x07, - 0x65, 0x6e, 0x76, 0x76, 0x61, 0x72, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x77, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x03, 0x67, 0x69, 0x74, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x47, 0x69, 0x74, 0x53, - 0x70, 0x65, 0x63, 0x52, 0x03, 0x67, 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x12, 0x33, 0x0a, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x41, 0x64, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x09, 0x61, 0x64, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x09, 0x69, 0x64, 0x65, 0x5f, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x73, 0x6d, - 0x61, 0x6e, 0x2e, 0x49, 0x44, 0x45, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x08, 0x69, 0x64, 0x65, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x73, - 0x73, 0x68, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x0f, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x73, 0x68, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, - 0x65, 0x79, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x5f, 0x65, 0x6e, 0x76, 0x76, 0x61, - 0x72, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, - 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x52, 0x0a, 0x73, 0x79, 0x73, 0x45, 0x6e, 0x76, 0x76, 0x61, 0x72, 0x73, - 0x12, 0x28, 0x0a, 0x10, 0x69, 0x64, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x64, 0x65, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, - 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x12, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, - 0x74, 0x12, 0x29, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x6c, 0x69, 0x66, - 0x65, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6d, 0x61, 0x78, - 0x69, 0x6d, 0x75, 0x6d, 0x4c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x4a, 0x04, 0x08, 0x02, - 0x10, 0x03, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x0e, 0x10, 0x0f, 0x22, 0x3b, - 0x0a, 0x07, 0x47, 0x69, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, - 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, - 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0xc3, 0x01, 0x0a, 0x13, + 0x01, 0x12, 0x3a, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x1a, 0x5c, 0x0a, + 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x77, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x1a, 0x43, 0x0a, 0x07, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x67, 0x0a, 0x14, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, + 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x6f, + 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, + 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x70, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x70, 0x22, 0x6f, + 0x0a, 0x17, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, + 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x09, 0x61, 0x64, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, + 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x52, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, + 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, + 0xfb, 0x05, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, + 0x40, 0x0a, 0x0d, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, + 0x6c, 0x61, 0x67, 0x52, 0x0c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, + 0x73, 0x12, 0x46, 0x0a, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x0b, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x05, 0x70, 0x6f, 0x72, + 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, + 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, + 0x12, 0x34, 0x0a, 0x07, 0x65, 0x6e, 0x76, 0x76, 0x61, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x07, 0x65, + 0x6e, 0x76, 0x76, 0x61, 0x72, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x03, 0x67, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x47, 0x69, 0x74, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x03, 0x67, 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, + 0x74, 0x12, 0x33, 0x0a, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x41, 0x64, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x09, 0x61, 0x64, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x09, 0x69, 0x64, 0x65, 0x5f, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x73, 0x6d, 0x61, + 0x6e, 0x2e, 0x49, 0x44, 0x45, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x08, 0x69, 0x64, 0x65, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x73, + 0x68, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x0f, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x73, 0x68, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x5f, 0x65, 0x6e, 0x76, 0x76, 0x61, 0x72, + 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, - 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, - 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x4b, 0x65, 0x79, 0x52, 0x65, 0x66, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x41, - 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x66, 0x12, 0x1f, - 0x0a, 0x0b, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x22, 0x35, 0x0a, 0x0c, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, - 0x73, 0x12, 0x25, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, - 0x63, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x22, 0x23, 0x0a, 0x0d, 0x53, 0x53, 0x48, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x18, 0x0a, - 0x16, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x99, 0x01, 0x0a, 0x17, 0x44, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x43, 0x6c, 0x61, 0x73, 0x73, 0x52, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x70, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x72, 0x65, 0x64, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x70, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x22, 0x93, 0x01, 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, - 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x63, - 0x72, 0x65, 0x64, 0x69, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x69, 0x6e, 0x75, 0x74, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x73, - 0x50, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2a, 0x3f, 0x0a, 0x13, 0x53, 0x74, 0x6f, - 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x0f, - 0x0a, 0x0b, 0x49, 0x4d, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x54, 0x45, 0x4c, 0x59, 0x10, 0x01, 0x12, - 0x09, 0x0a, 0x05, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x10, 0x02, 0x2a, 0x38, 0x0a, 0x0b, 0x54, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x57, 0x4f, 0x52, - 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x00, - 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, - 0x55, 0x54, 0x10, 0x01, 0x2a, 0x3a, 0x0a, 0x0e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x44, 0x4d, 0x49, 0x54, 0x5f, - 0x4f, 0x57, 0x4e, 0x45, 0x52, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, - 0x41, 0x44, 0x4d, 0x49, 0x54, 0x5f, 0x45, 0x56, 0x45, 0x52, 0x59, 0x4f, 0x4e, 0x45, 0x10, 0x01, - 0x2a, 0x49, 0x0a, 0x0e, 0x50, 0x6f, 0x72, 0x74, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, - 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, - 0x1a, 0x0a, 0x16, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, - 0x54, 0x59, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x01, 0x2a, 0x3f, 0x0a, 0x0c, 0x50, - 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x16, 0x0a, 0x12, 0x50, - 0x4f, 0x52, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x48, 0x54, 0x54, - 0x50, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x54, - 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x53, 0x10, 0x01, 0x2a, 0x38, 0x0a, 0x16, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, - 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, - 0x4d, 0x50, 0x54, 0x59, 0x10, 0x02, 0x2a, 0x83, 0x01, 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, - 0x47, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, - 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, - 0x47, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x04, - 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x55, 0x50, 0x54, 0x45, 0x44, 0x10, - 0x07, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, - 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x98, 0x01, 0x0a, - 0x14, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4f, 0x50, 0x10, 0x00, 0x12, - 0x21, 0x0a, 0x1d, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x43, 0x4f, 0x4e, - 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x49, 0x4e, 0x47, - 0x10, 0x0a, 0x12, 0x11, 0x0a, 0x0d, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, - 0x50, 0x53, 0x49, 0x10, 0x0b, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x53, 0x48, 0x5f, 0x43, 0x41, 0x10, - 0x0c, 0x22, 0x04, 0x08, 0x01, 0x10, 0x01, 0x22, 0x04, 0x08, 0x02, 0x10, 0x02, 0x22, 0x04, 0x08, - 0x03, 0x10, 0x03, 0x22, 0x04, 0x08, 0x04, 0x10, 0x04, 0x22, 0x04, 0x08, 0x05, 0x10, 0x05, 0x22, - 0x04, 0x08, 0x06, 0x10, 0x06, 0x22, 0x04, 0x08, 0x07, 0x10, 0x07, 0x22, 0x04, 0x08, 0x08, 0x10, - 0x08, 0x22, 0x04, 0x08, 0x09, 0x10, 0x09, 0x2a, 0x46, 0x0a, 0x0d, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x47, 0x55, - 0x4c, 0x41, 0x52, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, - 0x44, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x42, 0x55, 0x49, 0x4c, - 0x44, 0x10, 0x04, 0x22, 0x04, 0x08, 0x02, 0x10, 0x02, 0x22, 0x04, 0x08, 0x03, 0x10, 0x03, 0x32, - 0xe7, 0x08, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x12, 0x4c, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x47, 0x65, - 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x74, 0x6f, - 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1c, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x58, 0x0a, 0x11, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x44, + 0x62, 0x6c, 0x65, 0x52, 0x0a, 0x73, 0x79, 0x73, 0x45, 0x6e, 0x76, 0x76, 0x61, 0x72, 0x73, 0x12, + 0x28, 0x0a, 0x10, 0x69, 0x64, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x64, 0x65, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, 0x6f, + 0x73, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x12, 0x29, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x6c, 0x69, 0x66, 0x65, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x69, + 0x6d, 0x75, 0x6d, 0x4c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x4a, 0x04, 0x08, 0x02, 0x10, + 0x03, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x0e, 0x10, 0x0f, 0x22, 0x3b, 0x0a, + 0x07, 0x47, 0x69, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0xc3, 0x01, 0x0a, 0x13, 0x45, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x06, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x77, + 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b, + 0x65, 0x79, 0x52, 0x65, 0x66, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x41, 0x0a, + 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x66, 0x12, 0x1f, 0x0a, + 0x0b, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x22, 0x35, 0x0a, 0x0c, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, + 0x12, 0x25, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0f, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, + 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x22, 0x23, 0x0a, 0x0d, 0x53, 0x53, 0x48, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x18, 0x0a, 0x16, + 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x99, 0x01, 0x0a, 0x17, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x42, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, + 0x6c, 0x61, 0x73, 0x73, 0x52, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, + 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x72, 0x65, 0x64, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x70, 0x72, 0x65, 0x66, 0x65, + 0x72, 0x72, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6c, 0x61, + 0x73, 0x73, 0x22, 0x93, 0x01, 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x72, + 0x65, 0x64, 0x69, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x73, 0x50, + 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2a, 0x3f, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x70, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, + 0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x0f, 0x0a, + 0x0b, 0x49, 0x4d, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x54, 0x45, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x09, + 0x0a, 0x05, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x10, 0x02, 0x2a, 0x38, 0x0a, 0x0b, 0x54, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x57, 0x4f, 0x52, 0x4b, + 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x00, 0x12, + 0x12, 0x0a, 0x0e, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, + 0x54, 0x10, 0x01, 0x2a, 0x3a, 0x0a, 0x0e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x44, 0x4d, 0x49, 0x54, 0x5f, 0x4f, + 0x57, 0x4e, 0x45, 0x52, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x41, + 0x44, 0x4d, 0x49, 0x54, 0x5f, 0x45, 0x56, 0x45, 0x52, 0x59, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x2a, + 0x49, 0x0a, 0x0e, 0x50, 0x6f, 0x72, 0x74, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, + 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x1a, + 0x0a, 0x16, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, + 0x59, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x01, 0x2a, 0x3f, 0x0a, 0x0c, 0x50, 0x6f, + 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x4f, + 0x52, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x48, 0x54, 0x54, 0x50, + 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, + 0x43, 0x4f, 0x4c, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x53, 0x10, 0x01, 0x2a, 0x38, 0x0a, 0x16, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, + 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, + 0x50, 0x54, 0x59, 0x10, 0x02, 0x2a, 0x83, 0x01, 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, + 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, + 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, + 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, 0x47, + 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, + 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x55, 0x50, 0x54, 0x45, 0x44, 0x10, 0x07, + 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0b, + 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x98, 0x01, 0x0a, 0x14, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4f, 0x50, 0x10, 0x00, 0x12, 0x21, + 0x0a, 0x1d, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, + 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x49, 0x4e, 0x47, 0x10, + 0x0a, 0x12, 0x11, 0x0a, 0x0d, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x50, + 0x53, 0x49, 0x10, 0x0b, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x53, 0x48, 0x5f, 0x43, 0x41, 0x10, 0x0c, + 0x22, 0x04, 0x08, 0x01, 0x10, 0x01, 0x22, 0x04, 0x08, 0x02, 0x10, 0x02, 0x22, 0x04, 0x08, 0x03, + 0x10, 0x03, 0x22, 0x04, 0x08, 0x04, 0x10, 0x04, 0x22, 0x04, 0x08, 0x05, 0x10, 0x05, 0x22, 0x04, + 0x08, 0x06, 0x10, 0x06, 0x22, 0x04, 0x08, 0x07, 0x10, 0x07, 0x22, 0x04, 0x08, 0x08, 0x10, 0x08, + 0x22, 0x04, 0x08, 0x09, 0x10, 0x09, 0x2a, 0x46, 0x0a, 0x0d, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x47, 0x55, 0x4c, + 0x41, 0x52, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, + 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, + 0x10, 0x04, 0x22, 0x04, 0x08, 0x02, 0x10, 0x02, 0x22, 0x04, 0x08, 0x03, 0x10, 0x03, 0x32, 0xe7, + 0x08, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x72, 0x12, 0x4c, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x47, 0x65, 0x74, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1c, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x4f, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x12, 0x1c, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x12, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x70, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1c, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x58, 0x0a, 0x11, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x44, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0f, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, - 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0f, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x42, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x17, 0x2e, 0x77, - 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x30, 0x01, 0x12, 0x43, 0x0a, 0x0a, 0x4d, 0x61, 0x72, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x12, 0x18, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x41, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x73, - 0x6d, 0x61, 0x6e, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0a, 0x53, 0x65, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, - 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x19, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, - 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x2e, 0x77, - 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6f, 0x72, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0c, 0x54, 0x61, 0x6b, 0x65, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1a, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x54, 0x61, - 0x6b, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x54, 0x61, 0x6b, 0x65, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x55, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, - 0x22, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0c, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x53, 0x53, 0x48, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x2e, 0x77, 0x73, 0x6d, - 0x61, 0x6e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x53, 0x48, 0x4b, 0x65, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x53, 0x48, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, - 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, + 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, + 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x17, 0x2e, 0x77, 0x73, + 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x30, 0x01, 0x12, 0x43, 0x0a, 0x0a, 0x4d, 0x61, 0x72, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x12, 0x18, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x73, 0x6d, + 0x61, 0x6e, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0a, 0x53, 0x65, 0x74, 0x54, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x65, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x19, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0b, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x2e, 0x77, 0x73, + 0x6d, 0x61, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x43, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0c, 0x54, 0x61, 0x6b, 0x65, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1a, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x54, 0x61, 0x6b, + 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x54, 0x61, 0x6b, 0x65, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x55, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x6f, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x6f, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x22, + 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0c, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x53, 0x53, 0x48, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x2e, 0x77, 0x73, 0x6d, 0x61, + 0x6e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x53, 0x48, 0x4b, 0x65, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x53, 0x53, 0x48, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2d, 0x69, - 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2f, 0x77, 0x73, 0x2d, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2d, 0x69, 0x6f, + 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2f, 0x77, 0x73, 0x2d, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3970,7 +4097,7 @@ func file_core_proto_rawDescGZIP() []byte { } var file_core_proto_enumTypes = make([]protoimpl.EnumInfo, 9) -var file_core_proto_msgTypes = make([]protoimpl.MessageInfo, 48) +var file_core_proto_msgTypes = make([]protoimpl.MessageInfo, 50) var file_core_proto_goTypes = []interface{}{ (StopWorkspacePolicy)(0), // 0: wsman.StopWorkspacePolicy (TimeoutType)(0), // 1: wsman.TimeoutType @@ -4027,11 +4154,13 @@ var file_core_proto_goTypes = []interface{}{ (*WorkspaceClass)(nil), // 52: wsman.WorkspaceClass nil, // 53: wsman.MetadataFilter.AnnotationsEntry nil, // 54: wsman.SubscribeResponse.HeaderEntry - nil, // 55: wsman.WorkspaceMetadata.AnnotationsEntry - (*EnvironmentVariable_SecretKeyRef)(nil), // 56: wsman.EnvironmentVariable.SecretKeyRef - (*api.GitStatus)(nil), // 57: contentservice.GitStatus - (*timestamppb.Timestamp)(nil), // 58: google.protobuf.Timestamp - (*api.WorkspaceInitializer)(nil), // 59: contentservice.WorkspaceInitializer + (*WorkspaceMetadata_ImageInfo)(nil), // 55: wsman.WorkspaceMetadata.ImageInfo + (*WorkspaceMetadata_Metrics)(nil), // 56: wsman.WorkspaceMetadata.Metrics + nil, // 57: wsman.WorkspaceMetadata.AnnotationsEntry + (*EnvironmentVariable_SecretKeyRef)(nil), // 58: wsman.EnvironmentVariable.SecretKeyRef + (*api.GitStatus)(nil), // 59: contentservice.GitStatus + (*timestamppb.Timestamp)(nil), // 60: google.protobuf.Timestamp + (*api.WorkspaceInitializer)(nil), // 61: contentservice.WorkspaceInitializer } var file_core_proto_depIdxs = []int32{ 53, // 0: wsman.MetadataFilter.annotations:type_name -> wsman.MetadataFilter.AnnotationsEntry @@ -4053,7 +4182,7 @@ var file_core_proto_depIdxs = []int32{ 38, // 16: wsman.WorkspaceStatus.spec:type_name -> wsman.WorkspaceSpec 6, // 17: wsman.WorkspaceStatus.phase:type_name -> wsman.WorkspacePhase 41, // 18: wsman.WorkspaceStatus.conditions:type_name -> wsman.WorkspaceConditions - 57, // 19: wsman.WorkspaceStatus.repo:type_name -> contentservice.GitStatus + 59, // 19: wsman.WorkspaceStatus.repo:type_name -> contentservice.GitStatus 43, // 20: wsman.WorkspaceStatus.runtime:type_name -> wsman.WorkspaceRuntimeInfo 44, // 21: wsman.WorkspaceStatus.auth:type_name -> wsman.WorkspaceAuthentication 39, // 22: wsman.WorkspaceSpec.exposed_ports:type_name -> wsman.PortSpec @@ -4065,57 +4194,59 @@ var file_core_proto_depIdxs = []int32{ 5, // 28: wsman.WorkspaceConditions.final_backup_complete:type_name -> wsman.WorkspaceConditionBool 5, // 29: wsman.WorkspaceConditions.deployed:type_name -> wsman.WorkspaceConditionBool 5, // 30: wsman.WorkspaceConditions.network_not_ready:type_name -> wsman.WorkspaceConditionBool - 58, // 31: wsman.WorkspaceConditions.first_user_activity:type_name -> google.protobuf.Timestamp + 60, // 31: wsman.WorkspaceConditions.first_user_activity:type_name -> google.protobuf.Timestamp 5, // 32: wsman.WorkspaceConditions.stopped_by_request:type_name -> wsman.WorkspaceConditionBool 40, // 33: wsman.WorkspaceConditions.volume_snapshot:type_name -> wsman.VolumeSnapshotInfo 5, // 34: wsman.WorkspaceConditions.aborted:type_name -> wsman.WorkspaceConditionBool - 58, // 35: wsman.WorkspaceMetadata.started_at:type_name -> google.protobuf.Timestamp - 55, // 36: wsman.WorkspaceMetadata.annotations:type_name -> wsman.WorkspaceMetadata.AnnotationsEntry - 2, // 37: wsman.WorkspaceAuthentication.admission:type_name -> wsman.AdmissionLevel - 7, // 38: wsman.StartWorkspaceSpec.feature_flags:type_name -> wsman.WorkspaceFeatureFlag - 59, // 39: wsman.StartWorkspaceSpec.initializer:type_name -> contentservice.WorkspaceInitializer - 39, // 40: wsman.StartWorkspaceSpec.ports:type_name -> wsman.PortSpec - 47, // 41: wsman.StartWorkspaceSpec.envvars:type_name -> wsman.EnvironmentVariable - 46, // 42: wsman.StartWorkspaceSpec.git:type_name -> wsman.GitSpec - 2, // 43: wsman.StartWorkspaceSpec.admission:type_name -> wsman.AdmissionLevel - 37, // 44: wsman.StartWorkspaceSpec.ide_image:type_name -> wsman.IDEImage - 47, // 45: wsman.StartWorkspaceSpec.sys_envvars:type_name -> wsman.EnvironmentVariable - 56, // 46: wsman.EnvironmentVariable.secret:type_name -> wsman.EnvironmentVariable.SecretKeyRef - 39, // 47: wsman.ExposedPorts.ports:type_name -> wsman.PortSpec - 52, // 48: wsman.DescribeClusterResponse.workspace_classes:type_name -> wsman.WorkspaceClass - 10, // 49: wsman.WorkspaceManager.GetWorkspaces:input_type -> wsman.GetWorkspacesRequest - 12, // 50: wsman.WorkspaceManager.StartWorkspace:input_type -> wsman.StartWorkspaceRequest - 14, // 51: wsman.WorkspaceManager.StopWorkspace:input_type -> wsman.StopWorkspaceRequest - 16, // 52: wsman.WorkspaceManager.DescribeWorkspace:input_type -> wsman.DescribeWorkspaceRequest - 32, // 53: wsman.WorkspaceManager.BackupWorkspace:input_type -> wsman.BackupWorkspaceRequest - 18, // 54: wsman.WorkspaceManager.Subscribe:input_type -> wsman.SubscribeRequest - 20, // 55: wsman.WorkspaceManager.MarkActive:input_type -> wsman.MarkActiveRequest - 22, // 56: wsman.WorkspaceManager.SetTimeout:input_type -> wsman.SetTimeoutRequest - 24, // 57: wsman.WorkspaceManager.ControlPort:input_type -> wsman.ControlPortRequest - 26, // 58: wsman.WorkspaceManager.TakeSnapshot:input_type -> wsman.TakeSnapshotRequest - 28, // 59: wsman.WorkspaceManager.ControlAdmission:input_type -> wsman.ControlAdmissionRequest - 30, // 60: wsman.WorkspaceManager.DeleteVolumeSnapshot:input_type -> wsman.DeleteVolumeSnapshotRequest - 34, // 61: wsman.WorkspaceManager.UpdateSSHKey:input_type -> wsman.UpdateSSHKeyRequest - 50, // 62: wsman.WorkspaceManager.DescribeCluster:input_type -> wsman.DescribeClusterRequest - 11, // 63: wsman.WorkspaceManager.GetWorkspaces:output_type -> wsman.GetWorkspacesResponse - 13, // 64: wsman.WorkspaceManager.StartWorkspace:output_type -> wsman.StartWorkspaceResponse - 15, // 65: wsman.WorkspaceManager.StopWorkspace:output_type -> wsman.StopWorkspaceResponse - 17, // 66: wsman.WorkspaceManager.DescribeWorkspace:output_type -> wsman.DescribeWorkspaceResponse - 33, // 67: wsman.WorkspaceManager.BackupWorkspace:output_type -> wsman.BackupWorkspaceResponse - 19, // 68: wsman.WorkspaceManager.Subscribe:output_type -> wsman.SubscribeResponse - 21, // 69: wsman.WorkspaceManager.MarkActive:output_type -> wsman.MarkActiveResponse - 23, // 70: wsman.WorkspaceManager.SetTimeout:output_type -> wsman.SetTimeoutResponse - 25, // 71: wsman.WorkspaceManager.ControlPort:output_type -> wsman.ControlPortResponse - 27, // 72: wsman.WorkspaceManager.TakeSnapshot:output_type -> wsman.TakeSnapshotResponse - 29, // 73: wsman.WorkspaceManager.ControlAdmission:output_type -> wsman.ControlAdmissionResponse - 31, // 74: wsman.WorkspaceManager.DeleteVolumeSnapshot:output_type -> wsman.DeleteVolumeSnapshotResponse - 35, // 75: wsman.WorkspaceManager.UpdateSSHKey:output_type -> wsman.UpdateSSHKeyResponse - 51, // 76: wsman.WorkspaceManager.DescribeCluster:output_type -> wsman.DescribeClusterResponse - 63, // [63:77] is the sub-list for method output_type - 49, // [49:63] is the sub-list for method input_type - 49, // [49:49] is the sub-list for extension type_name - 49, // [49:49] is the sub-list for extension extendee - 0, // [0:49] is the sub-list for field type_name + 60, // 35: wsman.WorkspaceMetadata.started_at:type_name -> google.protobuf.Timestamp + 57, // 36: wsman.WorkspaceMetadata.annotations:type_name -> wsman.WorkspaceMetadata.AnnotationsEntry + 56, // 37: wsman.WorkspaceMetadata.metrics:type_name -> wsman.WorkspaceMetadata.Metrics + 2, // 38: wsman.WorkspaceAuthentication.admission:type_name -> wsman.AdmissionLevel + 7, // 39: wsman.StartWorkspaceSpec.feature_flags:type_name -> wsman.WorkspaceFeatureFlag + 61, // 40: wsman.StartWorkspaceSpec.initializer:type_name -> contentservice.WorkspaceInitializer + 39, // 41: wsman.StartWorkspaceSpec.ports:type_name -> wsman.PortSpec + 47, // 42: wsman.StartWorkspaceSpec.envvars:type_name -> wsman.EnvironmentVariable + 46, // 43: wsman.StartWorkspaceSpec.git:type_name -> wsman.GitSpec + 2, // 44: wsman.StartWorkspaceSpec.admission:type_name -> wsman.AdmissionLevel + 37, // 45: wsman.StartWorkspaceSpec.ide_image:type_name -> wsman.IDEImage + 47, // 46: wsman.StartWorkspaceSpec.sys_envvars:type_name -> wsman.EnvironmentVariable + 58, // 47: wsman.EnvironmentVariable.secret:type_name -> wsman.EnvironmentVariable.SecretKeyRef + 39, // 48: wsman.ExposedPorts.ports:type_name -> wsman.PortSpec + 52, // 49: wsman.DescribeClusterResponse.workspace_classes:type_name -> wsman.WorkspaceClass + 55, // 50: wsman.WorkspaceMetadata.Metrics.image:type_name -> wsman.WorkspaceMetadata.ImageInfo + 10, // 51: wsman.WorkspaceManager.GetWorkspaces:input_type -> wsman.GetWorkspacesRequest + 12, // 52: wsman.WorkspaceManager.StartWorkspace:input_type -> wsman.StartWorkspaceRequest + 14, // 53: wsman.WorkspaceManager.StopWorkspace:input_type -> wsman.StopWorkspaceRequest + 16, // 54: wsman.WorkspaceManager.DescribeWorkspace:input_type -> wsman.DescribeWorkspaceRequest + 32, // 55: wsman.WorkspaceManager.BackupWorkspace:input_type -> wsman.BackupWorkspaceRequest + 18, // 56: wsman.WorkspaceManager.Subscribe:input_type -> wsman.SubscribeRequest + 20, // 57: wsman.WorkspaceManager.MarkActive:input_type -> wsman.MarkActiveRequest + 22, // 58: wsman.WorkspaceManager.SetTimeout:input_type -> wsman.SetTimeoutRequest + 24, // 59: wsman.WorkspaceManager.ControlPort:input_type -> wsman.ControlPortRequest + 26, // 60: wsman.WorkspaceManager.TakeSnapshot:input_type -> wsman.TakeSnapshotRequest + 28, // 61: wsman.WorkspaceManager.ControlAdmission:input_type -> wsman.ControlAdmissionRequest + 30, // 62: wsman.WorkspaceManager.DeleteVolumeSnapshot:input_type -> wsman.DeleteVolumeSnapshotRequest + 34, // 63: wsman.WorkspaceManager.UpdateSSHKey:input_type -> wsman.UpdateSSHKeyRequest + 50, // 64: wsman.WorkspaceManager.DescribeCluster:input_type -> wsman.DescribeClusterRequest + 11, // 65: wsman.WorkspaceManager.GetWorkspaces:output_type -> wsman.GetWorkspacesResponse + 13, // 66: wsman.WorkspaceManager.StartWorkspace:output_type -> wsman.StartWorkspaceResponse + 15, // 67: wsman.WorkspaceManager.StopWorkspace:output_type -> wsman.StopWorkspaceResponse + 17, // 68: wsman.WorkspaceManager.DescribeWorkspace:output_type -> wsman.DescribeWorkspaceResponse + 33, // 69: wsman.WorkspaceManager.BackupWorkspace:output_type -> wsman.BackupWorkspaceResponse + 19, // 70: wsman.WorkspaceManager.Subscribe:output_type -> wsman.SubscribeResponse + 21, // 71: wsman.WorkspaceManager.MarkActive:output_type -> wsman.MarkActiveResponse + 23, // 72: wsman.WorkspaceManager.SetTimeout:output_type -> wsman.SetTimeoutResponse + 25, // 73: wsman.WorkspaceManager.ControlPort:output_type -> wsman.ControlPortResponse + 27, // 74: wsman.WorkspaceManager.TakeSnapshot:output_type -> wsman.TakeSnapshotResponse + 29, // 75: wsman.WorkspaceManager.ControlAdmission:output_type -> wsman.ControlAdmissionResponse + 31, // 76: wsman.WorkspaceManager.DeleteVolumeSnapshot:output_type -> wsman.DeleteVolumeSnapshotResponse + 35, // 77: wsman.WorkspaceManager.UpdateSSHKey:output_type -> wsman.UpdateSSHKeyResponse + 51, // 78: wsman.WorkspaceManager.DescribeCluster:output_type -> wsman.DescribeClusterResponse + 65, // [65:79] is the sub-list for method output_type + 51, // [51:65] is the sub-list for method input_type + 51, // [51:51] is the sub-list for extension type_name + 51, // [51:51] is the sub-list for extension extendee + 0, // [0:51] is the sub-list for field type_name } func init() { file_core_proto_init() } @@ -4652,7 +4783,31 @@ func file_core_proto_init() { return nil } } + file_core_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WorkspaceMetadata_ImageInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } file_core_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WorkspaceMetadata_Metrics); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_core_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EnvironmentVariable_SecretKeyRef); i { case 0: return &v.state @@ -4672,7 +4827,7 @@ func file_core_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_core_proto_rawDesc, NumEnums: 9, - NumMessages: 48, + NumMessages: 50, NumExtensions: 0, NumServices: 1, }, diff --git a/components/ws-manager-api/go/core_grpc.pb.go b/components/ws-manager-api/go/core_grpc.pb.go index d92f50a5529f40..71b70e751ec0b4 100644 --- a/components/ws-manager-api/go/core_grpc.pb.go +++ b/components/ws-manager-api/go/core_grpc.pb.go @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Gitpod GmbH. All rights reserved. +// Copyright (c) 2024 Gitpod GmbH. All rights reserved. // Licensed under the GNU Affero General Public License (AGPL). // See License.AGPL.txt in the project root for license information. diff --git a/components/ws-manager-api/go/mock/mock.go b/components/ws-manager-api/go/mock/mock.go index ed4ca796c9ab67..14e3d4557420db 100644 --- a/components/ws-manager-api/go/mock/mock.go +++ b/components/ws-manager-api/go/mock/mock.go @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Gitpod GmbH. All rights reserved. +// Copyright (c) 2024 Gitpod GmbH. All rights reserved. // Licensed under the GNU Affero General Public License (AGPL). // See License.AGPL.txt in the project root for license information. diff --git a/components/ws-manager-api/typescript/src/core_grpc_pb.d.ts b/components/ws-manager-api/typescript/src/core_grpc_pb.d.ts index 816b210551ff9e..432b9d74bf2d4b 100644 --- a/components/ws-manager-api/typescript/src/core_grpc_pb.d.ts +++ b/components/ws-manager-api/typescript/src/core_grpc_pb.d.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2023 Gitpod GmbH. All rights reserved. + * Copyright (c) 2024 Gitpod GmbH. All rights reserved. * Licensed under the GNU Affero General Public License (AGPL). * See License.AGPL.txt in the project root for license information. */ diff --git a/components/ws-manager-api/typescript/src/core_grpc_pb.js b/components/ws-manager-api/typescript/src/core_grpc_pb.js index eaf29bc6b2c157..3cc739bad1e6b2 100644 --- a/components/ws-manager-api/typescript/src/core_grpc_pb.js +++ b/components/ws-manager-api/typescript/src/core_grpc_pb.js @@ -1,5 +1,5 @@ /** - * Copyright (c) 2023 Gitpod GmbH. All rights reserved. + * Copyright (c) 2024 Gitpod GmbH. All rights reserved. * Licensed under the GNU Affero General Public License (AGPL). * See License.AGPL.txt in the project root for license information. */ diff --git a/components/ws-manager-api/typescript/src/core_pb.d.ts b/components/ws-manager-api/typescript/src/core_pb.d.ts index d159ec6b96c195..e9448e73e347ae 100644 --- a/components/ws-manager-api/typescript/src/core_pb.d.ts +++ b/components/ws-manager-api/typescript/src/core_pb.d.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2023 Gitpod GmbH. All rights reserved. + * Copyright (c) 2024 Gitpod GmbH. All rights reserved. * Licensed under the GNU Affero General Public License (AGPL). * See License.AGPL.txt in the project root for license information. */ @@ -908,6 +908,11 @@ export class WorkspaceMetadata extends jspb.Message { getProject(): string | undefined; setProject(value: string): WorkspaceMetadata; + hasMetrics(): boolean; + clearMetrics(): void; + getMetrics(): WorkspaceMetadata.Metrics | undefined; + setMetrics(value?: WorkspaceMetadata.Metrics): WorkspaceMetadata; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): WorkspaceMetadata.AsObject; static toObject(includeInstance: boolean, msg: WorkspaceMetadata): WorkspaceMetadata.AsObject; @@ -927,7 +932,56 @@ export namespace WorkspaceMetadata { annotationsMap: Array<[string, string]>, team?: string, project?: string, + metrics?: WorkspaceMetadata.Metrics.AsObject, + } + + + export class ImageInfo extends jspb.Message { + getTotalSize(): number; + setTotalSize(value: number): ImageInfo; + getWorkspaceImageSize(): number; + setWorkspaceImageSize(value: number): ImageInfo; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ImageInfo.AsObject; + static toObject(includeInstance: boolean, msg: ImageInfo): ImageInfo.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ImageInfo, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ImageInfo; + static deserializeBinaryFromReader(message: ImageInfo, reader: jspb.BinaryReader): ImageInfo; + } + + export namespace ImageInfo { + export type AsObject = { + totalSize: number, + workspaceImageSize: number, + } } + + export class Metrics extends jspb.Message { + + hasImage(): boolean; + clearImage(): void; + getImage(): WorkspaceMetadata.ImageInfo | undefined; + setImage(value?: WorkspaceMetadata.ImageInfo): Metrics; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Metrics.AsObject; + static toObject(includeInstance: boolean, msg: Metrics): Metrics.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: Metrics, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Metrics; + static deserializeBinaryFromReader(message: Metrics, reader: jspb.BinaryReader): Metrics; + } + + export namespace Metrics { + export type AsObject = { + image?: WorkspaceMetadata.ImageInfo.AsObject, + } + } + } export class WorkspaceRuntimeInfo extends jspb.Message { diff --git a/components/ws-manager-api/typescript/src/core_pb.js b/components/ws-manager-api/typescript/src/core_pb.js index f36f1162495e88..c913b9ca67d4ab 100644 --- a/components/ws-manager-api/typescript/src/core_pb.js +++ b/components/ws-manager-api/typescript/src/core_pb.js @@ -1,5 +1,5 @@ /** - * Copyright (c) 2023 Gitpod GmbH. All rights reserved. + * Copyright (c) 2024 Gitpod GmbH. All rights reserved. * Licensed under the GNU Affero General Public License (AGPL). * See License.AGPL.txt in the project root for license information. */ @@ -74,6 +74,8 @@ goog.exportSymbol('proto.wsman.WorkspaceConditionBool', null, global); goog.exportSymbol('proto.wsman.WorkspaceConditions', null, global); goog.exportSymbol('proto.wsman.WorkspaceFeatureFlag', null, global); goog.exportSymbol('proto.wsman.WorkspaceMetadata', null, global); +goog.exportSymbol('proto.wsman.WorkspaceMetadata.ImageInfo', null, global); +goog.exportSymbol('proto.wsman.WorkspaceMetadata.Metrics', null, global); goog.exportSymbol('proto.wsman.WorkspacePhase', null, global); goog.exportSymbol('proto.wsman.WorkspaceRuntimeInfo', null, global); goog.exportSymbol('proto.wsman.WorkspaceSpec', null, global); @@ -793,6 +795,48 @@ if (goog.DEBUG && !COMPILED) { */ proto.wsman.WorkspaceMetadata.displayName = 'proto.wsman.WorkspaceMetadata'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.wsman.WorkspaceMetadata.ImageInfo = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.wsman.WorkspaceMetadata.ImageInfo, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.wsman.WorkspaceMetadata.ImageInfo.displayName = 'proto.wsman.WorkspaceMetadata.ImageInfo'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.wsman.WorkspaceMetadata.Metrics = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.wsman.WorkspaceMetadata.Metrics, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.wsman.WorkspaceMetadata.Metrics.displayName = 'proto.wsman.WorkspaceMetadata.Metrics'; +} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -7304,7 +7348,8 @@ proto.wsman.WorkspaceMetadata.toObject = function(includeInstance, msg) { startedAt: (f = msg.getStartedAt()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f), annotationsMap: (f = msg.getAnnotationsMap()) ? f.toObject(includeInstance, undefined) : [], team: jspb.Message.getFieldWithDefault(msg, 5, ""), - project: jspb.Message.getFieldWithDefault(msg, 6, "") + project: jspb.Message.getFieldWithDefault(msg, 6, ""), + metrics: (f = msg.getMetrics()) && proto.wsman.WorkspaceMetadata.Metrics.toObject(includeInstance, f) }; if (includeInstance) { @@ -7368,6 +7413,11 @@ proto.wsman.WorkspaceMetadata.deserializeBinaryFromReader = function(msg, reader var value = /** @type {string} */ (reader.readString()); msg.setProject(value); break; + case 7: + var value = new proto.wsman.WorkspaceMetadata.Metrics; + reader.readMessage(value,proto.wsman.WorkspaceMetadata.Metrics.deserializeBinaryFromReader); + msg.setMetrics(value); + break; default: reader.skipField(); break; @@ -7437,6 +7487,325 @@ proto.wsman.WorkspaceMetadata.serializeBinaryToWriter = function(message, writer f ); } + f = message.getMetrics(); + if (f != null) { + writer.writeMessage( + 7, + f, + proto.wsman.WorkspaceMetadata.Metrics.serializeBinaryToWriter + ); + } +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.wsman.WorkspaceMetadata.ImageInfo.prototype.toObject = function(opt_includeInstance) { + return proto.wsman.WorkspaceMetadata.ImageInfo.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.wsman.WorkspaceMetadata.ImageInfo} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.wsman.WorkspaceMetadata.ImageInfo.toObject = function(includeInstance, msg) { + var f, obj = { + totalSize: jspb.Message.getFieldWithDefault(msg, 1, 0), + workspaceImageSize: jspb.Message.getFieldWithDefault(msg, 2, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.wsman.WorkspaceMetadata.ImageInfo} + */ +proto.wsman.WorkspaceMetadata.ImageInfo.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.wsman.WorkspaceMetadata.ImageInfo; + return proto.wsman.WorkspaceMetadata.ImageInfo.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.wsman.WorkspaceMetadata.ImageInfo} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.wsman.WorkspaceMetadata.ImageInfo} + */ +proto.wsman.WorkspaceMetadata.ImageInfo.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt64()); + msg.setTotalSize(value); + break; + case 2: + var value = /** @type {number} */ (reader.readInt64()); + msg.setWorkspaceImageSize(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.wsman.WorkspaceMetadata.ImageInfo.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.wsman.WorkspaceMetadata.ImageInfo.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.wsman.WorkspaceMetadata.ImageInfo} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.wsman.WorkspaceMetadata.ImageInfo.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getTotalSize(); + if (f !== 0) { + writer.writeInt64( + 1, + f + ); + } + f = message.getWorkspaceImageSize(); + if (f !== 0) { + writer.writeInt64( + 2, + f + ); + } +}; + + +/** + * optional int64 total_size = 1; + * @return {number} + */ +proto.wsman.WorkspaceMetadata.ImageInfo.prototype.getTotalSize = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.wsman.WorkspaceMetadata.ImageInfo} returns this + */ +proto.wsman.WorkspaceMetadata.ImageInfo.prototype.setTotalSize = function(value) { + return jspb.Message.setProto3IntField(this, 1, value); +}; + + +/** + * optional int64 workspace_image_size = 2; + * @return {number} + */ +proto.wsman.WorkspaceMetadata.ImageInfo.prototype.getWorkspaceImageSize = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.wsman.WorkspaceMetadata.ImageInfo} returns this + */ +proto.wsman.WorkspaceMetadata.ImageInfo.prototype.setWorkspaceImageSize = function(value) { + return jspb.Message.setProto3IntField(this, 2, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.wsman.WorkspaceMetadata.Metrics.prototype.toObject = function(opt_includeInstance) { + return proto.wsman.WorkspaceMetadata.Metrics.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.wsman.WorkspaceMetadata.Metrics} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.wsman.WorkspaceMetadata.Metrics.toObject = function(includeInstance, msg) { + var f, obj = { + image: (f = msg.getImage()) && proto.wsman.WorkspaceMetadata.ImageInfo.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.wsman.WorkspaceMetadata.Metrics} + */ +proto.wsman.WorkspaceMetadata.Metrics.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.wsman.WorkspaceMetadata.Metrics; + return proto.wsman.WorkspaceMetadata.Metrics.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.wsman.WorkspaceMetadata.Metrics} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.wsman.WorkspaceMetadata.Metrics} + */ +proto.wsman.WorkspaceMetadata.Metrics.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.wsman.WorkspaceMetadata.ImageInfo; + reader.readMessage(value,proto.wsman.WorkspaceMetadata.ImageInfo.deserializeBinaryFromReader); + msg.setImage(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.wsman.WorkspaceMetadata.Metrics.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.wsman.WorkspaceMetadata.Metrics.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.wsman.WorkspaceMetadata.Metrics} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.wsman.WorkspaceMetadata.Metrics.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getImage(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.wsman.WorkspaceMetadata.ImageInfo.serializeBinaryToWriter + ); + } +}; + + +/** + * optional ImageInfo image = 1; + * @return {?proto.wsman.WorkspaceMetadata.ImageInfo} + */ +proto.wsman.WorkspaceMetadata.Metrics.prototype.getImage = function() { + return /** @type{?proto.wsman.WorkspaceMetadata.ImageInfo} */ ( + jspb.Message.getWrapperField(this, proto.wsman.WorkspaceMetadata.ImageInfo, 1)); +}; + + +/** + * @param {?proto.wsman.WorkspaceMetadata.ImageInfo|undefined} value + * @return {!proto.wsman.WorkspaceMetadata.Metrics} returns this +*/ +proto.wsman.WorkspaceMetadata.Metrics.prototype.setImage = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.wsman.WorkspaceMetadata.Metrics} returns this + */ +proto.wsman.WorkspaceMetadata.Metrics.prototype.clearImage = function() { + return this.setImage(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.wsman.WorkspaceMetadata.Metrics.prototype.hasImage = function() { + return jspb.Message.getField(this, 1) != null; }; @@ -7607,6 +7976,43 @@ proto.wsman.WorkspaceMetadata.prototype.hasProject = function() { }; +/** + * optional Metrics metrics = 7; + * @return {?proto.wsman.WorkspaceMetadata.Metrics} + */ +proto.wsman.WorkspaceMetadata.prototype.getMetrics = function() { + return /** @type{?proto.wsman.WorkspaceMetadata.Metrics} */ ( + jspb.Message.getWrapperField(this, proto.wsman.WorkspaceMetadata.Metrics, 7)); +}; + + +/** + * @param {?proto.wsman.WorkspaceMetadata.Metrics|undefined} value + * @return {!proto.wsman.WorkspaceMetadata} returns this +*/ +proto.wsman.WorkspaceMetadata.prototype.setMetrics = function(value) { + return jspb.Message.setWrapperField(this, 7, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.wsman.WorkspaceMetadata} returns this + */ +proto.wsman.WorkspaceMetadata.prototype.clearMetrics = function() { + return this.setMetrics(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.wsman.WorkspaceMetadata.prototype.hasMetrics = function() { + return jspb.Message.getField(this, 7) != null; +}; + + diff --git a/components/ws-manager-bridge/src/bridge.ts b/components/ws-manager-bridge/src/bridge.ts index 3d86ea88ef9ec1..4c6fb1a4ea5fa9 100644 --- a/components/ws-manager-bridge/src/bridge.ts +++ b/components/ws-manager-bridge/src/bridge.ts @@ -332,6 +332,13 @@ export class WorkspaceManagerBridge implements Disposable { instance.status.podName = instance.status.podName || status.runtime?.podName; instance.status.nodeIp = instance.status.nodeIp || status.runtime?.nodeIp; instance.status.ownerToken = status.auth!.ownerToken; + instance.status.metrics = { + image: { + totalSize: instance.status.metrics?.image?.totalSize || status.metadata.metrics?.image?.totalSize, + workspaceImageSize: + instance.status.metrics?.image?.totalSize || status.metadata.metrics?.image?.workspaceImageSize, + }, + }; let lifecycleHandler: (() => Promise) | undefined; switch (status.phase) { diff --git a/components/ws-manager-mk2/service/manager.go b/components/ws-manager-mk2/service/manager.go index 5f63893eef053e..ab5fe7113617c5 100644 --- a/components/ws-manager-mk2/service/manager.go +++ b/components/ws-manager-mk2/service/manager.go @@ -53,7 +53,7 @@ import ( const ( // stopWorkspaceNormallyGracePeriod is the grace period we use when stopping a pod with StopWorkspaceNormally policy stopWorkspaceNormallyGracePeriod = 30 * time.Second - // stopWorkspaceImmediatelyGracePeriod is the grace period we use when stopping a pod as soon as possbile + // stopWorkspaceImmediatelyGracePeriod is the grace period we use when stopping a pod as soon as possible stopWorkspaceImmediatelyGracePeriod = 1 * time.Second ) @@ -1105,6 +1105,16 @@ func (wsm *WorkspaceManagerServer) extractWorkspaceStatus(ws *workspacev1.Worksp }) } + var metrics *wsmanapi.WorkspaceMetadata_Metrics + if ws.Status.ImageInfo != nil { + metrics = &wsmanapi.WorkspaceMetadata_Metrics{ + Image: &wsmanapi.WorkspaceMetadata_ImageInfo{ + TotalSize: ws.Status.ImageInfo.TotalSize, + WorkspaceImageSize: ws.Status.ImageInfo.WorkspaceImageSize, + }, + } + } + res := &wsmanapi.WorkspaceStatus{ Id: ws.Name, StatusVersion: version, @@ -1113,6 +1123,7 @@ func (wsm *WorkspaceManagerServer) extractWorkspaceStatus(ws *workspacev1.Worksp MetaId: ws.Spec.Ownership.WorkspaceID, StartedAt: timestamppb.New(ws.CreationTimestamp.Time), Annotations: ws.Annotations, + Metrics: metrics, }, Spec: &wsmanapi.WorkspaceSpec{ Class: ws.Spec.Class,