create procedure and update mungos

This commit is contained in:
beckerinj
2022-12-16 02:50:07 -05:00
parent a985139f9c
commit 839af15311
7 changed files with 78 additions and 9 deletions

4
Cargo.lock generated
View File

@@ -1363,9 +1363,9 @@ dependencies = [
[[package]]
name = "mungos"
version = "0.2.24"
version = "0.2.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d57f20ae0ed18b7813cf10a3031b5ea5b2c5f4488d4e0ab52cc6a3fe3e510fb"
checksum = "9ac86e7d26ca046ef914a069d1185af3a82471d2aac3c8390e0cd5ece11ace41"
dependencies = [
"anyhow",
"futures",

View File

@@ -17,7 +17,7 @@ axum-extra = { version = "0.4", features = ["spa"] }
tower = { version = "0.4", features = ["full"] }
tower-http = { version = "0.3", features = ["cors"] }
slack = { package = "slack_client_rs", version = "0.0.7" }
mungos = "0.2.24"
mungos = "0.2.26"
serde = "1.0"
serde_derive = "1.0"
serde_json = "1.0"

View File

@@ -97,7 +97,13 @@ impl State {
.periphery
.container_remove(&server, &deployment.name)
.await?;
self.db.deployments.delete_one(deployment_id).await?;
self.db
.deployments
.delete_one(deployment_id)
.await
.context(format!(
"failed at deleting deployment at {deployment_id} from mongo"
))?;
let update = Update {
target: UpdateTarget::System,
operation: Operation::DeleteDeployment,

View File

@@ -1,5 +1,10 @@
use anyhow::anyhow;
use types::{traits::Permissioned, PermissionLevel, Procedure, ProcedureStage, Update};
use anyhow::{anyhow, Context};
use async_timing_util::unix_timestamp_ms;
use helpers::to_monitor_name;
use types::{
traits::Permissioned, Log, Operation, PermissionLevel, Procedure, ProcedureStage, Update,
UpdateTarget,
};
use crate::{auth::RequestUser, state::State};
@@ -26,7 +31,34 @@ impl State {
name: &str,
user: &RequestUser,
) -> anyhow::Result<Procedure> {
todo!()
let start_ts = unix_timestamp_ms() as i64;
let procedure = Procedure {
name: to_monitor_name(name),
permissions: [(user.id.clone(), PermissionLevel::Write)]
.into_iter()
.collect(),
created_at: start_ts,
updated_at: start_ts,
..Default::default()
};
let procedure_id = self
.db
.procedures
.create_one(procedure)
.await
.context("failed to add procedure to db")?;
let procedure = self.db.get_procedure(&procedure_id).await?;
let update = Update {
target: UpdateTarget::Procedure(procedure_id),
operation: Operation::CreateProcedure,
start_ts,
end_ts: Some(unix_timestamp_ms() as i64),
operator: user.id.clone(),
success: true,
..Default::default()
};
self.add_update(update).await?;
Ok(procedure)
}
pub async fn create_full_procedure(
@@ -45,7 +77,30 @@ impl State {
id: &str,
user: &RequestUser,
) -> anyhow::Result<Procedure> {
todo!()
let procedure = self
.get_procedure_check_permissions(id, user, PermissionLevel::Write)
.await?;
let start_ts = unix_timestamp_ms() as i64;
self.db
.procedures
.delete_one(id)
.await
.context(format!("failed at deleting procedure at {id} from mongo"))?;
let update = Update {
target: UpdateTarget::System,
operation: Operation::DeleteProcedure,
start_ts,
end_ts: Some(unix_timestamp_ms() as i64),
operator: user.id.clone(),
logs: vec![Log::simple(
"delete deployment",
format!("deleted procedure {}", procedure.name),
)],
success: true,
..Default::default()
};
self.add_update(update).await?;
Ok(procedure)
}
pub async fn update_procedure(

View File

@@ -224,6 +224,12 @@ async fn user_can_see_update(
.await?;
(permissions, "build")
}
UpdateTarget::Procedure(procedure_id) => {
let permissions = db_client
.get_user_permission_on_procedure(user_id, procedure_id)
.await?;
(permissions, "procedure")
}
UpdateTarget::System => {
return Err(anyhow!("user not admin, can't recieve system updates"))
}

View File

@@ -7,5 +7,5 @@ edition = "2021"
[dependencies]
types = { package = "monitor_types", path = "../types" }
mungos = "0.2.24"
mungos = "0.2.26"
anyhow = "1.0"

View File

@@ -17,6 +17,7 @@ pub type UserId = String;
pub type ServerId = String;
pub type DeploymentId = String;
pub type BuildId = String;
pub type ProcedureId = String;
pub type GithubUsername = String;
pub type GithubToken = String;
@@ -635,6 +636,7 @@ pub enum UpdateTarget {
Build(BuildId),
Deployment(DeploymentId),
Server(ServerId),
Procedure(ProcedureId),
}
impl Default for UpdateTarget {