source: common/create-sbu_du-report.sh@ 5e4a124

ablfs-more legacy trunk
Last change on this file since 5e4a124 was 3b14992, checked in by Pierre Labastie <pierre@…>, 5 years ago

Fix "installed files size" for the last package:
In create-sbu_du.sh, we use "du -s" for getting the size of the installed
files at the end of the build, and we compare to the "KB" from the previous
package to get the Installed size of the last package. But the du command
excludes an absolute dir, while it should be relative. This lead to bogus
stats.

  • Property mode set to 100755
File size: 5.3 KB
Line 
1#!/bin/bash
2#$Id$
3
4set -e
5
6LOGSDIR=$1
7VERSION=$2
8DATE=$3
9
10LINE="================================================================================"
11
12# Make sure that we have a directory as first argument
13[[ ! -d "$LOGSDIR" ]] && \
14 echo -e "\nUSAGE: create-sbu_du-report.sh logs_directory [book_version] [date]\n" && exit
15
16# Make sure that the first argument is a jhalfs logs directory
17[[ ! -f "$LOGSDIR"/000-masterscript.log ]] && \
18 echo -e "\nLooks like $LOGSDIR isn't a jhalfs logs directory.\n" && exit
19
20# If this script is run manually, the book version may be unknown
21[[ -z "$VERSION" ]] && VERSION=unknown
22[[ -z "$DATE" ]] && DATE=$(date --iso-8601)
23
24# If there is iteration logs directories, copy the logs inside iteration-1
25# to the top level dir
26[[ -d "$LOGSDIR"/build_1 ]] && \
27 cp $LOGSDIR/build_1/* $LOGSDIR
28
29# Set the report file
30REPORT="$VERSION"-SBU_DU-"$DATE".report
31
32[ -f $REPORT ] && : >$REPORT
33
34# Dump generation time stamp and book version
35echo -e "\n`date`\n" > "$REPORT"
36echo -e "Book version is:\t$VERSION\n" >> "$REPORT"
37
38# If found, dump jhalfs.config file in a readable format
39if [[ -f jhalfs.config ]] ; then
40 echo -e "\n\tjhalfs configuration settings:\n" >> "$REPORT"
41 cat jhalfs.config | sed -e '/parameters/d;s/.\[[013;]*m//g;s/</\t</;s/^\w\{1,6\}:/&\t/' >> "$REPORT"
42else
43 echo -e "\nNOTE: the jhalfs configuration settings are unknown" >> "$REPORT"
44fi
45
46# Dump CPU and memory info
47echo -e "\n\n\t\tCPU type:\n" >> "$REPORT"
48cat /proc/cpuinfo >> "$REPORT"
49echo -e "\n\t\tMemory info:\n" >> "$REPORT"
50free >> "$REPORT"
51
52# Parse only that logs that have time data
53BUILDLOGS="`grep -l "^Totalseconds:" ${LOGSDIR}/*`"
54
55# Match the first timed log to extract the SBU unit value from it
56FIRSTLOG=`grep -l "^Totalseconds:" $LOGSDIR/* | head -n1`
57BASELOG=`grep -l "^Totalseconds:" $LOGSDIR/???-binutils* | head -n1`
58echo -e "\nUsing ${BASELOG#*[[:digit:]]-} to obtain the SBU unit value."
59SBU_UNIT=`sed -n 's/^Totalseconds:\s\([[:digit:]]*\)$/\1/p' $BASELOG`
60echo -e "\nThe SBU unit value is equal to $SBU_UNIT seconds.\n"
61echo -e "\n\n$LINE\n\nThe SBU unit value is equal to $SBU_UNIT seconds.\n" >> "$REPORT"
62
63# Set the first value to 0 for grand totals calculation
64SBU2=0
65INSTALL2=0
66INSTALLMB2=0
67
68# Start the loop
69for log in $BUILDLOGS ; do
70
71# Strip the filename
72 PACKAGE="${log#*[[:digit:]]*-}"
73
74# Start SBU calculation
75# Build time
76 TIME=`sed -n 's/^Totalseconds:\s\([[:digit:]]*\)$/\1/p' $log`
77 SECS=`perl -e 'print ('$TIME' % '60')';`
78 MINUTES=`perl -e 'printf "%.0f" , (('$TIME' - '$SECS') / '60')';`
79 SBU=`perl -e 'printf "%.1f" , ('$TIME' / '$SBU_UNIT')';`
80
81# Append SBU value to SBU2 for grand total
82 SBU2=`perl -e 'printf "%.1f" , ('$SBU2' + '$SBU')';`
83
84# Start disk usage calculation
85# Disk usage before unpacking the package
86 DU1=`grep "^KB: " $log | head -n1 | cut -f1 | sed -e 's/KB: //'`
87 DU1MB=`perl -e 'printf "%.3f" , ('$DU1' / '1024')';`
88# Disk usage before deleting the source and build dirs
89 DU2=`grep "^KB: " $log | tail -n1 | cut -f1 | sed -e 's/KB: //'`
90 DU2MB=`perl -e 'printf "%.3f" , ('$DU2' / '1024')';`
91# Calculate disk space required to do the build
92 REQUIRED1=`perl -e 'print ('$DU2' - '$DU1')';`
93 REQUIRED2=`perl -e 'printf "%.3f" , ('$DU2MB' - '$DU1MB')';`
94
95# Append installed files disk usage to the previous entry,
96# except for the first parsed log
97 if [ "$log" != "$FIRSTLOG" ] ; then
98 INSTALL=`perl -e 'print ('$DU1' - '$DU1PREV')';`
99 INSTALLMB=`perl -e 'printf "%.3f" , ('$DU1MB' - '$DU1MBPREV')';`
100 echo -e "Installed files disk usage:\t\t\t\t$INSTALL KB or $INSTALLMB MB\n" >> $REPORT
101 # Append install values for grand total
102 INSTALL2=`perl -e 'printf "%.3f" , ('$INSTALL2' + '$INSTALL')';`
103 INSTALLMB2=`perl -e 'printf "%.3f" , ('$INSTALLMB2' + '$INSTALLMB')';`
104 fi
105
106# Set variables to calculate installed files disk usage
107 DU1PREV=$DU1
108 DU1MBPREV=$DU1MB
109
110# Dump time and disk usage values
111 echo -e "$LINE\n\t\t\t\t[$PACKAGE]\n" >> $REPORT
112 echo -e "Build time is:\t\t\t\t\t\t$MINUTES minutes and $SECS seconds" >> $REPORT
113 echo -e "Build time in seconds is:\t\t\t\t$TIME" >> $REPORT
114 echo -e "Approximate SBU time is:\t\t\t\t$SBU" >> $REPORT
115 echo -e "Disk usage before unpacking the package:\t\t$DU1 KB or $DU1MB MB" >> $REPORT
116 echo -e "Disk usage before deleting the source and build dirs:\t$DU2 KB or $DU2MB MB" >> $REPORT
117 echo -e "Required space to build the package:\t\t\t$REQUIRED1 KB or $REQUIRED2 MB" >> $REPORT
118
119done
120
121# For printing the last 'Installed files disk usage', we need to 'du' the
122# root dir, excluding the jhalfs directory (and lost+found). We assume
123# that the rootdir is $LOGSDIR/../..
124DU1=`du -skx --exclude=jhalfs --exclude=lost+found --exclude var/lib $LOGSDIR/../.. | cut -f1`
125DU1MB=`perl -e 'printf "%.3f" , ('$DU1' / '1024')';`
126INSTALL=`perl -e 'print ('$DU1' - '$DU1PREV')';`
127INSTALLMB=`perl -e 'printf "%.3f" , ('$DU1MB' - '$DU1MBPREV')';`
128echo -e "Installed files disk usage:\t\t\t\t$INSTALL KB or $INSTALLMB MB\n" >> $REPORT
129# Append install values for grand total
130INSTALL2=`perl -e 'printf "%.3f" , ('$INSTALL2' + '$INSTALL')';`
131INSTALLMB2=`perl -e 'printf "%.3f" , ('$INSTALLMB2' + '$INSTALLMB')';`
132
133# Dump grand totals
134echo -e "\n$LINE\n\nTotal time required to build the system:\t\t$SBU2 SBU" >> $REPORT
135# Total disk usage: including /tools but not /sources.
136echo -e "Total Installed files disk usage:\t\t\t$INSTALL2 KB or $INSTALLMB2 MB" >> $REPORT
Note: See TracBrowser for help on using the repository browser.