From b8c9731081f526aa6322795c66a8578b40903490 Mon Sep 17 00:00:00 2001 From: mbecker20 Date: Sat, 15 Jul 2023 04:14:46 -0400 Subject: [PATCH] work on ts client --- bin/core/src/helpers.rs | 1 + bin/core/src/requests/read/mod.rs | 36 +++--- bin/core/src/requests/read/tag.rs | 31 +++++ client/ts/src/lib.ts | 30 ++--- client/ts/src/responses.ts | 2 +- client/ts/src/types.ts | 193 +++++++++++++++++++++++++---- lib/types/src/entities/tag.rs | 5 +- lib/types/src/requests/read/mod.rs | 2 + lib/types/src/requests/read/tag.rs | 23 ++++ 9 files changed, 266 insertions(+), 57 deletions(-) create mode 100644 bin/core/src/requests/read/tag.rs create mode 100644 lib/types/src/requests/read/tag.rs diff --git a/bin/core/src/helpers.rs b/bin/core/src/helpers.rs index a9031c830..1793e5c3f 100644 --- a/bin/core/src/helpers.rs +++ b/bin/core/src/helpers.rs @@ -54,6 +54,7 @@ pub fn make_update( } impl State { + // USER pub async fn get_user(&self, user_id: &str) -> anyhow::Result { diff --git a/bin/core/src/requests/read/mod.rs b/bin/core/src/requests/read/mod.rs index 66865eae3..9a840acec 100644 --- a/bin/core/src/requests/read/mod.rs +++ b/bin/core/src/requests/read/mod.rs @@ -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 { diff --git a/bin/core/src/requests/read/tag.rs b/bin/core/src/requests/read/tag.rs new file mode 100644 index 000000000..d757fb15a --- /dev/null +++ b/bin/core/src/requests/read/tag.rs @@ -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 for State { + async fn resolve(&self, GetTag { id }: GetTag, _: RequestUser) -> anyhow::Result { + self.get_tag(&id).await + } +} + +#[async_trait] +impl Resolve for State { + async fn resolve( + &self, + ListTags { query }: ListTags, + _: RequestUser, + ) -> anyhow::Result> { + self.db + .tags + .get_some(query, None) + .await + .context("failed to get tags from db") + } +} diff --git a/client/ts/src/lib.ts b/client/ts/src/lib.ts index bd44b8b9f..4d1cff55c 100644 --- a/client/ts/src/lib.ts +++ b/client/ts/src/lib.ts @@ -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 ( - request: R - ): Promise => { - return await axios({ - method: "post", - url: base_url + "/api", - headers: { - Authorization: `Bearer ${jwt}` - }, - data: request, - }).then(({ data }) => data); - }; + // const read = async ( + // request: R + // ): Promise => { + // return await axios({ + // method: "post", + // url: base_url + "/read", + // headers: { + // Authorization: `Bearer ${jwt}` + // }, + // data: request, + // }).then(({ data }) => data); + // }; return { auth, login, - api, + // read, }; } diff --git a/client/ts/src/responses.ts b/client/ts/src/responses.ts index 5f5fd89d3..16644e9f3 100644 --- a/client/ts/src/responses.ts +++ b/client/ts/src/responses.ts @@ -8,7 +8,7 @@ export type AuthResponses = { LoginWithSecret: Res.LoginWithSecretResponse; }; -export type ApiResponses = { +export type ReadResponses = { // ==== SECRET ==== CreateLoginSecret: Res.CreateLoginSecretResponse; DeleteLoginSecret: undefined; diff --git a/client/ts/src/types.ts b/client/ts/src/types.ts index 12d7fc609..be0c01569 100644 --- a/client/ts/src/types.ts +++ b/client/ts/src/types.ts @@ -2,9 +2,13 @@ Generated by typeshare 1.6.0 */ +export type _PartialCustomAlerterConfig = Partial; + +export type _PartialSlackAlerterConfig = Partial; + export type _PartialBuilderConfig = Partial; -export type _PartialAwsBuilder = Partial; +export type _PartialAwsBuilderConfig = Partial; export enum PermissionLevel { None = "none", @@ -15,6 +19,8 @@ export enum PermissionLevel { export type PermissionsMap = Record; +export type _ResourceTargetVariant = ResourceTarget["type"]; + export type I64 = number; export type U64 = number; @@ -35,6 +41,31 @@ export type _PartialRepoConfig = Partial; export type _PartialServerConfig = Partial; +export type _PartialCustomTag = Partial; + +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; } +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 }; diff --git a/lib/types/src/entities/tag.rs b/lib/types/src/entities/tag.rs index 80c0e8332..600ff1179 100644 --- a/lib/types/src/entities/tag.rs +++ b/lib/types/src/entities/tag.rs @@ -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 } diff --git a/lib/types/src/requests/read/mod.rs b/lib/types/src/requests/read/mod.rs index 88a8810c4..e217f104e 100644 --- a/lib/types/src/requests/read/mod.rs +++ b/lib/types/src/requests/read/mod.rs @@ -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; diff --git a/lib/types/src/requests/read/tag.rs b/lib/types/src/requests/read/tag.rs new file mode 100644 index 000000000..c8f2f50da --- /dev/null +++ b/lib/types/src/requests/read/tag.rs @@ -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)] +pub struct ListTags { + pub query: Option, +}