2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2025-08-26 21:20:29 +00:00

[xCAT Jenkins Email Report] Create a MySQL database procedure for the mail report

This commit is contained in:
GONG Jie
2016-07-08 00:04:18 +08:00
parent 72118924f6
commit 39375683ae
2 changed files with 421 additions and 300 deletions

View File

@@ -17,6 +17,8 @@ BASE_DIR="${SCRIPT%/*}"
! source "${BASE_DIR}/email.sh" >/dev/null 2>&1 &&
echo "File \"${BASE_DIR}/email.sh\" not found" >&2 && exit 1
! type mysql >/dev/null 2>&1 &&
echo "Command \"mysql\" not found" >&2 && exit 1
# The configuration part
@@ -25,13 +27,9 @@ MYSQL_USER="root"
MYSQL_PASS="password"
MYSQL_DB="xCATjkLogAnalyzer"
# The main part
MYSQL_COMMAND=("mysql" -B -N -r -s "-h" "${MYSQL_HOST}" -u "${MYSQL_USER}" -p"${MYSQL_PASS}" "${MYSQL_DB}")
for c in mysql tail sed grep
do
! type "${c}" >/dev/null 2>&1 &&
echo "Command \"${c}\" not found" >&2 && exit 1
done
# The main part
Email report
@@ -39,297 +37,7 @@ $report_setTo "Alice" alice@example.org
$report_setFrom "xCAT Jenkins Mail Bot" root@localhost.localdomain
DateTime="$(date -R)"
MYSQL_COMMAND=("mysql" "-h" "${MYSQL_HOST}" -u "${MYSQL_USER}" -p"${MYSQL_PASS}" "${MYSQL_DB}")
Subject="$("${MYSQL_COMMAND[@]}" <<<"SELECT CONCAT('Passed: ', SUM(Passed), ' Failed: ', SUM(Failed), ' No run: ', SUM(\`No run\`)) AS Summary FROM LatestDailyReport;" | tail -n 1)"
$report_setSubject "[xCAT Jenkins] ${Subject}"
$report_setHTML <<-EOF
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewpoint" content="width=device-width, initial-scale=1.0" />
<title>xCAT Jenkins Test Report</title>
</head>
<body style="font-weight: 500; font-size: 10.5pt; font-family: Helvetica, Arial, sans-serif; text-align: center;">
<table style="border-collapse: collapse; border-style: none; border-width: 0; margin: auto; text-align: left; width: 680px;">
<tr style="vertical-align: baseline;">
<td style="padding: 2px 3px; vertical-align: top; width: 540px;"><p style="font-weight: 900; font-size: 16pt;">xCAT Jenkins Test Report</p></td>
<td style="padding: 2px 3px; text-align: right"><img src="data:image/png;base64,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" alt="xCAT Logo" title="xCAT Logo" style="border-style: none; border-width: 0;" width="120" height="90" /></td>
</tr>
</table>
<p style="font-size: 12pt; font-weight: 700; text-align: center;"></p>
<table style="border-collapse: collapse; border-style: none; border-width: 0; box-shadow: 1px 2px 3px #cccccc; text-align: left; margin: auto; width: 680px;">
<tr style="background-color: #003366; color: #ffffff; font-weight: 700; text-align: center; vertical-align: baseline;">
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 60px">Arch</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 100px;">OS</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 80px">Duration</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Passed</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Failed</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">No run</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Subtotal</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">Pass rate</th>
</tr>
$(
LatestDailyReport="$("${MYSQL_COMMAND[@]}" -t <<<"SELECT Title, Arch, OS, Duration, Passed, Failed, \`No run\`, Subtotal, \`Pass rate\` FROM LatestDailyReport;")"
oIFS="${IFS}"
IFS="|"
color=""
while read -r n title arch os duration passed failed no_run subtotal pass_rate n
do
[ "${color}" = "#e0e0e0" ] && color="#a0d0ff" || color="#e0e0e0"
echo "<tr style=\"background-color: ${color}; vertical-align: baseline;\" title=\"${title}\">"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">${arch}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">${os}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${duration}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${passed}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${failed}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${no_run}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${subtotal}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${pass_rate}</td>"
echo "</tr>"
done < <(grep -v -- ---- <<<"${LatestDailyReport}" | sed -e '1d' -e 's/ *| */|/g')
IFS="${oIFS}"
LatestDailyReportSummary="$("${MYSQL_COMMAND[@]}" -t <<<"SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(Duration))) AS Duration, SUM(Passed), SUM(Failed), SUM(\`No run\`), SUM(Subtotal), IFNULL(CONCAT(ROUND(SUM(Passed) / (SUM(Passed) + SUM(Failed)) * 100, 2), '%'), 'N/A') AS \`Pass rate\` FROM LatestDailyReport;")"
oIFS="${IFS}"
IFS="|"
read -r n duration passed failed no_run total pass_rate n < <(grep -v -- ---- <<<"${LatestDailyReportSummary}" | sed -e '1d' -e 's/ *| */|/g')
echo "<tr style=\"background-color: #cccccc; vertical-align: baseline;\">"
echo "<th style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">Total</th>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">-</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${duration}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${passed}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${failed}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${no_run}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${total}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${pass_rate}</td>"
echo "</tr>"
IFS="${oIFS}"
)
</table>
<hr style="background-color: #cccccc; border-width: 0; box-shadow: 1px 2px 3px #cccccc; height: 1px; width: 680px;" />
<p style="font-size: 12pt; font-weight: 700; text-align: center;">Failed Test Cases</p>
<table style="border-collapse: collapse; border-style: none; border-width: 0; box-shadow: 1px 2px 3px #cccccc; text-align: left; margin: auto; width: 680px;">
<tr style="background-color: #003366; color: #ffffff; font-weight: 700; text-align: center; vertical-align: baseline;">
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 60px;">Arch</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 100px;">OS</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">Failed test cases</th>
</tr>
$(
FailedTestCasesReport="$("${MYSQL_COMMAND[@]}" -t <<<"SELECT Title, Arch, OS, \`Failed test cases\` FROM LatestDailyReport;")"
oIFS="${IFS}"
IFS="|"
color=""
while read -r n title arch os failed_test_cases n
do
[ "${color}" = "#e0e0e0" ] && color="#a0d0ff" || color="#e0e0e0"
[ "${color}" = "#e0e0e0" ] && color2="#f0f0f0" || color2="#d0e8ff"
echo "<tr style=\"background-color: ${color}; vertical-align: baseline;\" title=\"${title}\">"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">${arch}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">${os}</td>"
echo "<td style=\"background-color: ${color2}; border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">${failed_test_cases}</td>"
echo "</tr>"
done < <(grep -v -- ---- <<<"${FailedTestCasesReport}" | sed -e '1d' -e 's/ *| */|/g')
)
</table>
<p style="font-size: 12pt; font-weight: 700; text-align: center;">Seven-day Look Back</p>
<table style="border-collapse: collapse; border-style: none; border-width: 0; box-shadow: 1px 2px 3px #cccccc; text-align: left; margin: auto; width: 680px;">
<tr style="background-color: #003366; color: #ffffff; font-weight: 700; text-align: center; vertical-align: baseline;">
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 60px">Arch</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 100px;">OS</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 80px;">Test runs</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Passed</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Failed</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">No run</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Subtotal</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">Pass rate</th>
</tr>
$(
SevenDayLookBack="$("${MYSQL_COMMAND[@]}" -t <<<"SELECT Arch, OS, \`Test runs\`, Passed, Failed, \`No run\`, Subtotal, \`Pass rate\` FROM SevenDayLookBack;")"
oIFS="${IFS}"
IFS="|"
color=""
while read -r n arch os test_runs passed failed no_run subtotal pass_rate n
do
[ "${color}" = "#e0e0e0" ] && color="#a0d0ff" || color="#e0e0e0"
echo "<tr style=\"background-color: ${color}; vertical-align: baseline;\" title=\"${title}\">"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">${arch}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">${os}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${test_runs}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${passed}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${failed}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${no_run}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${subtotal}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${pass_rate}</td>"
echo "</tr>"
done < <(grep -v -- ---- <<<"${SevenDayLookBack}" | sed -e '1d' -e 's/ *| */|/g')
IFS="${oIFS}"
SevenDayLookBackSummary="$("${MYSQL_COMMAND[@]}" -t <<<"SELECT SUM(\`Test runs\`), SUM(Passed), SUM(Failed), SUM(\`No run\`), SUM(Subtotal), IFNULL(CONCAT(ROUND(SUM(Passed) / (SUM(Passed) + SUM(Failed)) * 100, 2), '%'), 'N/A') AS \`Pass rate\` FROM SevenDayLookBack;")"
oIFS="${IFS}"
IFS="|"
read -r n test_runs passed failed no_run total pass_rate n < <(grep -v -- ---- <<<"${SevenDayLookBackSummary}" | sed -e '1d' -e 's/ *| */|/g')
echo "<tr style=\"background-color: #cccccc; vertical-align: baseline;\">"
echo "<th style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">Total</th>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">-</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${test_runs}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${passed}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${failed}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${no_run}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${total}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${pass_rate}</td>"
echo "</tr>"
IFS="${oIFS}"
)
</table>
<p style="font-size: 12pt; font-weight: 700; text-align: center;">Thirty-day Look Back</p>
<table style="border-collapse: collapse; border-style: none; border-width: 0; box-shadow: 1px 2px 3px #cccccc; text-align: left; margin: auto; width: 680px;">
<tr style="background-color: #003366; color: #ffffff; font-weight: 700; text-align: center; vertical-align: baseline;">
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 60px">Arch</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 100px;">OS</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 80px;">Test runs</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Passed</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Failed</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">No run</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Subtotal</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">Pass rate</th>
</tr>
$(
ThirtyDayLookBack="$("${MYSQL_COMMAND[@]}" -t <<<"SELECT Arch, OS, \`Test runs\`, Passed, Failed, \`No run\`, Subtotal, \`Pass rate\` FROM ThirtyDayLookBack;")"
oIFS="${IFS}"
IFS="|"
color=""
while read -r n arch os test_runs passed failed no_run subtotal pass_rate n
do
[ "${color}" = "#e0e0e0" ] && color="#a0d0ff" || color="#e0e0e0"
echo "<tr style=\"background-color: ${color}; vertical-align: baseline;\" title=\"${title}\">"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">${arch}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">${os}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${test_runs}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${passed}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${failed}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${no_run}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${subtotal}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${pass_rate}</td>"
echo "</tr>"
done < <(grep -v -- ---- <<<"${ThirtyDayLookBack}" | sed -e '1d' -e 's/ *| */|/g')
IFS="${oIFS}"
ThirtyDayLookBackSummary="$("${MYSQL_COMMAND[@]}" -t <<<"SELECT SUM(\`Test runs\`), SUM(Passed), SUM(Failed), SUM(\`No run\`), SUM(Subtotal), IFNULL(CONCAT(ROUND(SUM(Passed) / (SUM(Passed) + SUM(Failed)) * 100, 2), '%'), 'N/A') AS \`Pass rate\` FROM ThirtyDayLookBack;")"
oIFS="${IFS}"
IFS="|"
read -r n test_runs passed failed no_run total pass_rate n < <(grep -v -- ---- <<<"${ThirtyDayLookBackSummary}" | sed -e '1d' -e 's/ *| */|/g')
echo "<tr style=\"background-color: #cccccc; vertical-align: baseline;\">"
echo "<th style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">Total</th>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">-</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${test_runs}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${passed}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${failed}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${no_run}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${total}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${pass_rate}</td>"
echo "</tr>"
IFS="${oIFS}"
)
</table>
<p style="font-size: 12pt; font-weight: 700; text-align: center;">Ninety-day Look Back</p>
<table style="border-collapse: collapse; border-style: none; border-width: 0; box-shadow: 1px 2px 3px #cccccc; text-align: left; margin: auto; width: 680px;">
<tr style="background-color: #003366; color: #ffffff; font-weight: 700; text-align: center; vertical-align: baseline;">
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 60px">Arch</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 100px;">OS</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 80px;">Test runs</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Passed</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Failed</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">No run</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Subtotal</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">Pass rate</th>
</tr>
$(
NinetyDayLookBack="$("${MYSQL_COMMAND[@]}" -t <<<"SELECT Arch, OS, \`Test runs\`, Passed, Failed, \`No run\`, Subtotal, \`Pass rate\` FROM NinetyDayLookBack;")"
oIFS="${IFS}"
IFS="|"
color=""
while read -r n arch os test_runs passed failed no_run subtotal pass_rate n
do
[ "${color}" = "#e0e0e0" ] && color="#a0d0ff" || color="#e0e0e0"
echo "<tr style=\"background-color: ${color}; vertical-align: baseline;\" title=\"${title}\">"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">${arch}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">${os}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${test_runs}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${passed}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${failed}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${no_run}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${subtotal}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${pass_rate}</td>"
echo "</tr>"
done < <(grep -v -- ---- <<<"${NinetyDayLookBack}" | sed -e '1d' -e 's/ *| */|/g')
IFS="${oIFS}"
NinetyDayLookBackSummary="$("${MYSQL_COMMAND[@]}" -t <<<"SELECT SUM(\`Test runs\`), SUM(Passed), SUM(Failed), SUM(\`No run\`), SUM(Subtotal), IFNULL(CONCAT(ROUND(SUM(Passed) / (SUM(Passed) + SUM(Failed)) * 100, 2), '%'), 'N/A') AS \`Pass rate\` FROM NinetyDayLookBack;")"
oIFS="${IFS}"
IFS="|"
read -r n test_runs passed failed no_run total pass_rate n < <(grep -v -- ---- <<<"${NinetyDayLookBackSummary}" | sed -e '1d' -e 's/ *| */|/g')
echo "<tr style=\"background-color: #cccccc; vertical-align: baseline;\">"
echo "<th style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">Total</th>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">-</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${test_runs}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${passed}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${failed}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${no_run}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${total}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${pass_rate}</td>"
echo "</tr>"
IFS="${oIFS}"
)
</table>
<p style="font-size: 12pt; font-weight: 700; text-align: center;">Top 50 Failed Test Cases</p>
<table style="border-collapse: collapse; border-style: none; border-width: 0; box-shadow: 1px 2px 3px #cccccc; text-align: left; margin: auto; width: 680px;">
<tr style="background-color: #003366; color: #ffffff; font-weight: 700; text-align: center; vertical-align: baseline;">
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 40px;">Rank</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">Test case</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 60px">Arch</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 100px;">OS</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 50px;">Last 7 days</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 50px;">Last 30 days</th>
<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 50px;">Last 90 days</th>
</tr>
$(
Top50FailedTestCases="$("${MYSQL_COMMAND[@]}" -t <<<"SELECT @rank := @rank + 1 AS Rank, \`Test case\`, Arch, OS, \`Last seven days\`, \`Last thirty days\`, \`Last ninety days\` FROM (SELECT \`Test case\`, Arch, OS, \`Last seven days\`, \`Last thirty days\`, \`Last ninety days\` FROM FailedTestCasesTopList LIMIT 50) AS TopFifty, (SELECT @rank := 0) AS Rank;")"
oIFS="${IFS}"
IFS="|"
color=""
while read -r n rank test_case arch os last_seven_days last_thirty_days last_ninety_days n
do
[ "${color}" = "#e0e0e0" ] && color="#a0d0ff" || color="#e0e0e0"
[ "${color}" = "#e0e0e0" ] && color2="#f0f0f0" || color2="#d0e8ff"
echo "<tr style=\"background-color: ${color2}; vertical-align: baseline;\">"
echo "<td style=\"background-color: ${color}; border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${rank}</td>"
echo "<td style=\"background-color: ${color}; border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">${test_case}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">${arch}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;\">${os}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${last_seven_days}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${last_thirty_days}</td>"
echo "<td style=\"border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">${last_ninety_days}</td>"
echo "</tr>"
done < <(grep -v -- ---- <<<"${Top50FailedTestCases}" | sed -e '1d' -e 's/ *| */|/g')
IFS="${oIFS}"
)
</table>
<hr style="background-color: #cccccc; border-width: 0; box-shadow: 1px 2px 3px #cccccc; height: 1px; width: 680px;" />
<table style="border-collapse: collapse; border-color: #666666; border-style: solid; border-width: 1px; box-shadow: 1px 2px 3px #cccccc; text-align: left; margin: auto; width: 680px;">
<tr style="background-color: #e0e0e0; vertical-align: baseline;">
<td style="padding: 4px 5px; vertical-align: bottom;"><p style="font-size: 9pt;"><sup>&#x273b;</sup>This email has been sent to you by xCAT Jenkins Mail Bot.<br />
<sup>&#x2020;</sup>This email was sent from a notification-only address that cannot accept incoming email. Please do not reply to this message. If you have received this email in error, please delete it.<br />
<sup>&#x2021;</sup>All the times shown in this test report are the local times of the testing environment.</p>
<p style="font-size: 9pt;">${DateTime}</p></td>
</tr>
</table>
</body>
</html>
EOF
$report_setSubject "$("${MYSQL_COMMAND[@]}" <<<"SELECT * FROM LatestDailyMailReportSubject;")"
$report_setHTML < <("${MYSQL_COMMAND[@]}" <<<"CALL CreateLatestDailyMailReport;")
$report_send

View File

@@ -48,6 +48,19 @@ SET character_set_client = utf8;
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;
--
-- Temporary table structure for view `LatestDailyMailReportSubject`
--
DROP TABLE IF EXISTS `LatestDailyMailReportSubject`;
/*!50001 DROP VIEW IF EXISTS `LatestDailyMailReportSubject`*/;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `LatestDailyMailReportSubject` (
`Subject` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;
--
-- Temporary table structure for view `LatestDailyReport`
--
@@ -324,6 +337,387 @@ SET character_set_client = utf8;
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;
--
-- Dumping routines for database 'xCATjkLogAnalyzer'
--
/*!50003 DROP PROCEDURE IF EXISTS `CreateLatestDailyMailReport` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
/*!50003 SET character_set_client = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection = utf8_general_ci */ ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
/*!50003 SET sql_mode = '' */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `CreateLatestDailyMailReport`()
BEGIN
SET group_concat_max_len := @@max_allowed_packet;
SELECT CONCAT(
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">', "\n",
'<html xmlns="http://www.w3.org/1999/xhtml">', "\n",
'<head>', "\n",
'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />', "\n",
'<meta name="viewpoint" content="width=device-width, initial-scale=1.0" />', "\n",
'<title>xCAT Jenkins Test Report</title>', "\n",
'</head>', "\n",
'<body style="font-weight: 500; font-size: 10.5pt; font-family: Helvetica, Arial, sans-serif; text-align: center;">', "\n",
'<table style="border-collapse: collapse; border-style: none; border-width: 0; margin: auto; text-align: left; width: 680px;">', "\n",
'<tr style="vertical-align: baseline;">', "\n",
'<td style="padding: 2px 3px; vertical-align: top; width: 540px;"><p style="font-weight: 900; font-size: 16pt;">xCAT Jenkins Test Report</p></td>', "\n",
'<td style="padding: 2px 3px; text-align: right"><img src="data:image/png;base64,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" alt="xCAT Logo" title="xCAT Logo" style="border-style: none; border-width: 0;" width="120" height="90" /></td>', "\n",
'</tr>', "\n",
'</table>', "\n",
'<p style="font-size: 12pt; font-weight: 700; text-align: center;"></p>', "\n",
'<table style="border-collapse: collapse; border-style: none; border-width: 0; box-shadow: 1px 2px 3px #cccccc; text-align: left; margin: auto; width: 680px;">', "\n",
'<tr style="background-color: #003366; color: #ffffff; font-weight: 700; text-align: center; vertical-align: baseline;">', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 60px">Arch</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 100px;">OS</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 80px">Duration</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Passed</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Failed</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">No run</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Subtotal</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">Pass rate</th>', "\n",
'</tr>', "\n",
LatestDailyReportContents.HTML,
LatestDailyReportSummary.HTML,
'</table>', "\n",
'<hr style="background-color: #cccccc; border-width: 0; box-shadow: 1px 2px 3px #cccccc; height: 1px; width: 680px;" />', "\n",
'<p style="font-size: 12pt; font-weight: 700; text-align: center;">Failed Test Cases</p>', "\n",
'<table style="border-collapse: collapse; border-style: none; border-width: 0; box-shadow: 1px 2px 3px #cccccc; text-align: left; margin: auto; width: 680px;">', "\n",
'<tr style="background-color: #003366; color: #ffffff; font-weight: 700; text-align: center; vertical-align: baseline;">', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 60px;">Arch</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 100px;">OS</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">Failed test cases</th>', "\n",
'</tr>', "\n",
FailedTestCasesReport.HTML,
'</table>', "\n",
'<p style="font-size: 12pt; font-weight: 700; text-align: center;">Seven-day Look Back</p>', "\n",
'<table style="border-collapse: collapse; border-style: none; border-width: 0; box-shadow: 1px 2px 3px #cccccc; text-align: left; margin: auto; width: 680px;">', "\n",
'<tr style="background-color: #003366; color: #ffffff; font-weight: 700; text-align: center; vertical-align: baseline;">', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 60px">Arch</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 100px;">OS</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 80px;">Test runs</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Passed</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Failed</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">No run</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Subtotal</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">Pass rate</th>', "\n",
'</tr>', "\n",
SevenDayLookBackContents.HTML,
SevenDayLookBackSummary.HTML,
'</table>', "\n",
'<p style="font-size: 12pt; font-weight: 700; text-align: center;">Thirty-day Look Back</p>', "\n",
'<table style="border-collapse: collapse; border-style: none; border-width: 0; box-shadow: 1px 2px 3px #cccccc; text-align: left; margin: auto; width: 680px;">', "\n",
'<tr style="background-color: #003366; color: #ffffff; font-weight: 700; text-align: center; vertical-align: baseline;">', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 60px">Arch</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 100px;">OS</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 80px;">Test runs</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Passed</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Failed</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">No run</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Subtotal</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">Pass rate</th>', "\n",
'</tr>', "\n",
ThirtyDayLookBackContents.HTML,
ThirtyDayLookBackSummary.HTML,
'</table>', "\n",
'<p style="font-size: 12pt; font-weight: 700; text-align: center;">Ninety-day Look Back</p>', "\n",
'<table style="border-collapse: collapse; border-style: none; border-width: 0; box-shadow: 1px 2px 3px #cccccc; text-align: left; margin: auto; width: 680px;">', "\n",
'<tr style="background-color: #003366; color: #ffffff; font-weight: 700; text-align: center; vertical-align: baseline;">', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 60px">Arch</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 100px;">OS</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 80px;">Test runs</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Passed</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Failed</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">No run</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 75px;">Subtotal</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">Pass rate</th>', "\n",
'</tr>', "\n",
NinetyDayLookBackContents.HTML,
NinetyDayLookBackSummary.HTML,
'</table>', "\n",
'<p style="font-size: 12pt; font-weight: 700; text-align: center;">Top 50 Failed Test Cases</p>', "\n",
'<table style="border-collapse: collapse; border-style: none; border-width: 0; box-shadow: 1px 2px 3px #cccccc; text-align: left; margin: auto; width: 680px;">', "\n",
'<tr style="background-color: #003366; color: #ffffff; font-weight: 700; text-align: center; vertical-align: baseline;">', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 40px;">Rank</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">Test case</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 60px">Arch</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 100px;">OS</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 50px;">Last 7 days</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 50px;">Last 30 days</th>', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; width: 50px;">Last 90 days</th>', "\n",
'</tr>', "\n",
TopFiftyFailedTestCases.HTML,
'</table>', "\n",
'<hr style="background-color: #cccccc; border-width: 0; box-shadow: 1px 2px 3px #cccccc; height: 1px; width: 680px;" />', "\n",
'<table style="border-collapse: collapse; border-color: #666666; border-style: solid; border-width: 1px; box-shadow: 1px 2px 3px #cccccc; text-align: left; margin: auto; width: 680px;">', "\n",
'<tr style="background-color: #e0e0e0; vertical-align: baseline;">', "\n",
'<td style="padding: 4px 5px; vertical-align: bottom;"><p style="font-size: 9pt;"><sup>&#x273b;</sup>This email has been sent to you by xCAT Jenkins Mail Bot.<br />', "\n",
'<sup>&#x2020;</sup>This email was sent from a notification-only address that cannot accept incoming email. Please do not reply to this message. If you have received this email in error, please delete it.<br />', "\n",
'<sup>&#x2021;</sup>All the times shown in this test report are the local times of the testing environment.</p>', "\n",
'<p style="font-size: 9pt;">',
NOW(), ' ', REPLACE(CONCAT('+', TIME_FORMAT(TIMEDIFF(NOW(), UTC_TIMESTAMP), '%H%i')), '+-', '-'),
'</p></td>', "\n",
'</tr>', "\n",
'</table>', "\n",
'</body>', "\n",
'</html>'
) AS HTML
FROM (
SELECT GROUP_CONCAT(HTML SEPARATOR '') AS HTML
FROM (
SELECT CONCAT(
'<tr style="background-color: ',
IF (@color = '#e0e0e0', @color := '#a0d0ff', @color := '#e0e0e0'),
'; vertical-align: baseline;" title="', Title, '">', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">',
Arch, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">',
OS, '</td>', "\n"
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
Duration, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
Passed, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
Failed, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
`No run`, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
Subtotal, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
`Pass rate`, '</td>', "\n",
'</tr>', "\n"
) AS HTML
FROM LatestDailyReport,
( SELECT @color := '' ) AS tmp00
) AS tmp10
) AS LatestDailyReportContents, (
SELECT CONCAT(
'<tr style="background-color: #cccccc; vertical-align: baseline;">', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">Total</th>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">-</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SEC_TO_TIME(SUM(TIME_TO_SEC(Duration))), '</td>', "\n"
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(Passed), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(Failed), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(`No run`), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(Subtotal), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(CONCAT(ROUND(SUM(Passed) / (SUM(Passed) + SUM(Failed)) * 100, 2), '%'), 'N/A'), '</td>', "\n",
'</tr>', "\n"
) AS HTML
FROM LatestDailyReport
) AS LatestDailyReportSummary, (
SELECT GROUP_CONCAT(HTML SEPARATOR '') AS HTML
FROM (
SELECT CONCAT(
'<tr style="background-color: ',
IF (@color = '#e0e0e0', @color := '#a0d0ff', @color := '#e0e0e0'),
'; vertical-align: baseline;" title="', Title, '">', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">',
Arch, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">',
OS, '</td>', "\n",
'<td style="background-color: ',
IF (@color = '#e0e0e0', '#f0f0f0', '#d0e8ff'),
'; border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">',
`Failed test cases`, '</td>', "\n",
'</tr>' , "\n"
) AS HTML
FROM LatestDailyReport,
( SELECT @color := '' ) AS tmp00
) AS tmp10
) AS FailedTestCasesReport, (
SELECT GROUP_CONCAT(HTML SEPARATOR '') AS HTML
FROM (
SELECT CONCAT(
'<tr style="background-color: ',
IF (@color = '#e0e0e0', @color := '#a0d0ff', @color := '#e0e0e0'),
'; vertical-align: baseline;">', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">',
Arch, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">',
OS, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
`Test runs`, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
Passed, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
Failed, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
`No run`, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
Subtotal, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
`Pass rate`, '</td>', "\n",
'</tr>', "\n"
) AS HTML
FROM SevenDayLookBack,
( SELECT @color := '' ) AS tmp00
) AS tmp10
) AS SevenDayLookBackContents, (
SELECT CONCAT(
'<tr style="background-color: #cccccc; vertical-align: baseline;">', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">Total</th>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">-</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(`Test runs`), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(Passed), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(Failed), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(`No run`), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(Subtotal), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(CONCAT(ROUND(SUM(Passed) / (SUM(Passed) + SUM(Failed)) * 100, 2), '%'), 'N/A'), '</td>', "\n",
'</tr>', "\n"
) AS HTML
FROM SevenDayLookBack
) AS SevenDayLookBackSummary, (
SELECT GROUP_CONCAT(HTML SEPARATOR '') AS HTML
FROM (
SELECT CONCAT(
'<tr style="background-color: ',
IF (@color = '#e0e0e0', @color := '#a0d0ff', @color := '#e0e0e0'),
'; vertical-align: baseline;">', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">',
Arch, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">',
OS, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
`Test runs`, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
Passed, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
Failed, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
`No run`, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
Subtotal, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
`Pass rate`, '</td>', "\n",
'</tr>', "\n"
) AS HTML
FROM ThirtyDayLookBack,
( SELECT @color := '' ) AS tmp00
) AS tmp10
) AS ThirtyDayLookBackContents, (
SELECT CONCAT(
'<tr style="background-color: #cccccc; vertical-align: baseline;">', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">Total</th>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">-</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(`Test runs`), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(Passed), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(Failed), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(`No run`), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(Subtotal), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(CONCAT(ROUND(SUM(Passed) / (SUM(Passed) + SUM(Failed)) * 100, 2), '%'), 'N/A'), '</td>', "\n",
'</tr>', "\n"
) AS HTML
FROM ThirtyDayLookBack
) AS ThirtyDayLookBackSummary, (
SELECT GROUP_CONCAT(HTML SEPARATOR '') AS HTML
FROM (
SELECT CONCAT(
'<tr style="background-color: ',
IF (@color = '#e0e0e0', @color := '#a0d0ff', @color := '#e0e0e0'),
'; vertical-align: baseline;">', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">',
Arch, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">',
OS, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
`Test runs`, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
Passed, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
Failed, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
`No run`, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
Subtotal, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
`Pass rate`, '</td>', "\n",
'</tr>', "\n"
) AS HTML
FROM NinetyDayLookBack,
( SELECT @color := '' ) AS tmp00
) AS tmp10
) AS NinetyDayLookBackContents, (
SELECT CONCAT(
'<tr style="background-color: #cccccc; vertical-align: baseline;">', "\n",
'<th style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">Total</th>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">-</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(`Test runs`), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(Passed), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(Failed), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(`No run`), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
SUM(Subtotal), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(CONCAT(ROUND(SUM(Passed) / (SUM(Passed) + SUM(Failed)) * 100, 2), '%'), 'N/A'), '</td>', "\n",
'</tr>', "\n"
) AS HTML
FROM NinetyDayLookBack
) AS NinetyDayLookBackSummary, (
SELECT GROUP_CONCAT(HTML SEPARATOR '') AS HTML
FROM (
SELECT CONCAT(
'<tr style="background-color: ',
IF (@color = '#f0f0f0', @color := '#d0e8ff', @color := '#f0f0f0'),
'; vertical-align: baseline;\">', "\n",
'<td style="background-color: ',
IF (@color = '#f0f0f0', '#e0e0e0', '#a0d0ff'),
'; border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;\">',
@rank := @rank + 1, '</td>', "\n",
'<td style="background-color: ',
IF (@color = '#f0f0f0', '#e0e0e0', '#a0d0ff'),
'; border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">',
`Test case`, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">',
Arch, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px;">',
OS, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
`Last seven days`, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
`Last thirty days`, '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
`Last ninety days`, '</td>', "\n",
'</tr>', "\n"
) AS HTML FROM (
SELECT `Test case`, Arch, OS, `Last seven days`, `Last thirty days`, `Last ninety days`
FROM FailedTestCasesTopList LIMIT 50
) AS TopFifty,
( SELECT @color := '' ) AS tmp00,
( SELECT @rank := 0 ) AS tmp09
) AS tmp10
) AS TopFiftyFailedTestCases;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
/*!50003 SET character_set_client = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection = @saved_col_connection */ ;
--
-- Final view structure for view `FailedTestCasesTopList`
--
@@ -338,7 +732,26 @@ SET character_set_client = @saved_cs_client;
/*!50001 SET collation_connection = utf8_general_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `FailedTestCasesTopList` AS select `TestCase`.`TestCaseName` AS `Test case`,`ArchDict`.`ArchName` AS `Arch`,`OSDict`.`OSName` AS `OS`,ifnull(`SevenDayFailed`.`Failed`,0) AS `Last seven days`,ifnull(`ThirtyDayFailed`.`Failed`,0) AS `Last thirty days`,`NinetyDayFailed`.`Failed` AS `Last ninety days` from (((((`NinetyDayFailed` left join `SevenDayFailed` on(((`NinetyDayFailed`.`TestCaseId` = `SevenDayFailed`.`TestCaseId`) and (`NinetyDayFailed`.`ArchId` = `SevenDayFailed`.`ArchId`) and (`NinetyDayFailed`.`OSId` = `SevenDayFailed`.`OSId`)))) left join `ThirtyDayFailed` on(((`NinetyDayFailed`.`TestCaseId` = `ThirtyDayFailed`.`TestCaseId`) and (`NinetyDayFailed`.`ArchId` = `ThirtyDayFailed`.`ArchId`) and (`NinetyDayFailed`.`OSId` = `ThirtyDayFailed`.`OSId`)))) left join `TestCase` on((`NinetyDayFailed`.`TestCaseId` = `TestCase`.`TestCaseId`))) left join `ArchDict` on((`NinetyDayFailed`.`ArchId` = `ArchDict`.`ArchId`))) left join `OSDict` on((`NinetyDayFailed`.`OSId` = `OSDict`.`OSId`))) order by ifnull(`SevenDayFailed`.`Failed`,0) desc,ifnull(`ThirtyDayFailed`.`Failed`,0) desc,`NinetyDayFailed`.`Failed` desc,`OSName`,`ArchName`,`TestCase`.`TestCaseName` */;
/*!50001 VIEW `FailedTestCasesTopList` AS select `TestCase`.`TestCaseName` AS `Test case`,`ArchDict`.`ArchName` AS `Arch`,`OSDict`.`OSName` AS `OS`,ifnull(`SevenDayFailed`.`Failed`,0) AS `Last seven days`,ifnull(`ThirtyDayFailed`.`Failed`,0) AS `Last thirty days`,`NinetyDayFailed`.`Failed` AS `Last ninety days` from (((((`NinetyDayFailed` left join `SevenDayFailed` on(((`NinetyDayFailed`.`TestCaseId` = `SevenDayFailed`.`TestCaseId`) and (`NinetyDayFailed`.`ArchId` = `SevenDayFailed`.`ArchId`) and (`NinetyDayFailed`.`OSId` = `SevenDayFailed`.`OSId`)))) left join `ThirtyDayFailed` on(((`NinetyDayFailed`.`TestCaseId` = `ThirtyDayFailed`.`TestCaseId`) and (`NinetyDayFailed`.`ArchId` = `ThirtyDayFailed`.`ArchId`) and (`NinetyDayFailed`.`OSId` = `ThirtyDayFailed`.`OSId`)))) left join `TestCase` on((`NinetyDayFailed`.`TestCaseId` = `TestCase`.`TestCaseId`))) left join `ArchDict` on((`NinetyDayFailed`.`ArchId` = `ArchDict`.`ArchId`))) left join `OSDict` on((`NinetyDayFailed`.`OSId` = `OSDict`.`OSId`))) order by ifnull(`SevenDayFailed`.`Failed`,0) desc,ifnull(`ThirtyDayFailed`.`Failed`,0) desc,`NinetyDayFailed`.`Failed` desc,`OSDict`.`OSName`,`ArchDict`.`ArchName`,`TestCase`.`TestCaseName` */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
--
-- Final view structure for view `LatestDailyMailReportSubject`
--
/*!50001 DROP TABLE IF EXISTS `LatestDailyMailReportSubject`*/;
/*!50001 DROP VIEW IF EXISTS `LatestDailyMailReportSubject`*/;
/*!50001 SET @saved_cs_client = @@character_set_client */;
/*!50001 SET @saved_cs_results = @@character_set_results */;
/*!50001 SET @saved_col_connection = @@collation_connection */;
/*!50001 SET character_set_client = utf8 */;
/*!50001 SET character_set_results = utf8 */;
/*!50001 SET collation_connection = utf8_general_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `LatestDailyMailReportSubject` AS select concat('[xCAT Jenkins] ','Passed: ',sum(`LatestDailyReport`.`Passed`),' Failed: ',sum(`LatestDailyReport`.`Failed`),' No run: ',sum(`LatestDailyReport`.`No run`)) AS `Subject` from `LatestDailyReport` */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
@@ -542,4 +955,4 @@ SET character_set_client = @saved_cs_client;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2016-06-29 4:52:47
-- Dump completed on 2016-07-07 11:48:15