132 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/bin/bash
 | |
| 
 | |
| # Copyright (c) 2011-2014, Intel Corporation
 | |
| # All rights reserved.
 | |
| #
 | |
| # Redistribution and use in source and binary forms, with or without modification,
 | |
| # are permitted provided that the following conditions are met:
 | |
| #
 | |
| # 1. Redistributions of source code must retain the above copyright notice, this
 | |
| # list of conditions and the following disclaimer.
 | |
| #
 | |
| # 2. Redistributions in binary form must reproduce the above copyright notice,
 | |
| # this list of conditions and the following disclaimer in the documentation and/or
 | |
| # other materials provided with the distribution.
 | |
| #
 | |
| # 3. Neither the name of the copyright holder nor the names of its contributors
 | |
| # may be used to endorse or promote products derived from this software without
 | |
| # specific prior written permission.
 | |
| #
 | |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | |
| # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | |
| # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | |
| # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 | |
| # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | |
| # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | |
| # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 | |
| # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | |
| # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | |
| # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | |
| 
 | |
| 
 | |
| set -euo pipefail
 | |
| 
 | |
| xml_report_generation="$(dirname $0)/coverage.py"
 | |
| xsl_report_formator="$(dirname $0)/coverage.xsl"
 | |
| 
 | |
| help () {
 | |
|     echo "Usage: $0: [OPTION]... [LOGS_FILE]..."
 | |
|     echo "Generate domain coverage report from aplogs."
 | |
|     echo
 | |
|     echo "Supported options:
 | |
|   -h, --help            Display this help
 | |
|   -d, --domains         The domain xml file
 | |
|   -o, --ouput           Output the report to a file instead of stdout
 | |
|   -e, --regexp          A regex to filter (egrep) logs in order to keep only the PFW log lines
 | |
|   -f, --force           Force log parser to continue on ignorable errors
 | |
|   -p, --parser_option   Options to apply to the log parser"
 | |
|     echo
 | |
|     echo 'FIXME: Having more than one dot (".") in aplog paths is not supported.'
 | |
|     echo " - OK: log/aplog.12"
 | |
|     echo " - KO: ../aplog.12"
 | |
| }
 | |
| 
 | |
| # Default values
 | |
| outputFile="-"
 | |
| coverage_report_generator_ignorable_errors="\
 | |
| --ignore-unknown-criterion \
 | |
| --ignore-incoherent-criterion-state \
 | |
| --ignore-ineligible-configuration-application"
 | |
| coverage_report_generator_options=""
 | |
| 
 | |
| # Parse command line arguments
 | |
| ARGS="$(getopt --options "hd:o:e:p:f" \
 | |
|                --longoptions "help,domains:,ouput:,regexp:,parser_option:,force" \
 | |
|                --name "$0" -- "$@" )"
 | |
| 
 | |
| eval set -- "$ARGS"
 | |
| 
 | |
| 
 | |
| while true;
 | |
| do
 | |
|     case "$1" in
 | |
|         -h|--help)
 | |
|             shift
 | |
|             help
 | |
|             exit 0
 | |
|             ;;
 | |
|         -d|--domains)
 | |
|             shift
 | |
|             domainsFile="$1"
 | |
|             shift
 | |
|             ;;
 | |
|         -o|--output)
 | |
|             shift
 | |
|             outputFile="$1"
 | |
|             shift
 | |
|             ;;
 | |
|         -e|--regex)
 | |
|             shift
 | |
|             filterRegex="$1"
 | |
|             shift
 | |
|             ;;
 | |
|         -p|--parser_option)
 | |
|             shift
 | |
|             coverage_report_generator_options+="$1 "
 | |
|             shift
 | |
|             ;;
 | |
|         -f|--force)
 | |
|             shift
 | |
|             coverage_report_generator_options+="$coverage_report_generator_ignorable_errors "
 | |
|             ;;
 | |
|         --)
 | |
|             shift
 | |
|             break
 | |
|             ;;
 | |
|     esac
 | |
| done
 | |
| 
 | |
| if ! test "${domainsFile:-}"
 | |
| then
 | |
|     echo "Please provide a xml domain file."
 | |
|     exit 2
 | |
| fi
 | |
| 
 | |
| if ! test "${filterRegex:-}"
 | |
| then
 | |
|     echo "Please provide a regex to filter log."
 | |
|     echo "Other PFW instances log lines must not be matched by this regex."
 | |
|     exit 3
 | |
| fi
 | |
| 
 | |
| printf "%s\0" "$@" |
 | |
|     # Sort aplogs in chronological order
 | |
|     sort --key=2 --field-separator=. --numeric-sort --zero-terminated --reverse |
 | |
|     # Filter log to leave only PFW log lines
 | |
|     xargs --null grep --extended-regexp "$filterRegex" |
 | |
|     # Generate the xml report
 | |
|     $xml_report_generation --xml $coverage_report_generator_options "$domainsFile" |
 | |
|     # Generate the html report
 | |
|     xsltproc --output "$outputFile" $xsl_report_formator -
 | |
| 
 |