mirror of
https://github.com/smxi/inxi.git
synced 2025-01-19 00:47:47 +00:00
branch one, try at xfce id fix
This commit is contained in:
parent
ffe7932b21
commit
5d10366748
556
inxi
556
inxi
|
@ -1,8 +1,8 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
########################################################################
|
########################################################################
|
||||||
#### Script Name: inxi
|
#### Script Name: inxi
|
||||||
#### Version: 2.1.91
|
#### Version: 2.2.0
|
||||||
#### Date: 2014-08-12
|
#### Date: 2014-08-20
|
||||||
#### Patch Number: 01-b1
|
#### Patch Number: 01-b1
|
||||||
########################################################################
|
########################################################################
|
||||||
#### SPECIAL THANKS
|
#### SPECIAL THANKS
|
||||||
|
@ -1832,7 +1832,7 @@ debug_data_collector()
|
||||||
echo 'Creating inxi output file now. This can take a few seconds...'
|
echo 'Creating inxi output file now. This can take a few seconds...'
|
||||||
echo "Starting $SCRIPT_NAME from: $start_directory"
|
echo "Starting $SCRIPT_NAME from: $start_directory"
|
||||||
cd $start_directory
|
cd $start_directory
|
||||||
$SCRIPT_PATH/$SCRIPT_NAME -FRfrploudixxx -c 0 -@ 8 -y 120 > $SCRIPT_DATA_DIR/$debug_data_dir/inxi-FRfrploudixxxy120.txt
|
$SCRIPT_PATH/$SCRIPT_NAME -FRfrploudmxxx -c 0 -@ 8 -y 120 > $SCRIPT_DATA_DIR/$debug_data_dir/inxi-FRfrploudmxxxy120.txt
|
||||||
cp $LOG_FILE $SCRIPT_DATA_DIR/$debug_data_dir
|
cp $LOG_FILE $SCRIPT_DATA_DIR/$debug_data_dir
|
||||||
if [[ -f $SCRIPT_DATA_DIR/$debug_data_dir.tar.gz ]];then
|
if [[ -f $SCRIPT_DATA_DIR/$debug_data_dir.tar.gz ]];then
|
||||||
echo "Found and removing previous tar.gz data file: $debug_data_dir.tar.gz"
|
echo "Found and removing previous tar.gz data file: $debug_data_dir.tar.gz"
|
||||||
|
@ -2635,7 +2635,7 @@ show_options()
|
||||||
# print_screen_output " "
|
# print_screen_output " "
|
||||||
print_lines_basic "0" "" "$SCRIPT_NAME supports the following options. You can combine them, or list them one by one. Examples: $SCRIPT_NAME^-v4^-c6 OR $SCRIPT_NAME^-bDc^6. If you start $SCRIPT_NAME with no arguments, it will show the short form."
|
print_lines_basic "0" "" "$SCRIPT_NAME supports the following options. You can combine them, or list them one by one. Examples: $SCRIPT_NAME^-v4^-c6 OR $SCRIPT_NAME^-bDc^6. If you start $SCRIPT_NAME with no arguments, it will show the short form."
|
||||||
print_screen_output " "
|
print_screen_output " "
|
||||||
print_lines_basic "0" "" "The following options if used without -F, -b, or -v will show just option line(s): A, C, D, G, I, M, N, P, R, S, f, i, n, o, p, l, u, r, s, t - you can use these alone or together to show just the line(s) you want to see. If you use them with -v^[level], -b or -F, it will show the full output for that line along with the output for the chosen verbosity level."
|
print_lines_basic "0" "" "The following options if used without -F, -b, or -v will show just option line(s): A, C, D, G, I, M, N, P, R, S, f, i, m, n, o, p, l, u, r, s, t - you can use these alone or together to show just the line(s) you want to see. If you use them with -v^[level], -b or -F, it will show the full output for that line along with the output for the chosen verbosity level."
|
||||||
print_screen_output "- - - - - - - - - - - - - - - - - - - - - - - - - - - - -"
|
print_screen_output "- - - - - - - - - - - - - - - - - - - - - - - - - - - - -"
|
||||||
print_screen_output "Output Control Options:"
|
print_screen_output "Output Control Options:"
|
||||||
print_lines_basic "1" "-A" "Audio/sound card information."
|
print_lines_basic "1" "-A" "Audio/sound card information."
|
||||||
|
@ -2655,7 +2655,7 @@ show_options()
|
||||||
print_lines_basic "1" "-d" "Optical drive data. Same as -Dd. See also -x and -xx."
|
print_lines_basic "1" "-d" "Optical drive data. Same as -Dd. See also -x and -xx."
|
||||||
print_lines_basic "1" "-D" "Full hard Disk info, not only model, ie: /dev/sda ST380817AS 80.0GB. See also -x and -xx. Disk total used percentage includes swap partition size(s)."
|
print_lines_basic "1" "-D" "Full hard Disk info, not only model, ie: /dev/sda ST380817AS 80.0GB. See also -x and -xx. Disk total used percentage includes swap partition size(s)."
|
||||||
print_lines_basic "1" "-f" "All cpu flags, triggers -C. Not shown with -F to avoid spamming. ARM cpus show 'features'."
|
print_lines_basic "1" "-f" "All cpu flags, triggers -C. Not shown with -F to avoid spamming. ARM cpus show 'features'."
|
||||||
print_lines_basic "1" "-F" "Full output for $SCRIPT_NAME. Includes all Upper Case line letters, plus -s and -n. Does not show extra verbose options like -x -d -f -u -l -o -p -t -r"
|
print_lines_basic "1" "-F" "Full output for $SCRIPT_NAME. Includes all Upper Case line letters, plus -s and -n. Does not show extra verbose options like -d -f -l -m -o -p -r -t -u -x"
|
||||||
print_lines_basic "1" "-G" "Graphic card information (card, display server type/version, resolution, glx renderer, version)."
|
print_lines_basic "1" "-G" "Graphic card information (card, display server type/version, resolution, glx renderer, version)."
|
||||||
print_lines_basic "1" "-i" "Wan IP address, and shows local interfaces (requires ifconfig
|
print_lines_basic "1" "-i" "Wan IP address, and shows local interfaces (requires ifconfig
|
||||||
network tool). Same as -Nni. Not shown with -F for user security reasons, you shouldn't paste your local/wan IP."
|
network tool). Same as -Nni. Not shown with -F for user security reasons, you shouldn't paste your local/wan IP."
|
||||||
|
@ -2699,7 +2699,7 @@ show_options()
|
||||||
print_lines_basic "2" "-G" "(for single gpu, nvidia driver) screen number gpu is running on."
|
print_lines_basic "2" "-G" "(for single gpu, nvidia driver) screen number gpu is running on."
|
||||||
print_lines_basic "2" "-i" "IPv6 as well for LAN interface (IF) devices."
|
print_lines_basic "2" "-i" "IPv6 as well for LAN interface (IF) devices."
|
||||||
print_lines_basic "2" "-I" "System GCC, default. With -xx, also show other installed GCC versions. If running in console, not in IRC client, shows shell version number, if detected. Init/RC Type and runlevel (if available)."
|
print_lines_basic "2" "-I" "System GCC, default. With -xx, also show other installed GCC versions. If running in console, not in IRC client, shows shell version number, if detected. Init/RC Type and runlevel (if available)."
|
||||||
print_lines_basic "2" "-m" "Part number."
|
print_lines_basic "2" "-m" "Part number; Max memory module size (if available)."
|
||||||
print_lines_basic "2" "-N -A" "Version/port(s)/driver version (if available) for Network/Audio;"
|
print_lines_basic "2" "-N -A" "Version/port(s)/driver version (if available) for Network/Audio;"
|
||||||
print_lines_basic "2" "-N -A -G" "Network, audio, graphics, shows PCI Bus ID/Usb ID number of card."
|
print_lines_basic "2" "-N -A -G" "Network, audio, graphics, shows PCI Bus ID/Usb ID number of card."
|
||||||
print_lines_basic "2" "-R" "md-raid: Shows component raid id. Adds second RAID Info line: raid level; report on drives (like 5/5); blocks; chunk size; bitmap (if present). Resync line, shows blocks synced/total blocks. zfs-raid: Shows raid array full size; available size; portion allocated to RAID"
|
print_lines_basic "2" "-R" "md-raid: Shows component raid id. Adds second RAID Info line: raid level; report on drives (like 5/5); blocks; chunk size; bitmap (if present). Resync line, shows blocks synced/total blocks. zfs-raid: Shows raid array full size; available size; portion allocated to RAID"
|
||||||
|
@ -2713,7 +2713,7 @@ show_options()
|
||||||
print_lines_basic "2" "-D" "Disk serial number."
|
print_lines_basic "2" "-D" "Disk serial number."
|
||||||
print_lines_basic "2" "-G" "Chip vendor:product ID for each video card."
|
print_lines_basic "2" "-G" "Chip vendor:product ID for each video card."
|
||||||
print_lines_basic "2" "-I" "Other detected installed gcc versions (if present). System default runlevel. Adds parent program (or tty) for shell info if not in IRC (like Konsole or Gterm). Adds Init/RC (if found) version number."
|
print_lines_basic "2" "-I" "Other detected installed gcc versions (if present). System default runlevel. Adds parent program (or tty) for shell info if not in IRC (like Konsole or Gterm). Adds Init/RC (if found) version number."
|
||||||
print_lines_basic "2" "-m" "Manufacturer, Serial Number."
|
print_lines_basic "2" "-m" "Manufacturer, Serial Number, single/double bank (if found)."
|
||||||
print_lines_basic "2" "-M" "Chassis information, bios rom size (dmidecode only), if data for either is available."
|
print_lines_basic "2" "-M" "Chassis information, bios rom size (dmidecode only), if data for either is available."
|
||||||
print_lines_basic "2" "-N" "Chip vendor:product ID for each nic."
|
print_lines_basic "2" "-N" "Chip vendor:product ID for each nic."
|
||||||
print_lines_basic "2" "-R" "md-raid: Superblock (if present); algorythm, U data. Adds system info line (kernel support,read ahead, raid events). If present, adds unused device line. Resync line, shows progress bar."
|
print_lines_basic "2" "-R" "md-raid: Superblock (if present); algorythm, U data. Adds system info line (kernel support,read ahead, raid events). If present, adds unused device line. Resync line, shows progress bar."
|
||||||
|
@ -2723,7 +2723,7 @@ show_options()
|
||||||
fi
|
fi
|
||||||
print_lines_basic "2" "-@ 11-14" "Automatically uploads debugger data tar.gz file to ftp.techpatterns.com. EG: $SCRIPT_NAME^-xx@14"
|
print_lines_basic "2" "-@ 11-14" "Automatically uploads debugger data tar.gz file to ftp.techpatterns.com. EG: $SCRIPT_NAME^-xx@14"
|
||||||
print_lines_basic "1" "-xxx" "Show extra, extra, extra data (only works with verbose or line output, not short form):"
|
print_lines_basic "1" "-xxx" "Show extra, extra, extra data (only works with verbose or line output, not short form):"
|
||||||
print_lines_basic "2" "-m" "Width of channel, data and total. Detail, if present, for Type."
|
print_lines_basic "2" "-m" "Width of memory bus, data and total (if present and greater than data); Detail, if present, for Type; module voltage, if available."
|
||||||
print_lines_basic "2" "-S" "Panel/shell information in desktop output, if in X (like gnome-shell, cinnamon, mate-panel)."
|
print_lines_basic "2" "-S" "Panel/shell information in desktop output, if in X (like gnome-shell, cinnamon, mate-panel)."
|
||||||
if [[ $B_ALLOW_WEATHER == 'true' ]];then
|
if [[ $B_ALLOW_WEATHER == 'true' ]];then
|
||||||
print_lines_basic "2" "-w -W" "Location (uses -z/irc filter), weather observation time, wind chill, heat index, dew point (shows extra lines for data where relevant)."
|
print_lines_basic "2" "-w -W" "Location (uses -z/irc filter), weather observation time, wind chill, heat index, dew point (shows extra lines for data where relevant)."
|
||||||
|
@ -3881,7 +3881,6 @@ get_cpu_speed_hack()
|
||||||
echo $speed
|
echo $speed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
get_cpu_data_bsd()
|
get_cpu_data_bsd()
|
||||||
{
|
{
|
||||||
eval $LOGFS
|
eval $LOGFS
|
||||||
|
@ -4314,6 +4313,26 @@ get_desktop_environment()
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
desktop_environment="Xfce"
|
desktop_environment="Xfce"
|
||||||
|
elif [[ -n $( grep -is '\"xfce\"' <<< "$xprop_root" ) ]];then
|
||||||
|
version=$( get_program_version 'xfdesktop' 'xfdesktop[[:space:]]version' '5' )
|
||||||
|
# arch linux reports null, so use alternate if null
|
||||||
|
if [[ -z $version ]];then
|
||||||
|
version=$( get_program_version 'xfce4-panel' '^xfce5-panel' '2' )
|
||||||
|
if [[ -z $version ]];then
|
||||||
|
# version=$( get_program_version 'xfce5-panel' '^xfce5-panel' '2' )
|
||||||
|
#if [[ -z $version ]];then
|
||||||
|
# version='5'
|
||||||
|
#fi
|
||||||
|
version='4'
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ $B_EXTRA_DATA == 'true' ]];then
|
||||||
|
toolkit=$( get_program_version 'xfdesktop' 'Built[[:space:]]with[[:space:]]GTK' '4' )
|
||||||
|
if [[ -n $toolkit ]];then
|
||||||
|
version="$version (Gtk $toolkit)"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
desktop_environment="Xfce"
|
||||||
elif [[ -n $( grep -is 'BLACKBOX_PID' <<< "$xprop_root" ) ]];then
|
elif [[ -n $( grep -is 'BLACKBOX_PID' <<< "$xprop_root" ) ]];then
|
||||||
if [[ -n $( grep -is 'fluxbox' <<< "$Ps_aux_Data" ) ]];then
|
if [[ -n $( grep -is 'fluxbox' <<< "$Ps_aux_Data" ) ]];then
|
||||||
version=$( get_program_version 'fluxbox' '^fluxbox' '2' )
|
version=$( get_program_version 'fluxbox' '^fluxbox' '2' )
|
||||||
|
@ -4889,8 +4908,7 @@ get_dmidecode_data()
|
||||||
{
|
{
|
||||||
eval $LOGFS
|
eval $LOGFS
|
||||||
|
|
||||||
local dmiData="$( cat ~/bin/scripts/inxi/data/dmidecode/dmidecode-memory-variants-1.txt )"
|
local dmiData="" b_debugger='false'
|
||||||
local dmidecodePath=''
|
|
||||||
|
|
||||||
if [[ $B_DMIDECODE_SET != 'true' ]];then
|
if [[ $B_DMIDECODE_SET != 'true' ]];then
|
||||||
dmidecodePath=$( type -p dmidecode 2>/dev/null )
|
dmidecodePath=$( type -p dmidecode 2>/dev/null )
|
||||||
|
@ -4902,8 +4920,12 @@ get_dmidecode_data()
|
||||||
# used to separate results. Then we remove the doubled empty lines to keep it clean and
|
# used to separate results. Then we remove the doubled empty lines to keep it clean and
|
||||||
# strip out all the stuff we don't want to see in the results. We want the error data in
|
# strip out all the stuff we don't want to see in the results. We want the error data in
|
||||||
# stdout for error handling
|
# stdout for error handling
|
||||||
# DMIDECODE_DATA="$( echo "$dmiData" | gawk -F ':' '
|
if [[ $b_debugger == 'true' && $HOSTNAME == 'yawn' ]];then
|
||||||
DMIDECODE_DATA="$( $dmidecodePath 2>&1 | gawk -F ':' '
|
dmiData="$( cat ~/bin/scripts/inxi/svn/misc/data/dmidecode/dmidecode-memory-variants-2.txt )"
|
||||||
|
else
|
||||||
|
dmiData="$( $dmidecodePath 2>&1 )"
|
||||||
|
fi
|
||||||
|
DMIDECODE_DATA="$( echo "$dmiData" | gawk -F ':' '
|
||||||
BEGIN {
|
BEGIN {
|
||||||
IGNORECASE=1
|
IGNORECASE=1
|
||||||
cutExtraTab="false"
|
cutExtraTab="false"
|
||||||
|
@ -4937,7 +4959,7 @@ get_dmidecode_data()
|
||||||
# To Be Filled By O.E.M.
|
# To Be Filled By O.E.M.
|
||||||
# strip out starting white space so that the following stuff will clear properly
|
# strip out starting white space so that the following stuff will clear properly
|
||||||
sub(/^[[:space:]]+/, "", twoData)
|
sub(/^[[:space:]]+/, "", twoData)
|
||||||
sub(/^Base Board .*|^Chassis .*|.*O\.E\.M\..*|.*OEM.*|^Not .*|^System .*|.*unknow.*|.*N\/A.*|none|^To be filled.*|^0x[0]+$/, "", twoData)
|
sub(/^Base Board .*|^Chassis .*|.*O\.E\.M\..*|.*OEM.*|^Not .*|^System .*|.*unknow.*|.*N\/A.*|none|^To be filled.*|^0x[0]+$|\[Empty\]|<Bad Index>|^\.\.$/, "", twoData)
|
||||||
sub(/.*(AssetTagNum|Manufacturer| Or Motherboard|PartNum.*|SerNum).*/, "", twoData)
|
sub(/.*(AssetTagNum|Manufacturer| Or Motherboard|PartNum.*|SerNum).*/, "", twoData)
|
||||||
gsub(/bios|acpi/, "", twoData)
|
gsub(/bios|acpi/, "", twoData)
|
||||||
sub(/http:\/\/www.abit.com.tw\//, "Abit", twoData)
|
sub(/http:\/\/www.abit.com.tw\//, "Abit", twoData)
|
||||||
|
@ -4951,14 +4973,17 @@ get_dmidecode_data()
|
||||||
else {
|
else {
|
||||||
sub(/^\t\t+/, "~", oneData)
|
sub(/^\t\t+/, "~", oneData)
|
||||||
}
|
}
|
||||||
|
gsub(/ [ \t]+/, " ", twoData)
|
||||||
gsub(/^[[:space:]]+|[[:space:]]+$/, "", twoData)
|
gsub(/^[[:space:]]+|[[:space:]]+$/, "", twoData)
|
||||||
gsub(/^[[:space:]]+|[[:space:]]+$/, "", oneData)
|
gsub(/^[[:space:]]+|[[:space:]]+$/, "", oneData)
|
||||||
gsub(/ [ \t]+/, " ", twoData)
|
|
||||||
# reconstructing the line for processing so gawk can use -F : again
|
# reconstructing the line for processing so gawk can use -F : again
|
||||||
if ( oneData != "" && twoHolder == "true" ) {
|
if ( oneData != "" && twoHolder == "true" ) {
|
||||||
print oneData ":" twoData
|
print oneData ":" twoData
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
# make sure all null lines have no spaces in them!
|
||||||
|
gsub(/^[[:space:]]+|[[:space:]]+$/,"",$0)
|
||||||
print $0
|
print $0
|
||||||
}
|
}
|
||||||
}' \
|
}' \
|
||||||
|
@ -5019,8 +5044,7 @@ get_gcc_system_version()
|
||||||
/^gcc/ {
|
/^gcc/ {
|
||||||
print $2
|
print $2
|
||||||
exit
|
exit
|
||||||
}' )
|
}' )
|
||||||
|
|
||||||
# can't use xargs -L basename because not all systems support thats
|
# can't use xargs -L basename because not all systems support thats
|
||||||
if [[ $B_EXTRA_EXTRA_DATA == 'true' ]];then
|
if [[ $B_EXTRA_EXTRA_DATA == 'true' ]];then
|
||||||
gcc_others=$( ls /usr/bin/gcc-* 2>/dev/null )
|
gcc_others=$( ls /usr/bin/gcc-* 2>/dev/null )
|
||||||
|
@ -5929,11 +5953,6 @@ get_init_data()
|
||||||
init_type='launchd'
|
init_type='launchd'
|
||||||
# / launchd/ version.plist /etc/launchd.conf
|
# / launchd/ version.plist /etc/launchd.conf
|
||||||
# init_version=$( get_program_version 'Launchd' '^Launchd' '4' )
|
# init_version=$( get_program_version 'Launchd' '^Launchd' '4' )
|
||||||
# missing data:
|
|
||||||
# http://smarden.org/runit/sv.8.html
|
|
||||||
elif [[ -e /sbin/runit-init || -e /etc/runit || -n $( type -p sv ) ]];then
|
|
||||||
init_type='runit' # lower case
|
|
||||||
# no data on version yet
|
|
||||||
elif [[ -f /etc/inittab ]];then
|
elif [[ -f /etc/inittab ]];then
|
||||||
init_type='SysVinit'
|
init_type='SysVinit'
|
||||||
if type -p strings &>/dev/null;then
|
if type -p strings &>/dev/null;then
|
||||||
|
@ -5942,6 +5961,11 @@ get_init_data()
|
||||||
if [[ -n $strings_init_version ]];then
|
if [[ -n $strings_init_version ]];then
|
||||||
init_version=$( gawk '{print $2}' <<< "$strings_init_version" )
|
init_version=$( gawk '{print $2}' <<< "$strings_init_version" )
|
||||||
fi
|
fi
|
||||||
|
# missing data: note, runit can install as a dependency without being the init system
|
||||||
|
# http://smarden.org/runit/sv.8.html
|
||||||
|
elif [[ -e /sbin/runit-init || -e /etc/runit || -n $( type -p sv ) ]];then
|
||||||
|
init_type='runit' # lower case
|
||||||
|
# no data on version yet
|
||||||
# freebsd at least
|
# freebsd at least
|
||||||
elif [[ -f /etc/ttys ]];then
|
elif [[ -f /etc/ttys ]];then
|
||||||
init_type='init (bsd)'
|
init_type='init (bsd)'
|
||||||
|
@ -6240,7 +6264,7 @@ get_machine_data()
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
echo $array_string
|
# echo $array_string
|
||||||
IFS=','
|
IFS=','
|
||||||
A_MACHINE_DATA=( $array_string )
|
A_MACHINE_DATA=( $array_string )
|
||||||
IFS="$ORIGINAL_IFS"
|
IFS="$ORIGINAL_IFS"
|
||||||
|
@ -8141,19 +8165,98 @@ get_ram_data()
|
||||||
handle=""
|
handle=""
|
||||||
location=""
|
location=""
|
||||||
locator=""
|
locator=""
|
||||||
maxCapacity=""
|
aArrayData[0,"maxCapacity5"]=0
|
||||||
|
aArrayData[0,"maxCapacity16"]=0
|
||||||
|
aArrayData[0,"usedCapacity"]=0
|
||||||
|
aArrayData[0,"maxModuleSize"]=0
|
||||||
|
aArrayData[0,"derivedModuleSize"]=0
|
||||||
|
aArrayData[0,"deviceCount5"]=0
|
||||||
|
aArrayData[0,"deviceCount16"]=0
|
||||||
|
aArrayData[0,"deviceCountFound"]=0
|
||||||
|
aArrayData[0,"moduleVoltage5"]=""
|
||||||
|
moduleVoltage=""
|
||||||
numberOfDevices=""
|
numberOfDevices=""
|
||||||
primaryType=""
|
primaryType=""
|
||||||
totalWidth=""
|
totalWidth=""
|
||||||
use=""
|
use=""
|
||||||
|
i=0
|
||||||
|
j=0
|
||||||
|
k=0
|
||||||
|
bDebugger1="false"
|
||||||
|
dDebugger2="false"
|
||||||
|
bType5="false"
|
||||||
}
|
}
|
||||||
/^Handle .* DMI type 16/ {
|
function calculateSize(data,size) {
|
||||||
primaryType="memory-array"
|
if ( data ~ /^[0-9]+[[:space:]]*[GMTP]B/) {
|
||||||
|
if ( data ~ /GB/ ) {
|
||||||
|
data=gensub(/([0-9]+)[[:space:]]*GB/,"\\1",1,data) * 1024
|
||||||
|
}
|
||||||
|
else if ( data ~ /MB/ ) {
|
||||||
|
data=gensub(/([0-9]+)[[:space:]]*MB/,"\\1",1,data)
|
||||||
|
}
|
||||||
|
else if ( data ~ /TB/ ) {
|
||||||
|
data=gensub(/([0-9]+)[[:space:]]*TB/,"\\1",1,data) * 1024 * 1000
|
||||||
|
}
|
||||||
|
else if ( data ~ /PB/ ) {
|
||||||
|
data=gensub(/([0-9]+)[[:space:]]*TB/,"\\1",1,data) * 1024 * 1000 * 1000
|
||||||
|
}
|
||||||
|
if (data ~ /^[0-9][0-9]+$/ && data > size ) {
|
||||||
|
size=data
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return size
|
||||||
|
}
|
||||||
|
/^Table[[:space:]]+at[[:space:]]/ {
|
||||||
|
bType5="false"
|
||||||
|
# we need to start count here because for testing > 1 array, and we want always to have
|
||||||
|
# the actual module data assigned to the right primary array, even when it is out of
|
||||||
|
# position in dmidecode output
|
||||||
|
i=0
|
||||||
|
j=0
|
||||||
|
k++
|
||||||
|
}
|
||||||
|
# {print k ":k:" $0}
|
||||||
|
/^Handle .* DMI[[:space:]]+type[[:space:]]+5(,|[[:space:]])/ {
|
||||||
|
while ( getline && !/^$/ ) {
|
||||||
|
if ( $1 == "Maximum Memory Module Size" ) {
|
||||||
|
aArrayData[k,"maxModuleSize"]=calculateSize($2,aArrayData[k,"maxModuleSize"])
|
||||||
|
# print "mms:" aArrayData[k,"maxModuleSize"] ":" $2
|
||||||
|
}
|
||||||
|
if ($1 == "Maximum Total Memory Size") {
|
||||||
|
aArrayData[k,"maxCapacity5"]=calculateSize($2,aArrayData[k,"maxCapacity5"])
|
||||||
|
}
|
||||||
|
if ( $1 == "Memory Module Voltage" ) {
|
||||||
|
aArrayData[k,"moduleVoltage5"]=$2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
aArrayData[k,"data-type"]="memory-array"
|
||||||
|
# print k ":data5:"aArrayData[k,"data-type"]
|
||||||
|
bType5="true"
|
||||||
|
}
|
||||||
|
/^Handle .* DMI[[:space:]]+type[[:space:]]+6(,|[[:space:]])/ {
|
||||||
|
while ( getline && !/^$/ ) {
|
||||||
|
if ( $1 == "Installed Size" ) {
|
||||||
|
# get module size
|
||||||
|
aMemory[k,j,18]=calculateSize($2,0)
|
||||||
|
# get data after module size
|
||||||
|
sub(/ Connection/,"",$2)
|
||||||
|
sub(/^[0-9]+[[:space:]]*[MGTP]B[[:space:]]*/,"",$2)
|
||||||
|
aMemory[k,j,16]=$2
|
||||||
|
}
|
||||||
|
if ( $1 == "Current Speed" ) {
|
||||||
|
aMemory[k,j,17]=$2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
j++
|
||||||
|
}
|
||||||
|
|
||||||
|
/^Handle .* DMI[[:space:]]+type[[:space:]]+16/ {
|
||||||
arrayHandle=gensub(/Handle[[:space:]]([0-9a-zA-Z]+)([[:space:]]|,).*/,"\\1",$0)
|
arrayHandle=gensub(/Handle[[:space:]]([0-9a-zA-Z]+)([[:space:]]|,).*/,"\\1",$0)
|
||||||
while ( getline && !/^$/ ) {
|
while ( getline && !/^$/ ) {
|
||||||
# print $0
|
# print $0
|
||||||
if ( $1 == "Maximum Capacity") {
|
if ( $1 == "Maximum Capacity") {
|
||||||
maxCapacity=$2
|
aArrayData[k,"maxCapacity16"]=calculateSize($2,aArrayData[k,"maxCapacity16"])
|
||||||
|
#print "mc:" aArrayData[k,"maxCapacity16"] ":" $2
|
||||||
}
|
}
|
||||||
# note: these 3 have cleaned data in get_dmidecode_data, so replace stuff manually
|
# note: these 3 have cleaned data in get_dmidecode_data, so replace stuff manually
|
||||||
if ( $1 == "Location") {
|
if ( $1 == "Location") {
|
||||||
|
@ -8172,25 +8275,37 @@ get_ram_data()
|
||||||
if ( $1 == "Error Correction Type") {
|
if ( $1 == "Error Correction Type") {
|
||||||
errorCorrection=$2
|
errorCorrection=$2
|
||||||
if ( errorCorrection == "" ){
|
if ( errorCorrection == "" ){
|
||||||
errorCorrection="No"
|
errorCorrection="None"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( $1 == "Number of Devices") {
|
if ( $1 == "Number of Devices") {
|
||||||
numberOfDevices=$2
|
numberOfDevices=$2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print primaryType "," arrayHandle "," location "," maxCapacity "," numberOfDevices "," use "," errorCorrection
|
aArrayData[k,"data-type"]="memory-array"
|
||||||
|
# print k ":data16:"aArrayData[k,"data-type"]
|
||||||
|
aArrayData[k,"handle"]=arrayHandle
|
||||||
|
aArrayData[k,"location"]=location
|
||||||
|
aArrayData[k,"deviceCount16"]=numberOfDevices
|
||||||
|
aArrayData[k,"use"]=use
|
||||||
|
aArrayData[k,"errorCorrection"]=errorCorrection
|
||||||
|
|
||||||
# reset
|
# reset
|
||||||
primaryType=""
|
primaryType=""
|
||||||
arrayHandle=""
|
arrayHandle=""
|
||||||
location=""
|
location=""
|
||||||
maxCapacity=""
|
|
||||||
numberOfDevices=""
|
numberOfDevices=""
|
||||||
use=""
|
use=""
|
||||||
errorCorrection=""
|
errorCorrection=""
|
||||||
|
moduleVoltage=""
|
||||||
|
|
||||||
|
aDerivedModuleSize[k+1]=0
|
||||||
|
aArrayData[k+1,"deviceCountFound"]=0
|
||||||
|
aArrayData[k+1,"maxCapacity5"]=0
|
||||||
|
aArrayData[k+1,"maxCapacity16"]=0
|
||||||
|
aArrayData[k+1,"maxModuleSize"]=0
|
||||||
}
|
}
|
||||||
/^Handle .* DMI type 17/ {
|
/^Handle .* DMI[[:space:]]+type[[:space:]]+17/ {
|
||||||
primaryType="memory-device"
|
|
||||||
while ( getline && !/^$/ ) {
|
while ( getline && !/^$/ ) {
|
||||||
if ( $1 == "Array Handle") {
|
if ( $1 == "Array Handle") {
|
||||||
arrayHandle=$2
|
arrayHandle=$2
|
||||||
|
@ -8202,12 +8317,28 @@ get_ram_data()
|
||||||
totalWidth=$2
|
totalWidth=$2
|
||||||
}
|
}
|
||||||
if ( $1 == "Size") {
|
if ( $1 == "Size") {
|
||||||
deviceSize=$2
|
# do not try to guess from installed modules, only use this to correct type 5 data
|
||||||
|
aArrayData[k,"derivedModuleSize"]=calculateSize($2,aArrayData[k,"derivedModuleSize"])
|
||||||
|
workingSize=calculateSize($2,0)
|
||||||
|
if ( workingSize ~ /^[0-9][0-9]+$/ ){
|
||||||
|
aArrayData[k,"deviceCountFound"]++
|
||||||
|
# build up actual capacity found for override tests
|
||||||
|
aArrayData[k,"usedCapacity"]=workingSize + aArrayData[k,"usedCapacity"]
|
||||||
|
}
|
||||||
|
# print aArrayData[k,"derivedModuleSize"] " dm:" k ":mm " aMaxModuleSize[k] " uc:" aArrayData[k,"usedCapacity"]
|
||||||
|
# we want any non real size data to be preserved
|
||||||
|
if ( $2 ~ /^[0-9]+[[:space:]]*[MTPG]B/ ) {
|
||||||
|
deviceSize=workingSize
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
deviceSize=$2
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ( $1 == "Locator") {
|
if ( $1 == "Locator") {
|
||||||
# sub(/.*_/,"",$2)
|
# sub(/.*_/,"",$2)
|
||||||
#sub(/RAM slot #|^DIMM/, "Slot",$2)
|
#sub(/RAM slot #|^DIMM/, "Slot",$2)
|
||||||
sub(/RAM slot #/, "Slot",$2)
|
sub(/RAM slot #/, "Slot",$2)
|
||||||
|
|
||||||
#locator=toupper($2)
|
#locator=toupper($2)
|
||||||
locator=$2
|
locator=$2
|
||||||
}
|
}
|
||||||
|
@ -8255,7 +8386,34 @@ get_ram_data()
|
||||||
else {
|
else {
|
||||||
mainLocator=locator
|
mainLocator=locator
|
||||||
}
|
}
|
||||||
print primaryType "," arrayHandle "," deviceSize "," bankLocator "," locator "," formFactor "," deviceType "," deviceTypeDetail "," deviceSpeed "," configuredClockSpeed "," dataWidth "," totalWidth "," deviceManufacturer "," devicePartNumber "," deviceSerialNumber "," mainLocator
|
# sometimes the data is just wrong, they reverse total/data. data I believe is
|
||||||
|
# used for the actual memory bus width, total is some synthetic thing, sometimes missing.
|
||||||
|
# note that we do not want a regular string comparison, because 128 bit memory buses are
|
||||||
|
# in our future, and 128 bits < 64 bits with string compare
|
||||||
|
intData=gensub(/(^[0-9]+).*/,"\\1",1,dataWidth)
|
||||||
|
intTotal=gensub(/(^[0-9]+).*/,"\\1",1,totalWidth)
|
||||||
|
if (intData != "" && intTotal != "" && intData > intTotal ) {
|
||||||
|
tempWidth=dataWidth
|
||||||
|
dataWidth=totalWidth
|
||||||
|
totalWidth=tempWidth
|
||||||
|
}
|
||||||
|
|
||||||
|
aMemory[k,i,0]="memory-device"
|
||||||
|
aMemory[k,i,1]=arrayHandle
|
||||||
|
aMemory[k,i,2]=deviceSize
|
||||||
|
aMemory[k,i,3]=bankLocator
|
||||||
|
aMemory[k,i,4]=locator
|
||||||
|
aMemory[k,i,5]=formFactor
|
||||||
|
aMemory[k,i,6]=deviceType
|
||||||
|
aMemory[k,i,7]=deviceTypeDetail
|
||||||
|
aMemory[k,i,8]=deviceSpeed
|
||||||
|
aMemory[k,i,9]=configuredClockSpeed
|
||||||
|
aMemory[k,i,10]=dataWidth
|
||||||
|
aMemory[k,i,11]=totalWidth
|
||||||
|
aMemory[k,i,12]=deviceManufacturer
|
||||||
|
aMemory[k,i,13]=devicePartNumber
|
||||||
|
aMemory[k,i,14]=deviceSerialNumber
|
||||||
|
aMemory[k,i,15]=mainLocator
|
||||||
|
|
||||||
primaryType=""
|
primaryType=""
|
||||||
arrayHandle=""
|
arrayHandle=""
|
||||||
|
@ -8274,8 +8432,221 @@ get_ram_data()
|
||||||
deviceManufacturer=""
|
deviceManufacturer=""
|
||||||
devicePartNumber=""
|
devicePartNumber=""
|
||||||
deviceSerialNumber=""
|
deviceSerialNumber=""
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
END {
|
||||||
|
## CRITICAL: gawk keeps changing integers to strings, so be explicit with int() in math
|
||||||
|
# print primaryType "," arrayHandle "," location "," maxCapacity "," numberOfDevices "," use "," errorCorrection "," maxModuleSize "," moduleVoltage
|
||||||
|
|
||||||
} ' <<< "$DMIDECODE_DATA" ) )
|
# print primaryType "," arrayHandle "," deviceSize "," bankLocator "," locator "," formFactor "," deviceType "," deviceTypeDetail "," deviceSpeed "," configuredClockSpeed "," dataWidth "," totalWidth "," deviceManufacturer "," devicePartNumber "," deviceSerialNumber "," mainLocator
|
||||||
|
|
||||||
|
for ( m=1;m<=k;m++ ) {
|
||||||
|
estCap=""
|
||||||
|
estMod=""
|
||||||
|
unit=""
|
||||||
|
altCap=0
|
||||||
|
workingMaxCap=int(aArrayData[m,"maxCapacity16"])
|
||||||
|
|
||||||
|
if ( bDebugger1 == "true" ){
|
||||||
|
print ""
|
||||||
|
print "count: " m
|
||||||
|
print "1: mmods: " aArrayData[m,"maxModuleSize"] " :dmmods: " aArrayData[m,"derivedModuleSize"] " :mcap: " workingMaxCap " :ucap: " aArrayData[m,"usedCapacity"]
|
||||||
|
}
|
||||||
|
# 1: if max cap 1 is null, and max cap 2 not null, use 2
|
||||||
|
if ( workingMaxCap == 0 ) {
|
||||||
|
if ( aArrayData[m,"maxCapacity5"] != 0 ) {
|
||||||
|
workingMaxCap=aArrayData[m,"maxCapacity5"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( aArrayData[m,"deviceCount16"] == "" ) {
|
||||||
|
aArrayData[m,"deviceCount16"] = 0
|
||||||
|
}
|
||||||
|
if ( bDebugger1 == "true" ){
|
||||||
|
print "2: mmods: " aArrayData[m,"maxModuleSize"] " :dmmods: " aArrayData[m,"derivedModuleSize"] " :mcap: " workingMaxCap " :ucap: " aArrayData[m,"usedCapacity"]
|
||||||
|
}
|
||||||
|
# 2: now check to see if actually found module sizes are > than listed max module, replace if >
|
||||||
|
if (aArrayData[m,"maxModuleSize"] != 0 && aArrayData[m,"derivedModuleSize"] != 0 && int(aArrayData[m,"derivedModuleSize"]) > int(aArrayData[m,"maxModuleSize"]) ) {
|
||||||
|
aArrayData[m,"maxModuleSize"]=aArrayData[m,"derivedModuleSize"]
|
||||||
|
estMod=" (est)"
|
||||||
|
}
|
||||||
|
aArrayData[m,"maxModuleSize"]=int(aArrayData[m,"maxModuleSize"])
|
||||||
|
aArrayData[m,"derivedModuleSize"]=int(aArrayData[m,"derivedModuleSize"])
|
||||||
|
aArrayData[m,"usedCapacity"]=int(aArrayData[m,"usedCapacity"])
|
||||||
|
workingMaxCap=int(workingMaxCap)
|
||||||
|
|
||||||
|
# note: some cases memory capacity == max module size, so one stick will fill it
|
||||||
|
# but I think only with cases of 2 slots does this happen, so if > 2, use the count of slots.
|
||||||
|
if ( bDebugger1 == "true" ){
|
||||||
|
print "3: fmod: " aArrayData[m,"deviceCountFound"] " :modc: " aArrayData[m,"deviceCount16"] " :maxc1: " aArrayData[m,"maxCapacity5"] " :maxc2: " aArrayData[m,"maxCapacity16"]
|
||||||
|
}
|
||||||
|
if (workingMaxCap != 0 && ( aArrayData[m,"deviceCountFound"] != 0 || aArrayData[m,"deviceCount16"] != 0 ) ) {
|
||||||
|
aArrayData[m,"deviceCount16"]=int(aArrayData[m,"deviceCount16"])
|
||||||
|
## first check that actual memory found is not greater than listed max cap, or
|
||||||
|
## checking to see module count * max mod size is not > used capacity
|
||||||
|
if ( aArrayData[m,"usedCapacity"] != 0 && aArrayData[m,"maxCapacity16"] != 0 ) {
|
||||||
|
if ( aArrayData[m,"usedCapacity"] > workingMaxCap ) {
|
||||||
|
if ( aArrayData[m,"maxModuleSize"] != 0 &&
|
||||||
|
aArrayData[m,"usedCapacity"] < aArrayData[m,"deviceCount16"] * aArrayData[m,"maxModuleSize"] ) {
|
||||||
|
workingMaxCap=aArrayData[m,"deviceCount16"] * aArrayData[m,"maxModuleSize"]
|
||||||
|
estCap=" (est)"
|
||||||
|
if ( bDebugger1 == "true" ){
|
||||||
|
print "A"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( aArrayData[m,"derivedModuleSize"] != 0 &&
|
||||||
|
aArrayData[m,"usedCapacity"] < aArrayData[m,"deviceCount16"] * aArrayData[m,"derivedModuleSize"] ) {
|
||||||
|
workingMaxCap=aArrayData[m,"deviceCount16"] * aArrayData[m,"derivedModuleSize"]
|
||||||
|
estCap=" (est)"
|
||||||
|
if ( bDebugger1 == "true" ){
|
||||||
|
print "B"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
workingMaxCap=aArrayData[m,"usedCapacity"]
|
||||||
|
estCap=" (est)"
|
||||||
|
if ( bDebugger1 == "true" ){
|
||||||
|
print "C"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# note that second case will never really activate except on virtual machines and maybe
|
||||||
|
# mobile devices
|
||||||
|
if ( estCap == "" ) {
|
||||||
|
# do not do this for only single modules found, max mod size can be equal to the array size
|
||||||
|
if ( ( aArrayData[m,"deviceCount16"] > 1 && aArrayData[m,"deviceCountFound"] > 1 ) &&
|
||||||
|
( workingMaxCap < aArrayData[m,"derivedModuleSize"] * aArrayData[m,"deviceCount16"] ) ) {
|
||||||
|
workingMaxCap = aArrayData[m,"derivedModuleSize"] * aArrayData[m,"deviceCount16"]
|
||||||
|
estCap=" (est)"
|
||||||
|
if ( bDebugger1 == "true" ){
|
||||||
|
print "D"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( ( aArrayData[m,"deviceCountFound"] > 0 ) &&
|
||||||
|
( workingMaxCap < aArrayData[m,"derivedModuleSize"] * aArrayData[m,"deviceCountFound"] ) ) {
|
||||||
|
workingMaxCap = aArrayData[m,"derivedModuleSize"] * aArrayData[m,"deviceCountFound"]
|
||||||
|
estCap=" (est)"
|
||||||
|
if ( bDebugger1 == "true" ){
|
||||||
|
print "E"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
## handle cases where we have type 5 data: mms x device count equals type 5 max cap
|
||||||
|
# however do not use it if cap / devices equals the derived module size
|
||||||
|
else if ( aArrayData[m,"maxModuleSize"] > 0 &&
|
||||||
|
( aArrayData[m,"maxModuleSize"] * aArrayData[m,"deviceCount16"] == aArrayData[m,"maxCapacity5"] ) &&
|
||||||
|
aArrayData[m,"maxCapacity5"] != aArrayData[m,"maxCapacity16"] &&
|
||||||
|
aArrayData[m,"maxCapacity16"] / aArrayData[m,"deviceCount16"] != aArrayData[m,"derivedModuleSize"] ) {
|
||||||
|
workingMaxCap = aArrayData[m,"maxCapacity5"]
|
||||||
|
altCap=aArrayData[m,"maxCapacity5"] # not used
|
||||||
|
estCap=" (check)"
|
||||||
|
if ( bDebugger1 == "true" ){
|
||||||
|
print "F"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
altCap=int(altCap)
|
||||||
|
workingMaxCap=int(workingMaxCap)
|
||||||
|
if ( bDebugger1 == "true" ){
|
||||||
|
print "4: mmods: " aArrayData[m,"maxModuleSize"] " :dmmods: " aArrayData[m,"derivedModuleSize"] " :mcap: " workingMaxCap " :ucap: " aArrayData[m,"usedCapacity"]
|
||||||
|
}
|
||||||
|
# some cases of type 5 have too big module max size, just dump the data then since
|
||||||
|
# we cannot know if it is valid or not, and a guess can be wrong easily
|
||||||
|
if ( aArrayData[m,"maxModuleSize"] != 0 && workingMaxCap != "" &&
|
||||||
|
( aArrayData[m,"maxModuleSize"] > workingMaxCap ) ){
|
||||||
|
aArrayData[m,"maxModuleSize"] = 0
|
||||||
|
# print "yes"
|
||||||
|
}
|
||||||
|
if ( bDebugger1 == "true" ){
|
||||||
|
print "5: dms: " aArrayData[m,"derivedModuleSize"] " :dc: " aArrayData[m,"deviceCount16"] " :wmc: " workingMaxCap
|
||||||
|
}
|
||||||
|
## prep for output ##
|
||||||
|
if (aArrayData[m,"maxModuleSize"] == 0 ){
|
||||||
|
aArrayData[m,"maxModuleSize"]=""
|
||||||
|
# ie: 2x4gB
|
||||||
|
if ( estCap == "" && int(aArrayData[m,"derivedModuleSize"]) > 0 &&
|
||||||
|
workingMaxCap > ( int(aArrayData[m,"derivedModuleSize"]) * int(aArrayData[m,"deviceCount16"]) * 4 ) ) {
|
||||||
|
estCap=" (check)"
|
||||||
|
if ( bDebugger1 == "true" ){
|
||||||
|
print "G"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
# case where listed max cap is too big for actual slots x max cap, eg:
|
||||||
|
# listed max cap, 8gb, max mod 2gb, slots 2
|
||||||
|
if ( estCap == "" && aArrayData[m,"maxModuleSize"] > 0 ) {
|
||||||
|
if ( int(workingMaxCap) > int(aArrayData[m,"maxModuleSize"]) * aArrayData[m,"deviceCount16"] ) {
|
||||||
|
estCap=" (check)"
|
||||||
|
if ( bDebugger1 == "true" ){
|
||||||
|
print "H"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (aArrayData[m,"maxModuleSize"] > 1023 ) {
|
||||||
|
aArrayData[m,"maxModuleSize"]=aArrayData[m,"maxModuleSize"] / 1024 " GB"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
aArrayData[m,"maxModuleSize"]=aArrayData[m,"maxModuleSize"] " MB"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( aArrayData[m,"deviceCount16"] == 0 ) {
|
||||||
|
aArrayData[m,"deviceCount16"] = ""
|
||||||
|
}
|
||||||
|
if (workingMaxCap != 0 ) {
|
||||||
|
if ( workingMaxCap < 1024 ) {
|
||||||
|
workingMaxCap = workingMaxCap
|
||||||
|
unit=" MB"
|
||||||
|
}
|
||||||
|
else if ( workingMaxCap < 1024000 ) {
|
||||||
|
workingMaxCap = workingMaxCap / 1024
|
||||||
|
unit=" GB"
|
||||||
|
}
|
||||||
|
else if ( workingMaxCap < 1024000000 ) {
|
||||||
|
workingMaxCap = workingMaxCap / 1024000
|
||||||
|
unit=" TB"
|
||||||
|
}
|
||||||
|
# we only want a max 2 decimal places, this trick gives 0 to 2
|
||||||
|
workingMaxCap=gensub(/([0-9]+\.[0-9][0-9]).*/,"\\1",1,workingMaxCap)
|
||||||
|
workingMaxCap = workingMaxCap unit estCap
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
workingMaxCap == ""
|
||||||
|
}
|
||||||
|
|
||||||
|
print aArrayData[m,"data-type"] "," aArrayData[m,"handle"] "," aArrayData[m,"location"] "," workingMaxCap "," aArrayData[m,"deviceCount16"] "," aArrayData[m,"use"] "," aArrayData[m,"errorCorrection"] "," aArrayData[m,"maxModuleSize"] estMod "," aArrayData[m,"voltage5"]
|
||||||
|
# print device rows next
|
||||||
|
for ( j=0;j<=100;j++ ) {
|
||||||
|
if (aMemory[m,j,0] != "" ) {
|
||||||
|
unit=""
|
||||||
|
workingSize=aMemory[m,j,2]
|
||||||
|
if ( workingSize ~ /^[0-9]+$/ ) {
|
||||||
|
workingSize=int(workingSize)
|
||||||
|
if ( workingSize < 1024 ) {
|
||||||
|
workingSize = workingSize
|
||||||
|
unit=" MB"
|
||||||
|
}
|
||||||
|
else if ( workingSize < 1024000 ) {
|
||||||
|
workingSize = workingSize / 1024
|
||||||
|
unit=" GB"
|
||||||
|
}
|
||||||
|
else if ( workingSize < 1024000000 ) {
|
||||||
|
workingSize = workingSize / 1024000
|
||||||
|
unit=" TB"
|
||||||
|
}
|
||||||
|
# we only want a max 2 decimal places, this trick gives 0 to 2
|
||||||
|
workingSize=gensub(/([0-9]+\.[0-9][0-9]).*/,"\\1",1,workingSize)
|
||||||
|
workingSize = workingSize unit
|
||||||
|
}
|
||||||
|
print aMemory[m,j,0] "," aMemory[m,j,1] "," workingSize "," aMemory[m,j,3] "," aMemory[m,j,4] "," aMemory[m,j,5] "," aMemory[m,j,6] "," aMemory[m,j,7] "," aMemory[m,j,8] "," aMemory[m,j,9] "," aMemory[m,j,10] "," aMemory[m,j,11] "," aMemory[m,j,12] "," aMemory[m,j,13] "," aMemory[m,j,14] "," aMemory[m,j,15] "," aMemory[m,j,16] "," aMemory[m,j,17]
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}' <<< "$DMIDECODE_DATA" ) )
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
IFS="$ORIGINAL_IFS"
|
IFS="$ORIGINAL_IFS"
|
||||||
|
@ -11886,12 +12257,13 @@ print_ram_data()
|
||||||
{
|
{
|
||||||
eval $LOGFS
|
eval $LOGFS
|
||||||
local memory_line='' line_2='' line_3='' b_module_present='true'
|
local memory_line='' line_2='' line_3='' b_module_present='true'
|
||||||
local error_string='' a_memory_item='' line_starter='Memory:' array_counter=0
|
local error_string='' a_memory_item='' line_starter='Memory:' array_counter=1 device_counter=1
|
||||||
local dmidecodeNull='No dmidecode memory data: try newer kernel.'
|
local dmidecodeNull='No dmidecode memory data: try newer kernel.'
|
||||||
|
|
||||||
local manufacturer='' part_nu='' serial_nu='' device_speed='' configured_speed=''
|
local manufacturer='' part_nu='' serial_nu='' device_speed='' configured_speed='' bus_width=
|
||||||
local data_width='' total_width='' device_type='' device_type_detail='' bank='' slot='' form_factor=''
|
local data_width='' total_width='' device_type='' device_type_detail='' bank='' slot='' form_factor=''
|
||||||
local device_size='' array_use='' location='' error_correction='' max_capacity='' nu_of_devices=''
|
local device_size='' array_use='' location='' error_correction='' max_capacity='' nu_of_devices=''
|
||||||
|
local max_module_size='' module_voltage='' bank_connection=''
|
||||||
|
|
||||||
get_ram_data
|
get_ram_data
|
||||||
#echo ${#A_MEMORY_DATA[@]}
|
#echo ${#A_MEMORY_DATA[@]}
|
||||||
|
@ -11909,10 +12281,16 @@ print_ram_data()
|
||||||
memory_line=''
|
memory_line=''
|
||||||
line_2=''
|
line_2=''
|
||||||
line_3=''
|
line_3=''
|
||||||
|
bus_width=''
|
||||||
|
data_width=
|
||||||
|
total_width=
|
||||||
part_nu=''
|
part_nu=''
|
||||||
serial_nu=''
|
serial_nu=''
|
||||||
manufacturer=''
|
manufacturer=''
|
||||||
# memory-array,0x0012,System Board,8 GB,4,System Memory,None
|
max_module_size=''
|
||||||
|
module_voltage=''
|
||||||
|
bank_connection=''
|
||||||
|
# memory-array,0x0012,System Board,8 GB,4,System Memory,None,max size,moudule voltage
|
||||||
if [[ ${a_memory_item[0]} == 'memory-array' ]];then
|
if [[ ${a_memory_item[0]} == 'memory-array' ]];then
|
||||||
if [[ -n ${a_memory_item[4]} ]];then
|
if [[ -n ${a_memory_item[4]} ]];then
|
||||||
nu_of_devices=${a_memory_item[4]}
|
nu_of_devices=${a_memory_item[4]}
|
||||||
|
@ -11929,33 +12307,55 @@ print_ram_data()
|
||||||
else
|
else
|
||||||
error_correction='N/A'
|
error_correction='N/A'
|
||||||
fi
|
fi
|
||||||
memory_line="${C1}Array$SEP3${C2} $array_counter ${C1}capacity$SEP3${C2} $max_capacity ${C1}devices$SEP3${C2} $nu_of_devices ${C1}EC$SEP3${C2} $error_correction"
|
if [[ $B_EXTRA_DATA == 'true' ]];then
|
||||||
|
if [[ -n ${a_memory_item[7]} ]];then
|
||||||
|
max_module_size="${C1}max module size${SEP3}${C2} ${a_memory_item[7]} "
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ $B_EXTRA_EXTRA_EXTRA_DATA == 'true' ]];then
|
||||||
|
if [[ -n ${a_memory_item[8]} ]];then
|
||||||
|
module_voltage="${C1}module voltage$SEP3${C2} ${a_memory_item[8]}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
memory_line="${C1}Array-$array_counter capacity$SEP3${C2} $max_capacity ${C1}devices$SEP3${C2} $nu_of_devices ${C1}EC$SEP3${C2} $error_correction "
|
||||||
|
line_2="$max_module_size$module_voltage"
|
||||||
|
if [[ -n $line_2 && $( calculate_line_length "$memory_line$line_2" ) -gt $COLS_INNER ]];then
|
||||||
|
memory_line=$( create_print_line "$line_starter" "$memory_line${CN}" )
|
||||||
|
print_screen_output "$memory_line"
|
||||||
|
memory_line="$line_2"
|
||||||
|
line_starter=' '
|
||||||
|
line_2=''
|
||||||
|
else
|
||||||
|
memory_line="$memory_line$line_2"
|
||||||
|
line_2=''
|
||||||
|
fi
|
||||||
(( array_counter++ ))
|
(( array_counter++ ))
|
||||||
|
device_counter=1 # reset so device matches device count per array
|
||||||
else
|
else
|
||||||
# not used for now
|
# not used for now
|
||||||
if [[ -n ${a_memory_item[3333]} ]];then
|
# if [[ -n ${a_memory_item[3333]} ]];then
|
||||||
if [[ -z ${a_memory_item[3]/BANK*/} ]];then
|
# if [[ -z ${a_memory_item[3]/BANK*/} ]];then
|
||||||
#bank=${a_memory_item[3]#BANK}
|
# #bank=${a_memory_item[3]#BANK}
|
||||||
bank=${a_memory_item[3]}
|
# bank=${a_memory_item[3]}
|
||||||
bank=${bank## }
|
# bank=${bank## }
|
||||||
else
|
# else
|
||||||
bank=${a_memory_item[3]}
|
# bank=${a_memory_item[3]}
|
||||||
fi
|
# fi
|
||||||
else
|
# else
|
||||||
bank='N/A'
|
# bank='N/A'
|
||||||
fi
|
# fi
|
||||||
# not used for now
|
# # not used for now
|
||||||
if [[ -n ${a_memory_item[44444]} ]];then
|
# if [[ -n ${a_memory_item[44444]} ]];then
|
||||||
if [[ -z ${a_memory_item[4]/SLOT*/} ]];then
|
# if [[ -z ${a_memory_item[4]/SLOT*/} ]];then
|
||||||
#slot=${a_memory_item[4]#SLOT}
|
# #slot=${a_memory_item[4]#SLOT}
|
||||||
slot=${a_memory_item[4]}
|
# slot=${a_memory_item[4]}
|
||||||
slot=${slot## }
|
# slot=${slot## }
|
||||||
else
|
# else
|
||||||
slot=${a_memory_item[4]}
|
# slot=${a_memory_item[4]}
|
||||||
fi
|
# fi
|
||||||
else
|
# else
|
||||||
slot='N/A'
|
# slot='N/A'
|
||||||
fi
|
# fi
|
||||||
if [[ -n ${a_memory_item[15]} ]];then
|
if [[ -n ${a_memory_item[15]} ]];then
|
||||||
locator=${a_memory_item[15]}
|
locator=${a_memory_item[15]}
|
||||||
locator=${locator## }
|
locator=${locator## }
|
||||||
|
@ -12019,32 +12419,35 @@ print_ram_data()
|
||||||
serial_nu='N/A'
|
serial_nu='N/A'
|
||||||
fi
|
fi
|
||||||
serial_nu="${C1}serial$SEP3${C2} $serial_nu "
|
serial_nu="${C1}serial$SEP3${C2} $serial_nu "
|
||||||
|
|
||||||
|
if [[ $device_size != 'N/A' && -n ${a_memory_item[16]} ]];then
|
||||||
|
bank_connection=" ${a_memory_item[16]}"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [[ $B_EXTRA_EXTRA_EXTRA_DATA == 'true' ]];then
|
if [[ $B_EXTRA_EXTRA_EXTRA_DATA == 'true' ]];then
|
||||||
if [[ $b_module_present == 'true' ]] || \
|
if [[ $b_module_present == 'true' ]] || \
|
||||||
[[ -n ${a_memory_item[11]} || -n ${a_memory_item[10]} ]];then
|
[[ -n ${a_memory_item[11]} || -n ${a_memory_item[10]} ]];then
|
||||||
if [[ -n ${a_memory_item[11]} ]];then
|
# only create this if the total exists and is > data width
|
||||||
data_width=${a_memory_item[11]}
|
if [[ -n ${a_memory_item[10]/ bits/} && -n ${a_memory_item[11]/ bits} && \
|
||||||
|
${a_memory_item[11]/ bits/} -gt ${a_memory_item[10]/ bits/} ]];then
|
||||||
|
total_width=" (total$SEP3 ${a_memory_item[11]})"
|
||||||
|
fi
|
||||||
|
if [[ -n ${a_memory_item[10]} ]];then
|
||||||
|
data_width=${a_memory_item[10]}
|
||||||
else
|
else
|
||||||
data_width='N/A'
|
data_width='N/A'
|
||||||
fi
|
fi
|
||||||
data_width="${C1}width$SEP3 total$SEP3${C2} $data_width "
|
bus_width="${C1}bus width$SEP3${C2} $data_width$total_width "
|
||||||
if [[ -n ${a_memory_item[10]} ]];then
|
|
||||||
total_width=${a_memory_item[10]}
|
|
||||||
else
|
|
||||||
total_width='N/A'
|
|
||||||
fi
|
|
||||||
total_width="${C1}data$SEP3${C2} $total_width "
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
memory_line="${C1}Locator$SEP3${C2} $locator ${C1}size$SEP3${C2} $device_size $device_speed"
|
memory_line="${C1}Device-$device_counter$SEP3${C2} $locator ${C1}size$SEP3${C2} $device_size$bank_connection $device_speed"
|
||||||
if [[ $( calculate_line_length "$memory_line$device_type" ) -le $COLS_INNER ]];then
|
if [[ $( calculate_line_length "$memory_line$device_type" ) -le $COLS_INNER ]];then
|
||||||
memory_line="$memory_line$device_type"
|
memory_line="$memory_line$device_type"
|
||||||
device_type=''
|
device_type=''
|
||||||
fi
|
fi
|
||||||
line_3="$manufacturer$part_nu$serial_nu"
|
line_3="$manufacturer$part_nu$serial_nu"
|
||||||
line_2="$device_type$data_width$total_width"
|
line_2="$device_type$bus_width"
|
||||||
# echo $( calculate_line_length "$memory_line" )
|
# echo $( calculate_line_length "$memory_line" )
|
||||||
# echo $( calculate_line_length "$memory_line$line_2" )
|
# echo $( calculate_line_length "$memory_line$line_2" )
|
||||||
if [[ $( calculate_line_length "$memory_line$line_2$line_3" ) -gt $COLS_INNER ]];then
|
if [[ $( calculate_line_length "$memory_line$line_2$line_3" ) -gt $COLS_INNER ]];then
|
||||||
|
@ -12052,16 +12455,17 @@ print_ram_data()
|
||||||
print_screen_output "$memory_line"
|
print_screen_output "$memory_line"
|
||||||
memory_line="$line_2"
|
memory_line="$line_2"
|
||||||
line_starter=' '
|
line_starter=' '
|
||||||
if [[ -n $line_3 && $( calculate_line_length "$memory_line$line_3" ) -gt $COLS_INNER ]];then
|
if [[ -n $memory_line && -n $line_3 && $( calculate_line_length "$memory_line$line_3" ) -gt $COLS_INNER ]];then
|
||||||
memory_line=$( create_print_line "$line_starter" "$memory_line${CN}" )
|
memory_line=$( create_print_line "$line_starter" "$memory_line${CN}" )
|
||||||
print_screen_output "$memory_line"
|
print_screen_output "$memory_line"
|
||||||
memory_line="$line_3"
|
memory_line="$line_3"
|
||||||
else
|
else
|
||||||
memory_line="$line_2$line_3"
|
memory_line="$memory_line$line_3"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
memory_line="$memory_line$line_2$line_3"
|
memory_line="$memory_line$line_2$line_3"
|
||||||
fi
|
fi
|
||||||
|
(( device_counter++ ))
|
||||||
fi
|
fi
|
||||||
memory_line=$( create_print_line "$line_starter" "$memory_line${CN}" )
|
memory_line=$( create_print_line "$line_starter" "$memory_line${CN}" )
|
||||||
print_screen_output "$memory_line"
|
print_screen_output "$memory_line"
|
||||||
|
|
Loading…
Reference in a new issue