-
Notifications
You must be signed in to change notification settings - Fork 3
/
pkg_comp4cron.sh
116 lines (100 loc) · 3.82 KB
/
pkg_comp4cron.sh
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
# Copyright 2012 Google Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * 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.
# * Neither the name of Google Inc. 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
# OWNER 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.
# \file pkg_comp4cron.sh
# Entry point and main program logic.
#
# TODO(jmmv): This is a vile copy from the sysbuild4cron script provided
# by sysbuild. We should remove such divergence in some way between the
# two packages.
shtk_import cli
# Paths to installed files.
#
# Can be overriden for test purposes only.
: ${PKG_COMP_BINDIR="__PKG_COMP_BINDIR__"}
# Sends an email notification upon a failure.
#
# \param logfile File containing the output of the failed command.
# \param recipient Who to send the email to.
# \param ... Command that failed.
pkg_comp4cron_email() {
local logfile="${1}"; shift
local recipient="${1}"; shift
local maxlines=100
{
echo "The following command has failed:"
echo
echo " $*"
echo
echo "The output of the failed command has been left in:"
echo
echo " ${logfile}"
echo
echo "The last ${maxlines} of the log follow:"
echo
tail -n${maxlines} "${logfile}"
} | mail -s "pkg_comp failure report" "${recipient}"
}
# Entry point to the program.
#
# \param ... Command-line arguments to be processed.
#
# \return An exit code to be returned to the user.
main() {
local logdir="${HOME}/pkg_comp/log"
local recipient="$(id -u -n)"
while getopts ':l:r:' arg "${@}"; do
case "${arg}" in
l) # Location of logs.
case "${OPTARG}" in
/*) logdir="${OPTARG}" ;;
*) logdir="$(pwd)/${OPTARG}" ;;
esac
;;
r) # Email recipient.
recipient="${OPTARG}"
;;
:)
shtk_cli_usage_error "Missing argument to option -${OPTARG}"
;;
\?)
shtk_cli_usage_error "Unknown option -${OPTARG}"
;;
esac
done
shift $((${OPTIND} - 1))
set -- "${PKG_COMP_BINDIR}/pkg_comp" "${@}"
if [ ! -d "${logdir}" ]; then
mkdir -p "$(dirname "${logdir}")" >/dev/null 2>/dev/null || true
mkdir "${logdir}" \
|| shtk_cli_error "Failed to create directory '${logdir}'"
fi
local exit_code=0
local logfile="${logdir}/$(shtk_cli_progname).$(date +%Y%m%d%H%M%S).log"
"${@}" >"${logfile}" 2>&1 \
|| pkg_comp4cron_email "${logfile}" "${recipient}" "${@}"
}