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)) |     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()); | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user