From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 1AB956B3CA for ; Thu, 18 Feb 2021 15:40:35 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id A8921F6D6 for ; Thu, 18 Feb 2021 15:40:34 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id EE5D0F64C for ; Thu, 18 Feb 2021 15:40:31 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id B5CF8461E3 for ; Thu, 18 Feb 2021 15:40:31 +0100 (CET) From: Dominik Csapak To: pbs-devel@lists.proxmox.com Date: Thu, 18 Feb 2021 15:40:27 +0100 Message-Id: <20210218144030.16778-8-d.csapak@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210218144030.16778-1-d.csapak@proxmox.com> References: <20210218144030.16778-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.216 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pbs-devel] [PATCH proxmox-backup 08/11] api2/tape/changer: add drive state to changer status output X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Feb 2021 14:40:35 -0000 if we can find the drive in the config and it has a state Signed-off-by: Dominik Csapak --- src/api2/tape/changer.rs | 22 ++++++++++++++++++++++ src/api2/types/tape/changer.rs | 3 +++ 2 files changed, 25 insertions(+) diff --git a/src/api2/tape/changer.rs b/src/api2/tape/changer.rs index dc98d85b..212ca8eb 100644 --- a/src/api2/tape/changer.rs +++ b/src/api2/tape/changer.rs @@ -1,3 +1,4 @@ +use std::collections::HashMap; use std::path::Path; use anyhow::Error; @@ -11,6 +12,7 @@ use crate::{ api2::types::{ CHANGER_NAME_SCHEMA, ChangerListEntry, + LinuxTapeDrive, MtxEntryKind, MtxStatusEntry, ScsiTapeChanger, @@ -25,6 +27,7 @@ use crate::{ ScsiMediaChange, mtx_status_to_online_set, }, + drive::get_tape_device_state, lookup_device_identification, }, }; @@ -66,9 +69,26 @@ pub async fn get_status(name: String) -> Result, Error> { inventory.update_online_status(&map)?; + let drive_list: Vec = config.convert_to_typed_array("linux")?; + let mut drive_map: HashMap = HashMap::new(); + + for drive in drive_list { + if let Some(changer) = drive.changer { + if changer != name { + continue; + } + let num = drive.changer_drivenum.unwrap_or(0); + drive_map.insert(num, drive.name.clone()); + } + } + let mut list = Vec::new(); for (id, drive_status) in status.drives.iter().enumerate() { + let mut state = None; + if let Some(drive) = drive_map.get(&(id as u64)) { + state = get_tape_device_state(&config, &drive)?; + } let entry = MtxStatusEntry { entry_kind: MtxEntryKind::Drive, entry_id: id as u64, @@ -78,6 +98,7 @@ pub async fn get_status(name: String) -> Result, Error> { ElementStatus::VolumeTag(tag) => Some(tag.to_string()), }, loaded_slot: drive_status.loaded_slot, + state, }; list.push(entry); } @@ -96,6 +117,7 @@ pub async fn get_status(name: String) -> Result, Error> { ElementStatus::VolumeTag(tag) => Some(tag.to_string()), }, loaded_slot: None, + state: None, }; list.push(entry); } diff --git a/src/api2/types/tape/changer.rs b/src/api2/types/tape/changer.rs index f9d30acd..780bf669 100644 --- a/src/api2/types/tape/changer.rs +++ b/src/api2/types/tape/changer.rs @@ -129,4 +129,7 @@ pub struct MtxStatusEntry { /// The slot the drive was loaded from #[serde(skip_serializing_if="Option::is_none")] pub loaded_slot: Option, + /// The current state of the drive + #[serde(skip_serializing_if="Option::is_none")] + pub state: Option, } -- 2.20.1