src/api2/types.rs: define and use api type GarbageCollectionStatus

This commit is contained in:
Dietmar Maurer 2020-01-23 13:31:52 +01:00
parent dfc58d47ad
commit a92830dc39
4 changed files with 62 additions and 45 deletions

View File

@ -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)
} }

View File

@ -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.

View File

@ -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

View File

@ -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());