mirror of
https://github.com/moghtech/komodo.git
synced 2026-03-11 17:44:19 -05:00
work on ts client
This commit is contained in:
@@ -54,6 +54,7 @@ pub fn make_update(
|
||||
}
|
||||
|
||||
impl State {
|
||||
|
||||
// USER
|
||||
|
||||
pub async fn get_user(&self, user_id: &str) -> anyhow::Result<User> {
|
||||
|
||||
@@ -22,6 +22,7 @@ mod deployment;
|
||||
mod repo;
|
||||
mod search;
|
||||
mod server;
|
||||
mod tag;
|
||||
mod user;
|
||||
|
||||
#[typeshare]
|
||||
@@ -46,21 +47,6 @@ enum ReadRequest {
|
||||
GetServer(GetServer),
|
||||
ListServers(ListServers),
|
||||
GetServerActionState(GetServerActionState),
|
||||
// STATS
|
||||
#[to_string_resolver]
|
||||
GetAllSystemStats(GetAllSystemStats),
|
||||
#[to_string_resolver]
|
||||
GetBasicSystemStats(GetBasicSystemStats),
|
||||
#[to_string_resolver]
|
||||
GetCpuUsage(GetCpuUsage),
|
||||
#[to_string_resolver]
|
||||
GetDiskUsage(GetDiskUsage),
|
||||
#[to_string_resolver]
|
||||
GetNetworkUsage(GetNetworkUsage),
|
||||
#[to_string_resolver]
|
||||
GetSystemProcesses(GetSystemProcesses),
|
||||
#[to_string_resolver]
|
||||
GetSystemComponents(GetSystemComponents),
|
||||
|
||||
// ==== DEPLOYMENT ====
|
||||
GetDeployment(GetDeployment),
|
||||
@@ -80,6 +66,26 @@ enum ReadRequest {
|
||||
GetRepo(GetRepo),
|
||||
ListRepos(ListRepos),
|
||||
GetRepoActionState(GetRepoActionState),
|
||||
|
||||
// ==== TAG ====
|
||||
GetTag(GetTag),
|
||||
ListTags(ListTags),
|
||||
|
||||
// ==== SERVER STATS ====
|
||||
#[to_string_resolver]
|
||||
GetAllSystemStats(GetAllSystemStats),
|
||||
#[to_string_resolver]
|
||||
GetBasicSystemStats(GetBasicSystemStats),
|
||||
#[to_string_resolver]
|
||||
GetCpuUsage(GetCpuUsage),
|
||||
#[to_string_resolver]
|
||||
GetDiskUsage(GetDiskUsage),
|
||||
#[to_string_resolver]
|
||||
GetNetworkUsage(GetNetworkUsage),
|
||||
#[to_string_resolver]
|
||||
GetSystemProcesses(GetSystemProcesses),
|
||||
#[to_string_resolver]
|
||||
GetSystemComponents(GetSystemComponents),
|
||||
}
|
||||
|
||||
pub fn router() -> Router {
|
||||
|
||||
31
bin/core/src/requests/read/tag.rs
Normal file
31
bin/core/src/requests/read/tag.rs
Normal file
@@ -0,0 +1,31 @@
|
||||
use anyhow::Context;
|
||||
use async_trait::async_trait;
|
||||
use monitor_types::{
|
||||
entities::tag::CustomTag,
|
||||
requests::read::{GetTag, ListTags},
|
||||
};
|
||||
use resolver_api::Resolve;
|
||||
|
||||
use crate::{auth::RequestUser, state::State};
|
||||
|
||||
#[async_trait]
|
||||
impl Resolve<GetTag, RequestUser> for State {
|
||||
async fn resolve(&self, GetTag { id }: GetTag, _: RequestUser) -> anyhow::Result<CustomTag> {
|
||||
self.get_tag(&id).await
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl Resolve<ListTags, RequestUser> for State {
|
||||
async fn resolve(
|
||||
&self,
|
||||
ListTags { query }: ListTags,
|
||||
_: RequestUser,
|
||||
) -> anyhow::Result<Vec<CustomTag>> {
|
||||
self.db
|
||||
.tags
|
||||
.get_some(query, None)
|
||||
.await
|
||||
.context("failed to get tags from db")
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import axios from "axios";
|
||||
import { ApiResponses, AuthResponses } from "./responses";
|
||||
import { ApiRequest, AuthRequest } from "./types";
|
||||
import { ReadResponses, AuthResponses } from "./responses";
|
||||
import { ReadRequest, WriteRequest, ExecuteRequest, AuthRequest } from "./types";
|
||||
|
||||
export type LoginOptions = {
|
||||
jwt?: string;
|
||||
@@ -40,22 +40,22 @@ export async function MonitorClient(base_url: string) {
|
||||
}
|
||||
}
|
||||
|
||||
const api = async <R extends ApiRequest>(
|
||||
request: R
|
||||
): Promise<ApiResponses[R["type"]]> => {
|
||||
return await axios({
|
||||
method: "post",
|
||||
url: base_url + "/api",
|
||||
headers: {
|
||||
Authorization: `Bearer ${jwt}`
|
||||
},
|
||||
data: request,
|
||||
}).then(({ data }) => data);
|
||||
};
|
||||
// const read = async <R extends ReadRequest>(
|
||||
// request: R
|
||||
// ): Promise<ReadResponses[R["type"]]> => {
|
||||
// return await axios({
|
||||
// method: "post",
|
||||
// url: base_url + "/read",
|
||||
// headers: {
|
||||
// Authorization: `Bearer ${jwt}`
|
||||
// },
|
||||
// data: request,
|
||||
// }).then(({ data }) => data);
|
||||
// };
|
||||
|
||||
return {
|
||||
auth,
|
||||
login,
|
||||
api,
|
||||
// read,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ export type AuthResponses = {
|
||||
LoginWithSecret: Res.LoginWithSecretResponse;
|
||||
};
|
||||
|
||||
export type ApiResponses = {
|
||||
export type ReadResponses = {
|
||||
// ==== SECRET ====
|
||||
CreateLoginSecret: Res.CreateLoginSecretResponse;
|
||||
DeleteLoginSecret: undefined;
|
||||
|
||||
@@ -2,9 +2,13 @@
|
||||
Generated by typeshare 1.6.0
|
||||
*/
|
||||
|
||||
export type _PartialCustomAlerterConfig = Partial<CustomAlerterConfig>;
|
||||
|
||||
export type _PartialSlackAlerterConfig = Partial<SlackAlerterConfig>;
|
||||
|
||||
export type _PartialBuilderConfig = Partial<BuilderConfig>;
|
||||
|
||||
export type _PartialAwsBuilder = Partial<AwsBuilder>;
|
||||
export type _PartialAwsBuilderConfig = Partial<AwsBuilderConfig>;
|
||||
|
||||
export enum PermissionLevel {
|
||||
None = "none",
|
||||
@@ -15,6 +19,8 @@ export enum PermissionLevel {
|
||||
|
||||
export type PermissionsMap = Record<string, PermissionLevel>;
|
||||
|
||||
export type _ResourceTargetVariant = ResourceTarget["type"];
|
||||
|
||||
export type I64 = number;
|
||||
|
||||
export type U64 = number;
|
||||
@@ -35,6 +41,31 @@ export type _PartialRepoConfig = Partial<RepoConfig>;
|
||||
|
||||
export type _PartialServerConfig = Partial<ServerConfig>;
|
||||
|
||||
export type _PartialCustomTag = Partial<CustomTag>;
|
||||
|
||||
export type AlerterConfig =
|
||||
| { type: "Custom", params: CustomAlerterConfig }
|
||||
| { type: "Slack", params: SlackAlerterConfig };
|
||||
|
||||
export interface Alerter {
|
||||
_id?: MongoId;
|
||||
name: string;
|
||||
description?: string;
|
||||
permissions?: PermissionsMap;
|
||||
updated_at?: I64;
|
||||
tags?: string[];
|
||||
is_default?: boolean;
|
||||
config: AlerterConfig;
|
||||
}
|
||||
|
||||
export interface CustomAlerterConfig {
|
||||
url: string;
|
||||
}
|
||||
|
||||
export interface SlackAlerterConfig {
|
||||
url: string;
|
||||
}
|
||||
|
||||
export type BuildBuilderConfig =
|
||||
| { type: "Server", params: {
|
||||
server_id: string;
|
||||
@@ -81,7 +112,6 @@ export interface Build {
|
||||
name: string;
|
||||
description?: string;
|
||||
permissions?: PermissionsMap;
|
||||
created_at?: I64;
|
||||
updated_at?: I64;
|
||||
last_built_at?: I64;
|
||||
tags?: string[];
|
||||
@@ -94,19 +124,19 @@ export interface BuildActionState {
|
||||
}
|
||||
|
||||
export type BuilderConfig =
|
||||
| { type: "AwsBuilder", params: AwsBuilder };
|
||||
| { type: "Aws", params: AwsBuilderConfig };
|
||||
|
||||
export interface Builder {
|
||||
_id?: MongoId;
|
||||
name: string;
|
||||
description?: string;
|
||||
permissions?: PermissionsMap;
|
||||
created_at?: I64;
|
||||
updated_at?: I64;
|
||||
tags?: string[];
|
||||
config: BuilderConfig;
|
||||
}
|
||||
|
||||
export interface AwsBuilder {
|
||||
export interface AwsBuilderConfig {
|
||||
region: string;
|
||||
instance_type: string;
|
||||
volume_gb: number;
|
||||
@@ -174,7 +204,6 @@ export interface Deployment {
|
||||
name: string;
|
||||
description?: string;
|
||||
permissions?: PermissionsMap;
|
||||
created_at?: I64;
|
||||
updated_at?: I64;
|
||||
tags?: string[];
|
||||
config: DeploymentConfig;
|
||||
@@ -243,7 +272,6 @@ export interface Repo {
|
||||
name: string;
|
||||
description?: string;
|
||||
permissions?: PermissionsMap;
|
||||
created_at?: I64;
|
||||
updated_at?: I64;
|
||||
last_pulled_at?: I64;
|
||||
tags?: string[];
|
||||
@@ -339,7 +367,6 @@ export interface Server {
|
||||
name: string;
|
||||
description?: string;
|
||||
permissions?: PermissionsMap;
|
||||
created_at?: I64;
|
||||
updated_at?: I64;
|
||||
tags?: string[];
|
||||
config: ServerConfig;
|
||||
@@ -476,13 +503,32 @@ export interface ServerHealth {
|
||||
temps: Record<string, StatsState>;
|
||||
}
|
||||
|
||||
export enum TagColor {
|
||||
Red = "Red",
|
||||
Green = "Green",
|
||||
Blue = "Blue",
|
||||
Yellow = "Yellow",
|
||||
Purple = "Purple",
|
||||
Magenta = "Magenta",
|
||||
Cyan = "Cyan",
|
||||
}
|
||||
|
||||
export interface CustomTag {
|
||||
_id?: MongoId;
|
||||
name: string;
|
||||
owner?: string;
|
||||
category?: string;
|
||||
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: "Repo", id: string }
|
||||
| { type: "Alerter", id: string };
|
||||
|
||||
export enum Operation {
|
||||
None = "None",
|
||||
@@ -513,6 +559,9 @@ export enum Operation {
|
||||
DeleteRepo = "DeleteRepo",
|
||||
CloneRepo = "CloneRepo",
|
||||
PullRepo = "PullRepo",
|
||||
CreateAlerter = "CreateAlerter",
|
||||
UpdateAlerter = "UpdateAlerter",
|
||||
DeleteAlerter = "DeleteAlerter",
|
||||
UpdateUserPermissions = "UpdateUserPermissions",
|
||||
UpdateUserPermissionsOnTarget = "UpdateUserPermissionsOnTarget",
|
||||
AutoBuild = "AutoBuild",
|
||||
@@ -568,7 +617,6 @@ export interface User {
|
||||
github_id?: string;
|
||||
google_id?: string;
|
||||
last_update_view?: I64;
|
||||
created_at?: I64;
|
||||
updated_at?: I64;
|
||||
}
|
||||
|
||||
@@ -620,6 +668,13 @@ export interface RunBuild {
|
||||
build_id: string;
|
||||
}
|
||||
|
||||
export interface CancelBuild {
|
||||
build_id: string;
|
||||
}
|
||||
|
||||
export interface CancelBuildResponse {
|
||||
}
|
||||
|
||||
export interface Deploy {
|
||||
deployment_id: string;
|
||||
stop_signal?: TerminationSignal;
|
||||
@@ -745,6 +800,9 @@ export interface GetVersionResponse {
|
||||
version: string;
|
||||
}
|
||||
|
||||
export interface GetUser {
|
||||
}
|
||||
|
||||
export interface GetRepo {
|
||||
id: string;
|
||||
}
|
||||
@@ -764,12 +822,19 @@ export interface GetRepoActionState {
|
||||
id: string;
|
||||
}
|
||||
|
||||
export interface GetServer {
|
||||
id: string;
|
||||
}
|
||||
export type Tag =
|
||||
| { type: "ResourceType", params: {
|
||||
resource: _ResourceTargetVariant;
|
||||
}}
|
||||
| { type: "Server", params: {
|
||||
server_id: string;
|
||||
}}
|
||||
| { type: "Custom", params: {
|
||||
tag_id: string;
|
||||
}};
|
||||
|
||||
export interface ListServers {
|
||||
query?: MongoDocument;
|
||||
export interface FindResources {
|
||||
tags: Tag[];
|
||||
}
|
||||
|
||||
export enum ServerStatus {
|
||||
@@ -782,6 +847,22 @@ export interface ServerListItem {
|
||||
id: string;
|
||||
name: string;
|
||||
status: ServerStatus;
|
||||
tags: string[];
|
||||
}
|
||||
|
||||
export interface FindResourcesResponse {
|
||||
servers: ServerListItem[];
|
||||
deployments: DeploymentListItem[];
|
||||
builds: BuildListItem[];
|
||||
repos: RepoListItem[];
|
||||
}
|
||||
|
||||
export interface GetServer {
|
||||
id: string;
|
||||
}
|
||||
|
||||
export interface ListServers {
|
||||
query?: MongoDocument;
|
||||
}
|
||||
|
||||
export interface GetServerStatus {
|
||||
@@ -848,10 +929,41 @@ export interface GetDockerContainers {
|
||||
server_id: string;
|
||||
}
|
||||
|
||||
export interface GetTag {
|
||||
id: string;
|
||||
}
|
||||
|
||||
export interface ListTags {
|
||||
query?: MongoDocument;
|
||||
}
|
||||
|
||||
export interface ListUpdates {
|
||||
query?: MongoDocument;
|
||||
}
|
||||
|
||||
export type PartialAlerterConfig =
|
||||
| { type: "Custom", params: _PartialCustomAlerterConfig }
|
||||
| { type: "Slack", params: _PartialSlackAlerterConfig };
|
||||
|
||||
export interface CreateAlerter {
|
||||
name: string;
|
||||
config: PartialAlerterConfig;
|
||||
}
|
||||
|
||||
export interface CopyAlerter {
|
||||
name: string;
|
||||
id: string;
|
||||
}
|
||||
|
||||
export interface DeleteAlerter {
|
||||
id: string;
|
||||
}
|
||||
|
||||
export interface UpdateAlerter {
|
||||
id: string;
|
||||
config: PartialAlerterConfig;
|
||||
}
|
||||
|
||||
export interface CreateBuild {
|
||||
name: string;
|
||||
config: _PartialBuildConfig;
|
||||
@@ -872,7 +984,7 @@ export interface UpdateBuild {
|
||||
}
|
||||
|
||||
export type PartialBuilderConfig =
|
||||
| { type: "AwsBuilder", params: _PartialAwsBuilder };
|
||||
| { type: "Aws", params: _PartialAwsBuilderConfig };
|
||||
|
||||
export interface CreateBuilder {
|
||||
name: string;
|
||||
@@ -981,6 +1093,21 @@ export interface RenameServer {
|
||||
name: string;
|
||||
}
|
||||
|
||||
export interface CreateTag {
|
||||
name: string;
|
||||
category?: string;
|
||||
color?: TagColor;
|
||||
}
|
||||
|
||||
export interface DeleteTag {
|
||||
id: string;
|
||||
}
|
||||
|
||||
export interface UpdateTag {
|
||||
id: string;
|
||||
config: _PartialCustomTag;
|
||||
}
|
||||
|
||||
export interface AddTags {
|
||||
target: ResourceTarget;
|
||||
tags: string[];
|
||||
@@ -1011,6 +1138,9 @@ export type ExecuteRequest =
|
||||
| { type: "PullRepo", params: PullRepo };
|
||||
|
||||
export type ReadRequest =
|
||||
| { type: "GetVersion", params: GetVersion }
|
||||
| { type: "GetUser", params: GetUser }
|
||||
| { type: "FindResources", params: FindResources }
|
||||
| { type: "GetPeripheryVersion", params: GetPeripheryVersion }
|
||||
| { type: "GetSystemInformation", params: GetSystemInformation }
|
||||
| { type: "GetDockerContainers", params: GetDockerContainers }
|
||||
@@ -1019,13 +1149,6 @@ export type ReadRequest =
|
||||
| { type: "GetServer", params: GetServer }
|
||||
| { type: "ListServers", params: ListServers }
|
||||
| { type: "GetServerActionState", params: GetServerActionState }
|
||||
| { type: "GetAllSystemStats", params: GetAllSystemStats }
|
||||
| { type: "GetBasicSystemStats", params: GetBasicSystemStats }
|
||||
| { type: "GetCpuUsage", params: GetCpuUsage }
|
||||
| { type: "GetDiskUsage", params: GetDiskUsage }
|
||||
| { type: "GetNetworkUsage", params: GetNetworkUsage }
|
||||
| { type: "GetSystemProcesses", params: GetSystemProcesses }
|
||||
| { type: "GetSystemComponents", params: GetSystemComponents }
|
||||
| { type: "GetDeployment", params: GetDeployment }
|
||||
| { type: "ListDeployments", params: ListDeployments }
|
||||
| { type: "GetDeploymentActionState", params: GetDeploymentActionState }
|
||||
@@ -1036,7 +1159,16 @@ export type ReadRequest =
|
||||
| { type: "ListBuilders", params: ListBuilders }
|
||||
| { type: "GetRepo", params: GetRepo }
|
||||
| { type: "ListRepos", params: ListRepos }
|
||||
| { type: "GetRepoActionState", params: GetRepoActionState };
|
||||
| { type: "GetRepoActionState", params: GetRepoActionState }
|
||||
| { type: "GetTag", params: GetTag }
|
||||
| { type: "ListTags", params: ListTags }
|
||||
| { type: "GetAllSystemStats", params: GetAllSystemStats }
|
||||
| { type: "GetBasicSystemStats", params: GetBasicSystemStats }
|
||||
| { type: "GetCpuUsage", params: GetCpuUsage }
|
||||
| { type: "GetDiskUsage", params: GetDiskUsage }
|
||||
| { type: "GetNetworkUsage", params: GetNetworkUsage }
|
||||
| { type: "GetSystemProcesses", params: GetSystemProcesses }
|
||||
| { type: "GetSystemComponents", params: GetSystemComponents };
|
||||
|
||||
export type WriteRequest =
|
||||
| { type: "CreateLoginSecret", params: CreateLoginSecret }
|
||||
@@ -1048,16 +1180,27 @@ export type WriteRequest =
|
||||
| { type: "UpdateServer", params: UpdateServer }
|
||||
| { type: "RenameServer", params: RenameServer }
|
||||
| { type: "CreateDeployment", params: CreateDeployment }
|
||||
| { type: "CopyDeployment", params: CopyDeployment }
|
||||
| { type: "DeleteDeployment", params: DeleteDeployment }
|
||||
| { type: "UpdateDeployment", params: UpdateDeployment }
|
||||
| { type: "RenameDeployment", params: RenameDeployment }
|
||||
| { type: "CreateBuild", params: CreateBuild }
|
||||
| { type: "CopyBuild", params: CopyBuild }
|
||||
| { type: "DeleteBuild", params: DeleteBuild }
|
||||
| { type: "UpdateBuild", params: UpdateBuild }
|
||||
| { type: "CreateBuilder", params: CreateBuilder }
|
||||
| { type: "CopyBuilder", params: CopyBuilder }
|
||||
| { type: "DeleteBuilder", params: DeleteBuilder }
|
||||
| { type: "UpdateBuilder", params: UpdateBuilder }
|
||||
| { type: "CreateRepo", params: CreateRepo }
|
||||
| { type: "CopyRepo", params: CopyRepo }
|
||||
| { type: "DeleteRepo", params: DeleteRepo }
|
||||
| { type: "UpdateRepo", params: UpdateRepo }
|
||||
| { type: "DeleteRepo", params: DeleteRepo };
|
||||
| { type: "CreateAlerter", params: CreateAlerter }
|
||||
| { type: "CopyAlerter", params: CopyAlerter }
|
||||
| { type: "DeleteAlerter", params: DeleteAlerter }
|
||||
| { type: "UpdateAlerter", params: UpdateAlerter }
|
||||
| { type: "CreateTag", params: CreateTag }
|
||||
| { type: "DeleteTag", params: DeleteTag }
|
||||
| { type: "UpdateTag", params: UpdateTag };
|
||||
|
||||
|
||||
@@ -13,12 +13,15 @@ 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
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ mod deployment;
|
||||
mod repo;
|
||||
mod search;
|
||||
mod server;
|
||||
mod tag;
|
||||
mod update;
|
||||
|
||||
pub use build::*;
|
||||
@@ -16,6 +17,7 @@ pub use deployment::*;
|
||||
pub use repo::*;
|
||||
pub use search::*;
|
||||
pub use server::*;
|
||||
pub use tag::*;
|
||||
pub use update::*;
|
||||
|
||||
use crate::entities::user::User;
|
||||
|
||||
23
lib/types/src/requests/read/tag.rs
Normal file
23
lib/types/src/requests/read/tag.rs
Normal file
@@ -0,0 +1,23 @@
|
||||
use resolver_api::derive::Request;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use typeshare::typeshare;
|
||||
|
||||
use crate::{entities::tag::CustomTag, MongoDocument};
|
||||
|
||||
//
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Request)]
|
||||
#[response(CustomTag)]
|
||||
pub struct GetTag {
|
||||
pub id: String,
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Request)]
|
||||
#[response(Vec<CustomTag>)]
|
||||
pub struct ListTags {
|
||||
pub query: Option<MongoDocument>,
|
||||
}
|
||||
Reference in New Issue
Block a user