2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2025-05-29 09:13:08 +00:00

Removing jenkins files

This commit is contained in:
Mark Gurevich 2022-05-25 13:27:28 -04:00
parent 77a1971d99
commit 14f45f9ba7
8 changed files with 0 additions and 4152 deletions

View File

@ -1,398 +0,0 @@
#!/bin/bash
#
# Author: GONG Jie <gongjie@linux.vnet.ibm.com>
# Create: 2016-05-27
# Update: 2016-06-07
# Version: 0.99
#
# EXAMPLE
# #!/bin/bash
#
# source /path/to/email.sh
#
# Email report
#
# $report_setTo bob@example.org
# $report_setTo charlie@example.org
# $report_setTo Dave dave@example.org
# $report_setCc trent@example.org
# $report_setBcc eve@example.org
# $report_setFrom Alice alice@example.org
# $report_setSubject "A Sample Email Report"
#
# $report_setText <<-EOF
# Blah blah blah...
# EOF
#
# $report_addAttachmentFile /path/to/doc/document-a4.pdf
# $report_addAttachmentFile /path/to/doc/onepage-a4.pdf
#
# $report_send
#
# SEE ALSO
# RFC 2045, RFC 2046, RFC 2047, RFC 2822, RFC 5322, RFC 5321
#
function Email()
{
local base="${FUNCNAME}"
local this="$1"
! type base64 >/dev/null 2>&1 &&
echo "${c}: command not found" >&2 &&
return 1
declare -g base64_encode=base64
[[ "$(base64 --help)" =~ GNU ]] &&
declare -g base64_encode="base64 -w 0"
declare -g ${this}_mailTo=""
declare -g ${this}_mailCc=""
declare -g ${this}_mailBcc=""
declare -g ${this}_mailFrom=""
declare -g ${this}_mailReplyTo=""
declare -g ${this}_mailSubject=""
declare -g -a ${this}_mailAttachmentContentTypes
declare -g -a ${this}_mailAttachmentMessages
declare -g -a ${this}_mailAttachmentNames
eval "${this}_mailAttachmentContentTypes=()"
eval "${this}_mailAttachmentMessages=()"
eval "${this}_mailAttachmentNames=()"
local method
for method in $(compgen -A function "${base}_")
do
declare -g ${method/#$base\_/$this\_}="${method} ${this}"
done
}
function Email_setTo()
{
local base="${FUNCNAME%%_*}"
local this="$1"
local inName=""
[ -n "$3" ] && inName="$2" && shift
local inAddress="$2"
local mailTo="${this}_mailTo"
# The format of Email address,
# see RFC 5322, sections 3.2.3 and 3.4.1, and RFC 5321
[[ "${inAddress}" =~ ^[0-9A-Za-z._%+-]+@([0-9A-Za-z][0-9A-Za-z-]+\.)+[A-Za-z]{2,3}$ ]] ||
return 1
[ -n "${!mailTo}" ] && declare -g ${mailTo}+=","$'\n'" "
[ -n "${inName}" ] &&
declare -g ${mailTo}+="=?UTF-8?B?$(echo -n "${inName}" |
${base64_encode})?="$'\n'" <${inAddress}>" ||
declare -g ${mailTo}+="${inAddress}"
return 0
}
function Email_setCc()
{
local base="${FUNCNAME%%_*}"
local this="$1"
local inName=""
[ -n "$3" ] && inName="$2" && shift
local inAddress="$2"
local mailCc="${this}_mailCc"
[[ "${inAddress}" =~ ^[0-9A-Za-z._%+-]+@([0-9A-Za-z][0-9A-Za-z-]+\.)+[A-Za-z]{2,3}$ ]] ||
return 1
[ -n "${!mailCc}" ] && declare -g ${mailCc}+=","$'\n'" "
[ -n "${inName}" ] &&
declare -g ${mailCc}+="=?UTF-8?B?$(echo -n "${inName}" |
${base64_encode})?="$'\n'" <${inAddress}>" ||
declare -g ${mailCc}+="${inAddress}"
return 0
}
function Email_setBcc()
{
local base="${FUNCNAME%%_*}"
local this="$1"
local inName=""
[ -n "$3" ] && inName="$2" && shift
local inAddress="$2"
local mailBcc="${this}_mailBcc"
[[ "${inAddress}" =~ ^[0-9A-Za-z._%+-]+@([0-9A-Za-z][0-9A-Za-z-]+\.)+[A-Za-z]{2,3}$ ]] ||
return 1
[ -n "${!mailBcc}" ] && declare -g ${mailBcc}+=","$'\n'" "
[ -n "${inName}" ] &&
declare -g ${mailBcc}+="=?UTF-8?B?$(echo -n "${inName}" |
${base64_encode})?="$'\n'" <${inAddress}>" ||
declare -g ${mailBcc}+="${inAddress}"
return 0
}
function Email_setFrom()
{
local base="${FUNCNAME%%_*}"
local this="$1"
local inName=""
[ -n "$3" ] && inName="$2" && shift
local inAddress="$2"
local mailFrom="${this}_mailFrom"
[[ "${inAddress}" =~ ^[0-9A-Za-z._%+-]+@([0-9A-Za-z][0-9A-Za-z-]+\.)+[A-Za-z]{2,3}$ ]] ||
return 1
[ -n "${inName}" ] &&
declare -g ${mailFrom}="=?UTF-8?B?$(echo -n "${inName}" |
${base64_encode})?="$'\n'" <${inAddress}>" ||
declare -g ${mailFrom}="${inAddress}"
return 0
}
function Email_setReplyTo()
{
local base="${FUNCNAME%%_*}"
local this="$1"
local inName=""
[ -n "$3" ] && inName="$2" && shift
local inAddress="$2"
local mailReplyTo="${this}_mailReplyTo"
[[ "${inAddress}" =~ ^[0-9A-Za-z._%+-]+@([0-9A-Za-z][0-9A-Za-z-]+\.)+[A-Za-z]{2,3}$ ]] ||
return 1
[ -n "${inName}" ] &&
declare -g ${mailReplyTo}="=?UTF-8?B?$(echo -n "${inName}" |
${base64_encode})?="$'\n'" <${inAddress}>" ||
declare -g ${mailReplyTo}="${inAddress}"
return 0
}
function Email_setSubject()
{
local base="${FUNCNAME%%_*}"
local this="$1"
local inSubject="$2"
local mailSubject="${this}_mailSubject"
local oLANG="${LANG}"
LANG=C
[[ "${#inSubject}" -le 66 && "${inSubject}" =~ ^[0-9A-Za-z\ ._/=+-]+$ ]] &&
declare -g ${mailSubject}="${inSubject}" &&
return 0
# See RFC 5355
declare -g ${mailSubject}="=?UTF-8?B?"
local c=""
local w=""
local -i limit=39
while :
do
read -r -n 1
[[ -z "${REPLY}" || "${REPLY}" =~ [\x00-\x7f\xc0-\xff] ]] &&
(( ${#w} + ${#c} > limit )) &&
declare -g ${mailSubject}+="$(echo -n "${w}" |
${base64_encode})?="$'\n'" =?UTF-8?B?" &&
w="" && limit=45
w+="${c}" && c=""
[ -n "${REPLY}" ] && c+="${REPLY}" || break
done < <(echo -n "${inSubject}")
declare -g ${mailSubject}+="$(echo -n "${w}" | ${base64_encode})?="
LANG="${oLANG}"
return 0
}
function Email_setText()
{
local base="${FUNCNAME%%_*}"
local this="$1"
Email_addAttachment "${this}" "" "text/plain; charset=UTF-8"
}
function Email_setHTML()
{
local base="${FUNCNAME%%_*}"
local this="$1"
Email_addAttachment "${this}" "" "text/html; charset=UTF-8"
}
function Email_addAttachment()
{
local base="${FUNCNAME%%_*}"
local this="$1"
local inName="$2"
local inContentType="$3"
local inMessage=""
# 76 is a magic number, see RFC 2045
while read -r -n 76
do
inMessage+="${REPLY}"
inMessage+=$'\n'
done < <(${base64_encode} && echo)
local mailAttachmentContentTypes="${this}_mailAttachmentContentTypes"
local mailAttachmentMessages="${this}_mailAttachmentMessages"
local mailAttachmentNames="${this}_mailAttachmentNames"
eval "${mailAttachmentContentTypes}+=(\"${inContentType}\")"
eval "${mailAttachmentMessages}+=(\"${inMessage}\")"
eval "${mailAttachmentNames}+=(\"${inName}\")"
}
function Email_addAttachmentFile()
{
local base="${FUNCNAME%%_*}"
local this="$1"
local inFileName="$2"
[ -f "${inFileName}" ] || return 1
[ -r "${inFileName}" ] || return 1
local inContentType=""
# These are magic strings, see RFC 2046
case "${inFileName##*.}" in
"7z") inContentType="application/x-7z-compressed" ;;
"bz"|"bz2")
inContentType="application/x-bzip2" ;;
"bpg") inContentType="image/bpg" ;;
"cpio") inContentType="application/x-cpio" ;;
"gif") inContentType="image/gif" ;;
"gz") inContentType="application/x-gzip" ;;
"htm"|"html")
inContentType="text/html" ;;
"jpe"|"jpeg"|"jpg")
inContentType="image/jpeg" ;;
"png") inContentType="image/png" ;;
"rar") inContentType="application/x-rar-compressed" ;;
"tar") inContentType="application/x-tar" ;;
"txt") inContentType="text/plain" ;;
"xz") inContentType="application/x-xz" ;;
"zip") inContentType="application/x-zip-compressed" ;;
*) inContentType="application/octet-stream" ;;
esac
Email_addAttachment "${this}" "${inFileName##*/}" "${inContentType}" <"${inFileName}"
}
function Email_send()
{
local base="${FUNCNAME%%_*}"
local this="$1"
local mailTo="${this}_mailTo"
local mailCc="${this}_mailCc"
local mailBcc="${this}_mailBcc"
local mailFrom="${this}_mailFrom"
local mailReplyTo="${this}_mailReplyTo"
local mailSubject="${this}_mailSubject"
# Sendmail is here, see Linux Standard Base Core Specification
# - Generic 5.0 Edition, section 17.2
local SENDMAIL="/usr/sbin/sendmail"
! type "${SENDMAIL}" >/dev/null 2>&1 &&
echo "${SENDMAIL}: command not found" >&2 &&
return 1
# Email headers, see RFC 2076
"${SENDMAIL}" -t -i <<-EOF
To: ${!mailTo}
Cc: ${!mailCc}
Bcc: ${!mailBcc}
From: ${!mailFrom}
Reply-To: ${!mailReplyTo}
Subject: ${!mailSubject}
X-Mailer: Flying Nimbus 0.0.1
MIME-Version: 1.0
$(Email_buildMultipart "${this}")
EOF
}
function Email_buildMultipart()
{
local base="${FUNCNAME%%_*}"
local this="$1"
local mailAttachmentContentTypes="${this}_mailAttachmentContentTypes"
local mailAttachmentMessages="${this}_mailAttachmentMessages"
local mailAttachmentNames="${this}_mailAttachmentNames"
local boundary="-=0xdeadbeef${RANDOM}${RANDOM}=-"
# See RFC 2046, section 5.1.3
echo "Content-Type: multipart/mixed; boundary=0__${boundary}"
echo
echo "This is a message with multiple parts in MIME format."
echo "--0__${boundary}"
local -i i
# See RFC 2046, section 5.1.4
echo "Content-Type: multipart/alternative; boundary=1__${boundary}"
echo
echo -n "--1__${boundary}"
for (( i = 0; i < $(eval "echo \"\${#${mailAttachmentNames}[@]}\""); ++i ))
do
local mailAttachmentContentType="${mailAttachmentContentTypes}[${i}]"
local mailAttachmentMessage="${mailAttachmentMessages}[${i}]"
local mailAttachmentName="${mailAttachmentNames}[${i}]"
[ -n "${!mailAttachmentName}" ] && continue
echo
echo "Content-Type: ${!mailAttachmentContentType}"
echo "Content-Disposition: inline"
echo "Content-Transfer-Encoding: base64"
echo
echo "${!mailAttachmentMessage}"
echo
echo -n "--1__${boundary}"
done
echo "--"
echo -n "--0__${boundary}"
for (( i = 0; i < $(eval "echo \"\${#${mailAttachmentNames}[@]}\""); ++i ))
do
local mailAttachmentContentType="${mailAttachmentContentTypes}[${i}]"
local mailAttachmentMessage="${mailAttachmentMessages}[${i}]"
local mailAttachmentName="${mailAttachmentNames}[${i}]"
[ -z "${!mailAttachmentName}" ] && continue
echo
echo "Content-Type: ${!mailAttachmentContentType}; name=\"${!mailAttachmentName}\""
echo "Content-Disposition: attachment; filename=${!mailAttachmentName}"
echo "Content-Transfer-Encoding: base64"
echo
echo "${!mailAttachmentMessage}"
echo
echo -n "--0__${boundary}"
done
echo "--"
}
# End of file

View File

@ -1,43 +0,0 @@
#!/bin/bash
SCRIPT="$0"
! type readlink >/dev/null 2>&1 &&
echo "Command \"readlink\" not found" >&2 && exit 1
while [ -L "${SCRIPT}" ]
do
LINK="$(readlink "${SCRIPT}")"
if [ "/" = "${LINK:0:1}" ]
then
SCRIPT="${LINK}"
else
SCRIPT="${SCRIPT%/*}/${LINK}"
fi
done
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
MYSQL_HOST="localhost"
MYSQL_USER="root"
MYSQL_PASS="password"
MYSQL_DB="xCATjkLogAnalyzer"
MYSQL_COMMAND=("mysql" -B -N -r -s "-h" "${MYSQL_HOST}" -u "${MYSQL_USER}" -p"${MYSQL_PASS}" "${MYSQL_DB}")
# The main part
Email report
$report_setTo "Alice" alice@example.org
$report_setFrom "xCAT Jenkins Mail Bot" root@localhost.localdomain
$report_setSubject "$("${MYSQL_COMMAND[@]}" <<<"SELECT * FROM LatestDailyMailReportSubject;")"
$report_setHTML < <("${MYSQL_COMMAND[@]}" <<<"CALL CreateLatestDailyMailReport;")
$report_send

View File

@ -1,958 +0,0 @@
-- MySQL dump 10.14 Distrib 5.5.47-MariaDB, for Linux (ppc64)
--
-- Host: localhost Database: xCATjkLogAnalyzer
-- ------------------------------------------------------
-- Server version 5.5.47-MariaDB
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `ArchDict`
--
DROP TABLE IF EXISTS `ArchDict`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ArchDict` (
`ArchId` int(11) NOT NULL AUTO_INCREMENT,
`ArchName` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`ArchId`),
UNIQUE KEY `ArchName` (`ArchName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Temporary table structure for view `FailedTestCasesTopList`
--
DROP TABLE IF EXISTS `FailedTestCasesTopList`;
/*!50001 DROP VIEW IF EXISTS `FailedTestCasesTopList`*/;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `FailedTestCasesTopList` (
`Test case` tinyint NOT NULL,
`Arch` tinyint NOT NULL,
`OS` tinyint NOT NULL,
`Last seven days` tinyint NOT NULL,
`Last thirty days` tinyint NOT NULL,
`Last ninety days` tinyint NOT NULL
) 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`
--
DROP TABLE IF EXISTS `LatestDailyReport`;
/*!50001 DROP VIEW IF EXISTS `LatestDailyReport`*/;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `LatestDailyReport` (
`Title` tinyint NOT NULL,
`Arch` tinyint NOT NULL,
`OS` tinyint NOT NULL,
`Duration` tinyint NOT NULL,
`Passed` tinyint NOT NULL,
`Failed` tinyint NOT NULL,
`No run` tinyint NOT NULL,
`Subtotal` tinyint NOT NULL,
`Pass rate` tinyint NOT NULL,
`Failed test cases` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;
--
-- Temporary table structure for view `NinetyDayFailed`
--
DROP TABLE IF EXISTS `NinetyDayFailed`;
/*!50001 DROP VIEW IF EXISTS `NinetyDayFailed`*/;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `NinetyDayFailed` (
`TestCaseId` tinyint NOT NULL,
`ArchId` tinyint NOT NULL,
`OSId` tinyint NOT NULL,
`Failed` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;
--
-- Temporary table structure for view `NinetyDayLookBack`
--
DROP TABLE IF EXISTS `NinetyDayLookBack`;
/*!50001 DROP VIEW IF EXISTS `NinetyDayLookBack`*/;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `NinetyDayLookBack` (
`Arch` tinyint NOT NULL,
`OS` tinyint NOT NULL,
`Test runs` tinyint NOT NULL,
`Passed` tinyint NOT NULL,
`Failed` tinyint NOT NULL,
`No run` tinyint NOT NULL,
`Subtotal` tinyint NOT NULL,
`Pass rate` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;
--
-- Temporary table structure for view `NinetyDayReport`
--
DROP TABLE IF EXISTS `NinetyDayReport`;
/*!50001 DROP VIEW IF EXISTS `NinetyDayReport`*/;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `NinetyDayReport` (
`ArchId` tinyint NOT NULL,
`OSId` tinyint NOT NULL,
`Passed` tinyint NOT NULL,
`Failed` tinyint NOT NULL,
`No run` tinyint NOT NULL,
`Subtotal` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;
--
-- Table structure for table `OSDict`
--
DROP TABLE IF EXISTS `OSDict`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `OSDict` (
`OSId` int(11) NOT NULL AUTO_INCREMENT,
`OSName` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`OSId`),
UNIQUE KEY `OSName` (`OSName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `ResultDict`
--
DROP TABLE IF EXISTS `ResultDict`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ResultDict` (
`ResultId` int(11) NOT NULL AUTO_INCREMENT,
`ResultName` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`ResultId`),
UNIQUE KEY `ResultName` (`ResultName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Temporary table structure for view `SevenDayFailed`
--
DROP TABLE IF EXISTS `SevenDayFailed`;
/*!50001 DROP VIEW IF EXISTS `SevenDayFailed`*/;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `SevenDayFailed` (
`TestCaseId` tinyint NOT NULL,
`ArchId` tinyint NOT NULL,
`OSId` tinyint NOT NULL,
`Failed` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;
--
-- Temporary table structure for view `SevenDayLookBack`
--
DROP TABLE IF EXISTS `SevenDayLookBack`;
/*!50001 DROP VIEW IF EXISTS `SevenDayLookBack`*/;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `SevenDayLookBack` (
`Arch` tinyint NOT NULL,
`OS` tinyint NOT NULL,
`Test runs` tinyint NOT NULL,
`Passed` tinyint NOT NULL,
`Failed` tinyint NOT NULL,
`No run` tinyint NOT NULL,
`Subtotal` tinyint NOT NULL,
`Pass rate` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;
--
-- Temporary table structure for view `SevenDayReport`
--
DROP TABLE IF EXISTS `SevenDayReport`;
/*!50001 DROP VIEW IF EXISTS `SevenDayReport`*/;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `SevenDayReport` (
`ArchId` tinyint NOT NULL,
`OSId` tinyint NOT NULL,
`Passed` tinyint NOT NULL,
`Failed` tinyint NOT NULL,
`No run` tinyint NOT NULL,
`Subtotal` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;
--
-- Table structure for table `TestCase`
--
DROP TABLE IF EXISTS `TestCase`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `TestCase` (
`TestCaseId` int(11) NOT NULL AUTO_INCREMENT,
`TestCaseName` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`Memo` text NOT NULL,
PRIMARY KEY (`TestCaseId`),
UNIQUE KEY `TestCaseName` (`TestCaseName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `TestResult`
--
DROP TABLE IF EXISTS `TestResult`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `TestResult` (
`TestRunId` int(11) NOT NULL,
`TestCaseId` int(11) NOT NULL,
`ResultId` int(11) NOT NULL,
`DurationTime` int(11) NOT NULL,
PRIMARY KEY (`TestRunId`,`TestCaseId`),
KEY `Result` (`ResultId`),
KEY `TestCaseId` (`TestCaseId`),
CONSTRAINT `ResutId` FOREIGN KEY (`ResultId`) REFERENCES `ResultDict` (`ResultId`),
CONSTRAINT `TestCaseId` FOREIGN KEY (`TestCaseId`) REFERENCES `TestCase` (`TestCaseId`),
CONSTRAINT `TestRunId` FOREIGN KEY (`TestRunId`) REFERENCES `TestRun` (`TestRunId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `TestRun`
--
DROP TABLE IF EXISTS `TestRun`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `TestRun` (
`TestRunId` int(11) NOT NULL AUTO_INCREMENT,
`TestRunName` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`StartTime` datetime NOT NULL,
`EndTime` datetime NOT NULL,
`ArchId` int(11) NOT NULL,
`OSId` int(11) NOT NULL,
`xCATgitCommit` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`Memo` text NOT NULL,
PRIMARY KEY (`TestRunId`),
UNIQUE KEY `TestRunName` (`TestRunName`),
KEY `ArchId` (`ArchId`),
KEY `OSId` (`OSId`),
CONSTRAINT `ArchId` FOREIGN KEY (`ArchId`) REFERENCES `ArchDict` (`ArchId`),
CONSTRAINT `OSId` FOREIGN KEY (`OSId`) REFERENCES `OSDict` (`OSId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Temporary table structure for view `ThirtyDayFailed`
--
DROP TABLE IF EXISTS `ThirtyDayFailed`;
/*!50001 DROP VIEW IF EXISTS `ThirtyDayFailed`*/;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `ThirtyDayFailed` (
`TestCaseId` tinyint NOT NULL,
`ArchId` tinyint NOT NULL,
`OSId` tinyint NOT NULL,
`Failed` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;
--
-- Temporary table structure for view `ThirtyDayLookBack`
--
DROP TABLE IF EXISTS `ThirtyDayLookBack`;
/*!50001 DROP VIEW IF EXISTS `ThirtyDayLookBack`*/;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `ThirtyDayLookBack` (
`Arch` tinyint NOT NULL,
`OS` tinyint NOT NULL,
`Test runs` tinyint NOT NULL,
`Passed` tinyint NOT NULL,
`Failed` tinyint NOT NULL,
`No run` tinyint NOT NULL,
`Subtotal` tinyint NOT NULL,
`Pass rate` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;
--
-- Temporary table structure for view `ThirtyDayReport`
--
DROP TABLE IF EXISTS `ThirtyDayReport`;
/*!50001 DROP VIEW IF EXISTS `ThirtyDayReport`*/;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `ThirtyDayReport` (
`ArchId` tinyint NOT NULL,
`OSId` tinyint NOT NULL,
`Passed` tinyint NOT NULL,
`Failed` tinyint NOT NULL,
`No run` tinyint NOT NULL,
`Subtotal` tinyint NOT NULL
) 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 IFNULL(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;">',
IFNULL(SEC_TO_TIME(SUM(TIME_TO_SEC(Duration))), 'N/A'), '</td>', "\n"
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(SUM(Passed), 'N/A'), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(SUM(Failed), 'N/A'), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(SUM(`No run`), 'N/A'), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(SUM(Subtotal), 'N/A'), '</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 IFNULL(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 IFNULL(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;">',
IFNULL(SUM(`Test runs`), 'N/A'), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(SUM(Passed), 'N/A'), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(SUM(Failed), 'N/A'), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(SUM(`No run`), 'N/A'), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(SUM(Subtotal), 'N/A'), '</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 IFNULL(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;">',
IFNULL(SUM(`Test runs`), 'N/A'), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(SUM(Passed), 'N/A'), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(SUM(Failed), 'N/A'), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(SUM(`No run`), 'N/A'), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(SUM(Subtotal), 'N/A'), '</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 IFNULL(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;">',
IFNULL(SUM(`Test runs`), 'N/A'), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(SUM(Passed), 'N/A'), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(SUM(Failed), 'N/A'), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(SUM(`No run`), 'N/A'), '</td>', "\n",
'<td style="border-color: #666666; border-style: solid; border-width: 1px; padding: 2px 3px; text-align: right;">',
IFNULL(SUM(Subtotal), 'N/A'), '</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 IFNULL(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`
--
/*!50001 DROP TABLE IF EXISTS `FailedTestCasesTopList`*/;
/*!50001 DROP VIEW IF EXISTS `FailedTestCasesTopList`*/;
/*!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 `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: ',ifnull(sum(`LatestDailyReport`.`Passed`),'N/A'),' Failed: ',ifnull(sum(`LatestDailyReport`.`Failed`),'N/A'),' No run: ',ifnull(sum(`LatestDailyReport`.`No run`),'N/A')) 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 */;
--
-- Final view structure for view `LatestDailyReport`
--
/*!50001 DROP TABLE IF EXISTS `LatestDailyReport`*/;
/*!50001 DROP VIEW IF EXISTS `LatestDailyReport`*/;
/*!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 `LatestDailyReport` AS select `TestRun`.`TestRunName` AS `Title`,`ArchDict`.`ArchName` AS `Arch`,`OSDict`.`OSName` AS `OS`,timediff(`TestRun`.`EndTime`,`TestRun`.`StartTime`) AS `Duration`,(select count(0) from `TestResult` where ((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'Passed')))) AS `Passed`,(select count(0) from `TestResult` where ((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'Failed')))) AS `Failed`,(select count(0) from `TestResult` where ((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'No run')))) AS `No run`,(select count(0) from `TestResult` where (`TestResult`.`TestRunId` = `TestRun`.`TestRunId`)) AS `Subtotal`,ifnull(concat(round((((select count(0) from `TestResult` where ((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'Passed')))) / ((select count(0) from `TestResult` where ((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'Passed')))) + (select count(0) from `TestResult` where ((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'Failed')))))) * 100),2),'%'),'N/A') AS `Pass rate`,(select ifnull(group_concat(`TestCase`.`TestCaseName` separator ' '),'') from (`TestResult` left join `TestCase` on((`TestResult`.`TestCaseId` = `TestCase`.`TestCaseId`))) where ((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'Failed')))) AS `Failed test cases` from ((`TestRun` left join `ArchDict` on((`TestRun`.`ArchId` = `ArchDict`.`ArchId`))) left join `OSDict` on((`TestRun`.`OSId` = `OSDict`.`OSId`))) where `TestRun`.`TestRunId` in (select max(`TestRun`.`TestRunId`) AS `TestRunId` from `TestRun` where (`TestRun`.`StartTime` > (now() - interval 2 day)) group by `TestRun`.`ArchId`,`TestRun`.`OSId`) order by `OSDict`.`OSName`,`ArchDict`.`ArchName` */;
/*!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 `NinetyDayFailed`
--
/*!50001 DROP TABLE IF EXISTS `NinetyDayFailed`*/;
/*!50001 DROP VIEW IF EXISTS `NinetyDayFailed`*/;
/*!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 `NinetyDayFailed` AS select `TestResult`.`TestCaseId` AS `TestCaseId`,`TestRun`.`ArchId` AS `ArchId`,`TestRun`.`OSId` AS `OSId`,count(0) AS `Failed` from (`TestResult` left join `TestRun` on((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`))) where (`TestResult`.`TestRunId` in (select `TestRun`.`TestRunId` from `TestRun` where (`TestRun`.`StartTime` > (now() - interval 90 day))) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'Failed'))) group by `TestResult`.`TestCaseId`,`TestRun`.`ArchId`,`TestRun`.`OSId` */;
/*!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 `NinetyDayLookBack`
--
/*!50001 DROP TABLE IF EXISTS `NinetyDayLookBack`*/;
/*!50001 DROP VIEW IF EXISTS `NinetyDayLookBack`*/;
/*!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 `NinetyDayLookBack` AS select `ArchDict`.`ArchName` AS `Arch`,`OSDict`.`OSName` AS `OS`,count(0) AS `Test runs`,sum(`NinetyDayReport`.`Passed`) AS `Passed`,sum(`NinetyDayReport`.`Failed`) AS `Failed`,sum(`NinetyDayReport`.`No run`) AS `No run`,sum(`NinetyDayReport`.`Subtotal`) AS `Subtotal`,ifnull(concat(round(((sum(`NinetyDayReport`.`Passed`) / (sum(`NinetyDayReport`.`Passed`) + sum(`NinetyDayReport`.`Failed`))) * 100),2),'%'),'N/A') AS `Pass rate` from ((`NinetyDayReport` left join `ArchDict` on((`NinetyDayReport`.`ArchId` = `ArchDict`.`ArchId`))) left join `OSDict` on((`NinetyDayReport`.`OSId` = `OSDict`.`OSId`))) group by `NinetyDayReport`.`ArchId`,`NinetyDayReport`.`OSId` order by `OSDict`.`OSName`,`ArchDict`.`ArchName` */;
/*!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 `NinetyDayReport`
--
/*!50001 DROP TABLE IF EXISTS `NinetyDayReport`*/;
/*!50001 DROP VIEW IF EXISTS `NinetyDayReport`*/;
/*!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 `NinetyDayReport` AS select `TestRun`.`ArchId` AS `ArchId`,`TestRun`.`OSId` AS `OSId`,(select count(0) from `TestResult` where ((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'Passed')))) AS `Passed`,(select count(0) from `TestResult` where ((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'Failed')))) AS `Failed`,(select count(0) from `TestResult` where ((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'No run')))) AS `No run`,(select count(0) from `TestResult` where (`TestResult`.`TestRunId` = `TestRun`.`TestRunId`)) AS `Subtotal` from `TestRun` where `TestRun`.`TestRunId` in (select `TestRun`.`TestRunId` from `TestRun` where (`TestRun`.`StartTime` > (now() - interval 90 day))) */;
/*!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 `SevenDayFailed`
--
/*!50001 DROP TABLE IF EXISTS `SevenDayFailed`*/;
/*!50001 DROP VIEW IF EXISTS `SevenDayFailed`*/;
/*!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 `SevenDayFailed` AS select `TestResult`.`TestCaseId` AS `TestCaseId`,`TestRun`.`ArchId` AS `ArchId`,`TestRun`.`OSId` AS `OSId`,count(0) AS `Failed` from (`TestResult` left join `TestRun` on((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`))) where (`TestResult`.`TestRunId` in (select `TestRun`.`TestRunId` from `TestRun` where (`TestRun`.`StartTime` > (now() - interval 7 day))) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'Failed'))) group by `TestResult`.`TestCaseId`,`TestRun`.`ArchId`,`TestRun`.`OSId` */;
/*!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 `SevenDayLookBack`
--
/*!50001 DROP TABLE IF EXISTS `SevenDayLookBack`*/;
/*!50001 DROP VIEW IF EXISTS `SevenDayLookBack`*/;
/*!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 `SevenDayLookBack` AS select `ArchDict`.`ArchName` AS `Arch`,`OSDict`.`OSName` AS `OS`,count(0) AS `Test runs`,sum(`SevenDayReport`.`Passed`) AS `Passed`,sum(`SevenDayReport`.`Failed`) AS `Failed`,sum(`SevenDayReport`.`No run`) AS `No run`,sum(`SevenDayReport`.`Subtotal`) AS `Subtotal`,ifnull(concat(round(((sum(`SevenDayReport`.`Passed`) / (sum(`SevenDayReport`.`Passed`) + sum(`SevenDayReport`.`Failed`))) * 100),2),'%'),'N/A') AS `Pass rate` from ((`SevenDayReport` left join `ArchDict` on((`SevenDayReport`.`ArchId` = `ArchDict`.`ArchId`))) left join `OSDict` on((`SevenDayReport`.`OSId` = `OSDict`.`OSId`))) group by `SevenDayReport`.`ArchId`,`SevenDayReport`.`OSId` order by `OSDict`.`OSName`,`ArchDict`.`ArchName` */;
/*!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 `SevenDayReport`
--
/*!50001 DROP TABLE IF EXISTS `SevenDayReport`*/;
/*!50001 DROP VIEW IF EXISTS `SevenDayReport`*/;
/*!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 `SevenDayReport` AS select `TestRun`.`ArchId` AS `ArchId`,`TestRun`.`OSId` AS `OSId`,(select count(0) from `TestResult` where ((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'Passed')))) AS `Passed`,(select count(0) from `TestResult` where ((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'Failed')))) AS `Failed`,(select count(0) from `TestResult` where ((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'No run')))) AS `No run`,(select count(0) from `TestResult` where (`TestResult`.`TestRunId` = `TestRun`.`TestRunId`)) AS `Subtotal` from `TestRun` where `TestRun`.`TestRunId` in (select `TestRun`.`TestRunId` from `TestRun` where (`TestRun`.`StartTime` > (now() - interval 7 day))) */;
/*!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 `ThirtyDayFailed`
--
/*!50001 DROP TABLE IF EXISTS `ThirtyDayFailed`*/;
/*!50001 DROP VIEW IF EXISTS `ThirtyDayFailed`*/;
/*!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 `ThirtyDayFailed` AS select `TestResult`.`TestCaseId` AS `TestCaseId`,`TestRun`.`ArchId` AS `ArchId`,`TestRun`.`OSId` AS `OSId`,count(0) AS `Failed` from (`TestResult` left join `TestRun` on((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`))) where (`TestResult`.`TestRunId` in (select `TestRun`.`TestRunId` from `TestRun` where (`TestRun`.`StartTime` > (now() - interval 30 day))) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'Failed'))) group by `TestResult`.`TestCaseId`,`TestRun`.`ArchId`,`TestRun`.`OSId` */;
/*!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 `ThirtyDayLookBack`
--
/*!50001 DROP TABLE IF EXISTS `ThirtyDayLookBack`*/;
/*!50001 DROP VIEW IF EXISTS `ThirtyDayLookBack`*/;
/*!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 `ThirtyDayLookBack` AS select `ArchDict`.`ArchName` AS `Arch`,`OSDict`.`OSName` AS `OS`,count(0) AS `Test runs`,sum(`ThirtyDayReport`.`Passed`) AS `Passed`,sum(`ThirtyDayReport`.`Failed`) AS `Failed`,sum(`ThirtyDayReport`.`No run`) AS `No run`,sum(`ThirtyDayReport`.`Subtotal`) AS `Subtotal`,ifnull(concat(round(((sum(`ThirtyDayReport`.`Passed`) / (sum(`ThirtyDayReport`.`Passed`) + sum(`ThirtyDayReport`.`Failed`))) * 100),2),'%'),'N/A') AS `Pass rate` from ((`ThirtyDayReport` left join `ArchDict` on((`ThirtyDayReport`.`ArchId` = `ArchDict`.`ArchId`))) left join `OSDict` on((`ThirtyDayReport`.`OSId` = `OSDict`.`OSId`))) group by `ThirtyDayReport`.`ArchId`,`ThirtyDayReport`.`OSId` order by `OSDict`.`OSName`,`ArchDict`.`ArchName` */;
/*!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 `ThirtyDayReport`
--
/*!50001 DROP TABLE IF EXISTS `ThirtyDayReport`*/;
/*!50001 DROP VIEW IF EXISTS `ThirtyDayReport`*/;
/*!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 `ThirtyDayReport` AS select `TestRun`.`ArchId` AS `ArchId`,`TestRun`.`OSId` AS `OSId`,(select count(0) from `TestResult` where ((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'Passed')))) AS `Passed`,(select count(0) from `TestResult` where ((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'Failed')))) AS `Failed`,(select count(0) from `TestResult` where ((`TestResult`.`TestRunId` = `TestRun`.`TestRunId`) and `TestResult`.`ResultId` in (select `ResultDict`.`ResultId` from `ResultDict` where (`ResultDict`.`ResultName` = 'No run')))) AS `No run`,(select count(0) from `TestResult` where (`TestResult`.`TestRunId` = `TestRun`.`TestRunId`)) AS `Subtotal` from `TestRun` where `TestRun`.`TestRunId` in (select `TestRun`.`TestRunId` from `TestRun` where (`TestRun`.`StartTime` > (now() - interval 30 day))) */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2016-08-22 4:06:36

View File

@ -1,462 +0,0 @@
#!/bin/bash
function usage()
{
local script="${0##*/}"
while read -r ; do echo "${REPLY}" ; done <<-EOF
Usage: ${script} [OPTIONS] DIRECTORY
Options:
--help display this help and exit
Examples:
${script} /xCATjk/log/ubuntu16.04-ppc64el/8
EOF
}
PATH="/usr/sbin:/usr/bin:/sbin:/bin"
export PATH
#
# warn_if_bad Put out warning message(s) if $1 has bad RC.
#
# $1 0 (pass) or non-zero (fail).
# $2+ Remaining arguments printed only if the $1 is non-zero.
#
# Incoming $1 is returned unless it is 0
#
function warn_if_bad()
{
local -i rc="$1"
local script="${0##*/}"
# Ignore if no problems
[ "${rc}" -eq "0" ] && return 0
# Broken
shift
echo "${script}: $@" >&2
return "${rc}"
}
#
# exit_if_bad Put out error message(s) if $1 has bad RC.
#
# $1 0 (pass) or non-zero (fail).
# $2+ Remaining arguments printed only if the $1 is non-zero.
#
# Exits with 1 unless $1 is 0
#
function exit_if_bad()
{
warn_if_bad "$@" || exit 1
return 0
}
#
# check_root_or_exit
#
# Breaks the script if not running as root.
#
# If this returns 1, the invoker MUST abort the script.
#
# Returns 0 if running as root
# Returns 1 if not (and breaks the script)
#
function check_root_or_exit()
{
[ "${UID}" -eq "0" ]
exit_if_bad "$?" "Must be run by UID=0. Actual UID=${UID}."
return 0
}
#
# check_executes Check for executable(s)
#
# Returns 0 if true.
# Returns 1 if not.
#
function check_executes()
{
local cmd
local all_ok="yes"
for cmd in "$@"
do
if ! type "${cmd}" &>/dev/null
then
echo "Command \"${cmd}\" not found." >&2
all_ok="no"
fi
done
[ "${all_ok}" = "yes" ]
}
#
# check_exec_or_exit Check for required executables.
#
# Exits (not returns) if commands listed on command line do not exist.
#
# Returns 0 if true.
# Exits with 1 if not.
#
function check_exec_or_exit()
{
check_executes "$@"
exit_if_bad "$?" "Above listed required command(s) not found."
return 0
}
TMP_DIR=""
#
# internal_setup Script setup
#
# Returns 0 on success.
# Exits (not returns) with 1 on failure.
#
function internal_setup()
{
shopt -s extglob
# Trap exit for internal_cleanup function.
trap "internal_cleanup" EXIT
check_exec_or_exit awk mktemp printf
umask 0077
TMP_DIR="$(mktemp -d "/tmp/${0##*/}.XXXXXXXX" 2>/dev/null)"
[ -d "${TMP_DIR}" ]
exit_if_bad "$?" "Make temporary directory failed."
custom_setup
}
#
# internal_cleanup Script cleanup (reached via trap 0)
#
# Destory any temporarily facility created by internal_setup.
#
function internal_cleanup()
{
custom_cleanup
[ -d "${TMP_DIR}" ] && rm -rf "${TMP_DIR}"
}
#
# custom_setup
#
function custom_setup()
{
check_exec_or_exit awk sed tr date
}
#
# custom_cleanup
#
function custom_cleanup()
{
:
}
#
# cleanup_n_exec Do the cleanup, then execute the command
#
# $1+ The command to execute
#
function cleanup_n_exec()
{
internal_cleanup
exec "$@"
}
internal_setup
#
# xcattestlog2sql
#
# $1 The name of the test run
# $2 Log file of xcattest
#
function xcattestlog2sql()
{
local test_run_name="$1"
local logfile="$2"
local test_case_name=""
local test_case_result=""
local duration=""
[ -n "${test_run_name}" ]
warn_if_bad "$?" "test run has no name" || return 1
while read -r ; do echo "${REPLY}" ; done <<-EOF
--
-- Test run has name '${test_run_name}'
--
EOF
[ -f "${logfile}" ]
warn_if_bad "$?" "${logfile}: No such log file" || return 1
while read -r ; do echo "${REPLY}" ; done <<-EOF
--
-- Analysis file '${logfile}'
--
EOF
while read -r test_case_name test_case_result duration
do
while read -r ; do echo "${REPLY}" ; done <<-EOF
INSERT INTO TestCase (TestCaseId, TestCaseName)
SELECT * FROM (SELECT NULL, '${test_case_name}') AS tmp
WHERE NOT EXISTS (
SELECT TestCaseId FROM TestCase WHERE TestCaseName = '${test_case_name}'
) LIMIT 1;
INSERT INTO ResultDict (ResultId, ResultName)
SELECT * FROM (SELECT NULL, '${test_case_result}') AS tmp
WHERE NOT EXISTS (
SELECT ResultId FROM ResultDict WHERE ResultName = '${test_case_result}'
) LIMIT 1;
REPLACE INTO TestResult (TestRunId, TestCaseId, ResultId, DurationTime)
SELECT (
SELECT TestRunId FROM TestRun WHERE TestRunName = '${test_run_name}'
) AS TestRunId, (
SELECT TestCaseId FROM TestCase WHERE TestCaseName = '${test_case_name}'
) AS TestCaseId, (
SELECT ResultId FROM ResultDict WHERE ResultName = '${test_case_result}'
) AS ResultId, '${duration}';
EOF
done < <(tr -d '\r' <"${logfile}" | grep "^------END" |
sed -e 's/^.*END::\(.*\)::\([A-Za-z0-9]*\)::.*Duration::\(-*[0-9]*\) sec.*$/\1 \2 \3/')
return 0
}
#
# xcattestbundle2sql
#
# $1 The name of the test run
# $2 Bundle file of xcattest
#
function xcattestbundle2sql()
{
local test_run_name="$1"
local logfile="$2"
local test_case_name=""
local test_case_result="No run"
[ -n "${test_run_name}" ]
warn_if_bad "$?" "test run has no name" || return 1
while read -r ; do echo "${REPLY}" ; done <<-EOF
--
-- Test run has name '${test_run_name}'
--
EOF
[ -f "${logfile}" ]
warn_if_bad "$?" "${logfile}: No such log file" || return 1
while read -r ; do echo "${REPLY}" ; done <<-EOF
--
-- Analysis file '${logfile}'
--
INSERT INTO ResultDict (ResultId, ResultName)
SELECT * FROM (SELECT NULL, '${test_case_result}') AS tmp
WHERE NOT EXISTS (
SELECT ResultId FROM ResultDict WHERE ResultName = '${test_case_result}'
) LIMIT 1;
EOF
while read -r test_case_name
do
# Remove any comment
test_case_name="${test_case_name%%#*}"
# Chomp
test_case_name=$(echo ${test_case_name})
[ -z "${test_case_name}" ] && continue
while read -r ; do echo "${REPLY}" ; done <<-EOF
INSERT INTO TestCase (TestCaseId, TestCaseName)
SELECT * FROM (SELECT NULL, '${test_case_name}') AS tmp
WHERE NOT EXISTS (
SELECT TestCaseId FROM TestCase WHERE TestCaseName = '${test_case_name}'
) LIMIT 1;
INSERT IGNORE INTO TestResult (TestRunId, TestCaseId, ResultId, DurationTime)
SELECT (
SELECT TestRunId FROM TestRun WHERE TestRunName = '${test_run_name}'
) AS TestRunId, (
SELECT TestCaseId FROM TestCase WHERE TestCaseName = '${test_case_name}'
) AS TestCaseId, (
SELECT ResultId FROM ResultDict WHERE ResultName = '${test_case_result}'
) AS ResultId, '0';
EOF
done < <(tr -d '\r' <"${logfile}")
}
#
# jenkinsprojectlog2sql
#
# $1 Log file of jenkins project run
#
# When return 0, will set global shell variable TestRunName
#
function jenkinsprojectlog2sql()
{
local logfile="$1"
local foo=""
local test_run_name=""
local start_time=""
local end_time=""
local os=""
local arch=""
local xcat_git_commit=""
local memo=""
[ -f "${logfile}" ]
warn_if_bad "$?" "${logfile}: No such log file" || return 1
while read -r ; do echo "${REPLY}" ; done <<-EOF
--
-- Analysis file '${logfile}'
--
EOF
test_run_name="$(tr -d '\r' <"${logfile}" |
awk '/project.*description/ { print $(NF - 1) }')"
[ -n "${test_run_name}" ]
warn_if_bad "$?" "${test_run_name}: fail to parse test run name" || return 1
foo="$(tr -d '\r' <"${logfile}" | head -n 1 | cut -d ' ' -f 1)"
[ "${#foo}" = 14 ]
warn_if_bad "$?" "${foo}: fail to parse test start time" || return 1
start_time="${foo:0:4}-${foo:4:2}-${foo:6:2} ${foo:8:2}:${foo:10:2}:${foo:12:2}"
foo="$(tr -d '\r' <"${logfile}" | tail -n 1 | cut -d ' ' -f 1)"
[ "${#foo}" = 14 ]
warn_if_bad "$?" "${foo}: fail to parse test end time" || return 1
end_time="${foo:0:4}-${foo:4:2}-${foo:6:2} ${foo:8:2}:${foo:10:2}:${foo:12:2}"
arch="$(tr -d '\r' <"${logfile}" | awk -F - '/project.*description/ { print $2 }')"
[ "${arch}" = "ppc64el" ] && arch="ppc64le"
[ -n "${arch}" ]
warn_if_bad "$?" "${arch}: fail to parse arch" || return 1
os="$(tr -d '\r' <"${logfile}" | awk '/os.*=>/ { print $NF }')"
[ -n "${os}" ]
warn_if_bad "$?" "${os}: fail to parse operating system" || return 1
memo="$(tr -d '\r' <"${logfile}" | grep -A 7 'project.*description' | cut -d ' ' -f 4-)"
while read -r ; do echo "${REPLY}" ; done <<-EOF
INSERT INTO ArchDict (ArchId, ArchName)
SELECT * FROM (SELECT NULL, '${arch}') AS tmp
WHERE NOT EXISTS (
SELECT ArchId FROM ArchDict WHERE ArchName = '${arch}'
) LIMIT 1;
INSERT INTO OSDict (OSId, OSName)
SELECT * FROM (SELECT NULL, '${os}') AS tmp
WHERE NOT EXISTS (
SELECT OSId FROM OSDict WHERE OSName = '${os}'
) LIMIT 1;
INSERT IGNORE INTO TestRun
(TestRunId, TestRunName, StartTime, EndTime, ArchId, OSId, xCATgitCommit, Memo)
SELECT NULL, '${test_run_name}', '${start_time}', '${end_time}', (
SELECT ArchId FROM ArchDict WHERE ArchName = '${arch}'
) AS ArchId, (
SELECT OSId FROM OSDict WHERE OSName = '${os}'
) AS OSId, '${xcat_git_commit}', '${memo}';
EOF
TestRunName="${test_run_name}"
return 0
}
# Main
declare VERSION="0.00.1"
declare xCATjkLog_DIR=""
declare TestRunName=""
declare JenkinsProjectLog=""
declare xCATTestLogs=""
while [ "$#" -gt "0" ]
do
case "$1" in
"--help")
usage
exit 0
;;
*)
[ "$1" == "--" ] && shift
[ -z "${xCATjkLog_DIR}" ]
exit_if_bad "$?" "invalid predicate - $1"
xCATjkLog_DIR="$1"
;;
esac
shift
done
[ -z "${xCATjkLog_DIR}" ] && usage >&2 && exit 1
[ -d "${xCATjkLog_DIR}" ]
exit_if_bad "$?" "${xCATjkLog_DIR}: No such directory"
# Check if the mail log is there. If it is not, exit directly
JenkinsMailLog="$(echo "${xCATjkLog_DIR}/mail."*)"
[ -f "${JenkinsMailLog}" ]
exit_if_bad "$?" "${JenkinsMailLog}: no such log file"
while read -r ; do echo "${REPLY}" ; done <<EOF
-- xCATjkLog2SQL - version ${VERSION}
--
-- Run on host ${HOSTNAME}
-- Database: xcatjkloganalyzer
-- ------------------------------------------------------
-- Log directory '${xCATjkLog_DIR}'
EOF
JenkinsProjectLog="$(echo "${xCATjkLog_DIR}/log."*)"
jenkinsprojectlog2sql "${JenkinsProjectLog}"
exit_if_bad "$?" "${JenkinsProjectLog}: parse error"
xCATTestBundle="$(echo "${xCATjkLog_DIR}/"*".bundle")"
xcattestbundle2sql "${TestRunName}" "${xCATTestBundle}"
warn_if_bad "$?" "${xCATTestBundle}: parse error"
for xCATTestLog in "${xCATjkLog_DIR}/xcattest.log."*
do
xcattestlog2sql "${TestRunName}" "${xCATTestLog}"
warn_if_bad "$?" "${xCATTestLog}: parse error"
done
while read -r ; do echo "${REPLY}" ; done <<EOF
-- Logs parse completed on $(date "+%Y-%m-%d %H:%M:%S %z")
EOF
exit 0

View File

@ -1,33 +0,0 @@
#!/bin/bash
SCRIPT="$0"
! type readlink >/dev/null 2>&1 &&
echo "Command \"readlink\" not found" >&2 && exit 1
while [ -L "${SCRIPT}" ]
do
LINK="$(readlink "${SCRIPT}")"
if [ "/" = "${LINK:0:1}" ]
then
SCRIPT="${LINK}"
else
SCRIPT="${SCRIPT%/*}/${LINK}"
fi
done
BASE_DIR="${SCRIPT%/*}"
xCATjkScanLogs="${BASE_DIR}/xcatjk-scanlogs.sh"
if [ ! -x "${xCATjkScanLogs}" ]
then
echo "Script ${xCATjkScanLogs} not found" >&2
exit 1
fi
while read -r ; do echo "${REPLY}" ; done <<EOF
-- xCATjkLogs scan last three days
--
-- Run on host ${HOSTNAME}
-- ------------------------------------------------------
EOF
"${xCATjkScanLogs}" --recent /xCATjk/log

View File

@ -1,43 +0,0 @@
#!/bin/bash
SCRIPT="$0"
! type readlink >/dev/null 2>&1 &&
echo "Command \"readlink\" not found" >&2 && exit 1
while [ -L "${SCRIPT}" ]
do
LINK="$(readlink "${SCRIPT}")"
if [ "/" = "${LINK:0:1}" ]
then
SCRIPT="${LINK}"
else
SCRIPT="${SCRIPT%/*}/${LINK}"
fi
done
BASE_DIR="${SCRIPT%/*}"
SQLofCreateTables="${BASE_DIR}/xCATjkLogAnalyzer.sql"
if [ ! -f "${SQLofCreateTables}" ]
then
echo "${SQLofCreateTables}: SQL file not found" >&2
exit 1
fi
xCATjkScanLogs="${BASE_DIR}/xcatjk-scanlogs.sh"
if [ ! -x "${xCATjkScanLogs}" ]
then
echo "Script ${xCATjkScanLogs} not found" >&2
exit 1
fi
while read -r ; do echo "${REPLY}" ; done <<EOF
-- xCATjkLogs redo everything
--
-- Run on host ${HOSTNAME}
-- ------------------------------------------------------
EOF
while read -r ; do echo "${REPLY}" ; done <"${SQLofCreateTables}"
"${xCATjkScanLogs}" /xCATjk/log

View File

@ -1,249 +0,0 @@
#!/bin/bash
function usage()
{
local script="${0##*/}"
while read -r ; do echo "${REPLY}" ; done <<-EOF
Usage: ${script} [OPTIONS] DIRECTORY
Options:
--help display this help and exit
--recent scan logs for the last three days
Examples:
${script} --recent /xCATjk/log
EOF
}
PATH="/usr/sbin:/usr/bin:/sbin:/bin"
export PATH
#
# warn_if_bad Put out warning message(s) if $1 has bad RC.
#
# $1 0 (pass) or non-zero (fail).
# $2+ Remaining arguments printed only if the $1 is non-zero.
#
# Incoming $1 is returned unless it is 0
#
function warn_if_bad()
{
local -i rc="$1"
local script="${0##*/}"
# Ignore if no problems
[ "${rc}" -eq "0" ] && return 0
# Broken
shift
echo "${script}: $@" >&2
return "${rc}"
}
#
# exit_if_bad Put out error message(s) if $1 has bad RC.
#
# $1 0 (pass) or non-zero (fail).
# $2+ Remaining arguments printed only if the $1 is non-zero.
#
# Exits with 1 unless $1 is 0
#
function exit_if_bad()
{
warn_if_bad "$@" || exit 1
return 0
}
#
# check_root_or_exit
#
# Breaks the script if not running as root.
#
# If this returns 1, the invoker MUST abort the script.
#
# Returns 0 if running as root
# Returns 1 if not (and breaks the script)
#
function check_root_or_exit()
{
[ "${UID}" -eq "0" ]
exit_if_bad "$?" "Must be run by UID=0. Actual UID=${UID}."
return 0
}
#
# check_executes Check for executable(s)
#
# Returns 0 if true.
# Returns 1 if not.
#
function check_executes()
{
local cmd
local all_ok="yes"
for cmd in "$@"
do
if ! type "${cmd}" &>/dev/null
then
echo "Command \"${cmd}\" not found." >&2
all_ok="no"
fi
done
[ "${all_ok}" = "yes" ]
}
#
# check_exec_or_exit Check for required executables.
#
# Exits (not returns) if commands listed on command line do not exist.
#
# Returns 0 if true.
# Exits with 1 if not.
#
function check_exec_or_exit()
{
check_executes "$@"
exit_if_bad "$?" "Above listed required command(s) not found."
return 0
}
TMP_DIR=""
#
# internal_setup Script setup
#
# Returns 0 on success.
# Exits (not returns) with 1 on failure.
#
function internal_setup()
{
shopt -s extglob
# Trap exit for internal_cleanup function.
trap "internal_cleanup" EXIT
check_exec_or_exit awk mktemp printf
umask 0077
TMP_DIR="$(mktemp -d "/tmp/${0##*/}.XXXXXXXX" 2>/dev/null)"
[ -d "${TMP_DIR}" ]
exit_if_bad "$?" "Make temporary directory failed."
custom_setup
}
#
# internal_cleanup Script cleanup (reached via trap 0)
#
# Destory any temporarily facility created by internal_setup.
#
function internal_cleanup()
{
custom_cleanup
[ -d "${TMP_DIR}" ] && rm -rf "${TMP_DIR}"
}
#
# custom_setup
#
function custom_setup()
{
check_exec_or_exit awk dirname
}
#
# custom_cleanup
#
function custom_cleanup()
{
:
}
#
# cleanup_n_exec Do the cleanup, then execute the command
#
# $1+ The command to execute
#
function cleanup_n_exec()
{
internal_cleanup
exec "$@"
}
internal_setup
SCRIPT="$0"
! type readlink >/dev/null 2>&1 &&
echo "Command \"readlink\" not found" >&2 && exit 1
while [ -L "${SCRIPT}" ]
do
LINK="$(readlink "${SCRIPT}")"
if [ "/" = "${LINK:0:1}" ]
then
SCRIPT="${LINK}"
else
SCRIPT="${SCRIPT%/*}/${LINK}"
fi
done
BASE_DIR="${SCRIPT%/*}"
xCATjkLog2SQL="${BASE_DIR}/xcatjk-log2sql.sh"
[ -x "${xCATjkLog2SQL}" ]
exit_if_bad "$?" "Script ${xCATjkLog2SQL} not found"
declare VERSION="0.0.1"
declare xCATjkLog_TOPDIR=""
declare -a FIND_ARGS=()
while [ "$#" -gt "0" ]
do
case "$1" in
"--help")
usage
exit 0
;;
"--recent")
FIND_ARGS=(-mtime -3)
;;
*)
[ "$1" == "--" ] && shift
[ -z "${xCATjkLog_TopDir}" ]
exit_if_bad "$?" "invalid predicate - $1"
xCATjkLog_TopDir="$1"
;;
esac
shift
done
[ -z "${xCATjkLog_TopDir}" ] && usage >&2 && exit 1
[ -d "${xCATjkLog_TopDir}" ]
exit_if_bad "$?" "${xCATjkLog_TopDir}: No such directory"
while read -r ; do echo "${REPLY}" ; done <<EOF
-- xCATjkScanLogs - version ${VERSION}
--
-- Run on host ${HOSTNAME}
-- ------------------------------------------------------
-- Top level log directory '${xCATjkLog_TopDir}'
EOF
find "${xCATjkLog_TopDir}" -name 'log.*-*-*' "${FIND_ARGS[@]}" -print0 |
xargs -r -n 1 -0 awk '{ print $1, FILENAME; exit }' | sort -k 1 |
awk '{ print $2 }' | xargs -r -n 1 dirname |
xargs -r -n 1 "${xCATjkLog2SQL}"
while read -r ; do echo "${REPLY}" ; done <<EOF
--
-- All log directories parse completed on $(date "+%Y-%m-%d %H:%M:%S %z")
EOF
exit 0

File diff suppressed because it is too large Load Diff