forked from github-starred/komodo
fix the ts client
This commit is contained in:
2
.vscode/tasks.json
vendored
2
.vscode/tasks.json
vendored
@@ -85,7 +85,7 @@
|
||||
},
|
||||
{
|
||||
"type": "shell",
|
||||
"command": "RUST_BACKTRACE=1 typeshare . --lang=typescript --output-file=./client/ts/src/types.ts",
|
||||
"command": "node ./client/ts/generate_types.mjs",
|
||||
"label": "generate typescript types",
|
||||
"problemMatcher": []
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ use anyhow::Context;
|
||||
use async_timing_util::{wait_until_timelength, Timelength};
|
||||
use futures::future::join_all;
|
||||
use monitor_types::entities::{
|
||||
deployment::{BasicContainerInfo, Deployment, DockerContainerState},
|
||||
deployment::{ContainerSummary, Deployment, DockerContainerState},
|
||||
server::{
|
||||
stats::{
|
||||
AllSystemStats, BasicSystemStats, ServerHealth, SingleDiskUsage, StatsState,
|
||||
@@ -29,7 +29,7 @@ pub struct CachedServerStatus {
|
||||
pub struct CachedDeploymentStatus {
|
||||
pub id: String,
|
||||
pub state: DockerContainerState,
|
||||
pub container: Option<BasicContainerInfo>,
|
||||
pub container: Option<ContainerSummary>,
|
||||
}
|
||||
|
||||
impl State {
|
||||
|
||||
@@ -39,19 +39,25 @@ enum ReadRequest {
|
||||
FindResources(FindResources),
|
||||
|
||||
// ==== SERVER ====
|
||||
GetServer(GetServer),
|
||||
ListServers(ListServers),
|
||||
GetServerStatus(GetServerStatus),
|
||||
GetPeripheryVersion(GetPeripheryVersion),
|
||||
GetSystemInformation(GetSystemInformation),
|
||||
GetDockerContainers(GetDockerContainers),
|
||||
GetDockerImages(GetDockerImages),
|
||||
GetDockerNetworks(GetDockerNetworks),
|
||||
GetServer(GetServer),
|
||||
ListServers(ListServers),
|
||||
GetServerActionState(GetServerActionState),
|
||||
|
||||
// ==== DEPLOYMENT ====
|
||||
GetDeployment(GetDeployment),
|
||||
ListDeployments(ListDeployments),
|
||||
GetDeploymentStatus(GetDeploymentStatus),
|
||||
GetDeploymentActionState(GetDeploymentActionState),
|
||||
GetDeployedVersion(GetDeployedVersion),
|
||||
GetDeploymentStats(GetDeploymentStats),
|
||||
GetLog(GetLog),
|
||||
|
||||
|
||||
// ==== BUILD ====
|
||||
GetBuild(GetBuild),
|
||||
|
||||
@@ -3,7 +3,7 @@ use async_trait::async_trait;
|
||||
use futures::future::join_all;
|
||||
use monitor_types::{
|
||||
entities::{
|
||||
deployment::BasicContainerInfo,
|
||||
deployment::ContainerSummary,
|
||||
server::{
|
||||
docker_image::ImageSummary, docker_network::DockerNetwork, stats::SystemInformation,
|
||||
Server, ServerActionState,
|
||||
@@ -334,7 +334,7 @@ impl Resolve<GetDockerContainers, RequestUser> for State {
|
||||
&self,
|
||||
GetDockerContainers { server_id }: GetDockerContainers,
|
||||
user: RequestUser,
|
||||
) -> anyhow::Result<Vec<BasicContainerInfo>> {
|
||||
) -> anyhow::Result<Vec<ContainerSummary>> {
|
||||
let server = self
|
||||
.get_server_check_permissions(&server_id, &user, PermissionLevel::Read)
|
||||
.await?;
|
||||
|
||||
@@ -58,7 +58,7 @@ impl Resolve<DeleteLoginSecret, RequestUser> for State {
|
||||
&self,
|
||||
DeleteLoginSecret { name }: DeleteLoginSecret,
|
||||
user: RequestUser,
|
||||
) -> anyhow::Result<()> {
|
||||
) -> anyhow::Result<DeleteLoginSecretResponse> {
|
||||
self.db
|
||||
.users
|
||||
.update_one(
|
||||
@@ -73,6 +73,6 @@ impl Resolve<DeleteLoginSecret, RequestUser> for State {
|
||||
)
|
||||
.await
|
||||
.context("failed at mongo update query")?;
|
||||
Ok(())
|
||||
Ok(DeleteLoginSecretResponse {})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use anyhow::{anyhow, Context};
|
||||
use bollard::{container::ListContainersOptions, Docker};
|
||||
use monitor_types::entities::{
|
||||
deployment::BasicContainerInfo,
|
||||
deployment::ContainerSummary,
|
||||
server::{docker_image::ImageSummary, docker_network::DockerNetwork},
|
||||
};
|
||||
|
||||
@@ -19,7 +19,7 @@ impl Default for DockerClient {
|
||||
}
|
||||
|
||||
impl DockerClient {
|
||||
pub async fn list_containers(&self) -> anyhow::Result<Vec<BasicContainerInfo>> {
|
||||
pub async fn list_containers(&self) -> anyhow::Result<Vec<ContainerSummary>> {
|
||||
let res = self
|
||||
.docker
|
||||
.list_containers(Some(ListContainersOptions::<String> {
|
||||
@@ -29,7 +29,7 @@ impl DockerClient {
|
||||
.await?
|
||||
.into_iter()
|
||||
.map(|s| {
|
||||
let info = BasicContainerInfo {
|
||||
let info = ContainerSummary {
|
||||
id: s.id.unwrap_or_default(),
|
||||
name: s
|
||||
.names
|
||||
@@ -47,7 +47,7 @@ impl DockerClient {
|
||||
};
|
||||
Ok::<_, anyhow::Error>(info)
|
||||
})
|
||||
.collect::<anyhow::Result<Vec<BasicContainerInfo>>>()?;
|
||||
.collect::<anyhow::Result<Vec<ContainerSummary>>>()?;
|
||||
Ok(res)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use anyhow::{anyhow, Context};
|
||||
use monitor_types::{
|
||||
entities::{
|
||||
deployment::{BasicContainerInfo, Deployment, DockerContainerStats, TerminationSignal},
|
||||
deployment::{ContainerSummary, Deployment, DockerContainerStats, TerminationSignal},
|
||||
update::Log,
|
||||
},
|
||||
optional_string,
|
||||
@@ -14,12 +14,12 @@ use crate::{helpers::docker, state::State};
|
||||
//
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Request)]
|
||||
#[response(Vec<BasicContainerInfo>)]
|
||||
#[response(Vec<ContainerSummary>)]
|
||||
pub struct GetContainerList {}
|
||||
|
||||
#[async_trait::async_trait]
|
||||
impl Resolve<GetContainerList> for State {
|
||||
async fn resolve(&self, _: GetContainerList, _: ()) -> anyhow::Result<Vec<BasicContainerInfo>> {
|
||||
async fn resolve(&self, _: GetContainerList, _: ()) -> anyhow::Result<Vec<ContainerSummary>> {
|
||||
self.docker.list_containers().await
|
||||
}
|
||||
}
|
||||
|
||||
30
client/ts/generate_types.mjs
Normal file
30
client/ts/generate_types.mjs
Normal file
@@ -0,0 +1,30 @@
|
||||
import { exec } from "child_process";
|
||||
import { readFileSync, writeFileSync } from "fs";
|
||||
import path from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
console.log("generating typescript types...");
|
||||
|
||||
const gen_command =
|
||||
"RUST_BACKTRACE=1 typeshare . --lang=typescript --output-file=./client/ts/src/types.ts";
|
||||
|
||||
exec(gen_command, (error, stdout, stderr) => {
|
||||
if (error) {
|
||||
console.error(error);
|
||||
return;
|
||||
}
|
||||
console.log("generated types using typeshare");
|
||||
fix_types();
|
||||
console.log("finished.");
|
||||
});
|
||||
|
||||
function fix_types() {
|
||||
const types_path = __dirname + "/src/types.ts";
|
||||
const contents = readFileSync(types_path);
|
||||
const fixed = contents
|
||||
.toString()
|
||||
.replaceAll("ResourceTargetVariant", 'ResourceTarget["type"]');
|
||||
writeFileSync(types_path, fixed);
|
||||
}
|
||||
@@ -20,7 +20,7 @@ export type LoginOptions = {
|
||||
};
|
||||
|
||||
export function MonitorClient(base_url: string, token?: string) {
|
||||
let jwt = token ?? "";
|
||||
const state = { jwt: token ?? "" };
|
||||
|
||||
const auth = async <R extends AuthRequest>(
|
||||
request: R
|
||||
@@ -39,56 +39,49 @@ export function MonitorClient(base_url: string, token?: string) {
|
||||
type: "LoginLocalUser",
|
||||
params: { username: options.username, password: options.password },
|
||||
});
|
||||
jwt = res.jwt;
|
||||
state.jwt = res.jwt;
|
||||
return res.jwt;
|
||||
} else if (options.secret) {
|
||||
const res = await auth({
|
||||
const { jwt } = await auth({
|
||||
type: "LoginWithSecret",
|
||||
params: { username: options.username, secret: options.secret },
|
||||
});
|
||||
jwt = res.jwt;
|
||||
return res.jwt;
|
||||
state.jwt = jwt;
|
||||
return jwt;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const read = async <R extends ReadRequest>(
|
||||
request: R
|
||||
): Promise<ReadResponses[R["type"]]> => {
|
||||
const request = async <Req, Res>(
|
||||
path: string,
|
||||
request: Req
|
||||
): Promise<Res> => {
|
||||
return await axios({
|
||||
method: "post",
|
||||
url: base_url + "/read",
|
||||
url: base_url + path,
|
||||
headers: {
|
||||
Authorization: `Bearer ${jwt}`,
|
||||
Authorization: `Bearer ${state.jwt}`,
|
||||
},
|
||||
data: request,
|
||||
}).then(({ data }) => data);
|
||||
};
|
||||
|
||||
const read = async <R extends ReadRequest>(
|
||||
req: R
|
||||
): Promise<ReadResponses[R["type"]]> => {
|
||||
return await request("/read", req);
|
||||
};
|
||||
|
||||
const write = async <R extends WriteRequest>(
|
||||
request: R
|
||||
req: R
|
||||
): Promise<WriteResponses[R["type"]]> => {
|
||||
return await axios({
|
||||
method: "post",
|
||||
url: base_url + "/write",
|
||||
headers: {
|
||||
Authorization: `Bearer ${jwt}`,
|
||||
},
|
||||
data: request,
|
||||
}).then(({ data }) => data);
|
||||
return await request("/write", req);
|
||||
};
|
||||
|
||||
const execute = async <R extends ExecuteRequest>(
|
||||
request: R
|
||||
req: R
|
||||
): Promise<ExecuteResponses[R["type"]]> => {
|
||||
return await axios({
|
||||
method: "post",
|
||||
url: base_url + "/execute",
|
||||
headers: {
|
||||
Authorization: `Bearer ${jwt}`,
|
||||
},
|
||||
data: request,
|
||||
}).then(({ data }) => data);
|
||||
return await request("/execute", req);
|
||||
};
|
||||
|
||||
return {
|
||||
|
||||
@@ -1,131 +1,136 @@
|
||||
import * as Res from "./types";
|
||||
import * as Types from "./types";
|
||||
|
||||
export type AuthResponses = {
|
||||
GetLoginOptions: Res.GetLoginOptionsResponse;
|
||||
CreateLocalUser: Res.CreateLocalUserResponse;
|
||||
LoginLocalUser: Res.LoginLocalUserResponse;
|
||||
ExchangeForJwt: Res.ExchangeForJwtResponse;
|
||||
LoginWithSecret: Res.LoginWithSecretResponse;
|
||||
GetLoginOptions: Types.GetLoginOptionsResponse;
|
||||
CreateLocalUser: Types.CreateLocalUserResponse;
|
||||
LoginLocalUser: Types.LoginLocalUserResponse;
|
||||
ExchangeForJwt: Types.ExchangeForJwtResponse;
|
||||
LoginWithSecret: Types.LoginWithSecretResponse;
|
||||
};
|
||||
|
||||
export type ReadResponses = {
|
||||
GetVersion: Res.GetVersion;
|
||||
GetUser: Res.GetUser;
|
||||
GetVersion: Types.GetVersionResponse;
|
||||
GetUser: Types.User;
|
||||
|
||||
// ==== SEARCH ====
|
||||
FindResources: Res.FindResources;
|
||||
FindResources: Types.FindResourcesResponse;
|
||||
|
||||
// ==== SERVER ====
|
||||
GetPeripheryVersion: Res.GetPeripheryVersion;
|
||||
GetSystemInformation: Res.GetSystemInformation;
|
||||
GetDockerContainers: Res.GetDockerContainers;
|
||||
GetDockerImages: Res.GetDockerImages;
|
||||
GetDockerNetworks: Res.GetDockerNetworks;
|
||||
GetServer: Res.GetServer;
|
||||
ListServers: Res.ListServers;
|
||||
GetServerActionState: Res.GetServerActionState;
|
||||
GetServer: Types.GetServer;
|
||||
ListServers: Types.ListServers;
|
||||
GetServerStatus: Types.GetServerStatusResponse;
|
||||
GetPeripheryVersion: Types.GetPeripheryVersionResponse;
|
||||
GetSystemInformation: Types.SystemInformation;
|
||||
GetDockerContainers: Types.ContainerSummary[];
|
||||
GetDockerImages: Types.ImageSummary[];
|
||||
GetDockerNetworks: Types.DockerNetwork[];
|
||||
GetServerActionState: Types.ServerActionState;
|
||||
|
||||
// ==== DEPLOYMENT ====
|
||||
GetDeployment: Res.GetDeployment;
|
||||
ListDeployments: Res.ListDeployments;
|
||||
GetDeploymentActionState: Res.GetDeploymentActionState;
|
||||
GetDeployment: Types.Deployment;
|
||||
ListDeployments: Types.DeploymentListItem[];
|
||||
GetDeploymentStatus: Types.GetDeploymentStatusResponse;
|
||||
GetDeploymentActionState: Types.DeploymentActionState;
|
||||
GetDeployedVersion: Types.GetDeployedVersionResponse;
|
||||
GetDeploymentStats: Types.GetDeploymentStatusResponse;
|
||||
GetLog: Types.Log;
|
||||
|
||||
// ==== BUILD ====
|
||||
GetBuild: Res.GetBuild;
|
||||
ListBuilds: Res.ListBuilds;
|
||||
GetBuildActionState: Res.GetBuildActionState;
|
||||
GetBuild: Types.Build;
|
||||
ListBuilds: Types.BuildListItem;
|
||||
GetBuildActionState: Types.BuildActionState;
|
||||
|
||||
// ==== BUILDER ====
|
||||
GetBuilder: Res.GetBuilder;
|
||||
ListBuilders: Res.ListBuilders;
|
||||
GetBuilder: Types.Builder;
|
||||
ListBuilders: Types.Builder[];
|
||||
|
||||
// ==== REPO ====
|
||||
GetRepo: Res.GetRepo;
|
||||
ListRepos: Res.ListRepos;
|
||||
GetRepoActionState: Res.GetRepoActionState;
|
||||
GetRepo: Types.Repo;
|
||||
ListRepos: Types.RepoListItem[];
|
||||
GetRepoActionState: Types.RepoActionState;
|
||||
|
||||
// ==== TAG ====
|
||||
GetTag: Res.GetTag;
|
||||
ListTags: Res.ListTags;
|
||||
GetTag: Types.CustomTag;
|
||||
ListTags: Types.CustomTag[];
|
||||
|
||||
// ==== SERVER STATS ====
|
||||
GetAllSystemStats: Res.GetAllSystemStats;
|
||||
GetBasicSystemStats: Res.GetBasicSystemStats;
|
||||
GetCpuUsage: Res.GetCpuUsage;
|
||||
GetDiskUsage: Res.GetDiskUsage;
|
||||
GetNetworkUsage: Res.GetNetworkUsage;
|
||||
GetSystemProcesses: Res.GetSystemProcesses;
|
||||
GetSystemComponents: Res.GetSystemComponents;
|
||||
GetAllSystemStats: Types.AllSystemStats;
|
||||
GetBasicSystemStats: Types.BasicSystemStats;
|
||||
GetCpuUsage: Types.CpuUsage;
|
||||
GetDiskUsage: Types.DiskUsage;
|
||||
GetNetworkUsage: Types.NetworkUsage;
|
||||
GetSystemProcesses: Types.SystemProcess[];
|
||||
GetSystemComponents: Types.SystemComponent[];
|
||||
};
|
||||
|
||||
export type WriteResponses = {
|
||||
// ==== SECRET ====
|
||||
CreateLoginSecret: Res.CreateLoginSecret;
|
||||
DeleteLoginSecret: Res.DeleteLoginSecret;
|
||||
CreateLoginSecret: Types.CreateLoginSecretResponse;
|
||||
DeleteLoginSecret: Types.DeleteLoginSecretResponse;
|
||||
|
||||
// ==== PERMISSIONS ====
|
||||
UpdateUserPerimissions: Res.UpdateUserPermissions;
|
||||
UpdateUserPermissionsOnTarget: Res.UpdateUserPermissionsOnTarget;
|
||||
UpdateUserPerimissions: Types.Update;
|
||||
UpdateUserPermissionsOnTarget: Types.Update;
|
||||
|
||||
// ==== SERVER ====
|
||||
CreateServer: Res.CreateServer;
|
||||
DeleteServer: Res.DeleteServer;
|
||||
UpdateServer: Res.UpdateServer;
|
||||
RenameServer: Res.RenameServer;
|
||||
CreateServer: Types.Server;
|
||||
DeleteServer: Types.Server;
|
||||
UpdateServer: Types.Server;
|
||||
RenameServer: Types.Update;
|
||||
|
||||
// ==== DEPLOYMENT ====
|
||||
CreateDeployment: Res.CreateDeployment;
|
||||
CopyDeployment: Res.CopyDeployment;
|
||||
DeleteDeployment: Res.DeleteDeployment;
|
||||
UpdateDeployment: Res.UpdateDeployment;
|
||||
RenameDeployment: Res.RenameDeployment;
|
||||
CreateDeployment: Types.Deployment;
|
||||
CopyDeployment: Types.Deployment;
|
||||
DeleteDeployment: Types.Deployment;
|
||||
UpdateDeployment: Types.Deployment;
|
||||
RenameDeployment: Types.Update;
|
||||
|
||||
// ==== BUILD ====
|
||||
CreateBuild: Res.CreateBuild;
|
||||
CopyBuild: Res.CopyBuild;
|
||||
DeleteBuild: Res.DeleteBuild;
|
||||
UpdateBuild: Res.UpdateBuild;
|
||||
CreateBuild: Types.Build;
|
||||
CopyBuild: Types.Build;
|
||||
DeleteBuild: Types.Build;
|
||||
UpdateBuild: Types.Build;
|
||||
|
||||
// ==== BUILDER ====
|
||||
CreateBuilder: Res.CreateBuilder;
|
||||
CopyBuilder: Res.CopyBuilder;
|
||||
DeleteBuilder: Res.DeleteBuilder;
|
||||
UpdateBuilder: Res.UpdateBuilder;
|
||||
CreateBuilder: Types.Builder;
|
||||
CopyBuilder: Types.Builder;
|
||||
DeleteBuilder: Types.Builder;
|
||||
UpdateBuilder: Types.Builder;
|
||||
|
||||
// ==== REPO ====
|
||||
CreateRepo: Res.CreateRepo;
|
||||
CopyRepo: Res.CopyRepo;
|
||||
DeleteRepo: Res.DeleteRepo;
|
||||
UpdateRepo: Res.UpdateRepo;
|
||||
CreateRepo: Types.Repo;
|
||||
CopyRepo: Types.Repo;
|
||||
DeleteRepo: Types.Repo;
|
||||
UpdateRepo: Types.Repo;
|
||||
|
||||
// ==== ALERTER ====
|
||||
CreateAlerter: Res.CreateAlerter;
|
||||
CopyAlerter: Res.CopyAlerter;
|
||||
DeleteAlerter: Res.DeleteAlerter;
|
||||
UpdateAlerter: Res.UpdateAlerter;
|
||||
CreateAlerter: Types.Alerter;
|
||||
CopyAlerter: Types.Alerter;
|
||||
DeleteAlerter: Types.Alerter;
|
||||
UpdateAlerter: Types.Alerter;
|
||||
|
||||
// ==== TAG ====
|
||||
CreateTag: Res.CreateTag;
|
||||
DeleteTag: Res.DeleteTag;
|
||||
UpdateTag: Res.UpdateTag;
|
||||
CreateTag: Types.CustomTag;
|
||||
DeleteTag: Types.CustomTag;
|
||||
UpdateTag: Types.CustomTag;
|
||||
};
|
||||
|
||||
export type ExecuteResponses = {
|
||||
// ==== SERVER ====
|
||||
PruneContainers: Res.PruneDockerContainers;
|
||||
PruneImages: Res.PruneDockerImages;
|
||||
PruneNetworks: Res.PruneDockerNetworks;
|
||||
PruneContainers: Types.Update;
|
||||
PruneImages: Types.Update;
|
||||
PruneNetworks: Types.Update;
|
||||
|
||||
// ==== DEPLOYMENT ====
|
||||
Deploy: Res.Deploy;
|
||||
StartContainer: Res.StartContainer;
|
||||
StopContainer: Res.StopContainer;
|
||||
RemoveContainer: Res.RemoveContainer;
|
||||
Deploy: Types.Update;
|
||||
StartContainer: Types.Update;
|
||||
StopContainer: Types.Update;
|
||||
RemoveContainer: Types.Update;
|
||||
|
||||
// ==== BUILD ====
|
||||
RunBuild: Res.RunBuild;
|
||||
RunBuild: Types.Update;
|
||||
|
||||
// ==== REPO ====
|
||||
CloneRepo: Res.CloneRepo;
|
||||
PullRepo: Res.PullRepo;
|
||||
CloneRepo: Types.Update;
|
||||
PullRepo: Types.Update;
|
||||
};
|
||||
|
||||
@@ -19,8 +19,6 @@ export enum PermissionLevel {
|
||||
|
||||
export type PermissionsMap = Record<string, PermissionLevel>;
|
||||
|
||||
export type _ResourceTargetVariant = ResourceTarget["type"];
|
||||
|
||||
export type I64 = number;
|
||||
|
||||
export type U64 = number;
|
||||
@@ -221,7 +219,7 @@ export enum DockerContainerState {
|
||||
Dead = "dead",
|
||||
}
|
||||
|
||||
export interface BasicContainerInfo {
|
||||
export interface ContainerSummary {
|
||||
name: string;
|
||||
id: string;
|
||||
image: string;
|
||||
@@ -378,15 +376,6 @@ export interface ServerActionState {
|
||||
pruning_images: boolean;
|
||||
}
|
||||
|
||||
export interface SystemInformation {
|
||||
name?: string;
|
||||
os?: string;
|
||||
kernel?: string;
|
||||
core_count?: number;
|
||||
host_name?: string;
|
||||
cpu_brand: string;
|
||||
}
|
||||
|
||||
export interface BasicSystemStats {
|
||||
system_load: number;
|
||||
cpu_perc: number;
|
||||
@@ -431,7 +420,7 @@ export interface SystemNetwork {
|
||||
export interface NetworkUsage {
|
||||
recieved_kb: number;
|
||||
transmitted_kb: number;
|
||||
networks: SystemNetwork[];
|
||||
networks?: SystemNetwork[];
|
||||
}
|
||||
|
||||
export interface SystemProcess {
|
||||
@@ -453,6 +442,26 @@ export interface SystemComponent {
|
||||
critical?: number;
|
||||
}
|
||||
|
||||
export interface SystemStatsRecord {
|
||||
ts: I64;
|
||||
server_id: string;
|
||||
basic: BasicSystemStats;
|
||||
cpu: CpuUsage;
|
||||
disk: DiskUsage;
|
||||
network: NetworkUsage;
|
||||
processes?: SystemProcess[];
|
||||
components?: SystemComponent[];
|
||||
}
|
||||
|
||||
export interface SystemInformation {
|
||||
name?: string;
|
||||
os?: string;
|
||||
kernel?: string;
|
||||
core_count?: number;
|
||||
host_name?: string;
|
||||
cpu_brand: string;
|
||||
}
|
||||
|
||||
export enum Timelength {
|
||||
OneSecond = "1-sec",
|
||||
FiveSeconds = "5-sec",
|
||||
@@ -490,9 +499,9 @@ export interface AllSystemStats {
|
||||
}
|
||||
|
||||
export enum StatsState {
|
||||
Ok = "Ok",
|
||||
Warning = "Warning",
|
||||
Critical = "Critical",
|
||||
Ok = "OK",
|
||||
Warning = "WARNING",
|
||||
Critical = "CRITICAL",
|
||||
}
|
||||
|
||||
export interface ServerHealth {
|
||||
@@ -521,15 +530,6 @@ export interface CustomTag {
|
||||
color?: TagColor;
|
||||
}
|
||||
|
||||
export type ResourceTarget =
|
||||
| { type: "System", id?: undefined }
|
||||
| { type: "Build", id: string }
|
||||
| { type: "Builder", id: string }
|
||||
| { type: "Deployment", id: string }
|
||||
| { type: "Server", id: string }
|
||||
| { type: "Repo", id: string }
|
||||
| { type: "Alerter", id: string };
|
||||
|
||||
export enum Operation {
|
||||
None = "None",
|
||||
CreateServer = "CreateServer",
|
||||
@@ -568,6 +568,15 @@ export enum Operation {
|
||||
AutoPull = "AutoPull",
|
||||
}
|
||||
|
||||
export type ResourceTarget =
|
||||
| { type: "System", id?: undefined }
|
||||
| { type: "Build", id: string }
|
||||
| { type: "Builder", id: string }
|
||||
| { type: "Deployment", id: string }
|
||||
| { type: "Server", id: string }
|
||||
| { type: "Repo", id: string }
|
||||
| { type: "Alerter", id: string };
|
||||
|
||||
export interface Log {
|
||||
stage: string;
|
||||
command: string;
|
||||
@@ -586,14 +595,14 @@ export enum UpdateStatus {
|
||||
|
||||
export interface Update {
|
||||
_id?: MongoId;
|
||||
target: ResourceTarget;
|
||||
operation: Operation;
|
||||
logs: Log[];
|
||||
start_ts: I64;
|
||||
end_ts?: I64;
|
||||
status: UpdateStatus;
|
||||
success: boolean;
|
||||
operator: string;
|
||||
target: ResourceTarget;
|
||||
logs: Log[];
|
||||
end_ts?: I64;
|
||||
status: UpdateStatus;
|
||||
version: Version;
|
||||
}
|
||||
|
||||
@@ -768,8 +777,8 @@ export interface GetDeploymentStatus {
|
||||
}
|
||||
|
||||
export interface GetDeploymentStatusResponse {
|
||||
status?: string;
|
||||
state: DockerContainerState;
|
||||
status?: string;
|
||||
}
|
||||
|
||||
export interface GetLog {
|
||||
@@ -824,7 +833,7 @@ export interface GetRepoActionState {
|
||||
|
||||
export type Tag =
|
||||
| { type: "ResourceType", params: {
|
||||
resource: _ResourceTargetVariant;
|
||||
resource: ResourceTarget["type"];
|
||||
}}
|
||||
| { type: "Server", params: {
|
||||
server_id: string;
|
||||
@@ -1074,6 +1083,9 @@ export interface DeleteLoginSecret {
|
||||
name: string;
|
||||
}
|
||||
|
||||
export interface DeleteLoginSecretResponse {
|
||||
}
|
||||
|
||||
export interface CreateServer {
|
||||
name: string;
|
||||
config: _PartialServerConfig;
|
||||
@@ -1141,17 +1153,22 @@ export type ReadRequest =
|
||||
| { type: "GetVersion", params: GetVersion }
|
||||
| { type: "GetUser", params: GetUser }
|
||||
| { type: "FindResources", params: FindResources }
|
||||
| { type: "GetServer", params: GetServer }
|
||||
| { type: "ListServers", params: ListServers }
|
||||
| { type: "GetServerStatus", params: GetServerStatus }
|
||||
| { type: "GetPeripheryVersion", params: GetPeripheryVersion }
|
||||
| { type: "GetSystemInformation", params: GetSystemInformation }
|
||||
| { type: "GetDockerContainers", params: GetDockerContainers }
|
||||
| { type: "GetDockerImages", params: GetDockerImages }
|
||||
| { type: "GetDockerNetworks", params: GetDockerNetworks }
|
||||
| { type: "GetServer", params: GetServer }
|
||||
| { type: "ListServers", params: ListServers }
|
||||
| { type: "GetServerActionState", params: GetServerActionState }
|
||||
| { type: "GetDeployment", params: GetDeployment }
|
||||
| { type: "ListDeployments", params: ListDeployments }
|
||||
| { type: "GetDeploymentStatus", params: GetDeploymentStatus }
|
||||
| { type: "GetDeploymentActionState", params: GetDeploymentActionState }
|
||||
| { type: "GetDeployedVersion", params: GetDeployedVersion }
|
||||
| { type: "GetDeploymentStats", params: GetDeploymentStats }
|
||||
| { type: "GetLog", params: GetLog }
|
||||
| { type: "GetBuild", params: GetBuild }
|
||||
| { type: "ListBuilds", params: ListBuilds }
|
||||
| { type: "GetBuildActionState", params: GetBuildActionState }
|
||||
@@ -1204,3 +1221,51 @@ export type WriteRequest =
|
||||
| { type: "DeleteTag", params: DeleteTag }
|
||||
| { type: "UpdateTag", params: UpdateTag };
|
||||
|
||||
export type Alert =
|
||||
| { type: "ServerUnreachable", data: {
|
||||
id: string;
|
||||
name: string;
|
||||
region?: string;
|
||||
}}
|
||||
| { type: "ServerCpu", data: {
|
||||
id: string;
|
||||
name: string;
|
||||
region?: string;
|
||||
state: StatsState;
|
||||
percentage: number;
|
||||
top_procs: SystemProcess[];
|
||||
}}
|
||||
| { type: "ServerMem", data: {
|
||||
id: string;
|
||||
name: string;
|
||||
region?: string;
|
||||
state: StatsState;
|
||||
used_gb: number;
|
||||
total_gb: number;
|
||||
top_procs: SystemProcess[];
|
||||
}}
|
||||
| { type: "ServerDisk", data: {
|
||||
id: string;
|
||||
name: string;
|
||||
region?: string;
|
||||
state: StatsState;
|
||||
path: string;
|
||||
used_gb: number;
|
||||
total_gb: number;
|
||||
}}
|
||||
| { type: "ServerTemp", data: {
|
||||
id: string;
|
||||
name: string;
|
||||
region?: string;
|
||||
state: StatsState;
|
||||
temp: number;
|
||||
max: number;
|
||||
}}
|
||||
| { type: "ContainerStateChange", data: {
|
||||
id: string;
|
||||
name: string;
|
||||
server: string;
|
||||
from: DockerContainerState;
|
||||
to: DockerContainerState;
|
||||
}};
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -162,7 +162,7 @@ pub struct Conversion {
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
pub struct BasicContainerInfo {
|
||||
pub struct ContainerSummary {
|
||||
pub name: String,
|
||||
pub id: String,
|
||||
pub image: String,
|
||||
|
||||
@@ -13,15 +13,12 @@ use crate::MongoId;
|
||||
|
||||
use super::update::ResourceTargetVariant;
|
||||
|
||||
#[typeshare(serialized_as = "ResourceTarget["type"]")]
|
||||
type _ResourceTargetVariant = ResourceTargetVariant;
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, EnumVariants)]
|
||||
#[variant_derive(Serialize, Deserialize, Debug, Clone, Copy, Display, EnumString)]
|
||||
#[serde(tag = "type", content = "params")]
|
||||
pub enum Tag {
|
||||
ResourceType { resource: _ResourceTargetVariant }, // filter by resource type
|
||||
ResourceType { resource: ResourceTargetVariant }, // filter by resource type
|
||||
Server { server_id: String }, // filter by server, eg deployments, builds, repos
|
||||
Custom { tag_id: String }, // filter by presence of custom tag on resource
|
||||
}
|
||||
|
||||
@@ -54,8 +54,8 @@ pub struct GetDeploymentStatus {
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
pub struct GetDeploymentStatusResponse {
|
||||
pub status: Option<String>,
|
||||
pub state: DockerContainerState,
|
||||
pub status: Option<String>,
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
@@ -4,7 +4,7 @@ use typeshare::typeshare;
|
||||
|
||||
use crate::{
|
||||
entities::{
|
||||
deployment::BasicContainerInfo,
|
||||
deployment::ContainerSummary,
|
||||
server::{
|
||||
docker_image::ImageSummary,
|
||||
docker_network::DockerNetwork,
|
||||
@@ -178,7 +178,7 @@ pub struct GetDockerImages {
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Request)]
|
||||
#[response(Vec<BasicContainerInfo>)]
|
||||
#[response(Vec<ContainerSummary>)]
|
||||
pub struct GetDockerContainers {
|
||||
pub server_id: String,
|
||||
}
|
||||
|
||||
@@ -24,7 +24,11 @@ pub struct CreateLoginSecretResponse {
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Request)]
|
||||
#[response(())]
|
||||
#[response(DeleteLoginSecretResponse)]
|
||||
pub struct DeleteLoginSecret {
|
||||
pub name: String,
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
pub struct DeleteLoginSecretResponse {}
|
||||
|
||||
Reference in New Issue
Block a user