work on ts client

This commit is contained in:
mbecker20
2023-07-15 04:14:46 -04:00
parent 14ec8b2bcb
commit b8c9731081
9 changed files with 266 additions and 57 deletions

View File

@@ -54,6 +54,7 @@ pub fn make_update(
}
impl State {
// USER
pub async fn get_user(&self, user_id: &str) -> anyhow::Result<User> {

View File

@@ -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 {

View 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")
}
}

View File

@@ -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,
};
}

View File

@@ -8,7 +8,7 @@ export type AuthResponses = {
LoginWithSecret: Res.LoginWithSecretResponse;
};
export type ApiResponses = {
export type ReadResponses = {
// ==== SECRET ====
CreateLoginSecret: Res.CreateLoginSecretResponse;
DeleteLoginSecret: undefined;

View File

@@ -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 };

View File

@@ -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
}

View File

@@ -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;

View 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>,
}