src/api2/types.rs: define and use api type GarbageCollectionStatus
This commit is contained in:
		| @ -509,32 +509,30 @@ fn start_garbage_collection( | ||||
|     Ok(json!(upid_str)) | ||||
| } | ||||
|  | ||||
| #[sortable] | ||||
| pub const API_METHOD_GARBAGE_COLLECTION_STATUS: ApiMethod = ApiMethod::new( | ||||
|     &ApiHandler::Sync(&garbage_collection_status), | ||||
|     &ObjectSchema::new( | ||||
|         "Garbage collection status.", | ||||
|         &sorted!([ | ||||
|             ("store", false, &DATASTORE_SCHEMA), | ||||
|         ]) | ||||
|     ) | ||||
| ); | ||||
|  | ||||
| #[api( | ||||
|     input: { | ||||
|         properties: { | ||||
|             store: { | ||||
|                 schema: DATASTORE_SCHEMA, | ||||
|             }, | ||||
|         }, | ||||
|     }, | ||||
|     returns: { | ||||
|         type: GarbageCollectionStatus, | ||||
|     } | ||||
| )] | ||||
| /// Garbage collection status. | ||||
| fn garbage_collection_status( | ||||
|     param: Value, | ||||
|     store: String, | ||||
|     _info: &ApiMethod, | ||||
|     _rpcenv: &mut dyn RpcEnvironment, | ||||
| ) -> Result<Value, Error> { | ||||
|  | ||||
|     let store = param["store"].as_str().unwrap(); | ||||
| ) -> Result<GarbageCollectionStatus, Error> { | ||||
|  | ||||
|     let datastore = DataStore::lookup_datastore(&store)?; | ||||
|  | ||||
|     println!("Garbage collection status on store {}", store); | ||||
|  | ||||
|     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>, | ||||
| } | ||||
|  | ||||
| #[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()] | ||||
| #[derive(Serialize, Deserialize)] | ||||
| /// Storage space usage information. | ||||
|  | ||||
| @ -4,39 +4,15 @@ use std::path::{Path, PathBuf}; | ||||
| use std::io::Write; | ||||
| use std::sync::{Arc, Mutex}; | ||||
| use std::os::unix::io::AsRawFd; | ||||
| use serde::Serialize; | ||||
|  | ||||
| use proxmox::tools::fs::{CreateOptions, create_path, create_dir}; | ||||
|  | ||||
| use crate::tools; | ||||
| use crate::api2::types::GarbageCollectionStatus; | ||||
|  | ||||
| use super::DataBlob; | ||||
| 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 | ||||
| pub struct ChunkStore { | ||||
|     name: String, // used for error reporting | ||||
|  | ||||
| @ -8,7 +8,7 @@ use lazy_static::lazy_static; | ||||
| use chrono::{DateTime, Utc}; | ||||
|  | ||||
| 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::fixed_index::{FixedIndexReader, FixedIndexWriter}; | ||||
| use super::manifest::{MANIFEST_BLOB_NAME, BackupManifest}; | ||||
| @ -17,6 +17,7 @@ use super::{DataBlob, ArchiveType, archive_type}; | ||||
| use crate::config::datastore; | ||||
| use crate::server::WorkerTask; | ||||
| use crate::tools; | ||||
| use crate::api2::types::GarbageCollectionStatus; | ||||
|  | ||||
| lazy_static! { | ||||
|     static ref DATASTORE_MAP: Mutex<HashMap<String, Arc<DataStore>>> = Mutex::new(HashMap::new()); | ||||
|  | ||||
		Reference in New Issue
	
	Block a user