src/api2/types.rs: define and use api type GarbageCollectionStatus
This commit is contained in:
parent
dfc58d47ad
commit
a92830dc39
@ -509,32 +509,30 @@ fn start_garbage_collection(
|
|||||||
Ok(json!(upid_str))
|
Ok(json!(upid_str))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[sortable]
|
#[api(
|
||||||
pub const API_METHOD_GARBAGE_COLLECTION_STATUS: ApiMethod = ApiMethod::new(
|
input: {
|
||||||
&ApiHandler::Sync(&garbage_collection_status),
|
properties: {
|
||||||
&ObjectSchema::new(
|
store: {
|
||||||
"Garbage collection status.",
|
schema: DATASTORE_SCHEMA,
|
||||||
&sorted!([
|
},
|
||||||
("store", false, &DATASTORE_SCHEMA),
|
},
|
||||||
])
|
},
|
||||||
)
|
returns: {
|
||||||
);
|
type: GarbageCollectionStatus,
|
||||||
|
}
|
||||||
|
)]
|
||||||
|
/// Garbage collection status.
|
||||||
fn garbage_collection_status(
|
fn garbage_collection_status(
|
||||||
param: Value,
|
store: String,
|
||||||
_info: &ApiMethod,
|
_info: &ApiMethod,
|
||||||
_rpcenv: &mut dyn RpcEnvironment,
|
_rpcenv: &mut dyn RpcEnvironment,
|
||||||
) -> Result<Value, Error> {
|
) -> Result<GarbageCollectionStatus, Error> {
|
||||||
|
|
||||||
let store = param["store"].as_str().unwrap();
|
|
||||||
|
|
||||||
let datastore = DataStore::lookup_datastore(&store)?;
|
let datastore = DataStore::lookup_datastore(&store)?;
|
||||||
|
|
||||||
println!("Garbage collection status on store {}", store);
|
|
||||||
|
|
||||||
let status = datastore.last_gc_status();
|
let status = datastore.last_gc_status();
|
||||||
|
|
||||||
Ok(serde_json::to_value(&status)?)
|
Ok(status)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -276,6 +276,48 @@ pub struct BackupContent {
|
|||||||
pub size: Option<u64>,
|
pub size: Option<u64>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[api(
|
||||||
|
properties: {
|
||||||
|
"upid": {
|
||||||
|
optional: true,
|
||||||
|
schema: UPID_SCHEMA,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)]
|
||||||
|
#[derive(Clone, Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all="kebab-case")]
|
||||||
|
/// Garbage collection status.
|
||||||
|
pub struct GarbageCollectionStatus {
|
||||||
|
pub upid: Option<String>,
|
||||||
|
/// Number of processed index files.
|
||||||
|
pub index_file_count: usize,
|
||||||
|
/// Sum of bytes referred by index files.
|
||||||
|
pub index_data_bytes: u64,
|
||||||
|
/// Bytes used on disk.
|
||||||
|
pub disk_bytes: u64,
|
||||||
|
/// Chunks used on disk.
|
||||||
|
pub disk_chunks: usize,
|
||||||
|
/// Sum of removed bytes.
|
||||||
|
pub removed_bytes: u64,
|
||||||
|
/// Number of removed chunks.
|
||||||
|
pub removed_chunks: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for GarbageCollectionStatus {
|
||||||
|
fn default() -> Self {
|
||||||
|
GarbageCollectionStatus {
|
||||||
|
upid: None,
|
||||||
|
index_file_count: 0,
|
||||||
|
index_data_bytes: 0,
|
||||||
|
disk_bytes: 0,
|
||||||
|
disk_chunks: 0,
|
||||||
|
removed_bytes: 0,
|
||||||
|
removed_chunks: 0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#[api()]
|
#[api()]
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
/// Storage space usage information.
|
/// Storage space usage information.
|
||||||
|
@ -4,39 +4,15 @@ use std::path::{Path, PathBuf};
|
|||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
use std::os::unix::io::AsRawFd;
|
use std::os::unix::io::AsRawFd;
|
||||||
use serde::Serialize;
|
|
||||||
|
|
||||||
use proxmox::tools::fs::{CreateOptions, create_path, create_dir};
|
use proxmox::tools::fs::{CreateOptions, create_path, create_dir};
|
||||||
|
|
||||||
use crate::tools;
|
use crate::tools;
|
||||||
|
use crate::api2::types::GarbageCollectionStatus;
|
||||||
|
|
||||||
use super::DataBlob;
|
use super::DataBlob;
|
||||||
use crate::server::WorkerTask;
|
use crate::server::WorkerTask;
|
||||||
|
|
||||||
#[derive(Clone, Serialize)]
|
|
||||||
pub struct GarbageCollectionStatus {
|
|
||||||
pub upid: Option<String>,
|
|
||||||
pub index_file_count: usize,
|
|
||||||
pub index_data_bytes: u64,
|
|
||||||
pub disk_bytes: u64,
|
|
||||||
pub disk_chunks: usize,
|
|
||||||
pub removed_bytes: u64,
|
|
||||||
pub removed_chunks: usize,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Default for GarbageCollectionStatus {
|
|
||||||
fn default() -> Self {
|
|
||||||
GarbageCollectionStatus {
|
|
||||||
upid: None,
|
|
||||||
index_file_count: 0,
|
|
||||||
index_data_bytes: 0,
|
|
||||||
disk_bytes: 0,
|
|
||||||
disk_chunks: 0,
|
|
||||||
removed_bytes: 0,
|
|
||||||
removed_chunks: 0,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// File system based chunk store
|
/// File system based chunk store
|
||||||
pub struct ChunkStore {
|
pub struct ChunkStore {
|
||||||
name: String, // used for error reporting
|
name: String, // used for error reporting
|
||||||
|
@ -8,7 +8,7 @@ use lazy_static::lazy_static;
|
|||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
|
|
||||||
use super::backup_info::{BackupGroup, BackupDir};
|
use super::backup_info::{BackupGroup, BackupDir};
|
||||||
use super::chunk_store::{ChunkStore, GarbageCollectionStatus};
|
use super::chunk_store::ChunkStore;
|
||||||
use super::dynamic_index::{DynamicIndexReader, DynamicIndexWriter};
|
use super::dynamic_index::{DynamicIndexReader, DynamicIndexWriter};
|
||||||
use super::fixed_index::{FixedIndexReader, FixedIndexWriter};
|
use super::fixed_index::{FixedIndexReader, FixedIndexWriter};
|
||||||
use super::manifest::{MANIFEST_BLOB_NAME, BackupManifest};
|
use super::manifest::{MANIFEST_BLOB_NAME, BackupManifest};
|
||||||
@ -17,6 +17,7 @@ use super::{DataBlob, ArchiveType, archive_type};
|
|||||||
use crate::config::datastore;
|
use crate::config::datastore;
|
||||||
use crate::server::WorkerTask;
|
use crate::server::WorkerTask;
|
||||||
use crate::tools;
|
use crate::tools;
|
||||||
|
use crate::api2::types::GarbageCollectionStatus;
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref DATASTORE_MAP: Mutex<HashMap<String, Arc<DataStore>>> = Mutex::new(HashMap::new());
|
static ref DATASTORE_MAP: Mutex<HashMap<String, Arc<DataStore>>> = Mutex::new(HashMap::new());
|
||||||
|
Loading…
Reference in New Issue
Block a user