alerter api ts. fmt

This commit is contained in:
mbecker20
2023-07-27 03:03:03 -04:00
parent 70d11c3f5d
commit 20a450d1d4
28 changed files with 136 additions and 99 deletions

View File

@@ -55,4 +55,4 @@ impl<T: Clone + Default + Busy> Cache<T> {
None => false,
}
}
}
}

View File

@@ -13,4 +13,4 @@ impl<T: Clone> BroadcastChannel<T> {
receiver,
}
}
}
}

View File

@@ -1,6 +1,13 @@
use monitor_types::entities::{
alerter::Alerter, build::Build, builder::Builder, deployment::Deployment, repo::Repo,
server::{Server, stats::SystemStatsRecord}, tag::CustomTag, update::Update, user::User,
alerter::Alerter,
build::Build,
builder::Builder,
deployment::Deployment,
repo::Repo,
server::{stats::SystemStatsRecord, Server},
tag::CustomTag,
update::Update,
user::User,
};
use mungos::{Collection, Indexed, Mungos};

View File

@@ -2,7 +2,10 @@ use anyhow::{anyhow, Context};
use axum::{extract::Path, http::HeaderMap, routing::post, Router};
use hex::ToHex;
use hmac::{Hmac, Mac};
use monitor_types::{requests::execute, entities::{build::Build, repo::Repo}};
use monitor_types::{
entities::{build::Build, repo::Repo},
requests::execute,
};
use resolver_api::Resolve;
use serde::Deserialize;
use sha2::Sha256;
@@ -10,7 +13,8 @@ use sha2::Sha256;
use crate::{
auth::InnerRequestUser,
helpers::random_duration,
state::{State, StateExtension}, resource::Resource,
resource::Resource,
state::{State, StateExtension},
};
type HmacSha256 = Hmac<Sha256>;

View File

@@ -12,9 +12,9 @@ mod helpers;
mod listener;
mod monitor;
mod requests;
mod resource;
mod state;
mod ws;
mod resource;
async fn app() -> anyhow::Result<()> {
let state = state::State::load().await?;

View File

@@ -2,8 +2,10 @@ use anyhow::anyhow;
use async_trait::async_trait;
use monitor_types::{
entities::{
repo::Repo,
server::Server,
update::{Log, ResourceTarget, Update, UpdateStatus},
Operation, PermissionLevel, repo::Repo, server::Server,
Operation, PermissionLevel,
},
monitor_timestamp, optional_string,
requests::execute::*,
@@ -12,7 +14,7 @@ use mungos::mongodb::bson::doc;
use periphery_client::requests;
use resolver_api::Resolve;
use crate::{auth::RequestUser, state::State, resource::Resource};
use crate::{auth::RequestUser, resource::Resource, state::State};
#[async_trait]
impl Resolve<CloneRepo, RequestUser> for State {

View File

@@ -2,8 +2,9 @@ use anyhow::{anyhow, Context};
use async_trait::async_trait;
use monitor_types::{
entities::{
server::Server,
update::{Log, ResourceTarget, Update, UpdateStatus},
Operation, PermissionLevel, server::Server,
Operation, PermissionLevel,
},
monitor_timestamp,
requests::execute::*,
@@ -11,7 +12,7 @@ use monitor_types::{
use periphery_client::requests;
use resolver_api::Resolve;
use crate::{auth::RequestUser, state::State, resource::Resource};
use crate::{auth::RequestUser, resource::Resource, state::State};
#[async_trait]
impl Resolve<PruneDockerContainers, RequestUser> for State {

View File

@@ -28,22 +28,7 @@ impl Resolve<ListAlerters, RequestUser> for State {
ListAlerters { query }: ListAlerters,
user: RequestUser,
) -> anyhow::Result<Vec<Alerter>> {
let mut query = query.unwrap_or_default();
if !user.is_admin {
query.insert(
format!("permissions.{}", user.id),
doc! { "$in": ["read", "execute", "update"] },
);
}
let alerters = self
.db
.alerters
.get_some(query, None)
.await
.context("failed to pull alerters from mongo")?;
Ok(alerters)
self.list_resources_for_user(&user, query).await
}
}

View File

@@ -51,7 +51,8 @@ impl Resolve<GetBuildActionState, RequestUser> for State {
GetBuildActionState { id }: GetBuildActionState,
user: RequestUser,
) -> anyhow::Result<BuildActionState> {
let _: Build = self.get_resource_check_permissions(&id, &user, PermissionLevel::Read)
let _: Build = self
.get_resource_check_permissions(&id, &user, PermissionLevel::Read)
.await?;
let action_state = self.action_states.build.get(&id).await.unwrap_or_default();
Ok(action_state)

View File

@@ -16,6 +16,7 @@ use crate::{
state::{State, StateExtension},
};
mod alerter;
mod build;
mod builder;
mod deployment;
@@ -25,7 +26,6 @@ mod server;
mod tag;
mod update;
mod user;
mod alerter;
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, Resolver)]

View File

@@ -50,7 +50,8 @@ impl Resolve<GetRepoActionState, RequestUser> for State {
GetRepoActionState { id }: GetRepoActionState,
user: RequestUser,
) -> anyhow::Result<RepoActionState> {
let _: Repo = self.get_resource_check_permissions(&id, &user, PermissionLevel::Read)
let _: Repo = self
.get_resource_check_permissions(&id, &user, PermissionLevel::Read)
.await?;
let action_state = self.action_states.repo.get(&id).await.unwrap_or_default();
Ok(action_state)

View File

@@ -1,9 +1,12 @@
use async_trait::async_trait;
use monitor_types::{entities::{update::Update, build::Build}, requests::read::ListUpdates};
use monitor_types::{
entities::{build::Build, update::Update},
requests::read::ListUpdates,
};
use mungos::mongodb::{bson::doc, options::FindOptions};
use resolver_api::Resolve;
use crate::{auth::RequestUser, state::State, resource::Resource};
use crate::{auth::RequestUser, resource::Resource, state::State};
#[async_trait]
impl Resolve<ListUpdates, RequestUser> for State {
@@ -14,16 +17,17 @@ impl Resolve<ListUpdates, RequestUser> for State {
) -> anyhow::Result<Vec<Update>> {
if user.is_admin {
let updates = self
.db
.updates
.get_some(
query,
FindOptions::builder().sort(doc! { "ts": -1 }).build(),
)
.await?;
Ok(updates)
.db
.updates
.get_some(
query,
FindOptions::builder().sort(doc! { "ts": -1 }).build(),
)
.await?;
Ok(updates)
} else {
let build_ids = <State as Resource<Build>>::get_resource_ids_for_non_admin(self, &user.id).await?;
let build_ids =
<State as Resource<Build>>::get_resource_ids_for_non_admin(self, &user.id).await?;
todo!()
}
}

View File

@@ -8,7 +8,7 @@ use monitor_types::{
use mungos::mongodb::bson::{doc, to_bson};
use resolver_api::Resolve;
use crate::{auth::RequestUser, helpers::make_update, state::State, resource::Resource};
use crate::{auth::RequestUser, helpers::make_update, resource::Resource, state::State};
#[async_trait]
impl Resolve<CreateAlerter, RequestUser> for State {

View File

@@ -3,8 +3,10 @@ use async_trait::async_trait;
use monitor_types::{
entities::{
build::{Build, BuildBuilderConfig},
builder::Builder,
server::Server,
update::{Log, UpdateStatus},
Operation, PermissionLevel, server::Server, builder::Builder,
Operation, PermissionLevel,
},
monitor_timestamp,
requests::write::*,
@@ -15,7 +17,8 @@ use resolver_api::Resolve;
use crate::{
auth::RequestUser,
helpers::{empty_or_only_spaces, make_update},
state::State, resource::Resource,
resource::Resource,
state::State,
};
#[async_trait]

View File

@@ -12,7 +12,7 @@ use monitor_types::{
use mungos::mongodb::bson::{doc, to_bson};
use resolver_api::Resolve;
use crate::{auth::RequestUser, state::State, resource::Resource};
use crate::{auth::RequestUser, resource::Resource, state::State};
#[async_trait]
impl Resolve<CreateBuilder, RequestUser> for State {

View File

@@ -3,8 +3,9 @@ use async_trait::async_trait;
use monitor_types::{
entities::{
repo::Repo,
server::Server,
update::{Log, ResourceTarget, Update, UpdateStatus},
Operation, PermissionLevel, server::Server,
Operation, PermissionLevel,
},
monitor_timestamp,
requests::{execute, write::*},
@@ -13,7 +14,7 @@ use mungos::mongodb::bson::{doc, to_bson};
use periphery_client::requests;
use resolver_api::Resolve;
use crate::{auth::RequestUser, state::State, resource::Resource};
use crate::{auth::RequestUser, resource::Resource, state::State};
#[async_trait]
impl Resolve<CreateRepo, RequestUser> for State {
@@ -194,7 +195,8 @@ impl Resolve<DeleteRepo, RequestUser> for State {
update.logs.push(log);
if !repo.config.server_id.is_empty() {
let server: anyhow::Result<Server> = self.get_resource(&repo.config.server_id).await;
let server: anyhow::Result<Server> =
self.get_resource(&repo.config.server_id).await;
if let Ok(server) = server {
match self
.periphery_client(&server)

View File

@@ -12,7 +12,7 @@ use monitor_types::{
use mungos::mongodb::bson::{doc, to_bson};
use resolver_api::Resolve;
use crate::{auth::RequestUser, state::State, resource::Resource};
use crate::{auth::RequestUser, resource::Resource, state::State};
#[async_trait]
impl Resolve<CreateServer, RequestUser> for State {
@@ -146,7 +146,8 @@ impl Resolve<UpdateServer, RequestUser> for State {
return Err(anyhow!("server busy"));
}
let start_ts = monitor_timestamp();
let _: Server = self.get_resource_check_permissions(&id, &user, PermissionLevel::Update)
let _: Server = self
.get_resource_check_permissions(&id, &user, PermissionLevel::Update)
.await?;
self.db
.servers

View File

@@ -107,8 +107,6 @@ pub trait Resource<T: Indexed + Send + Unpin + Permissioned> {
}
}
impl Resource<Server> for State {
fn name() -> &'static str {
"server"

View File

@@ -4,7 +4,7 @@ use anyhow::{anyhow, Context};
use async_timing_util::unix_timestamp_ms;
use monitor_types::{
entities::{update::Log, CloneArgs, SystemCommand},
to_monitor_name, monitor_timestamp,
monitor_timestamp, to_monitor_name,
};
use run_command::async_run_command;
@@ -58,7 +58,7 @@ pub async fn clone(
let destination = repo_dir.display().to_string();
let clone_log = clone_inner(repo, &destination, &branch, access_token).await;
if !clone_log.success {
return Ok(vec![clone_log])
return Ok(vec![clone_log]);
}
let commit_hash_log = get_commit_hash_log(&destination).await?;
let mut logs = vec![clone_log, commit_hash_log];

View File

@@ -43,17 +43,22 @@ export type ReadResponses = {
ListBuilds: Types.BuildListItem[];
GetBuildActionState: Types.BuildActionState;
// ==== BUILDER ====
GetBuildersSummary: Types.GetBuildersSummaryResponse;
GetBuilder: Types.Builder;
ListBuilders: Types.Builder[];
// ==== REPO ====
GetReposSummary: Types.GetReposSummaryResponse;
GetRepo: Types.Repo;
ListRepos: Types.RepoListItem[];
GetRepoActionState: Types.RepoActionState;
// ==== BUILDER ====
GetBuildersSummary: Types.GetBuildersSummaryResponse;
GetBuilder: Types.Builder;
ListBuilders: Types.Builder[];
// ==== ALERTER ====
GetAlertersSummary: Types.GetAlertersSummaryResponse;
GetAlerter: Types.Alerter;
ListAlerters: Types.Alerter[];
// ==== TAG ====
GetTag: Types.CustomTag;
ListTags: Types.CustomTag[];

View File

@@ -725,6 +725,21 @@ export interface PruneDockerContainers {
server_id: string;
}
export interface GetAlerter {
id: string;
}
export interface ListAlerters {
query?: MongoDocument;
}
export interface GetAlertersSummary {
}
export interface GetAlertersSummaryResponse {
total: number;
}
export interface GetBuild {
id: string;
}
@@ -764,7 +779,7 @@ export interface GetBuildersSummary {
}
export interface GetBuildersSummaryResponse {
total: I64;
total: number;
}
export interface GetDeployment {
@@ -859,6 +874,7 @@ export interface GetReposSummary {
}
export interface GetReposSummaryResponse {
total: number;
}
export type Tag =
@@ -1215,13 +1231,16 @@ export type ReadRequest =
| { type: "GetBuild", params: GetBuild }
| { type: "ListBuilds", params: ListBuilds }
| { type: "GetBuildActionState", params: GetBuildActionState }
| { type: "GetBuildersSummary", params: GetBuildersSummary }
| { type: "GetBuilder", params: GetBuilder }
| { type: "ListBuilders", params: ListBuilders }
| { type: "GetReposSummary", params: GetReposSummary }
| { type: "GetRepo", params: GetRepo }
| { type: "ListRepos", params: ListRepos }
| { type: "GetRepoActionState", params: GetRepoActionState }
| { type: "GetBuildersSummary", params: GetBuildersSummary }
| { type: "GetBuilder", params: GetBuilder }
| { type: "ListBuilders", params: ListBuilders }
| { type: "GetAlertersSummary", params: GetAlertersSummary }
| { type: "GetAlerter", params: GetAlerter }
| { type: "ListAlerters", params: ListAlerters }
| { type: "GetTag", params: GetTag }
| { type: "ListTags", params: ListTags }
| { type: "ListUpdates", params: ListUpdates }

View File

@@ -58,4 +58,3 @@ pub fn derive_crud_requests(input: proc_macro::TokenStream) -> proc_macro::Token
}
.into()
}

View File

@@ -2,7 +2,10 @@ use derive_variants::EnumVariants;
use serde::{Deserialize, Serialize};
use typeshare::typeshare;
use super::{server::stats::{StatsState, SystemProcess}, deployment::DockerContainerState};
use super::{
deployment::DockerContainerState,
server::stats::{StatsState, SystemProcess},
};
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, EnumVariants)]
@@ -10,49 +13,49 @@ use super::{server::stats::{StatsState, SystemProcess}, deployment::DockerContai
#[serde(tag = "type", content = "data")]
pub enum Alert {
ServerUnreachable {
id: String,
id: String,
name: String,
region: Option<String>,
},
ServerCpu {
id: String,
id: String,
name: String,
region: Option<String>,
region: Option<String>,
state: StatsState,
percentage: f64,
top_procs: Vec<SystemProcess>,
},
ServerMem {
ServerMem {
id: String,
name: String,
region: Option<String>,
name: String,
region: Option<String>,
state: StatsState,
used_gb: f64,
total_gb: f64,
total_gb: f64,
top_procs: Vec<SystemProcess>,
},
ServerDisk {
id: String,
name: String,
region: Option<String>,
state: StatsState,
path: String,
used_gb: f64,
total_gb: f64,
},
ServerTemp {
id: String,
ServerDisk {
id: String,
name: String,
region: Option<String>,
region: Option<String>,
state: StatsState,
path: String,
used_gb: f64,
total_gb: f64,
},
ServerTemp {
id: String,
name: String,
region: Option<String>,
state: StatsState,
temp: f64,
max: f64,
},
ContainerStateChange {
id: String,
name: String,
server: String, // server name
from: DockerContainerState,
to: DockerContainerState,
}
max: f64,
},
ContainerStateChange {
id: String,
name: String,
server: String, // server name
from: DockerContainerState,
to: DockerContainerState,
},
}

View File

@@ -1,6 +1,9 @@
use derive_builder::Builder;
use derive_variants::EnumVariants;
use mungos::{mongodb::bson::serde_helpers::hex_string_as_object_id, derive::{MungosIndexed, StringObjectId}};
use mungos::{
derive::{MungosIndexed, StringObjectId},
mongodb::bson::serde_helpers::hex_string_as_object_id,
};
use partial_derive2::Partial;
use serde::{Deserialize, Serialize};
use strum_macros::{Display, EnumString};

View File

@@ -161,4 +161,3 @@ pub struct ServerHealth {
pub disks: HashMap<PathBuf, StatsState>,
pub temps: HashMap<String, StatsState>,
}

View File

@@ -9,7 +9,7 @@ use crate::{
},
update::Log,
},
MongoDocument, U64, I64,
MongoDocument, I64, U64,
};
//

View File

@@ -2,6 +2,7 @@ use resolver_api::derive::Request;
use serde::{Deserialize, Serialize};
use typeshare::typeshare;
mod alerter;
mod build;
mod builder;
mod deployment;
@@ -10,8 +11,8 @@ mod search;
mod server;
mod tag;
mod update;
mod alerter;
pub use alerter::*;
pub use build::*;
pub use builder::*;
pub use deployment::*;
@@ -20,7 +21,6 @@ pub use search::*;
pub use server::*;
pub use tag::*;
pub use update::*;
pub use alerter::*;
use crate::entities::user::User;

View File

@@ -53,5 +53,5 @@ pub struct GetReposSummary {}
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct GetReposSummaryResponse {
pub total: u32
pub total: u32,
}