mirror of
https://github.com/gitpod-io/gitpod.git
synced 2025-12-08 17:36:30 +00:00
240 lines
8.9 KiB
TypeScript
240 lines
8.9 KiB
TypeScript
/**
|
|
* Copyright (c) 2020 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 { NamedWorkspaceFeatureFlag } from "./protocol";
|
|
|
|
// WorkspaceInstance describes a part of a workspace's lifetime, specifically a single running session of it
|
|
export interface WorkspaceInstance {
|
|
// ID is the unique identifier of this instance
|
|
id: string;
|
|
|
|
// workspaceId is the unique identifier of the workspace this is an instance of
|
|
workspaceId: string;
|
|
|
|
// The time an instance has been created in the backend (before DB!)
|
|
creationTime: string;
|
|
|
|
// The time an instance has switched phase to 'Pending'
|
|
deployedTime?: string;
|
|
|
|
// The time an instance has switched phase to 'Running'
|
|
startedTime?: string;
|
|
|
|
// The time an instance has switched phase to 'Stopping' */
|
|
stoppingTime?: string;
|
|
|
|
// The time an instance has switched phase to 'Stopped' */
|
|
stoppedTime?: string;
|
|
|
|
// ideUrl is the URL at which the workspace is available on the internet
|
|
// Note: this is nitially empty, filled during starting process!
|
|
ideUrl: string;
|
|
|
|
// region is the name of the workspace cluster this instance runs in
|
|
// Note: this is nitially empty, filled during starting process!
|
|
region: string;
|
|
|
|
// workspaceImage is the name of the Docker image this instance runs
|
|
// Note: this is nitially empty, filled during starting process!
|
|
workspaceImage: string;
|
|
|
|
// status is the latest status of the instance that we're aware of
|
|
status: WorkspaceInstanceStatus;
|
|
|
|
// configuration captures the per-instance configuration variance of a workspace
|
|
// Beware: this field was added retroactively and not all instances have valid
|
|
// values here.
|
|
configuration?: WorkspaceInstanceConfiguration;
|
|
|
|
// instance is hard-deleted on the database and about to be collected by db-sync
|
|
readonly deleted?: boolean;
|
|
|
|
/**
|
|
* Contains information about the image build, if there was any
|
|
*/
|
|
imageBuildInfo?: ImageBuildInfo;
|
|
}
|
|
|
|
// WorkspaceInstanceStatus describes the current state of a workspace instance
|
|
export interface WorkspaceInstanceStatus {
|
|
// phase describes a high-level state of the workspace instance
|
|
phase: WorkspaceInstancePhase;
|
|
|
|
// conditions further specify the phase
|
|
conditions: WorkspaceInstanceConditions;
|
|
|
|
// message is a user-readable message containing information about the workspace
|
|
message?: string;
|
|
|
|
// exposedPorts is the list of currently exposed ports
|
|
exposedPorts?: WorkspaceInstancePort[];
|
|
|
|
// repo contains information about the Git working copy inside the workspace
|
|
repo?: WorkspaceInstanceRepoStatus;
|
|
|
|
// timeout is a non-default timeout value configured for a workspace
|
|
timeout?: string;
|
|
|
|
// nodeName is the name of the node the instance was scheduled onto
|
|
nodeName?: string;
|
|
|
|
// podName is the name of the pod of this instance
|
|
podName?: string;
|
|
|
|
// nodeIp is the IP of the node the workspace is running on
|
|
nodeIp?: string;
|
|
|
|
// ownerToken is the token one needs to access the workspace. Its presence is checked by ws-proxy.
|
|
ownerToken?: string;
|
|
}
|
|
|
|
// WorkspaceInstancePhase describes a high-level state of a workspace instance
|
|
export type WorkspaceInstancePhase =
|
|
// unknown indicates an issue within the system in that it cannot determine the actual phase of
|
|
// a workspace. This phase is usually accompanied by an error.
|
|
| "unknown"
|
|
|
|
// Preparing means that we haven't actually started the workspace instance just yet, but rather
|
|
// are still preparing for launch. This means we're building the Docker image for the workspace.
|
|
| "preparing"
|
|
|
|
// 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
|
|
// 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
|
|
// 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"
|
|
|
|
// Initializing is the phase in which the workspace is executing the appropriate workspace initializer (e.g. Git
|
|
// clone or backup download). After this phase one can expect the workspace to either be Running or Failed.
|
|
| "initializing"
|
|
|
|
// Running means the workspace is able to actively perform work, either by serving a user through Theia,
|
|
// or as a headless workspace.
|
|
| "running"
|
|
|
|
// Interrupted is an exceptional state where the container should be running but is temporarily unavailable.
|
|
// When in this state, we expect it to become running or stopping anytime soon.
|
|
| "interrupted"
|
|
|
|
// Stopping means that the workspace is currently shutting down. It could go to stopped every moment.
|
|
| "stopping"
|
|
|
|
// Stopped means the workspace ended regularly because it was shut down.
|
|
| "stopped";
|
|
|
|
export interface WorkspaceInstanceConditions {
|
|
// Failed contains the reason the workspace failed to operate. If this field is empty, the workspace has not failed.
|
|
// failed contains technical details for the failure of the workspace.
|
|
failed?: string;
|
|
|
|
// timeout contains the reason the workspace has timed out. If this field is empty, the workspace has not timed out.
|
|
timeout?: string;
|
|
|
|
// PullingImages marks if the workspace is currently pulling its images. This condition can only be set during PhaseCreating
|
|
pullingImages?: boolean;
|
|
|
|
// deployed marks that a workspace instance was sent/deployed at a workspace manager
|
|
deployed?: boolean;
|
|
|
|
// Whether the workspace start triggered an image build
|
|
neededImageBuild?: boolean;
|
|
|
|
// ISO8601 timestamp when the first user activity was registered in the frontend. Only set if the workspace is running.
|
|
firstUserActivity?: string;
|
|
|
|
// headlessTaskFailed indicates that a headless workspace task failed
|
|
// headlessTaskFailed is only set if:
|
|
// * this workspace is headless
|
|
// * the task being run returned a non 0 exit status code
|
|
headlessTaskFailed?: string;
|
|
|
|
// stopped_by_request is true if the workspace was stopped using a StopWorkspace call
|
|
stoppedByRequest?: boolean;
|
|
}
|
|
|
|
// AdmissionLevel describes who can access a workspace instance and its ports.
|
|
export type AdmissionLevel = "owner_only" | "everyone";
|
|
|
|
// PortVisibility describes how a port can be accessed
|
|
export type PortVisibility = "public" | "private";
|
|
|
|
// WorkspaceInstancePort describes a port exposed on a workspace instance
|
|
export interface WorkspaceInstancePort {
|
|
// The outward-facing port number
|
|
port: number;
|
|
|
|
// The visiblity of this port. Optional for backwards compatibility.
|
|
visibility?: PortVisibility;
|
|
|
|
// Public, outward-facing URL where the port can be accessed on.
|
|
url?: string;
|
|
}
|
|
|
|
// WorkspaceInstanceRepoStatus describes the status of th Git working copy of a workspace
|
|
export interface WorkspaceInstanceRepoStatus {
|
|
// branch is branch we're currently on
|
|
branch?: string;
|
|
|
|
// latestCommit is the last commit on the current branch
|
|
latestCommit?: string;
|
|
|
|
// uncommitedFiles is list of uncommitted files, possibly truncated
|
|
uncommitedFiles?: string[];
|
|
|
|
// the total number of uncommited files
|
|
totalUncommitedFiles?: number;
|
|
|
|
// untrackedFiles is the list of untracked files in the workspace, possibly truncated
|
|
untrackedFiles?: string[];
|
|
|
|
// the total number of untracked files
|
|
totalUntrackedFiles?: number;
|
|
|
|
// unpushedCommits is the list of unpushed changes in the workspace, possibly truncated
|
|
unpushedCommits?: string[];
|
|
|
|
// the total number of unpushed changes
|
|
totalUnpushedCommits?: number;
|
|
}
|
|
|
|
// 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
|
|
theiaVersion?: string;
|
|
|
|
// feature flags are the lowercase feature-flag names as passed to ws-manager
|
|
featureFlags?: NamedWorkspaceFeatureFlag[];
|
|
|
|
// ideImage is the ref of the IDE image this instance uses.
|
|
ideImage: string;
|
|
|
|
// desktopIdeImage is the ref of the desktop IDE image this instance uses.
|
|
desktopIdeImage?: string;
|
|
|
|
// supervisorImage is the ref of the supervisor image this instance uses.
|
|
supervisorImage?: string;
|
|
}
|
|
|
|
/**
|
|
* Holds information about the image build (if there was one) for this WorkspaceInstance
|
|
*/
|
|
export interface ImageBuildInfo {
|
|
log?: ImageBuildLogInfo;
|
|
}
|
|
|
|
/**
|
|
* Holds information about how to access logs for this an image build
|
|
*/
|
|
export interface ImageBuildLogInfo {
|
|
url: string;
|
|
headers: { [key: string]: string };
|
|
}
|