summaryrefslogtreecommitdiffstats
path: root/tools/coverage/aplog2coverage.sh
blob: c50e61c4402f520170bdc9219f33d1eabc4fd7c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/bin/bash

# INTEL CONFIDENTIAL
# Copyright  2013 Intel
# Corporation All Rights Reserved.
#
# The source code contained or described herein and all documents related to
# the source code ("Material") are owned by Intel Corporation or its suppliers
# or licensors. Title to the Material remains with Intel Corporation or its
# suppliers and licensors. The Material contains trade secrets and proprietary
# and confidential information of Intel or its suppliers and licensors. The
# Material is protected by worldwide copyright and trade secret laws and
# treaty provisions. No part of the Material may be used, copied, reproduced,
# modified, published, uploaded, posted, transmitted, distributed, or
# disclosed in any way without Intels prior express written permission.
#
# No license under any patent, copyright, trade secret or other intellectual
# property right is granted to or conferred upon you by disclosure or delivery
# of the Materials, either expressly, by implication, inducement, estoppel or
# otherwise. Any license under such intellectual property rights must be
# express and approved by Intel in writing.

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-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 -