mirror of
https://github.com/moghtech/komodo.git
synced 2026-09-12 00:01:11 +00:00
change tags api, add tags requests, get list items
This commit is contained in:
Generated
+4
-4
@@ -2328,9 +2328,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "resolver_api"
|
||||
version = "0.1.5"
|
||||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2a4c612fa902830ac9b906bacbe800e0cb34968ff913a1aef29b16b65a8c6781"
|
||||
checksum = "d5e2d7561b561784a2dd7b18f98dbf7e5617f540f97cea6db3e118d57d7237d7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@@ -2341,9 +2341,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "resolver_api_derive"
|
||||
version = "0.1.5"
|
||||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c9be9792e0b0154c7764feb2ee95dd2427d4db012715bb8320a5f0e53368c558"
|
||||
checksum = "6e1f7c7d2230fd8ab03239e20f32f99d85c8a1273bb159e1368cbda9fc2ff2ac"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
||||
+1
-1
@@ -60,7 +60,7 @@ termination_signal = "0.1.2"
|
||||
async_timing_util = "0.1.14"
|
||||
partial_derive2 = "0.1.4"
|
||||
make_option = "0.1.3"
|
||||
resolver_api = "0.1.5"
|
||||
resolver_api = "0.1.6"
|
||||
parse_csl = "0.1.0"
|
||||
mungos = "0.4.5"
|
||||
svi = "0.1.4"
|
||||
|
||||
@@ -21,6 +21,7 @@ pub type RequestUserExtension = Extension<RequestUser>;
|
||||
#[derive(Default)]
|
||||
pub struct InnerRequestUser {
|
||||
pub id: String,
|
||||
pub username: String,
|
||||
pub is_admin: bool,
|
||||
pub create_server_permissions: bool,
|
||||
pub create_build_permissions: bool,
|
||||
@@ -126,6 +127,7 @@ impl State {
|
||||
if user.enabled {
|
||||
let user = InnerRequestUser {
|
||||
id: claims.id,
|
||||
username: user.username,
|
||||
is_admin: user.admin,
|
||||
create_server_permissions: user.create_server_permissions,
|
||||
create_build_permissions: user.create_build_permissions,
|
||||
|
||||
@@ -47,18 +47,18 @@ pub fn router(state: &State) -> Router {
|
||||
|state: StateExtension, Json(request): Json<AuthRequest>| async move {
|
||||
let timer = Instant::now();
|
||||
let req_id = Uuid::new_v4();
|
||||
info!("/auth request {req_id} | {request:?}");
|
||||
info!("/auth request {req_id} | METHOD: {}", request.req_type());
|
||||
let res = state
|
||||
.resolve_request(request, ())
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e:?}")));
|
||||
if let Err(e) = &res {
|
||||
info!("/auth request {req_id} ERROR: {e:?}");
|
||||
info!("/auth request {req_id} | ERROR: {e:?}");
|
||||
}
|
||||
let res = res?;
|
||||
let elapsed = timer.elapsed();
|
||||
info!("/auth request {req_id} | resolve time: {elapsed:?}");
|
||||
debug!("/auth request {req_id} RESPONSE: {res}");
|
||||
debug!("/auth request {req_id} | RESPONSE: {res}");
|
||||
Result::<_, (StatusCode, String)>::Ok((TypedHeader(ContentType::json()), res))
|
||||
},
|
||||
),
|
||||
|
||||
@@ -80,6 +80,7 @@ impl State {
|
||||
execute::RunBuild { build_id },
|
||||
InnerRequestUser {
|
||||
id: String::from("github"),
|
||||
username: String::from("github"),
|
||||
is_admin: true,
|
||||
create_server_permissions: false,
|
||||
create_build_permissions: false,
|
||||
@@ -106,6 +107,7 @@ impl State {
|
||||
execute::CloneRepo { id: repo_id },
|
||||
InnerRequestUser {
|
||||
id: String::from("github"),
|
||||
username: String::from("github"),
|
||||
is_admin: true,
|
||||
create_server_permissions: false,
|
||||
create_build_permissions: false,
|
||||
@@ -132,6 +134,7 @@ impl State {
|
||||
execute::PullRepo { id: repo_id },
|
||||
InnerRequestUser {
|
||||
id: String::from("github"),
|
||||
username: String::from("github"),
|
||||
is_admin: true,
|
||||
create_server_permissions: false,
|
||||
create_build_permissions: false,
|
||||
|
||||
@@ -56,7 +56,7 @@ pub fn router() -> Router {
|
||||
Json(request): Json<ExecuteRequest>| async move {
|
||||
let timer = Instant::now();
|
||||
let req_id = Uuid::new_v4();
|
||||
info!("/execute request {req_id} | {request:?}");
|
||||
info!("/execute request {req_id} | user: {} ({}) | {request:?}", user.username, user.id);
|
||||
let res = tokio::spawn(async move {
|
||||
state
|
||||
.resolve_request(request, user)
|
||||
|
||||
@@ -8,6 +8,7 @@ use monitor_types::{
|
||||
monitor_timestamp, optional_string,
|
||||
requests::execute::*,
|
||||
};
|
||||
use mungos::mongodb::bson::doc;
|
||||
use periphery_client::requests;
|
||||
use resolver_api::Resolve;
|
||||
|
||||
@@ -45,20 +46,37 @@ impl Resolve<CloneRepo, RequestUser> for State {
|
||||
|
||||
update.id = self.add_update(update.clone()).await?;
|
||||
|
||||
match self
|
||||
let logs = match self
|
||||
.periphery_client(&server)
|
||||
.request(requests::CloneRepo {
|
||||
args: (&repo).into(),
|
||||
})
|
||||
.await
|
||||
{
|
||||
Ok(logs) => update.logs.extend(logs),
|
||||
Err(e) => update
|
||||
.logs
|
||||
.push(Log::error("clone repo", format!("{e:#?}"))),
|
||||
Ok(logs) => logs,
|
||||
Err(e) => vec![Log::error("clone repo", format!("{e:#?}"))],
|
||||
};
|
||||
|
||||
update.logs.extend(logs);
|
||||
update.finalize();
|
||||
|
||||
if update.success {
|
||||
let res = self
|
||||
.db
|
||||
.repos
|
||||
.update_one(
|
||||
&repo.id,
|
||||
mungos::Update::Set(doc! { "last_pulled_at": monitor_timestamp() }),
|
||||
)
|
||||
.await;
|
||||
if let Err(e) = res {
|
||||
warn!(
|
||||
"failed to update repo last_pulled_at | repo id: {} | {e:#?}",
|
||||
repo.id
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
self.update_update(update.clone()).await?;
|
||||
Ok(update)
|
||||
};
|
||||
@@ -119,7 +137,7 @@ impl Resolve<PullRepo, RequestUser> for State {
|
||||
|
||||
update.id = self.add_update(update.clone()).await?;
|
||||
|
||||
match self
|
||||
let logs = match self
|
||||
.periphery_client(&server)
|
||||
.request(requests::PullRepo {
|
||||
name: repo.name,
|
||||
@@ -128,11 +146,31 @@ impl Resolve<PullRepo, RequestUser> for State {
|
||||
})
|
||||
.await
|
||||
{
|
||||
Ok(logs) => update.logs.extend(logs),
|
||||
Err(e) => update.logs.push(Log::error("pull repo", format!("{e:#?}"))),
|
||||
Ok(logs) => logs,
|
||||
Err(e) => vec![Log::error("pull repo", format!("{e:#?}"))],
|
||||
};
|
||||
|
||||
update.logs.extend(logs);
|
||||
|
||||
update.finalize();
|
||||
|
||||
if update.success {
|
||||
let res = self
|
||||
.db
|
||||
.repos
|
||||
.update_one(
|
||||
&repo.id,
|
||||
mungos::Update::Set(doc! { "last_pulled_at": monitor_timestamp() }),
|
||||
)
|
||||
.await;
|
||||
if let Err(e) = res {
|
||||
warn!(
|
||||
"failed to update repo last_pulled_at | repo id: {} | {e:#?}",
|
||||
repo.id
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
self.update_update(update.clone()).await?;
|
||||
Ok(update)
|
||||
};
|
||||
|
||||
@@ -5,7 +5,8 @@ use monitor_types::{
|
||||
build::{Build, BuildActionState},
|
||||
PermissionLevel,
|
||||
},
|
||||
requests::read::*, permissioned::Permissioned,
|
||||
permissioned::Permissioned,
|
||||
requests::read::*,
|
||||
};
|
||||
use resolver_api::Resolve;
|
||||
|
||||
@@ -25,7 +26,7 @@ impl Resolve<ListBuilds, RequestUser> for State {
|
||||
&self,
|
||||
ListBuilds { query }: ListBuilds,
|
||||
user: RequestUser,
|
||||
) -> anyhow::Result<Vec<Build>> {
|
||||
) -> anyhow::Result<Vec<BuildListItem>> {
|
||||
let builds = self
|
||||
.db
|
||||
.builds
|
||||
@@ -42,6 +43,17 @@ impl Resolve<ListBuilds, RequestUser> for State {
|
||||
.collect()
|
||||
};
|
||||
|
||||
let builds = builds
|
||||
.into_iter()
|
||||
.map(|build| BuildListItem {
|
||||
id: build.id,
|
||||
name: build.name,
|
||||
last_built_at: build.last_built_at,
|
||||
version: build.config.version,
|
||||
tags: build.tags,
|
||||
})
|
||||
.collect();
|
||||
|
||||
Ok(builds)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,11 +2,12 @@ use std::cmp;
|
||||
|
||||
use anyhow::{anyhow, Context};
|
||||
use async_trait::async_trait;
|
||||
use futures::future::join_all;
|
||||
use monitor_types::{
|
||||
entities::{
|
||||
deployment::{
|
||||
Deployment, DeploymentActionState, DeploymentConfig, DeploymentImage,
|
||||
DockerContainerStats,
|
||||
DockerContainerState, DockerContainerStats,
|
||||
},
|
||||
update::{Log, UpdateStatus},
|
||||
Operation, PermissionLevel,
|
||||
@@ -38,7 +39,7 @@ impl Resolve<ListDeployments, RequestUser> for State {
|
||||
&self,
|
||||
ListDeployments { query }: ListDeployments,
|
||||
user: RequestUser,
|
||||
) -> anyhow::Result<Vec<Deployment>> {
|
||||
) -> anyhow::Result<Vec<DeploymentListItem>> {
|
||||
let deployments = self
|
||||
.db
|
||||
.deployments
|
||||
@@ -57,6 +58,26 @@ impl Resolve<ListDeployments, RequestUser> for State {
|
||||
.collect()
|
||||
};
|
||||
|
||||
let deployments = deployments.into_iter().map(|deployment| async {
|
||||
let status = self.deployment_status_cache.get(&deployment.id).await;
|
||||
DeploymentListItem {
|
||||
id: deployment.id,
|
||||
name: deployment.name,
|
||||
tags: deployment.tags,
|
||||
state: status
|
||||
.as_ref()
|
||||
.map(|s| s.state)
|
||||
.unwrap_or(DockerContainerState::Unknown),
|
||||
status: status
|
||||
.as_ref()
|
||||
.and_then(|s| s.container.as_ref().and_then(|c| c.status.to_owned())),
|
||||
image: String::new(),
|
||||
version: String::new(),
|
||||
}
|
||||
});
|
||||
|
||||
let deployments = join_all(deployments).await;
|
||||
|
||||
Ok(deployments)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,19 +83,14 @@ pub fn router() -> Router {
|
||||
Json(request): Json<ReadRequest>| async move {
|
||||
let timer = Instant::now();
|
||||
let req_id = Uuid::new_v4();
|
||||
info!("/read request {req_id} | {request:?}");
|
||||
let res = tokio::spawn(async move {
|
||||
state
|
||||
.resolve_request(request, user)
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e:?}")))
|
||||
})
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e:?}")));
|
||||
if let Err(e) = &res {
|
||||
info!("/read request {req_id} SPAWN ERROR: {e:?}");
|
||||
}
|
||||
let res = res?;
|
||||
info!(
|
||||
"/read request {req_id} | user: {} ({}) | {request:?}",
|
||||
user.username, user.id
|
||||
);
|
||||
let res = state
|
||||
.resolve_request(request, user)
|
||||
.await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e:?}")));
|
||||
if let Err(e) = &res {
|
||||
info!("/read request {req_id} ERROR: {e:?}");
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ impl Resolve<ListRepos, RequestUser> for State {
|
||||
&self,
|
||||
ListRepos { query }: ListRepos,
|
||||
user: RequestUser,
|
||||
) -> anyhow::Result<Vec<Repo>> {
|
||||
) -> anyhow::Result<Vec<RepoListItem>> {
|
||||
let repos = self
|
||||
.db
|
||||
.repos
|
||||
@@ -43,6 +43,16 @@ impl Resolve<ListRepos, RequestUser> for State {
|
||||
.collect()
|
||||
};
|
||||
|
||||
let repos = repos
|
||||
.into_iter()
|
||||
.map(|repo| RepoListItem {
|
||||
id: repo.id,
|
||||
name: repo.name,
|
||||
last_pulled_at: repo.last_pulled_at,
|
||||
tags: repo.tags,
|
||||
})
|
||||
.collect();
|
||||
|
||||
Ok(repos)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
use anyhow::{anyhow, Context};
|
||||
use async_trait::async_trait;
|
||||
use futures::future::join_all;
|
||||
use monitor_types::{
|
||||
entities::{
|
||||
deployment::BasicContainerInfo,
|
||||
@@ -50,7 +51,7 @@ impl Resolve<ListServers, RequestUser> for State {
|
||||
&self,
|
||||
ListServers { query }: ListServers,
|
||||
user: RequestUser,
|
||||
) -> anyhow::Result<Vec<Server>> {
|
||||
) -> anyhow::Result<Vec<ServerListItem>> {
|
||||
let servers = self
|
||||
.db
|
||||
.servers
|
||||
@@ -67,6 +68,17 @@ impl Resolve<ListServers, RequestUser> for State {
|
||||
.collect()
|
||||
};
|
||||
|
||||
let servers = servers.into_iter().map(|server| async {
|
||||
let status = self.server_status_cache.get(&server.id).await;
|
||||
ServerListItem {
|
||||
id: server.id,
|
||||
name: server.name,
|
||||
status: status.map(|s| s.status).unwrap_or_default(),
|
||||
}
|
||||
});
|
||||
|
||||
let servers = join_all(servers).await;
|
||||
|
||||
Ok(servers)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,6 +54,7 @@ impl Resolve<CreateBuild, RequestUser> for State {
|
||||
.into_iter()
|
||||
.collect(),
|
||||
description: Default::default(),
|
||||
tags: Default::default(),
|
||||
config: config.into(),
|
||||
};
|
||||
let build_id = self
|
||||
@@ -96,6 +97,7 @@ impl Resolve<CopyBuild, RequestUser> for State {
|
||||
let Build {
|
||||
config,
|
||||
description,
|
||||
tags,
|
||||
..
|
||||
} = self
|
||||
.get_build_check_permissions(&id, &user, PermissionLevel::Update)
|
||||
@@ -131,6 +133,7 @@ impl Resolve<CopyBuild, RequestUser> for State {
|
||||
.into_iter()
|
||||
.collect(),
|
||||
description,
|
||||
tags,
|
||||
config,
|
||||
};
|
||||
let build_id = self
|
||||
|
||||
@@ -48,6 +48,7 @@ impl Resolve<CreateDeployment, RequestUser> for State {
|
||||
.into_iter()
|
||||
.collect(),
|
||||
description: Default::default(),
|
||||
tags: Default::default(),
|
||||
config: config.into(),
|
||||
};
|
||||
let deployment_id = self
|
||||
@@ -93,6 +94,7 @@ impl Resolve<CopyDeployment, RequestUser> for State {
|
||||
let Deployment {
|
||||
config,
|
||||
description,
|
||||
tags,
|
||||
..
|
||||
} = self
|
||||
.get_deployment_check_permissions(&id, &user, PermissionLevel::Update)
|
||||
@@ -119,6 +121,7 @@ impl Resolve<CopyDeployment, RequestUser> for State {
|
||||
.into_iter()
|
||||
.collect(),
|
||||
description,
|
||||
tags,
|
||||
config,
|
||||
};
|
||||
let deployment_id = self
|
||||
|
||||
@@ -76,7 +76,7 @@ pub fn router() -> Router {
|
||||
Json(request): Json<WriteRequest>| async move {
|
||||
let timer = Instant::now();
|
||||
let req_id = Uuid::new_v4();
|
||||
info!("/write request {req_id} | {request:?}");
|
||||
info!("/write request {req_id} | user: {} ({}) | {request:?}", user.username, user.id);
|
||||
let res = tokio::spawn(async move {
|
||||
state
|
||||
.resolve_request(request, user)
|
||||
|
||||
@@ -42,7 +42,9 @@ impl Resolve<CreateRepo, RequestUser> for State {
|
||||
permissions: [(user.id.clone(), PermissionLevel::Update)]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
last_pulled_at: 0,
|
||||
description: Default::default(),
|
||||
tags: Default::default(),
|
||||
config: config.into(),
|
||||
};
|
||||
let repo_id = self
|
||||
@@ -98,6 +100,7 @@ impl Resolve<CopyRepo, RequestUser> for State {
|
||||
let Repo {
|
||||
config,
|
||||
description,
|
||||
tags,
|
||||
..
|
||||
} = self
|
||||
.get_repo_check_permissions(&id, &user, PermissionLevel::Update)
|
||||
@@ -120,7 +123,9 @@ impl Resolve<CopyRepo, RequestUser> for State {
|
||||
permissions: [(user.id.clone(), PermissionLevel::Update)]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
last_pulled_at: 0,
|
||||
description,
|
||||
tags,
|
||||
config,
|
||||
};
|
||||
let repo_id = self
|
||||
|
||||
@@ -30,6 +30,7 @@ impl Resolve<CreateServer, RequestUser> for State {
|
||||
.into_iter()
|
||||
.collect(),
|
||||
description: Default::default(),
|
||||
tags: Default::default(),
|
||||
config: req.config.into(),
|
||||
};
|
||||
let server_id = self
|
||||
|
||||
@@ -5,7 +5,7 @@ use partial_derive2::Partial;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use typeshare::typeshare;
|
||||
|
||||
use crate::{i64_is_zero, I64};
|
||||
use crate::{i64_is_zero, I64, MongoId};
|
||||
|
||||
use super::{EnvironmentVar, PermissionsMap, SystemCommand, Version};
|
||||
|
||||
@@ -19,7 +19,7 @@ pub struct Build {
|
||||
with = "hex_string_as_object_id"
|
||||
)]
|
||||
#[builder(setter(skip))]
|
||||
pub id: String,
|
||||
pub id: MongoId,
|
||||
|
||||
#[unique_index]
|
||||
pub name: String,
|
||||
@@ -44,6 +44,10 @@ pub struct Build {
|
||||
#[builder(setter(skip))]
|
||||
pub last_built_at: I64,
|
||||
|
||||
#[serde(default)]
|
||||
#[builder(default)]
|
||||
pub tags: Vec<String>,
|
||||
|
||||
pub config: BuildConfig,
|
||||
}
|
||||
|
||||
@@ -108,10 +112,6 @@ pub struct BuildConfig {
|
||||
#[serde(default)]
|
||||
#[builder(default)]
|
||||
pub use_buildx: bool,
|
||||
|
||||
#[serde(default)]
|
||||
#[builder(default)]
|
||||
pub tags: Vec<String>,
|
||||
}
|
||||
|
||||
fn default_branch() -> String {
|
||||
@@ -143,7 +143,6 @@ impl From<PartialBuildConfig> for BuildConfig {
|
||||
build_args: value.build_args.unwrap_or_default(),
|
||||
extra_args: value.extra_args.unwrap_or_default(),
|
||||
use_buildx: value.use_buildx.unwrap_or_default(),
|
||||
tags: value.tags.unwrap_or_default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ use partial_derive2::Partial;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use typeshare::typeshare;
|
||||
|
||||
use crate::{i64_is_zero, I64};
|
||||
use crate::{i64_is_zero, I64, MongoId};
|
||||
|
||||
use super::PermissionsMap;
|
||||
|
||||
@@ -19,7 +19,7 @@ pub struct Builder {
|
||||
with = "hex_string_as_object_id"
|
||||
)]
|
||||
#[builder(setter(skip))]
|
||||
pub id: String,
|
||||
pub id: MongoId,
|
||||
|
||||
#[unique_index]
|
||||
pub name: String,
|
||||
|
||||
@@ -6,7 +6,7 @@ use serde::{Deserialize, Serialize};
|
||||
use strum_macros::{Display, EnumString};
|
||||
use typeshare::typeshare;
|
||||
|
||||
use crate::{i64_is_zero, I64};
|
||||
use crate::{i64_is_zero, I64, MongoId};
|
||||
|
||||
use super::{EnvironmentVar, PermissionsMap, Version};
|
||||
|
||||
@@ -20,7 +20,7 @@ pub struct Deployment {
|
||||
with = "hex_string_as_object_id"
|
||||
)]
|
||||
#[builder(setter(skip))]
|
||||
pub id: String,
|
||||
pub id: MongoId,
|
||||
|
||||
#[unique_index]
|
||||
pub name: String,
|
||||
@@ -41,6 +41,10 @@ pub struct Deployment {
|
||||
#[builder(setter(skip))]
|
||||
pub updated_at: I64,
|
||||
|
||||
#[serde(default)]
|
||||
#[builder(default)]
|
||||
pub tags: Vec<String>,
|
||||
|
||||
pub config: DeploymentConfig,
|
||||
}
|
||||
|
||||
@@ -115,10 +119,6 @@ pub struct DeploymentConfig {
|
||||
#[serde(default)]
|
||||
#[builder(default)]
|
||||
pub docker_account: String, // the username of the dockerhub account. empty if no account.
|
||||
|
||||
#[serde(default)]
|
||||
#[builder(default)]
|
||||
pub tags: Vec<String>,
|
||||
}
|
||||
|
||||
fn default_term_signal_labels() -> Vec<TerminationSignalLabel> {
|
||||
@@ -156,7 +156,6 @@ impl From<PartialDeploymentConfig> for DeploymentConfig {
|
||||
container_user: value.container_user.unwrap_or_default(),
|
||||
extra_args: value.extra_args.unwrap_or_default(),
|
||||
docker_account: value.docker_account.unwrap_or_default(),
|
||||
tags: value.tags.unwrap_or_default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ use partial_derive2::Partial;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use typeshare::typeshare;
|
||||
|
||||
use crate::{i64_is_zero, I64};
|
||||
use crate::{i64_is_zero, I64, MongoId};
|
||||
|
||||
use super::{PermissionsMap, SystemCommand};
|
||||
|
||||
@@ -19,7 +19,7 @@ pub struct Repo {
|
||||
with = "hex_string_as_object_id"
|
||||
)]
|
||||
#[builder(setter(skip))]
|
||||
pub id: String,
|
||||
pub id: MongoId,
|
||||
|
||||
#[unique_index]
|
||||
pub name: String,
|
||||
@@ -40,6 +40,14 @@ pub struct Repo {
|
||||
#[builder(setter(skip))]
|
||||
pub updated_at: I64,
|
||||
|
||||
#[serde(default)]
|
||||
#[builder(setter(skip))]
|
||||
pub last_pulled_at: I64,
|
||||
|
||||
#[serde(default)]
|
||||
#[builder(default)]
|
||||
pub tags: Vec<String>,
|
||||
|
||||
pub config: RepoConfig,
|
||||
}
|
||||
|
||||
@@ -68,10 +76,6 @@ pub struct RepoConfig {
|
||||
#[serde(default)]
|
||||
#[builder(default)]
|
||||
pub on_pull: SystemCommand,
|
||||
|
||||
#[serde(default)]
|
||||
#[builder(default)]
|
||||
pub tags: Vec<String>,
|
||||
}
|
||||
|
||||
fn default_branch() -> String {
|
||||
@@ -87,7 +91,6 @@ impl From<PartialRepoConfig> for RepoConfig {
|
||||
github_account: value.github_account.unwrap_or_default(),
|
||||
on_clone: value.on_clone.unwrap_or_default(),
|
||||
on_pull: value.on_pull.unwrap_or_default(),
|
||||
tags: value.tags.unwrap_or_default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ use partial_derive2::Partial;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use typeshare::typeshare;
|
||||
|
||||
use crate::{i64_is_zero, I64};
|
||||
use crate::{i64_is_zero, I64, MongoId};
|
||||
|
||||
use super::PermissionsMap;
|
||||
|
||||
@@ -23,7 +23,7 @@ pub struct Server {
|
||||
with = "hex_string_as_object_id"
|
||||
)]
|
||||
#[builder(setter(skip))]
|
||||
pub id: String,
|
||||
pub id: MongoId,
|
||||
|
||||
#[unique_index]
|
||||
pub name: String,
|
||||
@@ -44,6 +44,10 @@ pub struct Server {
|
||||
#[builder(setter(skip))]
|
||||
pub updated_at: I64,
|
||||
|
||||
#[serde(default)]
|
||||
#[builder(default)]
|
||||
pub tags: Vec<String>,
|
||||
|
||||
pub config: ServerConfig,
|
||||
}
|
||||
|
||||
@@ -95,10 +99,6 @@ pub struct ServerConfig {
|
||||
#[serde(default)]
|
||||
#[builder(default)]
|
||||
pub to_notify: Vec<String>, // slack users to notify
|
||||
|
||||
#[serde(default)]
|
||||
#[builder(default)]
|
||||
pub tags: Vec<String>,
|
||||
}
|
||||
|
||||
fn default_enabled() -> bool {
|
||||
@@ -147,7 +147,6 @@ impl From<PartialServerConfig> for ServerConfig {
|
||||
mem_critical: value.mem_critical.unwrap_or(default_mem_critical()),
|
||||
disk_critical: value.disk_critical.unwrap_or(default_disk_critical()),
|
||||
to_notify: value.to_notify.unwrap_or_default(),
|
||||
tags: value.tags.unwrap_or_default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ use serde::{Deserialize, Serialize};
|
||||
use strum_macros::{Display, EnumString};
|
||||
use typeshare::typeshare;
|
||||
|
||||
use crate::{entities::Operation, monitor_timestamp, I64};
|
||||
use crate::{entities::Operation, monitor_timestamp, I64, MongoId};
|
||||
|
||||
use super::Version;
|
||||
|
||||
@@ -18,7 +18,7 @@ pub struct Update {
|
||||
skip_serializing_if = "String::is_empty",
|
||||
with = "hex_string_as_object_id"
|
||||
)]
|
||||
pub id: String,
|
||||
pub id: MongoId,
|
||||
pub target: ResourceTarget,
|
||||
pub operation: Operation,
|
||||
pub logs: Vec<Log>,
|
||||
|
||||
@@ -3,7 +3,7 @@ use mungos::MungosIndexed;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use typeshare::typeshare;
|
||||
|
||||
use crate::{i64_is_zero, I64};
|
||||
use crate::{i64_is_zero, I64, MongoId};
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Default, MungosIndexed)]
|
||||
@@ -14,7 +14,7 @@ pub struct User {
|
||||
skip_serializing_if = "String::is_empty",
|
||||
with = "hex_string_as_object_id"
|
||||
)]
|
||||
pub id: String,
|
||||
pub id: MongoId,
|
||||
|
||||
#[unique_index]
|
||||
pub username: String,
|
||||
@@ -43,6 +43,9 @@ pub struct User {
|
||||
|
||||
pub google_id: Option<String>,
|
||||
|
||||
#[serde(default)]
|
||||
pub last_update_view: I64,
|
||||
|
||||
#[serde(default, skip_serializing_if = "i64_is_zero")]
|
||||
pub created_at: I64,
|
||||
|
||||
|
||||
@@ -12,6 +12,8 @@ pub mod requests;
|
||||
|
||||
#[typeshare(serialized_as = "number")]
|
||||
pub type I64 = i64;
|
||||
#[typeshare(serialized_as = "{ $oid: string }")]
|
||||
pub type MongoId = String;
|
||||
#[typeshare(serialized_as = "any")]
|
||||
pub type MongoDocument = mungos::mongodb::bson::Document;
|
||||
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
mod build;
|
||||
pub use build::*;
|
||||
mod deployment;
|
||||
pub use deployment::*;
|
||||
mod repo;
|
||||
pub use repo::*;
|
||||
mod server;
|
||||
|
||||
pub use build::*;
|
||||
pub use deployment::*;
|
||||
pub use repo::*;
|
||||
pub use server::*;
|
||||
|
||||
@@ -3,8 +3,11 @@ use serde::{Deserialize, Serialize};
|
||||
use typeshare::typeshare;
|
||||
|
||||
use crate::{
|
||||
entities::build::{Build, BuildActionState},
|
||||
MongoDocument,
|
||||
entities::{
|
||||
build::{Build, BuildActionState},
|
||||
Version,
|
||||
},
|
||||
MongoDocument, I64,
|
||||
};
|
||||
|
||||
//
|
||||
@@ -20,11 +23,21 @@ pub struct GetBuild {
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Request)]
|
||||
#[response(Vec<Build>)]
|
||||
#[response(Vec<BuildListItem>)]
|
||||
pub struct ListBuilds {
|
||||
pub query: Option<MongoDocument>,
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
pub struct BuildListItem {
|
||||
pub id: String,
|
||||
pub name: String,
|
||||
pub last_built_at: I64,
|
||||
pub version: Version,
|
||||
pub tags: Vec<String>,
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
#[typeshare]
|
||||
|
||||
@@ -23,11 +23,23 @@ pub struct GetDeployment {
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Request)]
|
||||
#[response(Vec<Deployment>)]
|
||||
#[response(Vec<DeploymentListItem>)]
|
||||
pub struct ListDeployments {
|
||||
pub query: Option<MongoDocument>,
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
pub struct DeploymentListItem {
|
||||
pub id: String,
|
||||
pub name: String,
|
||||
pub tags: Vec<String>,
|
||||
pub state: DockerContainerState,
|
||||
pub status: Option<String>,
|
||||
pub image: String,
|
||||
pub version: String,
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
#[typeshare]
|
||||
|
||||
@@ -1,17 +1,18 @@
|
||||
use resolver_api::derive::Request;
|
||||
use serde::{Serialize, Deserialize};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use typeshare::typeshare;
|
||||
|
||||
mod build;
|
||||
pub use build::*;
|
||||
mod builder;
|
||||
pub use builder::*;
|
||||
mod deployment;
|
||||
pub use deployment::*;
|
||||
mod repo;
|
||||
pub use repo::*;
|
||||
mod server;
|
||||
|
||||
pub use build::*;
|
||||
pub use builder::*;
|
||||
pub use deployment::*;
|
||||
pub use repo::*;
|
||||
pub use server::*;
|
||||
use typeshare::typeshare;
|
||||
|
||||
//
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use typeshare::typeshare;
|
||||
|
||||
use crate::{
|
||||
entities::repo::{Repo, RepoActionState},
|
||||
MongoDocument,
|
||||
MongoDocument, I64,
|
||||
};
|
||||
|
||||
//
|
||||
@@ -20,11 +20,20 @@ pub struct GetRepo {
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Request)]
|
||||
#[response(Vec<Repo>)]
|
||||
#[response(Vec<RepoListItem>)]
|
||||
pub struct ListRepos {
|
||||
pub query: Option<MongoDocument>,
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
pub struct RepoListItem {
|
||||
pub id: String,
|
||||
pub name: String,
|
||||
pub last_pulled_at: I64,
|
||||
pub tags: Vec<String>,
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
#[typeshare]
|
||||
|
||||
@@ -31,11 +31,19 @@ pub struct GetServer {
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Request)]
|
||||
#[response(Vec<Server>)]
|
||||
#[response(Vec<ServerListItem>)]
|
||||
pub struct ListServers {
|
||||
pub query: Option<MongoDocument>,
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
pub struct ServerListItem {
|
||||
pub id: String,
|
||||
pub name: String,
|
||||
pub status: ServerStatus,
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
#[typeshare]
|
||||
|
||||
@@ -1,14 +1,19 @@
|
||||
mod build;
|
||||
pub use build::*;
|
||||
mod builder;
|
||||
pub use builder::*;
|
||||
mod deployment;
|
||||
pub use deployment::*;
|
||||
mod repo;
|
||||
pub use repo::*;
|
||||
mod server;
|
||||
pub use server::*;
|
||||
mod permissions;
|
||||
pub use permissions::*;
|
||||
mod repo;
|
||||
mod secret;
|
||||
pub use secret::*;
|
||||
mod server;
|
||||
mod tags;
|
||||
mod user;
|
||||
|
||||
pub use build::*;
|
||||
pub use builder::*;
|
||||
pub use deployment::*;
|
||||
pub use permissions::*;
|
||||
pub use repo::*;
|
||||
pub use secret::*;
|
||||
pub use server::*;
|
||||
pub use tags::*;
|
||||
pub use user::*;
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
use resolver_api::derive::Request;
|
||||
use serde::{Serialize, Deserialize};
|
||||
use typeshare::typeshare;
|
||||
|
||||
use crate::entities::update::ResourceTarget;
|
||||
|
||||
//
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Request)]
|
||||
#[response(())]
|
||||
pub struct AddTags {
|
||||
pub target: ResourceTarget,
|
||||
pub tags: Vec<String>,
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Request)]
|
||||
#[response(())]
|
||||
pub struct RemoveTags {
|
||||
pub target: ResourceTarget,
|
||||
pub tags: Vec<String>,
|
||||
}
|
||||
Reference in New Issue
Block a user