From 5ba1cc070db6ff8f550101535ade5ba3a4f700be Mon Sep 17 00:00:00 2001 From: Jared Vititoe Date: Sat, 1 Mar 2025 11:58:15 -0500 Subject: [PATCH] moved functions before execution and changed to vertical --- driveAtlas.sh | 130 ++++++++++++++++++++++++-------------------------- 1 file changed, 63 insertions(+), 67 deletions(-) diff --git a/driveAtlas.sh b/driveAtlas.sh index bbdb484..65e0992 100644 --- a/driveAtlas.sh +++ b/driveAtlas.sh @@ -1,5 +1,37 @@ #!/bin/bash +get_device_info() { + local pci_addr=$1 + local info=$(lspci -s "$pci_addr") + echo "$info" +} + +get_drive_details() { + local device=$1 + local size=$(lsblk -d -o NAME,SIZE | grep "$device" | awk '{print $2}') + echo "$size" +} + +get_drive_smart_info() { + local device=$1 + local smart_info=$(sudo smartctl -A -i -H /dev/$device 2>/dev/null) + local temp=$(echo "$smart_info" | grep "Temperature" | awk '{print $10}' | head -1) + local type=$(echo "$smart_info" | grep "Rotation Rate" | grep -q "Solid State" && echo "SSD" || echo "HDD") + local health=$(echo "$smart_info" | grep "SMART overall-health" | grep -q "PASSED" && echo "✓" || echo "✗") + local model=$(echo "$smart_info" | grep "Device Model" | cut -d: -f2 | xargs) + + echo "$type|$temp°C|$health|$model" +} + +get_drives_info() { + local path="/dev/disk/by-path" + for drive in "$path"/*; do + if [ -L "$drive" ]; then + echo "$(basename "$drive") $(readlink -f "$drive")" + fi + done +} + # Define the ASCII art maps large1=''' ┌─────────────────────────────────────────────────────────────┐ @@ -55,49 +87,44 @@ medium1=''' ''' generate_medium2_layout() { - local usb_drives=$(ls -l /dev/disk/by-path/pci-0000:0b:00.0* | awk -F'/' '{print $NF}') - local sata_drives=$(ls -l /dev/disk/by-path/pci-0000:0c:00.0-ata-* | grep -v "part" | awk -F'/' '{print $NF}') - local nvme_drive=$(ls -l /dev/disk/by-path/pci-0000:0d:00.0* | awk -F'/' '{print $NF}') + local usb_drives=$(ls -l /dev/disk/by-path/pci-0000:0b:00.0* 2>/dev/null | awk -F'/' '{print $NF}') + local sata_drives=$(ls -l /dev/disk/by-path/pci-0000:0c:00.0-ata-* 2>/dev/null | grep -v "part" | awk -F'/' '{print $NF}') + local nvme_drive=$(ls -l /dev/disk/by-path/pci-0000:0d:00.0* 2>/dev/null | awk -F'/' '{print $NF}') - echo " External USB [0b:00.0]" - for usb in $usb_drives; do - size=$(get_drive_details $usb) - smart_info=$(get_drive_smart_info $usb) - echo " ┌────────────────────┐" - echo " │ $usb ($size) │" - echo " │ $smart_info │" - echo " └────────────────────┘" - done + # Print header + printf "┌──────────────────────────────────────────────────────────────┐\n" + printf "│ B650D4U3-2Q/BCM │\n" + printf "│ │\n" - cat << EOF -┌──────────────────────────────────────────────────────────────┐ -│ B650D4U3-2Q/BCM │ -│ │ -│ NVMe [0d:00.0] │ -│ ┌────────────────────┐ │ -│ │ $nvme_drive │ │ -│ │ $(get_drive_smart_info $nvme_drive) │ -│ └────────────────────┘ │ -│ │ -│ Front Hot-swap Bays [0c:00.0] │ -EOF + # Print NVMe section + printf "│ NVMe [0d:00.0] │\n" + if [ -n "$nvme_drive" ]; then + local nvme_info=$(get_drive_smart_info "$nvme_drive") + printf "│ ┌────────────────────┐ │\n" + printf "│ │ %-18s │ │\n" "$nvme_drive" + printf "│ │ %-18s │ │\n" "$nvme_info" + printf "│ └────────────────────┘ │\n" + fi + + # Print SATA drives section + printf "│ │\n" + printf "│ Front Hot-swap Bays [0c:00.0] │\n" for i in {1..10}; do - drive=$(echo "$sata_drives" | grep "ata-$i" || echo "empty") - if [ "$drive" != "empty" ]; then - size=$(get_drive_details $drive) - smart_info=$(get_drive_smart_info $drive) - echo "│ ┌────────────────────┐ │" - echo "│ │ Bay $i: $drive │ │" - echo "│ │ $size | $smart_info│ │" - echo "│ └────────────────────┘ │" + local drive=$(echo "$sata_drives" | grep "ata-$i" || echo "") + printf "│ ┌────────────────────┐ │\n" + if [ -n "$drive" ]; then + local size=$(get_drive_details "$drive") + local smart_info=$(get_drive_smart_info "$drive") + printf "│ │ Bay %-2d: %-10s │ │\n" "$i" "$drive" + printf "│ │ %-18s │ │\n" "$size $smart_info" else - echo "│ ┌────────────────────┐ │" - echo "│ │ Bay $i: [EMPTY] │ │" - echo "│ └────────────────────┘ │" + printf "│ │ Bay %-2d: [EMPTY] │ │\n" "$i" fi + printf "│ └────────────────────┘ │\n" done - echo "└──────────────────────────────────────────────────────────────┘" + + printf "└──────────────────────────────────────────────────────────────┘\n" } microGeneric=''' @@ -148,29 +175,6 @@ map_drives_to_layout() { esac } -get_device_info() { - local pci_addr=$1 - local info=$(lspci -s "$pci_addr") - echo "$info" -} - -get_drive_details() { - local device=$1 - local size=$(lsblk -d -o NAME,SIZE | grep "$device" | awk '{print $2}') - echo "$size" -} - -get_drive_smart_info() { - local device=$1 - local smart_info=$(sudo smartctl -A -i -H /dev/$device 2>/dev/null) - local temp=$(echo "$smart_info" | grep "Temperature" | awk '{print $10}' | head -1) - local type=$(echo "$smart_info" | grep "Rotation Rate" | grep -q "Solid State" && echo "SSD" || echo "HDD") - local health=$(echo "$smart_info" | grep "SMART overall-health" | grep -q "PASSED" && echo "✓" || echo "✗") - local model=$(echo "$smart_info" | grep "Device Model" | cut -d: -f2 | xargs) - - echo "$type|$temp°C|$health|$model" -} - #get_drive_details() { # local position=$1 # # Get drive info from lsblk and nvme list @@ -192,14 +196,6 @@ get_drive_smart_info() { #} # Enhanced Drive Information Function -get_drives_info() { - local path="/dev/disk/by-path" - for drive in "$path"/*; do - if [ -L "$drive" ]; then - echo "$(basename "$drive") $(readlink -f "$drive")" - fi - done -} update_ascii_layout() { local layout="$1"