Cache lspci output in get_storage_controllers
The lspci command is now called only once on first invocation of get_storage_controllers, with results cached in LSPCI_CACHE. Subsequent calls from different layout generators (10bay, large1, micro) reuse the cached output, reducing subprocess overhead. Also added function documentation. Fixes: #17 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -520,12 +520,29 @@ declare -A CHASSIS_TYPES=(
|
|||||||
# Core Functions
|
# Core Functions
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Cache for lspci output (populated on first call)
|
||||||
|
LSPCI_CACHE=""
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# get_storage_controllers
|
||||||
|
#
|
||||||
|
# Returns a formatted list of storage controllers found via lspci.
|
||||||
|
# Uses cached output if available to avoid redundant lspci calls.
|
||||||
|
#
|
||||||
|
# Output Format: " PCI_ADDR: DESCRIPTION" (one per line)
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
get_storage_controllers() {
|
get_storage_controllers() {
|
||||||
# Returns a formatted list of storage controllers (HBAs, SATA, NVMe)
|
# Cache lspci output on first call
|
||||||
lspci 2>/dev/null | grep -iE "SAS|SATA|RAID|Mass storage|NVMe" | while read -r line; do
|
if [[ -z "$LSPCI_CACHE" ]]; then
|
||||||
pci_addr=$(echo "$line" | awk '{print $1}')
|
LSPCI_CACHE="$(lspci 2>/dev/null | grep -iE "SAS|SATA|RAID|Mass storage|NVMe")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Format and return cached output
|
||||||
|
echo "$LSPCI_CACHE" | while read -r line; do
|
||||||
|
[[ -z "$line" ]] && continue
|
||||||
|
pci_addr="$(echo "$line" | awk '{print $1}')"
|
||||||
# Get short description (strip PCI address)
|
# Get short description (strip PCI address)
|
||||||
desc=$(echo "$line" | sed 's/^[0-9a-f:.]\+ //')
|
desc="$(echo "$line" | sed 's/^[0-9a-f:.]\+ //')"
|
||||||
echo " $pci_addr: $desc"
|
echo " $pci_addr: $desc"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user