[pbs-devel] [PATCH proxmox-backup 2/5] api: make expensive parts of datastore status opt-in
Fabian Grünbichler
f.gruenbichler at proxmox.com
Thu Nov 12 11:30:31 CET 2020
used in the PBS GUI, but also for PVE usage queries which don't need all
the extra expensive information..
Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
---
src/api2/admin/datastore.rs | 16 ++++++++++++++--
src/api2/types/mod.rs | 16 ++++++++++++----
www/datastore/Summary.js | 2 +-
3 files changed, 27 insertions(+), 7 deletions(-)
diff --git a/src/api2/admin/datastore.rs b/src/api2/admin/datastore.rs
index df666156..857fb903 100644
--- a/src/api2/admin/datastore.rs
+++ b/src/api2/admin/datastore.rs
@@ -525,7 +525,14 @@ fn get_snapshots_count(store: &DataStore) -> Result<Counts, Error> {
store: {
schema: DATASTORE_SCHEMA,
},
+ verbose: {
+ type: bool,
+ default: false,
+ optional: true,
+ description: "Include additional information like snapshot counts and GC status.",
+ },
},
+
},
returns: {
type: DataStoreStatus,
@@ -537,13 +544,18 @@ fn get_snapshots_count(store: &DataStore) -> Result<Counts, Error> {
/// Get datastore status.
pub fn status(
store: String,
+ verbose: bool,
_info: &ApiMethod,
_rpcenv: &mut dyn RpcEnvironment,
) -> Result<DataStoreStatus, Error> {
let datastore = DataStore::lookup_datastore(&store)?;
let storage = crate::tools::disks::disk_usage(&datastore.base_path())?;
- let counts = get_snapshots_count(&datastore)?;
- let gc_status = datastore.last_gc_status();
+ let (counts, gc_status) = match verbose {
+ true => {
+ (Some(get_snapshots_count(&datastore)?), Some(datastore.last_gc_status()))
+ },
+ false => (None, None),
+ };
Ok(DataStoreStatus {
total: storage.total,
diff --git a/src/api2/types/mod.rs b/src/api2/types/mod.rs
index 59323327..44cfef94 100644
--- a/src/api2/types/mod.rs
+++ b/src/api2/types/mod.rs
@@ -707,8 +707,14 @@ pub struct Counts {
#[api(
properties: {
- "gc-status": { type: GarbageCollectionStatus, },
- counts: { type: Counts, }
+ "gc-status": {
+ type: GarbageCollectionStatus,
+ optional: true,
+ },
+ counts: {
+ type: Counts,
+ optional: true,
+ },
},
)]
#[derive(Serialize, Deserialize)]
@@ -722,9 +728,11 @@ pub struct DataStoreStatus {
/// Available space (bytes).
pub avail: u64,
/// Status of last GC
- pub gc_status: GarbageCollectionStatus,
+ #[serde(skip_serializing_if="Option::is_none")]
+ pub gc_status: Option<GarbageCollectionStatus>,
/// Group/Snapshot counts
- pub counts: Counts,
+ #[serde(skip_serializing_if="Option::is_none")]
+ pub counts: Option<Counts>,
}
#[api(
diff --git a/www/datastore/Summary.js b/www/datastore/Summary.js
index 41fd7c85..5e7cfede 100644
--- a/www/datastore/Summary.js
+++ b/www/datastore/Summary.js
@@ -78,7 +78,7 @@ Ext.define('PBS.DataStoreInfo', {
let datastore = encodeURIComponent(view.datastore);
me.store = Ext.create('Proxmox.data.ObjectStore', {
interval: 5*1000,
- url: `/api2/json/admin/datastore/${datastore}/status`,
+ url: `/api2/json/admin/datastore/${datastore}/status/?verbose=true`,
});
me.store.on('load', me.onLoad, me);
},
--
2.20.1
More information about the pbs-devel
mailing list