1 #!/bin/bash 2 3 # Copyright (c) 2011-2014, Intel Corporation 4 # All rights reserved. 5 # 6 # Redistribution and use in source and binary forms, with or without modification, 7 # are permitted provided that the following conditions are met: 8 # 9 # 1. Redistributions of source code must retain the above copyright notice, this 10 # list of conditions and the following disclaimer. 11 # 12 # 2. Redistributions in binary form must reproduce the above copyright notice, 13 # this list of conditions and the following disclaimer in the documentation and/or 14 # other materials provided with the distribution. 15 # 16 # 3. Neither the name of the copyright holder nor the names of its contributors 17 # may be used to endorse or promote products derived from this software without 18 # specific prior written permission. 19 # 20 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 21 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 22 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 24 # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 25 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 26 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 27 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 29 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 31 32 set -euo pipefail 33 34 xml_report_generation="$(dirname $0)/coverage.py" 35 xsl_report_formator="$(dirname $0)/coverage.xsl" 36 37 help () { 38 echo "Usage: $0: [OPTION]... [LOGS_FILE]..." 39 echo "Generate domain coverage report from aplogs." 40 echo 41 echo "Supported options: 42 -h, --help Display this help 43 -d, --domains The domain xml file 44 -o, --ouput Output the report to a file instead of stdout 45 -e, --regexp A regex to filter (egrep) logs in order to keep only the PFW log lines 46 -f, --force Force log parser to continue on ignorable errors 47 -p, --parser_option Options to apply to the log parser" 48 echo 49 echo 'FIXME: Having more than one dot (".") in aplog paths is not supported.' 50 echo " - OK: log/aplog.12" 51 echo " - KO: ../aplog.12" 52 } 53 54 # Default values 55 outputFile="-" 56 coverage_report_generator_ignorable_errors="\ 57 --ignore-unknown-criterion \ 58 --ignore-incoherent-criterion-state \ 59 --ignore-ineligible-configuration-application" 60 coverage_report_generator_options="" 61 62 # Parse command line arguments 63 ARGS="$(getopt --options "hd:o:e:p:f" \ 64 --longoptions "help,domains:,ouput:,regexp:,parser_option:,force" \ 65 --name "$0" -- "$@" )" 66 67 eval set -- "$ARGS" 68 69 70 while true; 71 do 72 case "$1" in 73 -h|--help) 74 shift 75 help 76 exit 0 77 ;; 78 -d|--domains) 79 shift 80 domainsFile="$1" 81 shift 82 ;; 83 -o|--output) 84 shift 85 outputFile="$1" 86 shift 87 ;; 88 -e|--regex) 89 shift 90 filterRegex="$1" 91 shift 92 ;; 93 -p|--parser_option) 94 shift 95 coverage_report_generator_options+="$1 " 96 shift 97 ;; 98 -f|--force) 99 shift 100 coverage_report_generator_options+="$coverage_report_generator_ignorable_errors " 101 ;; 102 --) 103 shift 104 break 105 ;; 106 esac 107 done 108 109 if ! test "${domainsFile:-}" 110 then 111 echo "Please provide a xml domain file." 112 exit 2 113 fi 114 115 if ! test "${filterRegex:-}" 116 then 117 echo "Please provide a regex to filter log." 118 echo "Other PFW instances log lines must not be matched by this regex." 119 exit 3 120 fi 121 122 printf "%s\0" "$@" | 123 # Sort aplogs in chronological order 124 sort --key=2 --field-separator=. --numeric-sort --zero-terminated --reverse | 125 # Filter log to leave only PFW log lines 126 xargs --null grep --extended-regexp "$filterRegex" | 127 # Generate the xml report 128 $xml_report_generation --xml $coverage_report_generator_options "$domainsFile" | 129 # Generate the html report 130 xsltproc --output "$outputFile" $xsl_report_formator - 131 132