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,7 +525,14 @@ fn get_snapshots_count(store: &DataStore) -> Result<Counts, Error> {
|
|||||||
store: {
|
store: {
|
||||||
schema: DATASTORE_SCHEMA,
|
schema: DATASTORE_SCHEMA,
|
||||||
},
|
},
|
||||||
|
verbose: {
|
||||||
|
type: bool,
|
||||||
|
default: false,
|
||||||
|
optional: true,
|
||||||
|
description: "Include additional information like snapshot counts and GC status.",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
returns: {
|
returns: {
|
||||||
type: DataStoreStatus,
|
type: DataStoreStatus,
|
||||||
@ -537,13 +544,18 @@ fn get_snapshots_count(store: &DataStore) -> Result<Counts, Error> {
|
|||||||
/// Get datastore status.
|
/// Get datastore status.
|
||||||
pub fn status(
|
pub fn status(
|
||||||
store: String,
|
store: String,
|
||||||
|
verbose: bool,
|
||||||
_info: &ApiMethod,
|
_info: &ApiMethod,
|
||||||
_rpcenv: &mut dyn RpcEnvironment,
|
_rpcenv: &mut dyn RpcEnvironment,
|
||||||
) -> Result<DataStoreStatus, Error> {
|
) -> Result<DataStoreStatus, Error> {
|
||||||
let datastore = DataStore::lookup_datastore(&store)?;
|
let datastore = DataStore::lookup_datastore(&store)?;
|
||||||
let storage = crate::tools::disks::disk_usage(&datastore.base_path())?;
|
let storage = crate::tools::disks::disk_usage(&datastore.base_path())?;
|
||||||
let counts = get_snapshots_count(&datastore)?;
|
let (counts, gc_status) = match verbose {
|
||||||
let gc_status = datastore.last_gc_status();
|
true => {
|
||||||
|
(Some(get_snapshots_count(&datastore)?), Some(datastore.last_gc_status()))
|
||||||
|
},
|
||||||
|
false => (None, None),
|
||||||
|
};
|
||||||
|
|
||||||
Ok(DataStoreStatus {
|
Ok(DataStoreStatus {
|
||||||
total: storage.total,
|
total: storage.total,
|
||||||
|
@ -707,8 +707,14 @@ pub struct Counts {
|
|||||||
|
|
||||||
#[api(
|
#[api(
|
||||||
properties: {
|
properties: {
|
||||||
"gc-status": { type: GarbageCollectionStatus, },
|
"gc-status": {
|
||||||
counts: { type: Counts, }
|
type: GarbageCollectionStatus,
|
||||||
|
optional: true,
|
||||||
|
},
|
||||||
|
counts: {
|
||||||
|
type: Counts,
|
||||||
|
optional: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
)]
|
)]
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
@ -722,9 +728,11 @@ pub struct DataStoreStatus {
|
|||||||
/// Available space (bytes).
|
/// Available space (bytes).
|
||||||
pub avail: u64,
|
pub avail: u64,
|
||||||
/// Status of last GC
|
/// Status of last GC
|
||||||
pub gc_status: GarbageCollectionStatus,
|
#[serde(skip_serializing_if="Option::is_none")]
|
||||||
|
pub gc_status: Option<GarbageCollectionStatus>,
|
||||||
/// Group/Snapshot counts
|
/// Group/Snapshot counts
|
||||||
pub counts: Counts,
|
#[serde(skip_serializing_if="Option::is_none")]
|
||||||
|
pub counts: Option<Counts>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[api(
|
#[api(
|
||||||
|
@ -78,7 +78,7 @@ Ext.define('PBS.DataStoreInfo', {
|
|||||||
let datastore = encodeURIComponent(view.datastore);
|
let datastore = encodeURIComponent(view.datastore);
|
||||||
me.store = Ext.create('Proxmox.data.ObjectStore', {
|
me.store = Ext.create('Proxmox.data.ObjectStore', {
|
||||||
interval: 5*1000,
|
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);
|
me.store.on('load', me.onLoad, me);
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user