CSIT-618 Add LaTeX support to release report
[csit.git] / resources / tools / report_gen / run_report.sh
index a40d91d..bf6d584 100755 (executable)
@@ -2,12 +2,32 @@
 
 set -x
 
-# Build locally without jenkins integrations
+# Process parameters
+# Debugging
 DEBUG=0
+# Latex Builder
+LATEX=0
+
+for i in "$@"; do
+case $i in
+    --debug)
+        DEBUG=1
+    ;;
+    --latex)
+        LATEX=1
+    ;;
+    *)
+        # unknown option
+    ;;
+esac
+done
 
 # Script directory
 SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 
+# Get actual date
+DATE=$(date -u '+%d-%b-%Y')
+
 # Load configuration
 source ${SCRIPT_DIR}/run_report.cfg
 
@@ -15,6 +35,12 @@ source ${SCRIPT_DIR}/run_report.cfg
 sudo apt-get -y update
 sudo apt-get -y install libxml2 libxml2-dev libxslt-dev build-essential \
     zlib1g-dev unzip
+if [[ ${LATEX} -eq 1 ]] ;
+then
+    sudo apt-get -y install librsvg2-bin texlive-latex-recommended \
+        texlive-fonts-recommended texlive-fonts-extra texlive-latex-extra latexmk wkhtmltopdf
+    sudo sed -i.bak 's/^\(main_memory\s=\s\).*/\110000000/' /usr/share/texlive/texmf-dist/web2c/texmf.cnf
+fi
 
 # Clean-up when finished
 trap 'rm -rf ${DIR[WORKING]}; exit' EXIT
@@ -22,6 +48,7 @@ trap 'rm -rf ${DIR[WORKING]}; exit' ERR
 
 # Remove the old build
 rm -rf ${DIR[BUILD]} || true
+rm -rf ${DIR[BUILD,LATEX]} || true
 rm -rf ${DIR[WORKING]} || true
 
 # Create working directories
@@ -55,14 +82,17 @@ blds=${JOB[PERF,VPP,BLD]}
 for i in ${blds[@]}; do
     curl --silent ${URL[JENKINS,CSIT]}/${JOB[PERF,VPP]}/${i}/robot/report/output_perf_data.xml \
         --output ${DIR[PLOT,VPP]}/${JOB[PERF,VPP]}-${i}.xml
-    #curl --silent ${URL[JENKINS,CSIT]}/${JOB[PERF,VPP]}/${i}/robot/report/output_perf_data.json \
-    #    --output ${DIR[PLOT,VPP]}/${JOB[PERF,VPP]}-${i}.json
     if [[ ${DEBUG} -eq 0 ]] ;
     then
         curl --fail --silent ${URL[JENKINS,CSIT]}/${JOB[PERF,VPP]}/${i}/robot/report/\*zip\*/robot-plugin.zip \
             --output ${DIR[STATIC,ARCH]}/${JOB[PERF,VPP]}-${i}.zip
     fi
 done
+if [[ ${DEBUG} -eq 0 ]] ;
+then
+    curl --fail --silent ${URL[JENKINS,CSIT]}/${JOB[PERF,VPP]}/${JOB[PERF,VPP,FBLD]}/robot/report/\*zip\*/robot-plugin.zip \
+        --output ${DIR[STATIC,ARCH]}/${JOB[PERF,VPP]}-${JOB[PERF,VPP,FBLD]}.zip
+fi
 # Archive trending
 cp ${DIR[PLOT,VPP]}/* ${DIR[STATIC,TREND]}
 blds=${JOB[1704,VPP,BLD]}
@@ -81,8 +111,6 @@ blds=${JOB[PERF,DPDK,BLD]}
 for i in ${blds[@]}; do
     curl --silent ${URL[JENKINS,CSIT]}/${JOB[PERF,DPDK]}/${i}/robot/report/output_perf_data.xml \
         --output ${DIR[PLOT,DPDK]}/${JOB[PERF,DPDK]}-${i}.xml
-    #curl --silent ${URL[JENKINS,CSIT]}/${JOB[PERF,DPDK]}/${i}/robot/report/output_perf_data.json \
-    #    --output ${DIR[PLOT,DPDK]}/${JOB[PERF,DPDK]}-${i}.json
     if [[ ${DEBUG} -eq 0 ]] ;
     then
         curl --fail --silent ${URL[JENKINS,CSIT]}/${JOB[PERF,DPDK]}/${i}/robot/report/\*zip\*/robot-plugin.zip \
@@ -206,29 +234,6 @@ fi
 # Delete temporary json files
 find ${DIR[RST]} -name "*.json" -type f -delete
 
-# Generate the documentation
-DATE=$(date -u '+%d-%b-%Y')
-sphinx-build -v -c . -a -b html -E \
-    -D release=$1 -D version="$1 report - $DATE" \
-    ${DIR[RST]} ${DIR[BUILD]}/
-
-# Patch the CSS for tables layout
-cat - > ${DIR[CSS_PATCH_FILE]} <<"_EOF"
-/* override table width restrictions */
-@media screen and (min-width: 767px) {
-    .wy-table-responsive table td, .wy-table-responsive table th {
-        white-space: normal !important;
-    }
-
-    .wy-table-responsive {
-        font-size: small;
-        margin-bottom: 24px;
-        max-width: 100%;
-        overflow: visible !important;
-    }
-}
-_EOF
-
 # Plot packets per second
 
 # VPP L2 sel1
@@ -237,6 +242,7 @@ python run_plot.py --input ${DIR[PLOT,VPP]} \
     --output ${DIR[STATIC,VPP]}/64B-1t1c-l2-sel1-ndrdisc \
     --title "64B-1t1c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndrdisc" \
     --xpath '//*[@framesize="64B" and contains(@tags,"BASE") and contains(@tags,"NDRDISC") and contains(@tags,"1T1C") and (contains(@tags,"L2BDMACSTAT") or contains(@tags,"L2BDMACLRN") or contains(@tags,"L2XCFWD")) and not(contains(@tags,"VHOST"))]'
+
 python run_plot.py --input ${DIR[PLOT,VPP]} \
     --output ${DIR[STATIC,VPP]}/64B-2t2c-l2-sel1-ndrdisc \
     --title "64B-2t2c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndrdisc" \
@@ -571,6 +577,52 @@ python run_plot.py --input ${DIR[PLOT,DPDK]} \
     --title "64B-2t2c-ethip4-ip4base-l3fwd-ndrdisc" \
     --xpath '//*[@framesize="64B" and contains(@tags,"BASE") and contains(@tags,"NDRDISC") and contains(@tags,"2T2C") and contains(@tags,"IP4FWD")]' --latency lat_50
 
+# HTML BUILDER
+sphinx-build -v -c . -a -b html -E \
+    -D release=$1 -D version="$1 report - $DATE" \
+    ${DIR[RST]} ${DIR[BUILD]}/
+
+# Patch the CSS for tables layout
+cat - > ${DIR[CSS_PATCH_FILE]} <<"_EOF"
+/* override table width restrictions */
+@media screen and (min-width: 767px) {
+    .wy-table-responsive table td, .wy-table-responsive table th {
+        white-space: normal !important;
+    }
+
+    .wy-table-responsive {
+        font-size: small;
+        margin-bottom: 24px;
+        max-width: 100%;
+        overflow: visible !important;
+    }
+}
+_EOF
+
+# LATEX BUILDER
+if [[ ${LATEX} -eq 1 ]] ;
+then
+    # Convert PyPLOT graphs in HTML format to PDF.
+    for f in ${DIR[STATIC,VPP]}/*; do
+        wkhtmltopdf ${f} ${f%.html}.pdf
+    done
+    for f in ${DIR[STATIC,DPDK]}/*; do
+        wkhtmltopdf ${f} ${f%.html}.pdf
+    done
+    rsvg-convert -z 10 -f pdf -o fdio.pdf fdio.svg
+
+    # Generate the LaTeX documentation
+    sphinx-build -v -c . -a -b latex -E \
+        -D release=$1 -D version="$1 report - $DATE" \
+        ${DIR[RST]} ${DIR[BUILD,LATEX]}
+    cd ${DIR[BUILD,LATEX]}
+    pdflatex -shell-escape -interaction nonstopmode csit.tex || true
+    pdflatex -interaction nonstopmode csit.tex || true
+    cp csit.pdf ../${DIR[STATIC,ARCH]}/csit_$1.pdf
+    cd ${SCRIPT_DIR}
+    rm -f fdio.pdf
+fi
+
 # Create archive
 echo Creating csit.report.tar.gz ...
 tar -czvf ./csit.report.tar.gz ${DIR[BUILD]}