api: make expensive parts of datastore status opt-in
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@proxmox.com>
This commit is contained in:
parent
0d08fceeb9
commit
98afc7b152
@ -525,8 +525,15 @@ 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,
|
||||
|
@ -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(
|
||||
|
@ -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);
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user