forked from github-starred/komodo
alerter api ts. fmt
This commit is contained in:
@@ -55,4 +55,4 @@ impl<T: Clone + Default + Busy> Cache<T> {
|
||||
None => false,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,4 +13,4 @@ impl<T: Clone> BroadcastChannel<T> {
|
||||
receiver,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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};
|
||||
|
||||
|
||||
@@ -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>;
|
||||
|
||||
@@ -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?;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)]
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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!()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -107,8 +107,6 @@ pub trait Resource<T: Indexed + Send + Unpin + Permissioned> {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
impl Resource<Server> for State {
|
||||
fn name() -> &'static str {
|
||||
"server"
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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[];
|
||||
|
||||
@@ -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 }
|
||||
|
||||
@@ -58,4 +58,3 @@ pub fn derive_crud_requests(input: proc_macro::TokenStream) -> proc_macro::Token
|
||||
}
|
||||
.into()
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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};
|
||||
|
||||
@@ -161,4 +161,3 @@ pub struct ServerHealth {
|
||||
pub disks: HashMap<PathBuf, StatsState>,
|
||||
pub temps: HashMap<String, StatsState>,
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ use crate::{
|
||||
},
|
||||
update::Log,
|
||||
},
|
||||
MongoDocument, U64, I64,
|
||||
MongoDocument, I64, U64,
|
||||
};
|
||||
|
||||
//
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -53,5 +53,5 @@ pub struct GetReposSummary {}
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
pub struct GetReposSummaryResponse {
|
||||
pub total: u32
|
||||
pub total: u32,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user