From: Lukas Czerner <lczerner@redhat.com>
To: zkabelac@redhat.com
Cc: Lukas Czerner <lczerner@redhat.com>,
dchinner@redhat.com, rwheeler@redhat.com, linux-lvm@redhat.com
Subject: [linux-lvm] [PATCH 08/35] fsadm: Update "list" command for better alignment
Date: Wed, 21 Sep 2011 18:45:27 +0200 [thread overview]
Message-ID: <1316623554-28975-9-git-send-email-lczerner@redhat.com> (raw)
In-Reply-To: <1316623554-28975-1-git-send-email-lczerner@redhat.com>
The output of list command is now dynamically aligned so it should be
well readably even in the case there are long names. It looks much
better this way.
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
---
scripts/fsadm.sh | 206 +++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 141 insertions(+), 65 deletions(-)
diff --git a/scripts/fsadm.sh b/scripts/fsadm.sh
index 5dc945b..d42b759 100755
--- a/scripts/fsadm.sh
+++ b/scripts/fsadm.sh
@@ -807,19 +807,12 @@ detect_fs_size() {
#############################
list_filesystems() {
IFS=$NL
- format="%-20s%-8s%-13s%-13s%-13s%s\n"
- header=$(printf $format "Volume" "Type" "Free" "Used" "Total" "Mount point")
- separator=""
- for i in $(seq ${#header}); do
- separator+="-"
- done
- echo $separator
- echo $header
- echo $separator
- c=0
+ local c=0
for line in $(LANG=C $LVM lvs -o lv_path,lv_size --noheadings --separator ' ' --nosuffix --units k 2> /dev/null); do
+ c=$((c+1))
line=$(echo $line | sed -e 's/^ *\//\//')
volume=$(echo $line | cut -d' ' -f1)
+ volumes[$c]=$volume
detect_fs $volume
detect_mounted
detect_fs_size
@@ -827,20 +820,60 @@ list_filesystems() {
total=$(echo $line | cut -d' ' -f2)
TOTAL=$(humanize_size ${total%%.})
fi
- printf "$format" "$volume" "$FSTYPE" "$FREE" "$USED" "$TOTAL" "$MOUNTED"
- volume=
+ total[$c]=$TOTAL
+ fstype[$c]=$FSTYPE
+ free[$c]=$FREE
+ used[$c]=$USED
+ mounted[$c]=$MOUNTED
FSTYPE=
FREE=
USED=
TOTAL=
MOUNTED=
- c=$((c+1))
done
+ IFS=$IFS_OLD
+
if [ $c -eq 0 ]; then
echo " No file systems suitable for managing by $TOOL found."
+ return
fi
+
+ len_volume=6
+ len_fstype=2
+ len_free=4
+ len_used=4
+ len_total=5
+ len_mounted=11
+ for i in $(seq $c); do
+ local _volume=${volumes[$i]}
+ local _fstype=${fstype[$i]}
+ local _total=${total[$i]}
+ local _free=${free[$i]}
+ local _used=${used[$i]}
+ local _mounted=${mounted[$i]}
+ [ ${#_volume} -gt "0$len_volume" ] && len_volume=${#_volume}
+ [ ${#_fstype} -gt "0$len_fstype" ] && len_fstype=${#_fstype}
+ [ ${#_total} -gt "0$len_total" ] && len_total=${#_total}
+ [ ${#_free} -gt "0$len_free" ] && len_free=${#_free}
+ [ ${#_used} -gt "0$len_used" ] && len_used=${#_used}
+ [ ${#_mounted} -gt "0$len_mounted" ] && len_mounted=${#_mounted}
+ done
+
+ format="%-$(($len_volume+2))s%-$(($len_fstype+2))s%-$(($len_free+2))s%-$(($len_used+2))s%-$(($len_total+2))s%-$(($len_mounted+2))s\n"
+ header=$(printf "$format" "Volume" "FS" "Free" "Used" "Total" "Mount point")
+ separator=""
+ for i in $(seq ${#header}); do
+ separator+="-"
+ done
+ echo $separator
+ printf "$format" "Volume" "FS" "Free" "Used" "Total" "Mount point"
+ echo $separator
+
+ for i in $(seq $c); do
+ printf "$format" "${volumes[$i]}" "${fstype[$i]}" "${free[$i]}" "${used[$i]}" "${total[$i]}" "${mounted[$i]}"
+ done
+
echo $separator
- IFS=$IFS_OLD
}
###########################
@@ -850,23 +883,15 @@ list_devices() {
IFS=$NL
tmp=$(mktemp)
- format="%-13s%-13s%-13s%-13s%-13s%s\n"
- header=$(printf $format "Device" "Free" "Used" "Total" "Group" "Mount point")
- separator=""
- for i in $(seq ${#header}); do
- separator+="-"
- done
- echo $separator
- echo $header
- echo $separator
c=0
dmnumber=$(cat $PROCDEVICES | grep device-mapper | sed -e 's/^ *//')
dmnumber=${dmnumber%% *}
LANG=C $LVM pvs -o pv_name,vg_name,pv_size,pv_free,pv_used --separator ' ' --noheadings --nosuffix --units k > $tmp
for line in $(cat $PROCPARTITIONS | tail -n +3 | sed -e 's/^ *//' | grep -v -e "^$dmnumber"); do
+ c=$((c+1))
line=$(echo $line | sed -e 's/ */ /g')
- total=$(echo $line | cut -d' ' -f3)
- total=$(humanize_size ${total%%.*})
+ _total=$(echo $line | cut -d' ' -f3)
+ total[$c]=$(humanize_size ${_total%%.*})
VOLUME=$(echo $line | cut -d' ' -f4)
RVOLUME="/dev/$(echo $line | cut -d' ' -f4)"
line=$($GREP -e " $RVOLUME " $tmp)
@@ -878,31 +903,65 @@ list_devices() {
if [ ! -z $line ]; then
line=$(echo $line | sed -e 's/^ *\//\//')
- RVOLUME=$(echo $line | cut -d' ' -f1)
- group=$(echo $line | cut -d' ' -f2)
- total=$(echo $line | cut -d' ' -f3)
- total=$(humanize_size ${total%%.*})
- free=$(echo $line | cut -d' ' -f4)
- free=$(humanize_size ${free%%.*})
- used=$(echo $line | cut -d' ' -f5)
- used=$(humanize_size ${used%%.*})
+ group[$c]=$(echo $line | cut -d' ' -f2)
+ _total=$(echo $line | cut -d' ' -f3)
+ total[$c]=$(humanize_size ${_total%%.*})
+ _free=$(echo $line | cut -d' ' -f4)
+ free[$c]=$(humanize_size ${_free%%.*})
+ _used=$(echo $line | cut -d' ' -f5)
+ used[$c]=$(humanize_size ${_used%%.*})
fi
-
- printf "$format" "$RVOLUME" "$free" "$used" "$total" "$group" "$MOUNTED"
- RVOLUME=
+ volumes[$c]=$RVOLUME
+ mounted[$c]=$MOUNTED
free=
used=
total=
- group=
MOUNTED=
- c=$((c+1))
done
+ IFS=$IFS_OLD
+ rm -f $tmp
+
if [ $c -eq 0 ]; then
echo " No devices found."
+ return
fi
+
+ len_volume=6
+ len_free=4
+ len_used=4
+ len_total=5
+ len_group=5
+ len_mounted=11
+ for i in $(seq $c); do
+ local _volume=${volumes[$i]}
+ local _free=${free[$i]}
+ local _used=${used[$i]}
+ local _total=${total[$i]}
+ local _group=${group[$i]}
+ local _mounted=${mounted[$i]}
+ [ ${#_volume} -gt "0$len_volume" ] && len_volume=${#_volume}
+ [ ${#_free} -gt "0$len_free" ] && len_free=${#_free}
+ [ ${#_used} -gt "0$len_used" ] && len_used=${#_used}
+ [ ${#_total} -gt "0$len_total" ] && len_total=${#_total}
+ [ ${#_group} -gt "0$len_group" ] && len_group=${#_group}
+ [ ${#_mounted} -gt "0$len_mounted" ] && len_mounted=${#_mounted}
+ done
+
+ format="%-$(($len_volume+2))s%-$(($len_free+2))s%-$(($len_used+2))s%-$(($len_total+2))s%-$(($len_group+2))s%-$(($len_mounted+2))s\n"
+ header=$(printf $format "Device" "Free" "Used" "Total" "Group" "Mount point")
+ separator=""
+ for i in $(seq ${#header}); do
+ separator+="-"
+ done
+ echo $separator
+ printf $format "Device" "Free" "Used" "Total" "Group" "Mount point"
+ echo $separator
+
+ for i in $(seq $c); do
+ printf "$format" "${volumes[$i]}" "${free[$i]}" "${used[$i]}" "${total[$i]}" "${group[$i]}" "${mounted[$i]}"
+ done
+
echo $separator
- IFS=$IFS_OLD
- rm -f $tmp
}
################################
@@ -910,41 +969,58 @@ list_devices() {
################################
list_pool() {
IFS=$NL
+ c=0
+ for line in $(LANG=C $LVM vgs -o vg_name,pv_count,vg_size,vg_free --separator ' ' --noheadings --nosuffix --units k 2> /dev/null); do
+ c=$((c+1))
+ line=$(echo $line | sed -e 's/^ *//')
+ group[$c]=$(echo $line | cut -d' ' -f1)
+ devices[$c]=$(echo $line | cut -d' ' -f2)
+ _total=$(echo $line | cut -d' ' -f3)
+ _free=$(echo $line | cut -d' ' -f4)
+ _used=$((${_total%%.*}-${_free%%.*}))
+ used[$c]=$(humanize_size ${_used%%.*})
+ total[$c]=$(humanize_size ${_total%%.*})
+ free[$c]=$(humanize_size ${_free%%.*})
+ done
+ IFS=$IFS_OLD
- format="%-10s%-9s%-13s%-13s%s\n"
+ if [ $c -eq 0 ]; then
+ echo " No pools found on the system."
+ return
+ fi
+
+ len_group=5
+ len_devices=6
+ len_free=4
+ len_used=4
+ len_total=5
+ for i in $(seq $c); do
+ local _group=${group[$i]}
+ local _devices=${devices[$i]}
+ local _free=${free[$i]}
+ local _used=${used[$i]}
+ local _total=${total[$i]}
+ [ ${#_group} -gt "0$len_group" ] && len_group=${#_group}
+ [ ${#_devices} -gt "0$len_devices" ] && len_devices=${#_devices}
+ [ ${#_free} -gt "0$len_free" ] && len_free=${#_free}
+ [ ${#_used} -gt "0$len_used" ] && len_used=${#_used}
+ [ ${#_total} -gt "0$len_total" ] && len_total=${#_total}
+ done
+
+ format="%-$(($len_group+2))s%-$(($len_devices+2))s%-$(($len_free+2))s%-$(($len_used+2))s%-$(($len_total+2))s\n"
header=$(printf $format "Group" "Devices" "Free" "Used" "Total")
separator=""
for i in $(seq ${#header}); do
separator+="-"
done
echo $separator
- echo $header
+ printf $format "Group" "Devices" "Free" "Used" "Total"
echo $separator
- c=0
- for line in $(LANG=C $LVM vgs -o vg_name,pv_count,vg_size,vg_free --separator ' ' --noheadings --nosuffix --units k 2> /dev/null); do
- line=$(echo $line | sed -e 's/^ *//')
- group=$(echo $line | cut -d' ' -f1)
- devices=$(echo $line | cut -d' ' -f2)
- total=$(echo $line | cut -d' ' -f3)
- free=$(echo $line | cut -d' ' -f4)
- used=$((${total%%.*}-${free%%.*}))
- used=$(humanize_size ${used%%.*})
- total=$(humanize_size ${total%%.*})
- free=$(humanize_size ${free%%.*})
-
- printf "$format" "$group" "$devices" "$free" "$used" "$total"
- group=
- devices=
- total=
- free=
- used=
- c=$((c+1))
+
+ for i in $(seq $c); do
+ printf "$format" "${group[$i]}" "${devices[$i]}" "${free[$i]}" "${used[$i]}" "${total[$i]}"
done
- if [ $c -eq 0 ]; then
- echo " No pools found on the system."
- fi
echo $separator
- IFS=$IFS_OLD
}
#############################
--
1.7.4.4
next prev parent reply other threads:[~2011-09-21 16:45 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-21 16:45 [linux-lvm] [RFC][PATCH 00/35] fsadm update Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 01/35] fsadm: Add "create" command Lukas Czerner
2011-09-21 19:00 ` Stephane Chazelas
2011-09-22 9:28 ` Lukas Czerner
2011-09-22 10:01 ` Zdenek Kabelac
2011-09-22 10:27 ` Lukas Czerner
2011-09-22 10:56 ` Stephane Chazelas
2011-09-21 16:45 ` [linux-lvm] [PATCH 02/35] fsadm: Add "destroy" command Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 03/35] fsadm: Add "list" command Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 04/35] fsadm: Make "create" command more vg aware Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 05/35] fsadm: Teach "destroy" command to take more arguments Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 06/35] fsadm: Simple cleanup and comment update Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 07/35] fsadm: Create "add" command Lukas Czerner
2011-09-21 16:45 ` Lukas Czerner [this message]
2011-09-21 16:45 ` [linux-lvm] [PATCH 09/35] fsadm: Specify number of stripes when no device is given Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 10/35] fsadm: Print type of the volume in filesystem listing Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 11/35] fsadm: Add "remove" command Lukas Czerner
2011-09-22 10:06 ` Zdenek Kabelac
2011-09-22 10:36 ` Lukas Czerner
2011-09-22 10:43 ` Zdenek Kabelac
2011-09-22 10:52 ` Lukas Czerner
2011-09-22 11:41 ` Zdenek Kabelac
2011-09-21 16:45 ` [linux-lvm] [PATCH 12/35] fsadm: Try to avoid calling LVM in the loops Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 13/35] fsadm: Merge "destroy" and "remove" into one command Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 14/35] fsadm: Allow to remove all volume groups Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 15/35] fsadm: Make all internal math in kilobytes Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 16/35] fsadm: Use warn for warnings in list command Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 17/35] fsadm: Handle resize if there is no file system Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 18/35] fsadm: Fsck extN before resize only if it is not mounted Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 19/35] fsadm: Align numbers to the decimal point Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 20/35] fsadm: Add simple configuration file Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 21/35] fsadm: Use DEFAULT_POOL when creating volume group Lukas Czerner
2011-09-22 10:09 ` Zdenek Kabelac
2011-09-21 16:45 ` [linux-lvm] [PATCH 22/35] fsadm: Add LVOL_PREFIX configuration option Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 23/35] fsadm: Only use readlink if link is provided Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 24/35] fsadm: Remove unnecessary modification of PATH variable Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 25/35] fsadm: Allow to specify size without "size=" prefix in "resize" Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 26/35] fsadm: Allow to specify lv in vg/lv format Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 27/35] fsadm: error out when no size is provided in resize Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 28/35] fsadm: Umount ext2 file system prior resize Lukas Czerner
2011-09-22 10:28 ` Zdenek Kabelac
2011-09-21 16:45 ` [linux-lvm] [PATCH 29/35] lvresize: Specify --resize-fs-only when going to use fsadm resize Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 30/35] test: add helper to compute aligned lv size Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 31/35] fsadm: Add help for new commands and update man page Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 32/35] fsadm: Update authorship of the fsadm Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 33/35] test: Add test for fsadm add command Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 34/35] test: Add test for fsadm create command Lukas Czerner
2011-09-21 16:45 ` [linux-lvm] [PATCH 35/35] test: Add test for fsadm resize command Lukas Czerner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1316623554-28975-9-git-send-email-lczerner@redhat.com \
--to=lczerner@redhat.com \
--cc=dchinner@redhat.com \
--cc=linux-lvm@redhat.com \
--cc=rwheeler@redhat.com \
--cc=zkabelac@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).