diff --git a/pbs-api-types/src/datastore.rs b/pbs-api-types/src/datastore.rs index 36d86c98..158ae140 100644 --- a/pbs-api-types/src/datastore.rs +++ b/pbs-api-types/src/datastore.rs @@ -653,25 +653,30 @@ pub struct DataStoreStatus { /// Status of a Datastore pub struct DataStoreStatusListItem { pub store: String, - /// The Size of the underlying storage in bytes. - pub total: u64, - /// The used bytes of the underlying storage. - pub used: u64, - /// The available bytes of the underlying storage. - pub avail: u64, + /// The Size of the underlying storage in bytes. (-1 on error) + pub total: i64, + /// The used bytes of the underlying storage. (-1 on error) + pub used: i64, + /// The available bytes of the underlying storage. (-1 on error) + pub avail: i64, /// A list of usages of the past (last Month). + #[serde(skip_serializing_if="Option::is_none")] pub history: Option>>, /// History start time (epoch) + #[serde(skip_serializing_if="Option::is_none")] pub history_start: Option, /// History resolution (seconds) + #[serde(skip_serializing_if="Option::is_none")] pub history_delta: Option, /// Estimation of the UNIX epoch when the storage will be full. /// This is calculated via a simple Linear Regression (Least /// Squares) of RRD data of the last Month. Missing if there are /// 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, /// An error description, for example, when the datastore could not be looked up + #[serde(skip_serializing_if="Option::is_none")] pub error: Option, } diff --git a/src/api2/status.rs b/src/api2/status.rs index 2da512e1..b422baba 100644 --- a/src/api2/status.rs +++ b/src/api2/status.rs @@ -62,9 +62,9 @@ pub fn datastore_status( Err(err) => { list.push(DataStoreStatusListItem { store: store.clone(), - total: 0, - used: 0, - avail: 0, + total: -1, + used: -1, + avail: -1, history: None, history_start: None, history_delta: None, @@ -78,9 +78,9 @@ pub fn datastore_status( let mut entry = DataStoreStatusListItem { store: store.clone(), - total: status.total, - used: status.used, - avail: status.avail, + total: status.total as i64, + used: status.used as i64, + avail: status.avail as i64, history: None, history_start: None, history_delta: None, @@ -133,6 +133,7 @@ pub fn datastore_status( if usage_list.len() >= 7 { 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((_, b)) if b == 0.0 => Some(0), // infinite estimate, set to past for gui to detect _ => None, }; }