api: datastore_status: restore api/gui compatibility
the latest changes to this api call changed/removed some things that were actually necessary for the gui. Readd those and document them this time. The change from u64 to i64 limits us to 8EiB of Datastore sizes (instead if 16EiB) but if we reach that, we must adapt most other parts to use 128bit sizes anyway Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
parent
762f7d15dc
commit
39ffb75d91
|
@ -653,25 +653,30 @@ pub struct DataStoreStatus {
|
||||||
/// Status of a Datastore
|
/// Status of a Datastore
|
||||||
pub struct DataStoreStatusListItem {
|
pub struct DataStoreStatusListItem {
|
||||||
pub store: String,
|
pub store: String,
|
||||||
/// The Size of the underlying storage in bytes.
|
/// The Size of the underlying storage in bytes. (-1 on error)
|
||||||
pub total: u64,
|
pub total: i64,
|
||||||
/// The used bytes of the underlying storage.
|
/// The used bytes of the underlying storage. (-1 on error)
|
||||||
pub used: u64,
|
pub used: i64,
|
||||||
/// The available bytes of the underlying storage.
|
/// The available bytes of the underlying storage. (-1 on error)
|
||||||
pub avail: u64,
|
pub avail: i64,
|
||||||
/// A list of usages of the past (last Month).
|
/// A list of usages of the past (last Month).
|
||||||
|
#[serde(skip_serializing_if="Option::is_none")]
|
||||||
pub history: Option<Vec<Option<f64>>>,
|
pub history: Option<Vec<Option<f64>>>,
|
||||||
/// History start time (epoch)
|
/// History start time (epoch)
|
||||||
|
#[serde(skip_serializing_if="Option::is_none")]
|
||||||
pub history_start: Option<u64>,
|
pub history_start: Option<u64>,
|
||||||
/// History resolution (seconds)
|
/// History resolution (seconds)
|
||||||
|
#[serde(skip_serializing_if="Option::is_none")]
|
||||||
pub history_delta: Option<u64>,
|
pub history_delta: Option<u64>,
|
||||||
/// Estimation of the UNIX epoch when the storage will be full.
|
/// Estimation of the UNIX epoch when the storage will be full.
|
||||||
/// This is calculated via a simple Linear Regression (Least
|
/// This is calculated via a simple Linear Regression (Least
|
||||||
/// Squares) of RRD data of the last Month. Missing if there are
|
/// Squares) of RRD data of the last Month. Missing if there are
|
||||||
/// not enough data points yet. If the estimate lies in the past,
|
/// not enough data points yet. If the estimate lies in the past,
|
||||||
/// the usage is decreasing.
|
/// the usage is decreasing or not changing.
|
||||||
|
#[serde(skip_serializing_if="Option::is_none")]
|
||||||
pub estimated_full_date: Option<i64>,
|
pub estimated_full_date: Option<i64>,
|
||||||
/// An error description, for example, when the datastore could not be looked up
|
/// An error description, for example, when the datastore could not be looked up
|
||||||
|
#[serde(skip_serializing_if="Option::is_none")]
|
||||||
pub error: Option<String>,
|
pub error: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -62,9 +62,9 @@ pub fn datastore_status(
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
list.push(DataStoreStatusListItem {
|
list.push(DataStoreStatusListItem {
|
||||||
store: store.clone(),
|
store: store.clone(),
|
||||||
total: 0,
|
total: -1,
|
||||||
used: 0,
|
used: -1,
|
||||||
avail: 0,
|
avail: -1,
|
||||||
history: None,
|
history: None,
|
||||||
history_start: None,
|
history_start: None,
|
||||||
history_delta: None,
|
history_delta: None,
|
||||||
|
@ -78,9 +78,9 @@ pub fn datastore_status(
|
||||||
|
|
||||||
let mut entry = DataStoreStatusListItem {
|
let mut entry = DataStoreStatusListItem {
|
||||||
store: store.clone(),
|
store: store.clone(),
|
||||||
total: status.total,
|
total: status.total as i64,
|
||||||
used: status.used,
|
used: status.used as i64,
|
||||||
avail: status.avail,
|
avail: status.avail as i64,
|
||||||
history: None,
|
history: None,
|
||||||
history_start: None,
|
history_start: None,
|
||||||
history_delta: None,
|
history_delta: None,
|
||||||
|
@ -133,6 +133,7 @@ pub fn datastore_status(
|
||||||
if usage_list.len() >= 7 {
|
if usage_list.len() >= 7 {
|
||||||
entry.estimated_full_date = match linear_regression(&time_list, &usage_list) {
|
entry.estimated_full_date = match linear_regression(&time_list, &usage_list) {
|
||||||
Some((a, b)) if b != 0.0 => Some(((1.0 - a) / b).floor() as i64),
|
Some((a, b)) if b != 0.0 => Some(((1.0 - a) / b).floor() as i64),
|
||||||
|
Some((_, b)) if b == 0.0 => Some(0), // infinite estimate, set to past for gui to detect
|
||||||
_ => None,
|
_ => None,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue