Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 20 additions & 4 deletions backend/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions backend/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ members = [
"aurcache-api",
"aurcache-activitylog",
"aurcache-utils",
"aurcache-scheduler"
]
"aurcache-scheduler",
"aurcache-types"]

[workspace.dependencies]
tokio = "1.48.0"
Expand All @@ -28,6 +28,7 @@ flate2 = "1.1.5"
tar = "0.4.44"
tempfile = "3.23.0"
alpm-srcinfo = "0.6.0"
utoipa = { version = "5.4.0", features = ["rocket_extras"] }

[profile.release]
strip = "debuginfo" # Automatically strip symbols from the binary.
Expand Down
3 changes: 2 additions & 1 deletion backend/aurcache-api/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ aur-rs = {workspace = true}

rocket = "0.5.1"
rocket_oauth2 = "0.5.0"
utoipa = { version = "5.4.0", features = ["rocket_extras"] }
utoipa = { workspace = true }
utoipa-redoc = { version = "6.0.0", features = ["rocket"] }
utoipa-scalar = { version = "0.3.0", features = ["rocket"] }
rust-embed = "8.9.0"
Expand All @@ -29,6 +29,7 @@ aurcache-builder = {path = "../aurcache-builder"}
aurcache-activitylog = {path = "../aurcache-activitylog"}
aurcache-utils = {path = "../aurcache-utils"}
pacman-mirrors = {path = "../pacman-mirrors"}
aurcache-types = {path = "../aurcache-types"}

[features]
default = []
Expand Down
4 changes: 4 additions & 0 deletions backend/aurcache-api/src/backend.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use crate::package::{
get_package, package_add_endpoint, package_del, package_list, package_update_endpoint,
package_update_entity_endpoint,
};
use crate::settings::{setting_update, setting_update_package, settings};
use crate::stats::{dashboard_graph_data, stats, user_info};
use rocket::{Route, routes};

Expand All @@ -30,5 +31,8 @@ pub fn build_api() -> Vec<Route> {
cancel_build,
health,
activity,
settings,
setting_update,
setting_update_package
]
}
2 changes: 1 addition & 1 deletion backend/aurcache-api/src/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ use rocket::{State, delete, get, post};

use crate::models::authenticated::Authenticated;
use crate::models::builds::ListBuildsModel;
use aurcache_builder::types::{Action, BuildStates};
use aurcache_db::prelude::Builds;
use aurcache_db::{builds, packages};
use aurcache_types::builder::{Action, BuildStates};
use aurcache_utils::package::update::update_platform;
use sea_orm::{
ActiveModelTrait, ColumnTrait, DatabaseConnection, EntityTrait, JoinType, ModelTrait, Order,
Expand Down
4 changes: 3 additions & 1 deletion backend/aurcache-api/src/init.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use crate::embed::CustomHandler;
use crate::models::authenticated::OauthEnabled;
use crate::utils::config::oauth_config_from_env;
use aurcache_activitylog::activity_utils::ActivityLog;
use aurcache_builder::types::Action;
use aurcache_types::builder::Action;
use rocket::config::SecretKey;
use rocket::fairing::AdHoc;
use rocket::http::private::cookie::Key;
Expand Down Expand Up @@ -52,6 +52,7 @@ pub fn init_api(db: DatabaseConnection, tx: Sender<Action>) -> JoinHandle<()> {
(path = "/api", api = crate::package::PackageApi, tags = ["Package"]),
(path = "/api", api = crate::stats::StatsApi, tags = ["Stats"]),
(path = "/api", api = crate::activity::ActivityApi, tags = ["Activity"]),
(path = "/api", api = crate::settings::SettingsApi, tags = ["Settings"]),
),
tags(
(name = "AUR", description = "AUR management endpoints."),
Expand All @@ -61,6 +62,7 @@ pub fn init_api(db: DatabaseConnection, tx: Sender<Action>) -> JoinHandle<()> {
(name = "Package", description = "Package management endpoints."),
(name = "Stats", description = "Statistics endpoints."),
(name = "Activity", description = "Activity endpoints."),
(name = "Settings", description = "Settings endpoints."),
),
modifiers(&SecurityAddon)
)]
Expand Down
1 change: 1 addition & 0 deletions backend/aurcache-api/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ mod health;
pub mod init;
mod models;
mod package;
mod settings;
mod stats;
mod utils;
1 change: 1 addition & 0 deletions backend/aurcache-api/src/models/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ pub mod aur;
pub mod authenticated;
pub mod builds;
pub mod package;
pub mod settings;
pub mod stats;
91 changes: 91 additions & 0 deletions backend/aurcache-api/src/models/settings.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
use aurcache_types::settings::Setting;
use rocket::serde::{Deserialize, Serialize};
use serde::Deserializer;
use utoipa::ToSchema;

fn double_option<'de, T, D>(deserializer: D) -> Result<Option<Option<T>>, D::Error>
where
T: Deserialize<'de>,
D: Deserializer<'de>,
{
Ok(Some(Option::<T>::deserialize(deserializer)?))
}

impl ApplicationSettingsPatch {
pub fn get_changed_settings(
&self,
pkgid: Option<i32>,
) -> Vec<(Setting, Option<i32>, Option<String>)> {
let mut changedsettings = vec![];

// cpu limit
if let Some(cpu_limt) = self.cpu_limit {
changedsettings.push((Setting::CpuLimit, pkgid, cpu_limt.map(|v| v.to_string())))
}

// memory limit
if let Some(memory_limit) = self.memory_limit {
changedsettings.push((
Setting::MemoryLimit,
pkgid,
memory_limit.map(|v| v.to_string()),
))
}

if let Some(builder_image) = self.builder_image.clone() {
changedsettings.push((Setting::BuilderImage, pkgid, builder_image))
}

if let Some(job_timeout) = self.job_timeout {
changedsettings.push((
Setting::JobTimeout,
pkgid,
job_timeout.map(|v| v.to_string()),
))
}

if let Some(auto_update_interval) = self.auto_update_interval {
changedsettings.push((
Setting::AutoUpdateInterval,
pkgid,
auto_update_interval.map(|v| v.to_string()),
))
}

if let Some(max_concurrent_builds) = self.max_concurrent_builds {
changedsettings.push((
Setting::MaxConcurrentBuilds,
pkgid,
max_concurrent_builds.map(|v| v.to_string()),
))
}

if let Some(version_check_interval) = self.version_check_interval {
changedsettings.push((
Setting::VersionCheckInterval,
pkgid,
version_check_interval.map(|v| v.to_string()),
))
}
changedsettings
}
}

/// Patch request to change settings
#[derive(ToSchema, Deserialize, Serialize, Clone, Debug)]
pub struct ApplicationSettingsPatch {
#[serde(default, deserialize_with = "double_option")]
pub cpu_limit: Option<Option<u32>>,
#[serde(default, deserialize_with = "double_option")]
pub memory_limit: Option<Option<i32>>,
#[serde(default, deserialize_with = "double_option")]
pub max_concurrent_builds: Option<Option<u32>>,
#[serde(default, deserialize_with = "double_option")]
pub version_check_interval: Option<Option<u32>>,
#[serde(default, deserialize_with = "double_option")]
pub auto_update_interval: Option<Option<u32>>,
#[serde(default, deserialize_with = "double_option")]
pub job_timeout: Option<Option<u32>>,
#[serde(default, deserialize_with = "double_option")]
pub builder_image: Option<Option<String>>,
}
2 changes: 1 addition & 1 deletion backend/aurcache-api/src/package.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ use aurcache_activitylog::activity_utils::ActivityLog;
use aurcache_activitylog::package_add_activity::PackageAddActivity;
use aurcache_activitylog::package_delete_activity::PackageDeleteActivity;
use aurcache_activitylog::package_update_activity::PackageUpdateActivity;
use aurcache_builder::types::Action;
use aurcache_db::activities::ActivityType;
use aurcache_db::packages::SourceData;
use aurcache_db::prelude::{Builds, Packages};
use aurcache_db::{builds, packages};
use aurcache_types::builder::Action;
use aurcache_utils::aur::api::get_package_info;
use aurcache_utils::package::add::package_add;
use aurcache_utils::package::delete::package_delete;
Expand Down
79 changes: 79 additions & 0 deletions backend/aurcache-api/src/settings.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
use crate::models::authenticated::Authenticated;
use crate::models::settings::ApplicationSettingsPatch;
use aurcache_types::settings::ApplicationSettings;
use aurcache_utils::settings::general::SettingsTraits;
use rocket::response::status::{BadRequest, NotFound};
use rocket::serde::json::Json;
use rocket::{State, get, patch};
use sea_orm::DatabaseConnection;
use utoipa::OpenApi;

#[derive(OpenApi)]
#[openapi(paths(settings, setting_update_package, setting_update))]
pub struct SettingsApi;

#[utoipa::path(
responses(
(status = 200, description = "Get all settings", body = [ApplicationSettings]),
)
)]
#[get("/settings?<pkgid>")]
pub async fn settings(
db: &State<DatabaseConnection>,
pkgid: Option<i32>,
_a: Authenticated,
) -> Result<Json<ApplicationSettings>, NotFound<String>> {
let db = db as &DatabaseConnection;

ApplicationSettings::get_all(db, pkgid)
.await
.map(Json)
.map_err(|e| NotFound(e.to_string()))
}

#[utoipa::path(
responses(
(status = 200, description = "Update settings for specific package id"),
),
params(
("pkgid", description = "Id of package")
)
)]
#[patch("/setting/<pkgid>", data = "<input>")]
pub async fn setting_update_package(
db: &State<DatabaseConnection>,
input: Json<ApplicationSettingsPatch>,
pkgid: i32,
_a: Authenticated,
) -> Result<(), BadRequest<String>> {
let db = db as &DatabaseConnection;

let changed_settings = input.get_changed_settings(Some(pkgid));
ApplicationSettings::patch(db, changed_settings)
.await
.map(drop)
.map_err(|e| BadRequest(e.to_string()))
}

#[utoipa::path(
responses(
(status = 200, description = "Update global settings"),
),
params(

)
)]
#[patch("/setting", data = "<input>")]
pub async fn setting_update(
db: &State<DatabaseConnection>,
input: Json<ApplicationSettingsPatch>,
_a: Authenticated,
) -> Result<(), BadRequest<String>> {
let db = db as &DatabaseConnection;

let changed_settings = input.get_changed_settings(None);
ApplicationSettings::patch(db, changed_settings)
.await
.map(drop)
.map_err(|e| BadRequest(e.to_string()))
}
2 changes: 1 addition & 1 deletion backend/aurcache-api/src/stats.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ use rocket::serde::json::Json;

use crate::models::authenticated::Authenticated;
use crate::models::stats::{GraphDataPoint, ListStats, UserInfo};
use aurcache_builder::types::BuildStates;
use aurcache_db::builds;
use aurcache_db::helpers::dbtype::database_type;
use aurcache_db::prelude::{Builds, Packages};
use aurcache_types::builder::BuildStates;
use aurcache_utils::utils::dir_size::dir_size;
use rocket::{State, get};
use sea_orm::prelude::BigDecimal;
Expand Down
5 changes: 3 additions & 2 deletions backend/aurcache-builder/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,11 @@ flate2 = {workspace = true}
tar = {workspace = true}
tempfile = {workspace = true}

git2 = "0.20.3"
bollard = "0.19.4"
futures = "0.3.31"
tokio-util ={version = "0.7.17", features = ["io"]}

aurcache-db = {path = "../aurcache-db"}
pacman-repo-utils = {path = "../pacman-repo-utils"}
pacman-repo-utils = {path = "../pacman-repo-utils"}
aurcache-utils = {path = "../aurcache-utils"}
aurcache-types = {path = "../aurcache-types"}
Loading
Loading