diff --git a/test/ci_support/CDashAnalyzeReportRandomFailures_UnitTests.py b/test/ci_support/CDashAnalyzeReportRandomFailures_UnitTests.py
new file mode 100644
index 000000000..ab8888673
--- /dev/null
+++ b/test/ci_support/CDashAnalyzeReportRandomFailures_UnitTests.py
@@ -0,0 +1,71 @@
+import unittest
+from unittest.mock import patch
+import unittest.mock as mock
+import datetime
+
+
+from FindCISupportDir import *
+import CDashAnalyzeReportRandomFailures as CDARRF
+from example_cdash_analyze_and_report_random_failures import ExampleVersionInfoStrategy, ExampleExtractBuildNameStrategy
+
+
+####################################################################
+#
+# Test CDashAnalyzeReportRandomFailuresDriver
+#
+####################################################################
+
+def getDriver():
+ return CDARRF.CDashAnalyzeReportRandomFailuresDriver(
+ ExampleVersionInfoStrategy(),
+ ExampleExtractBuildNameStrategy())
+
+#
+# Test getDateRangeTuple member function
+# for how it constructs a tuple containing
+# the begin and end of a date range.
+#
+class Test_GetDateRangeTuple(unittest.TestCase):
+
+ def setUp(self):
+ self.driver = getDriver()
+
+ def test_date_range_tuple(self):
+ referenceDateTime = datetime.datetime(year=2024, month=2, day=12)
+ dayTimeDelta = 3
+ expected = ('2024-02-10', '2024-02-12')
+
+ sideEffectList = ['2024-02-10', '2024-02-12']
+ with mock.patch('cdash_build_testing_date.getDateStrFromDateTime', side_effect=sideEffectList) as m_getDateStrFromDateTime:
+ result = self.driver.getDateRangeTuple(referenceDateTime, dayTimeDelta)
+
+ self.assertEqual(result, expected)
+
+
+#
+# Test getBuildIDFromTest() member function
+# to check if it can get correctly get the last value of
+# a slash delimited string
+#
+class Test_GetBuildIdFromTest(unittest.TestCase):
+
+ def setUp(self):
+ self.driver = getDriver()
+
+ def test_single_slash(self):
+ testDict = {'buildSummaryLink':'build/somenumber'}
+ self.assertEqual(
+ self.driver.getBuildIdFromTest(testDict), 'somenumber')
+
+ def test_multiple_slash(self):
+ testDict = {'buildSummaryLink':'build/two/somenumber'}
+ self.assertEqual(
+ self.driver.getBuildIdFromTest(testDict), 'somenumber')
+
+ def test_no_slash(self):
+ testDict = {'buildSummaryLink':'somenumber'}
+ self.assertEqual(
+ self.driver.getBuildIdFromTest(testDict), 'somenumber')
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/test/ci_support/CDashQueryAnalyzeReport_UnitTests.py b/test/ci_support/CDashQueryAnalyzeReport_UnitTests.py
index 513534c39..f120841c5 100644
--- a/test/ci_support/CDashQueryAnalyzeReport_UnitTests.py
+++ b/test/ci_support/CDashQueryAnalyzeReport_UnitTests.py
@@ -1070,6 +1070,20 @@ def test_getCDashQueryTestsBrowserUrl_project_name_ampersand(self):
"&filtercount=1&morestuff"
self.assertEqual(cdashIndexQueryUrl, cdashIndexQueryUrl_expected)
+ def test_getCDashBuildSummaryBrowserUrl(self):
+ cdashBuildSummaryBrowserUrl = getCDashBuildSummaryBrowserUrl(
+ "site.com/cdash", "somenumber" )
+ cdashBuildSummaryBrowserUrl_expected = \
+ "site.com/cdash/build/somenumber"
+ self.assertEqual(cdashBuildSummaryBrowserUrl, cdashBuildSummaryBrowserUrl_expected)
+
+ def test_getCDashBuildSummaryQueryUrl(self):
+ cdashBuildSummaryQueryUrl = getCDashBuildSummaryQueryUrl(
+ "site.com/cdash", "somenumber" )
+ cdashBuildSummaryQueryUrl_expected = \
+ "site.com/cdash/api/v1/buildSummary.php?buildid=somenumber"
+ self.assertEqual(cdashBuildSummaryQueryUrl, cdashBuildSummaryQueryUrl_expected)
+
#############################################################################
#
diff --git a/test/ci_support/CMakeLists.txt b/test/ci_support/CMakeLists.txt
index c44a40168..1c0207b65 100644
--- a/test/ci_support/CMakeLists.txt
+++ b/test/ci_support/CMakeLists.txt
@@ -398,6 +398,24 @@ tribits_add_advanced_test( cdash_analyze_and_report_UnitTests
ALWAYS_FAIL_ON_NONZERO_RETURN
)
+tribits_add_advanced_test( CDashAnalyzeReportRandomFailures_UnitTests
+ OVERALL_WORKING_DIRECTORY TEST_NAME
+ OVERALL_NUM_MPI_PROCS 1
+ TEST_0 CMND ${PYTHON_EXECUTABLE}
+ ARGS ${CMAKE_CURRENT_SOURCE_DIR}/CDashAnalyzeReportRandomFailures_UnitTests.py -v
+ PASS_REGULAR_EXPRESSION "OK"
+ ALWAYS_FAIL_ON_NONZERO_RETURN
+ )
+
+tribits_add_advanced_test( cdash_analyze_and_report_random_failures_UnitTests
+ OVERALL_WORKING_DIRECTORY TEST_NAME
+ OVERALL_NUM_MPI_PROCS 1
+ TEST_0 CMND ${PYTHON_EXECUTABLE}
+ ARGS ${CMAKE_CURRENT_SOURCE_DIR}/cdash_analyze_and_report_random_failures_UnitTests.py -v
+ PASS_REGULAR_EXPRESSION "OK"
+ ALWAYS_FAIL_ON_NONZERO_RETURN
+ )
+
tribits_add_advanced_test( CreateIssueTrackerFromCDashQuery_UnitTests
OVERALL_WORKING_DIRECTORY TEST_NAME
OVERALL_NUM_MPI_PROCS 1
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/1 b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/1
new file mode 100644
index 000000000..ac5d913ed
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/1
@@ -0,0 +1,97 @@
+{ 'bugtracker': 'GitHub',
+ 'build': { 'command': 'build command',
+ 'compilername': '',
+ 'compilerversion': '',
+ 'endtime': '2023-12-20T16:59:05 MST',
+ 'error': 0,
+ 'errors': [],
+ 'generator': 'ctest-3.24.3',
+ 'id': 1323424,
+ 'lastsubmitbuild': 0,
+ 'lastsubmitdate': 0,
+ 'name': 'PR-12620-test-rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables-1957',
+ 'nerrors': 0,
+ 'note': 0,
+ 'nwarnings': 0,
+ 'osname': 'Linux',
+ 'osplatform': 'x86_64',
+ 'osrelease': '3.10.0-1062.1.2.el7.x86_64',
+ 'osversion': '#1 SMP Mon Sep 16 14:19:51 EDT 2019',
+ 'site': 'site1',
+ 'siteid': 49,
+ 'sitename_encoded': 'site1',
+ 'stamp': '20231220-2248-Pull Request',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'time': '2023-12-20T15:48:14 MST',
+ 'type': 'Pull Request',
+ 'warnings': []},
+ 'configure': { 'command': 'configure command here',
+ 'endtime': '2023-12-20T15:50:06 MST',
+ 'nerrors': 0,
+ 'nwarnings': 0,
+ 'output': 'loading initial cache file \n'
+ 'Trilinos repos versions:\n'
+ '--------------------------------------------------------------------------------\n'
+ '*** Base Git Repo: Trilinos\n'
+ 'dc6cb45 [Thu Dec 21 07:49:49 2023 -0700] '
+ '\n'
+ 'Merge commit '
+ "'71d07d7370583c071c3e0fa98cb00b4794be6cb2' into "
+ 'develop\n'
+ ' *** Parent 1:\n'
+ ' bs1_p1 [Mon Jan 15 22:26:29 2024 -0700] \n'
+ ' Cleaned up git log and cmake command argument formatting (#597)\n'
+ ' *** Parent 2:\n'
+ ' bs1_p2 [Wed Jan 17 12:33:03 2024 -0700] \n'
+ ' Cleaned up empty lines (#597)\n'
+ ' '
+ '--------------------------------------------------------------------------------\n'
+ '\n'
+ '\n',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'status': 0},
+ 'currentdate': '2024-01-23',
+ 'date': '2023-12-20',
+ 'datetime': 'Tuesday, January 23 2024 16:00:15',
+ 'documentation': 'https://trilinos.github.io/documentation.html',
+ 'generationtime': 0.05,
+ 'googletracker': '',
+ 'hasconfigure': True,
+ 'hascoverage': False,
+ 'hasrelationships': False,
+ 'hasupdate': True,
+ 'home': 'https://trilinos.github.io/',
+ 'logoid': 1,
+ 'menu': { 'back': 'index.php?project=Trilinos&parentid=1323325',
+ 'current': '/build/0',
+ 'next': False,
+ 'previous': False},
+ 'newissueurl': False,
+ 'nextdate': '2023-12-21',
+ 'nightlytime': '22:00 MST',
+ 'notes': [],
+ 'previousdate': '2023-12-19',
+ 'projectid': 1,
+ 'projectname': 'Trilinos',
+ 'projectname_encoded': 'Trilinos',
+ 'public': 1,
+ 'relationships_from': [],
+ 'relationships_to': [],
+ 'startdate': 'Tuesday, December 19 2023 22:00:00',
+ 'test': { 'nerrors': 0,
+ 'nfailed': 0,
+ 'nnotrun': 0,
+ 'npassed': 178,
+ 'nwarnings': 0},
+ 'title': 'CDash : Trilinos',
+ 'unixtimestamp': 1703048400,
+ 'update': { 'command': '',
+ 'endtime': '2023-12-20T15:48:14 MST',
+ 'nerrors': 0,
+ 'nupdates': 0,
+ 'nwarnings': 0,
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'type': 'GIT'},
+ 'user': {'id': None},
+ 'vcs': 'https://github.com/trilinos/Trilinos/',
+ 'version': 'v3.1.0'}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/2 b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/2
new file mode 100644
index 000000000..b415ffb51
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/2
@@ -0,0 +1,97 @@
+{ 'bugtracker': 'GitHub',
+ 'build': { 'command': 'build command',
+ 'compilername': '',
+ 'compilerversion': '',
+ 'endtime': '2023-12-20T16:59:05 MST',
+ 'error': 0,
+ 'errors': [],
+ 'generator': 'ctest-3.24.3',
+ 'id': 1323424,
+ 'lastsubmitbuild': 0,
+ 'lastsubmitdate': 0,
+ 'name': 'PR-12620-test-rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables-1957',
+ 'nerrors': 0,
+ 'note': 0,
+ 'nwarnings': 0,
+ 'osname': 'Linux',
+ 'osplatform': 'x86_64',
+ 'osrelease': '3.10.0-1062.1.2.el7.x86_64',
+ 'osversion': '#1 SMP Mon Sep 16 14:19:51 EDT 2019',
+ 'site': 'site1',
+ 'siteid': 49,
+ 'sitename_encoded': 'site1',
+ 'stamp': '20231220-2248-Pull Request',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'time': '2023-12-20T15:48:14 MST',
+ 'type': 'Pull Request',
+ 'warnings': []},
+ 'configure': { 'command': 'configure command here',
+ 'endtime': '2023-12-20T15:50:06 MST',
+ 'nerrors': 0,
+ 'nwarnings': 0,
+ 'output': 'loading initial cache file \n'
+ 'Trilinos repos versions:\n'
+ '--------------------------------------------------------------------------------\n'
+ '*** Base Git Repo: Trilinos\n'
+ 'dc6cb45 [Thu Dec 21 07:49:49 2023 -0700] '
+ '\n'
+ 'Merge commit '
+ "'71d07d7370583c071c3e0fa98cb00b4794be6cb2' into "
+ 'develop\n'
+ ' *** Parent 1:\n'
+ ' bs2_p1 [Mon Jan 15 22:26:29 2024 -0700] \n'
+ ' Cleaned up git log and cmake command argument formatting (#597)\n'
+ ' *** Parent 2:\n'
+ ' bs2_p2 [Wed Jan 17 12:33:03 2024 -0700] \n'
+ ' Cleaned up empty lines (#597)\n'
+ ' '
+ '--------------------------------------------------------------------------------\n'
+ '\n'
+ '\n',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'status': 0},
+ 'currentdate': '2024-01-23',
+ 'date': '2023-12-20',
+ 'datetime': 'Tuesday, January 23 2024 16:00:15',
+ 'documentation': 'https://trilinos.github.io/documentation.html',
+ 'generationtime': 0.05,
+ 'googletracker': '',
+ 'hasconfigure': True,
+ 'hascoverage': False,
+ 'hasrelationships': False,
+ 'hasupdate': True,
+ 'home': 'https://trilinos.github.io/',
+ 'logoid': 1,
+ 'menu': { 'back': 'index.php?project=Trilinos&parentid=1323325',
+ 'current': '/build/0',
+ 'next': False,
+ 'previous': False},
+ 'newissueurl': False,
+ 'nextdate': '2023-12-21',
+ 'nightlytime': '22:00 MST',
+ 'notes': [],
+ 'previousdate': '2023-12-19',
+ 'projectid': 1,
+ 'projectname': 'Trilinos',
+ 'projectname_encoded': 'Trilinos',
+ 'public': 1,
+ 'relationships_from': [],
+ 'relationships_to': [],
+ 'startdate': 'Tuesday, December 19 2023 22:00:00',
+ 'test': { 'nerrors': 0,
+ 'nfailed': 0,
+ 'nnotrun': 0,
+ 'npassed': 178,
+ 'nwarnings': 0},
+ 'title': 'CDash : Trilinos',
+ 'unixtimestamp': 1703048400,
+ 'update': { 'command': '',
+ 'endtime': '2023-12-20T15:48:14 MST',
+ 'nerrors': 0,
+ 'nupdates': 0,
+ 'nwarnings': 0,
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'type': 'GIT'},
+ 'user': {'id': None},
+ 'vcs': 'https://github.com/trilinos/Trilinos/',
+ 'version': 'v3.1.0'}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/3 b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/3
new file mode 100644
index 000000000..b95f27937
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/3
@@ -0,0 +1,97 @@
+{ 'bugtracker': 'GitHub',
+ 'build': { 'command': 'build command',
+ 'compilername': '',
+ 'compilerversion': '',
+ 'endtime': '2023-12-20T16:59:05 MST',
+ 'error': 0,
+ 'errors': [],
+ 'generator': 'ctest-3.24.3',
+ 'id': 1323424,
+ 'lastsubmitbuild': 0,
+ 'lastsubmitdate': 0,
+ 'name': 'PR-12620-test-rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables-1957',
+ 'nerrors': 0,
+ 'note': 0,
+ 'nwarnings': 0,
+ 'osname': 'Linux',
+ 'osplatform': 'x86_64',
+ 'osrelease': '3.10.0-1062.1.2.el7.x86_64',
+ 'osversion': '#1 SMP Mon Sep 16 14:19:51 EDT 2019',
+ 'site': 'site1',
+ 'siteid': 49,
+ 'sitename_encoded': 'site1',
+ 'stamp': '20231220-2248-Pull Request',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'time': '2023-12-20T15:48:14 MST',
+ 'type': 'Pull Request',
+ 'warnings': []},
+ 'configure': { 'command': 'configure command here',
+ 'endtime': '2023-12-20T15:50:06 MST',
+ 'nerrors': 0,
+ 'nwarnings': 0,
+ 'output': 'loading initial cache file \n'
+ 'Trilinos repos versions:\n'
+ '--------------------------------------------------------------------------------\n'
+ '*** Base Git Repo: Trilinos\n'
+ 'dc6cb45 [Thu Dec 21 07:49:49 2023 -0700] '
+ '\n'
+ 'Merge commit '
+ "'71d07d7370583c071c3e0fa98cb00b4794be6cb2' into "
+ 'develop\n'
+ ' *** Parent 1:\n'
+ ' bs3_p1 [Mon Jan 15 22:26:29 2024 -0700] \n'
+ ' Cleaned up git log and cmake command argument formatting (#597)\n'
+ ' *** Parent 2:\n'
+ ' bs3_p2 [Wed Jan 17 12:33:03 2024 -0700] \n'
+ ' Cleaned up empty lines (#597)\n'
+ ' '
+ '--------------------------------------------------------------------------------\n'
+ '\n'
+ '\n',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'status': 0},
+ 'currentdate': '2024-01-23',
+ 'date': '2023-12-20',
+ 'datetime': 'Tuesday, January 23 2024 16:00:15',
+ 'documentation': 'https://trilinos.github.io/documentation.html',
+ 'generationtime': 0.05,
+ 'googletracker': '',
+ 'hasconfigure': True,
+ 'hascoverage': False,
+ 'hasrelationships': False,
+ 'hasupdate': True,
+ 'home': 'https://trilinos.github.io/',
+ 'logoid': 1,
+ 'menu': { 'back': 'index.php?project=Trilinos&parentid=1323325',
+ 'current': '/build/0',
+ 'next': False,
+ 'previous': False},
+ 'newissueurl': False,
+ 'nextdate': '2023-12-21',
+ 'nightlytime': '22:00 MST',
+ 'notes': [],
+ 'previousdate': '2023-12-19',
+ 'projectid': 1,
+ 'projectname': 'Trilinos',
+ 'projectname_encoded': 'Trilinos',
+ 'public': 1,
+ 'relationships_from': [],
+ 'relationships_to': [],
+ 'startdate': 'Tuesday, December 19 2023 22:00:00',
+ 'test': { 'nerrors': 0,
+ 'nfailed': 0,
+ 'nnotrun': 0,
+ 'npassed': 178,
+ 'nwarnings': 0},
+ 'title': 'CDash : Trilinos',
+ 'unixtimestamp': 1703048400,
+ 'update': { 'command': '',
+ 'endtime': '2023-12-20T15:48:14 MST',
+ 'nerrors': 0,
+ 'nupdates': 0,
+ 'nwarnings': 0,
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'type': 'GIT'},
+ 'user': {'id': None},
+ 'vcs': 'https://github.com/trilinos/Trilinos/',
+ 'version': 'v3.1.0'}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/4 b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/4
new file mode 100644
index 000000000..060412cf4
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/4
@@ -0,0 +1,97 @@
+{ 'bugtracker': 'GitHub',
+ 'build': { 'command': 'build command',
+ 'compilername': '',
+ 'compilerversion': '',
+ 'endtime': '2023-12-20T16:59:05 MST',
+ 'error': 0,
+ 'errors': [],
+ 'generator': 'ctest-3.24.3',
+ 'id': 1323424,
+ 'lastsubmitbuild': 0,
+ 'lastsubmitdate': 0,
+ 'name': 'PR-12620-test-rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables-1957',
+ 'nerrors': 0,
+ 'note': 0,
+ 'nwarnings': 0,
+ 'osname': 'Linux',
+ 'osplatform': 'x86_64',
+ 'osrelease': '3.10.0-1062.1.2.el7.x86_64',
+ 'osversion': '#1 SMP Mon Sep 16 14:19:51 EDT 2019',
+ 'site': 'site1',
+ 'siteid': 49,
+ 'sitename_encoded': 'site1',
+ 'stamp': '20231220-2248-Pull Request',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'time': '2023-12-20T15:48:14 MST',
+ 'type': 'Pull Request',
+ 'warnings': []},
+ 'configure': { 'command': 'configure command here',
+ 'endtime': '2023-12-20T15:50:06 MST',
+ 'nerrors': 0,
+ 'nwarnings': 0,
+ 'output': 'loading initial cache file \n'
+ 'Trilinos repos versions:\n'
+ '--------------------------------------------------------------------------------\n'
+ '*** Base Git Repo: Trilinos\n'
+ 'dc6cb45 [Thu Dec 21 07:49:49 2023 -0700] '
+ '\n'
+ 'Merge commit '
+ "'71d07d7370583c071c3e0fa98cb00b4794be6cb2' into "
+ 'develop\n'
+ ' *** Parent 1:\n'
+ ' bs4_p1 [Mon Jan 15 22:26:29 2024 -0700] \n'
+ ' Cleaned up git log and cmake command argument formatting (#597)\n'
+ ' *** Parent 2:\n'
+ ' bs4_p2 [Wed Jan 17 12:33:03 2024 -0700] \n'
+ ' Cleaned up empty lines (#597)\n'
+ ' '
+ '--------------------------------------------------------------------------------\n'
+ '\n'
+ '\n',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'status': 0},
+ 'currentdate': '2024-01-23',
+ 'date': '2023-12-20',
+ 'datetime': 'Tuesday, January 23 2024 16:00:15',
+ 'documentation': 'https://trilinos.github.io/documentation.html',
+ 'generationtime': 0.05,
+ 'googletracker': '',
+ 'hasconfigure': True,
+ 'hascoverage': False,
+ 'hasrelationships': False,
+ 'hasupdate': True,
+ 'home': 'https://trilinos.github.io/',
+ 'logoid': 1,
+ 'menu': { 'back': 'index.php?project=Trilinos&parentid=1323325',
+ 'current': '/build/0',
+ 'next': False,
+ 'previous': False},
+ 'newissueurl': False,
+ 'nextdate': '2023-12-21',
+ 'nightlytime': '22:00 MST',
+ 'notes': [],
+ 'previousdate': '2023-12-19',
+ 'projectid': 1,
+ 'projectname': 'Trilinos',
+ 'projectname_encoded': 'Trilinos',
+ 'public': 1,
+ 'relationships_from': [],
+ 'relationships_to': [],
+ 'startdate': 'Tuesday, December 19 2023 22:00:00',
+ 'test': { 'nerrors': 0,
+ 'nfailed': 0,
+ 'nnotrun': 0,
+ 'npassed': 178,
+ 'nwarnings': 0},
+ 'title': 'CDash : Trilinos',
+ 'unixtimestamp': 1703048400,
+ 'update': { 'command': '',
+ 'endtime': '2023-12-20T15:48:14 MST',
+ 'nerrors': 0,
+ 'nupdates': 0,
+ 'nwarnings': 0,
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'type': 'GIT'},
+ 'user': {'id': None},
+ 'vcs': 'https://github.com/trilinos/Trilinos/',
+ 'version': 'v3.1.0'}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/5 b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/5
new file mode 100644
index 000000000..3fdba9468
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/5
@@ -0,0 +1,97 @@
+{ 'bugtracker': 'GitHub',
+ 'build': { 'command': 'build command',
+ 'compilername': '',
+ 'compilerversion': '',
+ 'endtime': '2023-12-20T16:59:05 MST',
+ 'error': 0,
+ 'errors': [],
+ 'generator': 'ctest-3.24.3',
+ 'id': 1323424,
+ 'lastsubmitbuild': 0,
+ 'lastsubmitdate': 0,
+ 'name': 'PR-12620-test-rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables-1957',
+ 'nerrors': 0,
+ 'note': 0,
+ 'nwarnings': 0,
+ 'osname': 'Linux',
+ 'osplatform': 'x86_64',
+ 'osrelease': '3.10.0-1062.1.2.el7.x86_64',
+ 'osversion': '#1 SMP Mon Sep 16 14:19:51 EDT 2019',
+ 'site': 'site1',
+ 'siteid': 49,
+ 'sitename_encoded': 'site1',
+ 'stamp': '20231220-2248-Pull Request',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'time': '2023-12-20T15:48:14 MST',
+ 'type': 'Pull Request',
+ 'warnings': []},
+ 'configure': { 'command': 'configure command here',
+ 'endtime': '2023-12-20T15:50:06 MST',
+ 'nerrors': 0,
+ 'nwarnings': 0,
+ 'output': 'loading initial cache file \n'
+ 'Trilinos repos versions:\n'
+ '--------------------------------------------------------------------------------\n'
+ '*** Base Git Repo: Trilinos\n'
+ 'dc6cb45 [Thu Dec 21 07:49:49 2023 -0700] '
+ '\n'
+ 'Merge commit '
+ "'71d07d7370583c071c3e0fa98cb00b4794be6cb2' into "
+ 'develop\n'
+ ' *** Parent 1:\n'
+ ' bs5_p1 [Mon Jan 15 22:26:29 2024 -0700] \n'
+ ' Cleaned up git log and cmake command argument formatting (#597)\n'
+ ' *** Parent 2:\n'
+ ' bs5_p2 [Wed Jan 17 12:33:03 2024 -0700] \n'
+ ' Cleaned up empty lines (#597)\n'
+ ' '
+ '--------------------------------------------------------------------------------\n'
+ '\n'
+ '\n',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'status': 0},
+ 'currentdate': '2024-01-23',
+ 'date': '2023-12-20',
+ 'datetime': 'Tuesday, January 23 2024 16:00:15',
+ 'documentation': 'https://trilinos.github.io/documentation.html',
+ 'generationtime': 0.05,
+ 'googletracker': '',
+ 'hasconfigure': True,
+ 'hascoverage': False,
+ 'hasrelationships': False,
+ 'hasupdate': True,
+ 'home': 'https://trilinos.github.io/',
+ 'logoid': 1,
+ 'menu': { 'back': 'index.php?project=Trilinos&parentid=1323325',
+ 'current': '/build/0',
+ 'next': False,
+ 'previous': False},
+ 'newissueurl': False,
+ 'nextdate': '2023-12-21',
+ 'nightlytime': '22:00 MST',
+ 'notes': [],
+ 'previousdate': '2023-12-19',
+ 'projectid': 1,
+ 'projectname': 'Trilinos',
+ 'projectname_encoded': 'Trilinos',
+ 'public': 1,
+ 'relationships_from': [],
+ 'relationships_to': [],
+ 'startdate': 'Tuesday, December 19 2023 22:00:00',
+ 'test': { 'nerrors': 0,
+ 'nfailed': 0,
+ 'nnotrun': 0,
+ 'npassed': 178,
+ 'nwarnings': 0},
+ 'title': 'CDash : Trilinos',
+ 'unixtimestamp': 1703048400,
+ 'update': { 'command': '',
+ 'endtime': '2023-12-20T15:48:14 MST',
+ 'nerrors': 0,
+ 'nupdates': 0,
+ 'nwarnings': 0,
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'type': 'GIT'},
+ 'user': {'id': None},
+ 'vcs': 'https://github.com/trilinos/Trilinos/',
+ 'version': 'v3.1.0'}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname2_buildname2/1 b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname2_buildname2/1
new file mode 100644
index 000000000..ac5d913ed
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname2_buildname2/1
@@ -0,0 +1,97 @@
+{ 'bugtracker': 'GitHub',
+ 'build': { 'command': 'build command',
+ 'compilername': '',
+ 'compilerversion': '',
+ 'endtime': '2023-12-20T16:59:05 MST',
+ 'error': 0,
+ 'errors': [],
+ 'generator': 'ctest-3.24.3',
+ 'id': 1323424,
+ 'lastsubmitbuild': 0,
+ 'lastsubmitdate': 0,
+ 'name': 'PR-12620-test-rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables-1957',
+ 'nerrors': 0,
+ 'note': 0,
+ 'nwarnings': 0,
+ 'osname': 'Linux',
+ 'osplatform': 'x86_64',
+ 'osrelease': '3.10.0-1062.1.2.el7.x86_64',
+ 'osversion': '#1 SMP Mon Sep 16 14:19:51 EDT 2019',
+ 'site': 'site1',
+ 'siteid': 49,
+ 'sitename_encoded': 'site1',
+ 'stamp': '20231220-2248-Pull Request',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'time': '2023-12-20T15:48:14 MST',
+ 'type': 'Pull Request',
+ 'warnings': []},
+ 'configure': { 'command': 'configure command here',
+ 'endtime': '2023-12-20T15:50:06 MST',
+ 'nerrors': 0,
+ 'nwarnings': 0,
+ 'output': 'loading initial cache file \n'
+ 'Trilinos repos versions:\n'
+ '--------------------------------------------------------------------------------\n'
+ '*** Base Git Repo: Trilinos\n'
+ 'dc6cb45 [Thu Dec 21 07:49:49 2023 -0700] '
+ '\n'
+ 'Merge commit '
+ "'71d07d7370583c071c3e0fa98cb00b4794be6cb2' into "
+ 'develop\n'
+ ' *** Parent 1:\n'
+ ' bs1_p1 [Mon Jan 15 22:26:29 2024 -0700] \n'
+ ' Cleaned up git log and cmake command argument formatting (#597)\n'
+ ' *** Parent 2:\n'
+ ' bs1_p2 [Wed Jan 17 12:33:03 2024 -0700] \n'
+ ' Cleaned up empty lines (#597)\n'
+ ' '
+ '--------------------------------------------------------------------------------\n'
+ '\n'
+ '\n',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'status': 0},
+ 'currentdate': '2024-01-23',
+ 'date': '2023-12-20',
+ 'datetime': 'Tuesday, January 23 2024 16:00:15',
+ 'documentation': 'https://trilinos.github.io/documentation.html',
+ 'generationtime': 0.05,
+ 'googletracker': '',
+ 'hasconfigure': True,
+ 'hascoverage': False,
+ 'hasrelationships': False,
+ 'hasupdate': True,
+ 'home': 'https://trilinos.github.io/',
+ 'logoid': 1,
+ 'menu': { 'back': 'index.php?project=Trilinos&parentid=1323325',
+ 'current': '/build/0',
+ 'next': False,
+ 'previous': False},
+ 'newissueurl': False,
+ 'nextdate': '2023-12-21',
+ 'nightlytime': '22:00 MST',
+ 'notes': [],
+ 'previousdate': '2023-12-19',
+ 'projectid': 1,
+ 'projectname': 'Trilinos',
+ 'projectname_encoded': 'Trilinos',
+ 'public': 1,
+ 'relationships_from': [],
+ 'relationships_to': [],
+ 'startdate': 'Tuesday, December 19 2023 22:00:00',
+ 'test': { 'nerrors': 0,
+ 'nfailed': 0,
+ 'nnotrun': 0,
+ 'npassed': 178,
+ 'nwarnings': 0},
+ 'title': 'CDash : Trilinos',
+ 'unixtimestamp': 1703048400,
+ 'update': { 'command': '',
+ 'endtime': '2023-12-20T15:48:14 MST',
+ 'nerrors': 0,
+ 'nupdates': 0,
+ 'nwarnings': 0,
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'type': 'GIT'},
+ 'user': {'id': None},
+ 'vcs': 'https://github.com/trilinos/Trilinos/',
+ 'version': 'v3.1.0'}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname2_buildname2/2 b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname2_buildname2/2
new file mode 100644
index 000000000..b415ffb51
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname2_buildname2/2
@@ -0,0 +1,97 @@
+{ 'bugtracker': 'GitHub',
+ 'build': { 'command': 'build command',
+ 'compilername': '',
+ 'compilerversion': '',
+ 'endtime': '2023-12-20T16:59:05 MST',
+ 'error': 0,
+ 'errors': [],
+ 'generator': 'ctest-3.24.3',
+ 'id': 1323424,
+ 'lastsubmitbuild': 0,
+ 'lastsubmitdate': 0,
+ 'name': 'PR-12620-test-rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables-1957',
+ 'nerrors': 0,
+ 'note': 0,
+ 'nwarnings': 0,
+ 'osname': 'Linux',
+ 'osplatform': 'x86_64',
+ 'osrelease': '3.10.0-1062.1.2.el7.x86_64',
+ 'osversion': '#1 SMP Mon Sep 16 14:19:51 EDT 2019',
+ 'site': 'site1',
+ 'siteid': 49,
+ 'sitename_encoded': 'site1',
+ 'stamp': '20231220-2248-Pull Request',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'time': '2023-12-20T15:48:14 MST',
+ 'type': 'Pull Request',
+ 'warnings': []},
+ 'configure': { 'command': 'configure command here',
+ 'endtime': '2023-12-20T15:50:06 MST',
+ 'nerrors': 0,
+ 'nwarnings': 0,
+ 'output': 'loading initial cache file \n'
+ 'Trilinos repos versions:\n'
+ '--------------------------------------------------------------------------------\n'
+ '*** Base Git Repo: Trilinos\n'
+ 'dc6cb45 [Thu Dec 21 07:49:49 2023 -0700] '
+ '\n'
+ 'Merge commit '
+ "'71d07d7370583c071c3e0fa98cb00b4794be6cb2' into "
+ 'develop\n'
+ ' *** Parent 1:\n'
+ ' bs2_p1 [Mon Jan 15 22:26:29 2024 -0700] \n'
+ ' Cleaned up git log and cmake command argument formatting (#597)\n'
+ ' *** Parent 2:\n'
+ ' bs2_p2 [Wed Jan 17 12:33:03 2024 -0700] \n'
+ ' Cleaned up empty lines (#597)\n'
+ ' '
+ '--------------------------------------------------------------------------------\n'
+ '\n'
+ '\n',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'status': 0},
+ 'currentdate': '2024-01-23',
+ 'date': '2023-12-20',
+ 'datetime': 'Tuesday, January 23 2024 16:00:15',
+ 'documentation': 'https://trilinos.github.io/documentation.html',
+ 'generationtime': 0.05,
+ 'googletracker': '',
+ 'hasconfigure': True,
+ 'hascoverage': False,
+ 'hasrelationships': False,
+ 'hasupdate': True,
+ 'home': 'https://trilinos.github.io/',
+ 'logoid': 1,
+ 'menu': { 'back': 'index.php?project=Trilinos&parentid=1323325',
+ 'current': '/build/0',
+ 'next': False,
+ 'previous': False},
+ 'newissueurl': False,
+ 'nextdate': '2023-12-21',
+ 'nightlytime': '22:00 MST',
+ 'notes': [],
+ 'previousdate': '2023-12-19',
+ 'projectid': 1,
+ 'projectname': 'Trilinos',
+ 'projectname_encoded': 'Trilinos',
+ 'public': 1,
+ 'relationships_from': [],
+ 'relationships_to': [],
+ 'startdate': 'Tuesday, December 19 2023 22:00:00',
+ 'test': { 'nerrors': 0,
+ 'nfailed': 0,
+ 'nnotrun': 0,
+ 'npassed': 178,
+ 'nwarnings': 0},
+ 'title': 'CDash : Trilinos',
+ 'unixtimestamp': 1703048400,
+ 'update': { 'command': '',
+ 'endtime': '2023-12-20T15:48:14 MST',
+ 'nerrors': 0,
+ 'nupdates': 0,
+ 'nwarnings': 0,
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'type': 'GIT'},
+ 'user': {'id': None},
+ 'vcs': 'https://github.com/trilinos/Trilinos/',
+ 'version': 'v3.1.0'}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname2_buildname2/3 b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname2_buildname2/3
new file mode 100644
index 000000000..b95f27937
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/build_summary_cache/testname2_buildname2/3
@@ -0,0 +1,97 @@
+{ 'bugtracker': 'GitHub',
+ 'build': { 'command': 'build command',
+ 'compilername': '',
+ 'compilerversion': '',
+ 'endtime': '2023-12-20T16:59:05 MST',
+ 'error': 0,
+ 'errors': [],
+ 'generator': 'ctest-3.24.3',
+ 'id': 1323424,
+ 'lastsubmitbuild': 0,
+ 'lastsubmitdate': 0,
+ 'name': 'PR-12620-test-rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables-1957',
+ 'nerrors': 0,
+ 'note': 0,
+ 'nwarnings': 0,
+ 'osname': 'Linux',
+ 'osplatform': 'x86_64',
+ 'osrelease': '3.10.0-1062.1.2.el7.x86_64',
+ 'osversion': '#1 SMP Mon Sep 16 14:19:51 EDT 2019',
+ 'site': 'site1',
+ 'siteid': 49,
+ 'sitename_encoded': 'site1',
+ 'stamp': '20231220-2248-Pull Request',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'time': '2023-12-20T15:48:14 MST',
+ 'type': 'Pull Request',
+ 'warnings': []},
+ 'configure': { 'command': 'configure command here',
+ 'endtime': '2023-12-20T15:50:06 MST',
+ 'nerrors': 0,
+ 'nwarnings': 0,
+ 'output': 'loading initial cache file \n'
+ 'Trilinos repos versions:\n'
+ '--------------------------------------------------------------------------------\n'
+ '*** Base Git Repo: Trilinos\n'
+ 'dc6cb45 [Thu Dec 21 07:49:49 2023 -0700] '
+ '\n'
+ 'Merge commit '
+ "'71d07d7370583c071c3e0fa98cb00b4794be6cb2' into "
+ 'develop\n'
+ ' *** Parent 1:\n'
+ ' bs3_p1 [Mon Jan 15 22:26:29 2024 -0700] \n'
+ ' Cleaned up git log and cmake command argument formatting (#597)\n'
+ ' *** Parent 2:\n'
+ ' bs3_p2 [Wed Jan 17 12:33:03 2024 -0700] \n'
+ ' Cleaned up empty lines (#597)\n'
+ ' '
+ '--------------------------------------------------------------------------------\n'
+ '\n'
+ '\n',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'status': 0},
+ 'currentdate': '2024-01-23',
+ 'date': '2023-12-20',
+ 'datetime': 'Tuesday, January 23 2024 16:00:15',
+ 'documentation': 'https://trilinos.github.io/documentation.html',
+ 'generationtime': 0.05,
+ 'googletracker': '',
+ 'hasconfigure': True,
+ 'hascoverage': False,
+ 'hasrelationships': False,
+ 'hasupdate': True,
+ 'home': 'https://trilinos.github.io/',
+ 'logoid': 1,
+ 'menu': { 'back': 'index.php?project=Trilinos&parentid=1323325',
+ 'current': '/build/0',
+ 'next': False,
+ 'previous': False},
+ 'newissueurl': False,
+ 'nextdate': '2023-12-21',
+ 'nightlytime': '22:00 MST',
+ 'notes': [],
+ 'previousdate': '2023-12-19',
+ 'projectid': 1,
+ 'projectname': 'Trilinos',
+ 'projectname_encoded': 'Trilinos',
+ 'public': 1,
+ 'relationships_from': [],
+ 'relationships_to': [],
+ 'startdate': 'Tuesday, December 19 2023 22:00:00',
+ 'test': { 'nerrors': 0,
+ 'nfailed': 0,
+ 'nnotrun': 0,
+ 'npassed': 178,
+ 'nwarnings': 0},
+ 'title': 'CDash : Trilinos',
+ 'unixtimestamp': 1703048400,
+ 'update': { 'command': '',
+ 'endtime': '2023-12-20T15:48:14 MST',
+ 'nerrors': 0,
+ 'nupdates': 0,
+ 'nwarnings': 0,
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'type': 'GIT'},
+ 'user': {'id': None},
+ 'vcs': 'https://github.com/trilinos/Trilinos/',
+ 'version': 'v3.1.0'}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/initialCDashNonPassingTests_2018-10-26_2018-10-28.json b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/initialCDashNonPassingTests_2018-10-26_2018-10-28.json
new file mode 100644
index 000000000..e8eeac36b
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/initialCDashNonPassingTests_2018-10-26_2018-10-28.json
@@ -0,0 +1,89 @@
+{ u'bugtracker': u'https://github.com/trilinos/Trilinos/issues',
+ u'builds': [ { u'buildName': u'buildname1',
+ u'buildSummaryLink': u'buildSummary.php?buildid=1323424',
+ u'buildstarttime': u'2018-10-28T05:56:22 UTC',
+ u'details': u'Completed (Failed)\n',
+ u'nprocs': 4,
+ u'prettyProcTime': u'42s 880ms',
+ u'prettyTime': u'10s 720ms',
+ u'procTime': 42.88,
+ u'site': u'mutrino',
+ u'siteLink': u'viewSite.php?siteid=223',
+ u'status': u'Failed',
+ u'statusclass': u'error',
+ u'testDetailsLink': u'testDetails.php?test=57860629&build=1323424',
+ u'testname': u'testname1',
+ u'time': 10.72},
+ { u'buildName': u'buildname2',
+ u'buildSummaryLink': u'buildSummary.php?buildid=1323424',
+ u'buildstarttime': u'2018-10-26T05:56:22 UTC',
+ u'details': u'Completed (Failed)\n',
+ u'nprocs': 4,
+ u'prettyProcTime': u'42s 880ms',
+ u'prettyTime': u'10s 720ms',
+ u'procTime': 42.88,
+ u'site': u'mutrino',
+ u'siteLink': u'viewSite.php?siteid=223',
+ u'status': u'Failed',
+ u'statusclass': u'error',
+ u'testDetailsLink': u'testDetails.php?test=57860629&build=1323424',
+ u'testname': u'testname2',
+ u'time': 10.72}],
+ u'date': u'2018-10-28',
+ u'datetime': u'Wednesday, October 31 2018 19:42:20',
+ u'documentation': u'http://trilinos.org',
+ u'feed_enabled': False,
+ u'filterdata': { u'colorblind': 0,
+ u'debug': 0,
+ u'filtercombine': u'and',
+ u'filters': [ { u'compare': 61,
+ u'field': u'groupname',
+ u'value': u'Specialized'},
+ { u'compare': 65,
+ u'field': u'buildname',
+ u'value': u'Trilinos-atdm-'},
+ { u'compare': 62,
+ u'field': u'buildname',
+ u'value': u'Trilinos-atdm-cee-rhel6-gnu-7.2.0-opt-serial'},
+ { u'compare': 62,
+ u'field': u'buildname',
+ u'value': u'Trilinos-atdm-white-ride-cuda-9.2-debug-pt'},
+ { u'compare': 62,
+ u'field': u'site',
+ u'value': u'ride'},
+ { u'compare': 62,
+ u'field': u'status',
+ u'value': u'passed'}],
+ u'hasdateclause': 0,
+ u'limit': 0,
+ u'pageId': u'queryTests.php',
+ u'pageSpecificFilters': { u'TextConcat': u"GROUP_CONCAT(text SEPARATOR ', ')"},
+ u'showfilters': 1,
+ u'showlimit': 1,
+ u'sql': u"AND (bg.name = 'Specialized' AND b.name LIKE 'Trilinos-atdm-%' AND b.name != 'Trilinos-atdm-cee-rhel6-gnu-7.2.0-opt-serial' AND b.name != 'Trilinos-atdm-white-ride-cuda-9.2-debug-pt' AND site.name != 'ride' AND build2test.status != 'passed')"},
+ u'filterurl': u'',
+ u'footer': u'views/partials/footer.html',
+ u'generationtime': 0.969,
+ u'googletracker': u'',
+ u'hasprocessors': True,
+ u'header': u'views/partials/header.html',
+ u'home': u'http://trilinos.org',
+ u'logoid': 1,
+ u'menu': { u'back': u'index.php?project=Trilinos&date=2018-10-28',
+ u'current': u'queryTests.php?project=Trilinos&limit=0',
+ u'next': u'queryTests.php?project=Trilinos&date=2018-10-29&limit=0',
+ u'previous': u'queryTests.php?project=Trilinos&date=2018-10-27&limit=0'},
+ u'nextdate': u'2018-10-29',
+ u'previousdate': u'2018-10-27',
+ u'project': { u'showtesttime': 0},
+ u'projectid': 1,
+ u'projectname': u'Trilinos',
+ u'projectname_encoded': u'Trilinos',
+ u'public': 1,
+ u'showcalendar': 1,
+ u'startdate': u'Sunday, October 28 2018 04:01:00',
+ u'title': u'CDash : Trilinos',
+ u'unixtimestamp': 1540699260,
+ u'user': { u'id': 0},
+ u'vcs': u'http://github.com/trilinos/Trilinos',
+ u'version': None}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/test_history_cache/testname1_buildname1.json b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/test_history_cache/testname1_buildname1.json
new file mode 100644
index 000000000..09b5099ab
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/test_history_cache/testname1_buildname1.json
@@ -0,0 +1,140 @@
+{ u'bugtracker': u'https://github.com/trilinos/Trilinos/issues',
+ u'builds': [ { u'buildName': u'build1',
+ u'buildSummaryLink': u'build/1',
+ u'buildstarttime': u'2018-10-28T05:56:22 UTC',
+ u'details': u'Completed\n',
+ u'nprocs': 4,
+ u'prettyProcTime': u'42s 880ms',
+ u'prettyTime': u'10s 720ms',
+ u'procTime': 42.88,
+ u'site': u'mutrino',
+ u'siteLink': u'viewSite.php?siteid=223',
+ u'status': u'Passed',
+ u'statusclass': u'error',
+ u'testDetailsLink': u'testDetails.php?test=57860629&build=1',
+ u'testname': u'testname1',
+ u'time': 10.72
+ },
+ { u'buildName': u'build1',
+ u'buildSummaryLink': u'build/2',
+ u'buildstarttime': u'2018-10-28T05:56:22 UTC',
+ u'details': u'Completed (Failed)\n',
+ u'nprocs': 4,
+ u'prettyProcTime': u'42s 880ms',
+ u'prettyTime': u'10s 720ms',
+ u'procTime': 42.88,
+ u'site': u'mutrino',
+ u'siteLink': u'viewSite.php?siteid=223',
+ u'status': u'Failed',
+ u'statusclass': u'error',
+ u'testDetailsLink': u'testDetails.php?test=57860629&build=2',
+ u'testname': u'testname1',
+ u'time': 10.72
+ },
+ { u'buildName': u'build1',
+ u'buildSummaryLink': u'build/3',
+ u'buildstarttime': u'2018-10-28T05:56:22 UTC',
+ u'details': u'Completed (Failed)\n',
+ u'nprocs': 4,
+ u'prettyProcTime': u'42s 880ms',
+ u'prettyTime': u'10s 720ms',
+ u'procTime': 42.88,
+ u'site': u'mutrino',
+ u'siteLink': u'viewSite.php?siteid=223',
+ u'status': u'Failed',
+ u'statusclass': u'error',
+ u'testDetailsLink': u'testDetails.php?test=57860629&build=3',
+ u'testname': u'testname1',
+ u'time': 10.72
+ },
+ { u'buildName': u'build1',
+ u'buildSummaryLink': u'build/4',
+ u'buildstarttime': u'2018-10-28T05:56:22 UTC',
+ u'details': u'Completed\n',
+ u'nprocs': 4,
+ u'prettyProcTime': u'42s 880ms',
+ u'prettyTime': u'10s 720ms',
+ u'procTime': 42.88,
+ u'site': u'mutrino',
+ u'siteLink': u'viewSite.php?siteid=223',
+ u'status': u'Passed',
+ u'statusclass': u'error',
+ u'testDetailsLink': u'testDetails.php?test=57860629&build=4',
+ u'testname': u'testname1',
+ u'time': 10.72
+ },
+ { u'buildName': u'build1',
+ u'buildSummaryLink': u'build/5',
+ u'buildstarttime': u'2018-10-28T05:56:22 UTC',
+ u'details': u'Completed\n',
+ u'nprocs': 4,
+ u'prettyProcTime': u'42s 880ms',
+ u'prettyTime': u'10s 720ms',
+ u'procTime': 42.88,
+ u'site': u'mutrino',
+ u'siteLink': u'viewSite.php?siteid=223',
+ u'status': u'Passed',
+ u'statusclass': u'error',
+ u'testDetailsLink': u'testDetails.php?test=57860629&build=5',
+ u'testname': u'testname1',
+ u'time': 10.72
+ }
+ ],
+ u'date': u'2018-10-28',
+ u'datetime': u'Wednesday, October 31 2018 19:42:20',
+ u'documentation': u'http://trilinos.org',
+ u'feed_enabled': False,
+ u'filterdata': { u'colorblind': 0,
+ u'debug': 0,
+ u'filtercombine': u'and',
+ u'filters': [ { u'compare': 61,
+ u'field': u'groupname',
+ u'value': u'Specialized'},
+ { u'compare': 65,
+ u'field': u'buildname',
+ u'value': u'Trilinos-atdm-'},
+ { u'compare': 62,
+ u'field': u'buildname',
+ u'value': u'Trilinos-atdm-cee-rhel6-gnu-7.2.0-opt-serial'},
+ { u'compare': 62,
+ u'field': u'buildname',
+ u'value': u'Trilinos-atdm-white-ride-cuda-9.2-debug-pt'},
+ { u'compare': 62,
+ u'field': u'site',
+ u'value': u'ride'},
+ { u'compare': 62,
+ u'field': u'status',
+ u'value': u'passed'}],
+ u'hasdateclause': 0,
+ u'limit': 0,
+ u'pageId': u'queryTests.php',
+ u'pageSpecificFilters': { u'TextConcat': u"GROUP_CONCAT(text SEPARATOR ', ')"},
+ u'showfilters': 1,
+ u'showlimit': 1,
+ u'sql': u"AND (bg.name = 'Specialized' AND b.name LIKE 'Trilinos-atdm-%' AND b.name != 'Trilinos-atdm-cee-rhel6-gnu-7.2.0-opt-serial' AND b.name != 'Trilinos-atdm-white-ride-cuda-9.2-debug-pt' AND site.name != 'ride' AND build2test.status != 'passed')"},
+ u'filterurl': u'',
+ u'footer': u'views/partials/footer.html',
+ u'generationtime': 0.969,
+ u'googletracker': u'',
+ u'hasprocessors': True,
+ u'header': u'views/partials/header.html',
+ u'home': u'http://trilinos.org',
+ u'logoid': 1,
+ u'menu': { u'back': u'index.php?project=Trilinos&date=2018-10-28',
+ u'current': u'queryTests.php?project=Trilinos&limit=0',
+ u'next': u'queryTests.php?project=Trilinos&date=2018-10-29&limit=0',
+ u'previous': u'queryTests.php?project=Trilinos&date=2018-10-27&limit=0'},
+ u'nextdate': u'2018-10-29',
+ u'previousdate': u'2018-10-27',
+ u'project': { u'showtesttime': 0},
+ u'projectid': 1,
+ u'projectname': u'Trilinos',
+ u'projectname_encoded': u'Trilinos',
+ u'public': 1,
+ u'showcalendar': 1,
+ u'startdate': u'Sunday, October 28 2018 04:01:00',
+ u'title': u'CDash : Trilinos',
+ u'unixtimestamp': 1540699260,
+ u'user': { u'id': 0},
+ u'vcs': u'http://github.com/trilinos/Trilinos',
+ u'version': None}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/test_history_cache/testname2_buildname2.json b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/test_history_cache/testname2_buildname2.json
new file mode 100644
index 000000000..25a33686d
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_0_ift_2/test_queries_cache/test_history_cache/testname2_buildname2.json
@@ -0,0 +1,108 @@
+{ u'bugtracker': u'https://github.com/trilinos/Trilinos/issues',
+ u'builds': [ { u'buildName': u'build2',
+ u'buildSummaryLink': u'build/1',
+ u'buildstarttime': u'2018-10-26T05:56:22 UTC',
+ u'details': u'Completed\n',
+ u'nprocs': 4,
+ u'prettyProcTime': u'42s 880ms',
+ u'prettyTime': u'10s 720ms',
+ u'procTime': 42.88,
+ u'site': u'mutrino',
+ u'siteLink': u'viewSite.php?siteid=223',
+ u'status': u'Passed',
+ u'statusclass': u'error',
+ u'testDetailsLink': u'testDetails.php?test=57860629&build=1',
+ u'testname': u'testname2',
+ u'time': 10.72
+ },
+ { u'buildName': u'build2',
+ u'buildSummaryLink': u'build/2',
+ u'buildstarttime': u'2018-10-26T05:56:22 UTC',
+ u'details': u'Completed (Failed)\n',
+ u'nprocs': 4,
+ u'prettyProcTime': u'42s 880ms',
+ u'prettyTime': u'10s 720ms',
+ u'procTime': 42.88,
+ u'site': u'mutrino',
+ u'siteLink': u'viewSite.php?siteid=223',
+ u'status': u'Failed',
+ u'statusclass': u'error',
+ u'testDetailsLink': u'testDetails.php?test=57860629&build=2',
+ u'testname': u'testname2',
+ u'time': 10.72
+ },
+ { u'buildName': u'build2',
+ u'buildSummaryLink': u'build/3',
+ u'buildstarttime': u'2018-10-26T05:56:22 UTC',
+ u'details': u'Completed (Failed)\n',
+ u'nprocs': 4,
+ u'prettyProcTime': u'42s 880ms',
+ u'prettyTime': u'10s 720ms',
+ u'procTime': 42.88,
+ u'site': u'mutrino',
+ u'siteLink': u'viewSite.php?siteid=223',
+ u'status': u'Failed',
+ u'statusclass': u'error',
+ u'testDetailsLink': u'testDetails.php?test=57860629&build=3',
+ u'testname': u'testname2',
+ u'time': 10.72
+ }
+ ],
+ u'date': u'2018-10-26',
+ u'datetime': u'Wednesday, October 31 2018 19:42:20',
+ u'documentation': u'http://trilinos.org',
+ u'feed_enabled': False,
+ u'filterdata': { u'colorblind': 0,
+ u'debug': 0,
+ u'filtercombine': u'and',
+ u'filters': [ { u'compare': 61,
+ u'field': u'groupname',
+ u'value': u'Specialized'},
+ { u'compare': 65,
+ u'field': u'buildname',
+ u'value': u'Trilinos-atdm-'},
+ { u'compare': 62,
+ u'field': u'buildname',
+ u'value': u'Trilinos-atdm-cee-rhel6-gnu-7.2.0-opt-serial'},
+ { u'compare': 62,
+ u'field': u'buildname',
+ u'value': u'Trilinos-atdm-white-ride-cuda-9.2-debug-pt'},
+ { u'compare': 62,
+ u'field': u'site',
+ u'value': u'ride'},
+ { u'compare': 62,
+ u'field': u'status',
+ u'value': u'passed'}],
+ u'hasdateclause': 0,
+ u'limit': 0,
+ u'pageId': u'queryTests.php',
+ u'pageSpecificFilters': { u'TextConcat': u"GROUP_CONCAT(text SEPARATOR ', ')"},
+ u'showfilters': 1,
+ u'showlimit': 1,
+ u'sql': u"AND (bg.name = 'Specialized' AND b.name LIKE 'Trilinos-atdm-%' AND b.name != 'Trilinos-atdm-cee-rhel6-gnu-7.2.0-opt-serial' AND b.name != 'Trilinos-atdm-white-ride-cuda-9.2-debug-pt' AND site.name != 'ride' AND build2test.status != 'passed')"},
+ u'filterurl': u'',
+ u'footer': u'views/partials/footer.html',
+ u'generationtime': 0.969,
+ u'googletracker': u'',
+ u'hasprocessors': True,
+ u'header': u'views/partials/header.html',
+ u'home': u'http://trilinos.org',
+ u'logoid': 1,
+ u'menu': { u'back': u'index.php?project=Trilinos&date=2018-10-28',
+ u'current': u'queryTests.php?project=Trilinos&limit=0',
+ u'next': u'queryTests.php?project=Trilinos&date=2018-10-29&limit=0',
+ u'previous': u'queryTests.php?project=Trilinos&date=2018-10-27&limit=0'},
+ u'nextdate': u'2018-10-29',
+ u'previousdate': u'2018-10-27',
+ u'project': { u'showtesttime': 0},
+ u'projectid': 1,
+ u'projectname': u'Trilinos',
+ u'projectname_encoded': u'Trilinos',
+ u'public': 1,
+ u'showcalendar': 1,
+ u'startdate': u'Sunday, October 28 2018 04:01:00',
+ u'title': u'CDash : Trilinos',
+ u'unixtimestamp': 1540699260,
+ u'user': { u'id': 0},
+ u'vcs': u'http://github.com/trilinos/Trilinos',
+ u'version': None}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/1 b/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/1
new file mode 100644
index 000000000..49d2641d8
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/1
@@ -0,0 +1,97 @@
+{ 'bugtracker': 'GitHub',
+ 'build': { 'command': 'build command',
+ 'compilername': '',
+ 'compilerversion': '',
+ 'endtime': '2023-12-20T16:59:05 MST',
+ 'error': 0,
+ 'errors': [],
+ 'generator': 'ctest-3.24.3',
+ 'id': 1323424,
+ 'lastsubmitbuild': 0,
+ 'lastsubmitdate': 0,
+ 'name': 'PR-12620-test-rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables-1957',
+ 'nerrors': 0,
+ 'note': 0,
+ 'nwarnings': 0,
+ 'osname': 'Linux',
+ 'osplatform': 'x86_64',
+ 'osrelease': '3.10.0-1062.1.2.el7.x86_64',
+ 'osversion': '#1 SMP Mon Sep 16 14:19:51 EDT 2019',
+ 'site': 'site1',
+ 'siteid': 49,
+ 'sitename_encoded': 'site1',
+ 'stamp': '20231220-2248-Pull Request',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'time': '2023-12-20T15:48:14 MST',
+ 'type': 'Pull Request',
+ 'warnings': []},
+ 'configure': { 'command': 'configure command here',
+ 'endtime': '2023-12-20T15:50:06 MST',
+ 'nerrors': 0,
+ 'nwarnings': 0,
+ 'output': 'loading initial cache file \n'
+ 'Trilinos repos versions:\n'
+ '--------------------------------------------------------------------------------\n'
+ '*** Base Git Repo: Trilinos\n'
+ 'dc6cb45 [Thu Dec 21 07:49:49 2023 -0700] '
+ '\n'
+ 'Merge commit '
+ "'71d07d7370583c071c3e0fa98cb00b4794be6cb2' into "
+ 'develop\n'
+ ' *** Parent 1:\n'
+ ' 592ea0d5 [Mon Jan 15 22:26:29 2024 -0700] \n'
+ ' Cleaned up git log and cmake command argument formatting (#597)\n'
+ ' *** Parent 2:\n'
+ ' b07e361c [Wed Jan 17 12:33:03 2024 -0700] \n'
+ ' Cleaned up empty lines (#597)\n'
+ ' '
+ '--------------------------------------------------------------------------------\n'
+ '\n'
+ '\n',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'status': 0},
+ 'currentdate': '2024-01-23',
+ 'date': '2023-12-20',
+ 'datetime': 'Tuesday, January 23 2024 16:00:15',
+ 'documentation': 'https://trilinos.github.io/documentation.html',
+ 'generationtime': 0.05,
+ 'googletracker': '',
+ 'hasconfigure': True,
+ 'hascoverage': False,
+ 'hasrelationships': False,
+ 'hasupdate': True,
+ 'home': 'https://trilinos.github.io/',
+ 'logoid': 1,
+ 'menu': { 'back': 'index.php?project=Trilinos&parentid=1323325',
+ 'current': '/build/0',
+ 'next': False,
+ 'previous': False},
+ 'newissueurl': False,
+ 'nextdate': '2023-12-21',
+ 'nightlytime': '22:00 MST',
+ 'notes': [],
+ 'previousdate': '2023-12-19',
+ 'projectid': 1,
+ 'projectname': 'Trilinos',
+ 'projectname_encoded': 'Trilinos',
+ 'public': 1,
+ 'relationships_from': [],
+ 'relationships_to': [],
+ 'startdate': 'Tuesday, December 19 2023 22:00:00',
+ 'test': { 'nerrors': 0,
+ 'nfailed': 0,
+ 'nnotrun': 0,
+ 'npassed': 178,
+ 'nwarnings': 0},
+ 'title': 'CDash : Trilinos',
+ 'unixtimestamp': 1703048400,
+ 'update': { 'command': '',
+ 'endtime': '2023-12-20T15:48:14 MST',
+ 'nerrors': 0,
+ 'nupdates': 0,
+ 'nwarnings': 0,
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'type': 'GIT'},
+ 'user': {'id': None},
+ 'vcs': 'https://github.com/trilinos/Trilinos/',
+ 'version': 'v3.1.0'}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/2 b/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/2
new file mode 100644
index 000000000..49d2641d8
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/build_summary_cache/testname1_buildname1/2
@@ -0,0 +1,97 @@
+{ 'bugtracker': 'GitHub',
+ 'build': { 'command': 'build command',
+ 'compilername': '',
+ 'compilerversion': '',
+ 'endtime': '2023-12-20T16:59:05 MST',
+ 'error': 0,
+ 'errors': [],
+ 'generator': 'ctest-3.24.3',
+ 'id': 1323424,
+ 'lastsubmitbuild': 0,
+ 'lastsubmitdate': 0,
+ 'name': 'PR-12620-test-rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables-1957',
+ 'nerrors': 0,
+ 'note': 0,
+ 'nwarnings': 0,
+ 'osname': 'Linux',
+ 'osplatform': 'x86_64',
+ 'osrelease': '3.10.0-1062.1.2.el7.x86_64',
+ 'osversion': '#1 SMP Mon Sep 16 14:19:51 EDT 2019',
+ 'site': 'site1',
+ 'siteid': 49,
+ 'sitename_encoded': 'site1',
+ 'stamp': '20231220-2248-Pull Request',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'time': '2023-12-20T15:48:14 MST',
+ 'type': 'Pull Request',
+ 'warnings': []},
+ 'configure': { 'command': 'configure command here',
+ 'endtime': '2023-12-20T15:50:06 MST',
+ 'nerrors': 0,
+ 'nwarnings': 0,
+ 'output': 'loading initial cache file \n'
+ 'Trilinos repos versions:\n'
+ '--------------------------------------------------------------------------------\n'
+ '*** Base Git Repo: Trilinos\n'
+ 'dc6cb45 [Thu Dec 21 07:49:49 2023 -0700] '
+ '\n'
+ 'Merge commit '
+ "'71d07d7370583c071c3e0fa98cb00b4794be6cb2' into "
+ 'develop\n'
+ ' *** Parent 1:\n'
+ ' 592ea0d5 [Mon Jan 15 22:26:29 2024 -0700] \n'
+ ' Cleaned up git log and cmake command argument formatting (#597)\n'
+ ' *** Parent 2:\n'
+ ' b07e361c [Wed Jan 17 12:33:03 2024 -0700] \n'
+ ' Cleaned up empty lines (#597)\n'
+ ' '
+ '--------------------------------------------------------------------------------\n'
+ '\n'
+ '\n',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'status': 0},
+ 'currentdate': '2024-01-23',
+ 'date': '2023-12-20',
+ 'datetime': 'Tuesday, January 23 2024 16:00:15',
+ 'documentation': 'https://trilinos.github.io/documentation.html',
+ 'generationtime': 0.05,
+ 'googletracker': '',
+ 'hasconfigure': True,
+ 'hascoverage': False,
+ 'hasrelationships': False,
+ 'hasupdate': True,
+ 'home': 'https://trilinos.github.io/',
+ 'logoid': 1,
+ 'menu': { 'back': 'index.php?project=Trilinos&parentid=1323325',
+ 'current': '/build/0',
+ 'next': False,
+ 'previous': False},
+ 'newissueurl': False,
+ 'nextdate': '2023-12-21',
+ 'nightlytime': '22:00 MST',
+ 'notes': [],
+ 'previousdate': '2023-12-19',
+ 'projectid': 1,
+ 'projectname': 'Trilinos',
+ 'projectname_encoded': 'Trilinos',
+ 'public': 1,
+ 'relationships_from': [],
+ 'relationships_to': [],
+ 'startdate': 'Tuesday, December 19 2023 22:00:00',
+ 'test': { 'nerrors': 0,
+ 'nfailed': 0,
+ 'nnotrun': 0,
+ 'npassed': 178,
+ 'nwarnings': 0},
+ 'title': 'CDash : Trilinos',
+ 'unixtimestamp': 1703048400,
+ 'update': { 'command': '',
+ 'endtime': '2023-12-20T15:48:14 MST',
+ 'nerrors': 0,
+ 'nupdates': 0,
+ 'nwarnings': 0,
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'type': 'GIT'},
+ 'user': {'id': None},
+ 'vcs': 'https://github.com/trilinos/Trilinos/',
+ 'version': 'v3.1.0'}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/build_summary_cache/testname2_buildname2/1 b/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/build_summary_cache/testname2_buildname2/1
new file mode 100644
index 000000000..ac5d913ed
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/build_summary_cache/testname2_buildname2/1
@@ -0,0 +1,97 @@
+{ 'bugtracker': 'GitHub',
+ 'build': { 'command': 'build command',
+ 'compilername': '',
+ 'compilerversion': '',
+ 'endtime': '2023-12-20T16:59:05 MST',
+ 'error': 0,
+ 'errors': [],
+ 'generator': 'ctest-3.24.3',
+ 'id': 1323424,
+ 'lastsubmitbuild': 0,
+ 'lastsubmitdate': 0,
+ 'name': 'PR-12620-test-rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables-1957',
+ 'nerrors': 0,
+ 'note': 0,
+ 'nwarnings': 0,
+ 'osname': 'Linux',
+ 'osplatform': 'x86_64',
+ 'osrelease': '3.10.0-1062.1.2.el7.x86_64',
+ 'osversion': '#1 SMP Mon Sep 16 14:19:51 EDT 2019',
+ 'site': 'site1',
+ 'siteid': 49,
+ 'sitename_encoded': 'site1',
+ 'stamp': '20231220-2248-Pull Request',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'time': '2023-12-20T15:48:14 MST',
+ 'type': 'Pull Request',
+ 'warnings': []},
+ 'configure': { 'command': 'configure command here',
+ 'endtime': '2023-12-20T15:50:06 MST',
+ 'nerrors': 0,
+ 'nwarnings': 0,
+ 'output': 'loading initial cache file \n'
+ 'Trilinos repos versions:\n'
+ '--------------------------------------------------------------------------------\n'
+ '*** Base Git Repo: Trilinos\n'
+ 'dc6cb45 [Thu Dec 21 07:49:49 2023 -0700] '
+ '\n'
+ 'Merge commit '
+ "'71d07d7370583c071c3e0fa98cb00b4794be6cb2' into "
+ 'develop\n'
+ ' *** Parent 1:\n'
+ ' bs1_p1 [Mon Jan 15 22:26:29 2024 -0700] \n'
+ ' Cleaned up git log and cmake command argument formatting (#597)\n'
+ ' *** Parent 2:\n'
+ ' bs1_p2 [Wed Jan 17 12:33:03 2024 -0700] \n'
+ ' Cleaned up empty lines (#597)\n'
+ ' '
+ '--------------------------------------------------------------------------------\n'
+ '\n'
+ '\n',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'status': 0},
+ 'currentdate': '2024-01-23',
+ 'date': '2023-12-20',
+ 'datetime': 'Tuesday, January 23 2024 16:00:15',
+ 'documentation': 'https://trilinos.github.io/documentation.html',
+ 'generationtime': 0.05,
+ 'googletracker': '',
+ 'hasconfigure': True,
+ 'hascoverage': False,
+ 'hasrelationships': False,
+ 'hasupdate': True,
+ 'home': 'https://trilinos.github.io/',
+ 'logoid': 1,
+ 'menu': { 'back': 'index.php?project=Trilinos&parentid=1323325',
+ 'current': '/build/0',
+ 'next': False,
+ 'previous': False},
+ 'newissueurl': False,
+ 'nextdate': '2023-12-21',
+ 'nightlytime': '22:00 MST',
+ 'notes': [],
+ 'previousdate': '2023-12-19',
+ 'projectid': 1,
+ 'projectname': 'Trilinos',
+ 'projectname_encoded': 'Trilinos',
+ 'public': 1,
+ 'relationships_from': [],
+ 'relationships_to': [],
+ 'startdate': 'Tuesday, December 19 2023 22:00:00',
+ 'test': { 'nerrors': 0,
+ 'nfailed': 0,
+ 'nnotrun': 0,
+ 'npassed': 178,
+ 'nwarnings': 0},
+ 'title': 'CDash : Trilinos',
+ 'unixtimestamp': 1703048400,
+ 'update': { 'command': '',
+ 'endtime': '2023-12-20T15:48:14 MST',
+ 'nerrors': 0,
+ 'nupdates': 0,
+ 'nwarnings': 0,
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'type': 'GIT'},
+ 'user': {'id': None},
+ 'vcs': 'https://github.com/trilinos/Trilinos/',
+ 'version': 'v3.1.0'}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/build_summary_cache/testname2_buildname2/2 b/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/build_summary_cache/testname2_buildname2/2
new file mode 100644
index 000000000..b415ffb51
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/build_summary_cache/testname2_buildname2/2
@@ -0,0 +1,97 @@
+{ 'bugtracker': 'GitHub',
+ 'build': { 'command': 'build command',
+ 'compilername': '',
+ 'compilerversion': '',
+ 'endtime': '2023-12-20T16:59:05 MST',
+ 'error': 0,
+ 'errors': [],
+ 'generator': 'ctest-3.24.3',
+ 'id': 1323424,
+ 'lastsubmitbuild': 0,
+ 'lastsubmitdate': 0,
+ 'name': 'PR-12620-test-rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables-1957',
+ 'nerrors': 0,
+ 'note': 0,
+ 'nwarnings': 0,
+ 'osname': 'Linux',
+ 'osplatform': 'x86_64',
+ 'osrelease': '3.10.0-1062.1.2.el7.x86_64',
+ 'osversion': '#1 SMP Mon Sep 16 14:19:51 EDT 2019',
+ 'site': 'site1',
+ 'siteid': 49,
+ 'sitename_encoded': 'site1',
+ 'stamp': '20231220-2248-Pull Request',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'time': '2023-12-20T15:48:14 MST',
+ 'type': 'Pull Request',
+ 'warnings': []},
+ 'configure': { 'command': 'configure command here',
+ 'endtime': '2023-12-20T15:50:06 MST',
+ 'nerrors': 0,
+ 'nwarnings': 0,
+ 'output': 'loading initial cache file \n'
+ 'Trilinos repos versions:\n'
+ '--------------------------------------------------------------------------------\n'
+ '*** Base Git Repo: Trilinos\n'
+ 'dc6cb45 [Thu Dec 21 07:49:49 2023 -0700] '
+ '\n'
+ 'Merge commit '
+ "'71d07d7370583c071c3e0fa98cb00b4794be6cb2' into "
+ 'develop\n'
+ ' *** Parent 1:\n'
+ ' bs2_p1 [Mon Jan 15 22:26:29 2024 -0700] \n'
+ ' Cleaned up git log and cmake command argument formatting (#597)\n'
+ ' *** Parent 2:\n'
+ ' bs2_p2 [Wed Jan 17 12:33:03 2024 -0700] \n'
+ ' Cleaned up empty lines (#597)\n'
+ ' '
+ '--------------------------------------------------------------------------------\n'
+ '\n'
+ '\n',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'status': 0},
+ 'currentdate': '2024-01-23',
+ 'date': '2023-12-20',
+ 'datetime': 'Tuesday, January 23 2024 16:00:15',
+ 'documentation': 'https://trilinos.github.io/documentation.html',
+ 'generationtime': 0.05,
+ 'googletracker': '',
+ 'hasconfigure': True,
+ 'hascoverage': False,
+ 'hasrelationships': False,
+ 'hasupdate': True,
+ 'home': 'https://trilinos.github.io/',
+ 'logoid': 1,
+ 'menu': { 'back': 'index.php?project=Trilinos&parentid=1323325',
+ 'current': '/build/0',
+ 'next': False,
+ 'previous': False},
+ 'newissueurl': False,
+ 'nextdate': '2023-12-21',
+ 'nightlytime': '22:00 MST',
+ 'notes': [],
+ 'previousdate': '2023-12-19',
+ 'projectid': 1,
+ 'projectname': 'Trilinos',
+ 'projectname_encoded': 'Trilinos',
+ 'public': 1,
+ 'relationships_from': [],
+ 'relationships_to': [],
+ 'startdate': 'Tuesday, December 19 2023 22:00:00',
+ 'test': { 'nerrors': 0,
+ 'nfailed': 0,
+ 'nnotrun': 0,
+ 'npassed': 178,
+ 'nwarnings': 0},
+ 'title': 'CDash : Trilinos',
+ 'unixtimestamp': 1703048400,
+ 'update': { 'command': '',
+ 'endtime': '2023-12-20T15:48:14 MST',
+ 'nerrors': 0,
+ 'nupdates': 0,
+ 'nwarnings': 0,
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'type': 'GIT'},
+ 'user': {'id': None},
+ 'vcs': 'https://github.com/trilinos/Trilinos/',
+ 'version': 'v3.1.0'}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/build_summary_cache/testname2_buildname2/3 b/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/build_summary_cache/testname2_buildname2/3
new file mode 100644
index 000000000..b95f27937
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/build_summary_cache/testname2_buildname2/3
@@ -0,0 +1,97 @@
+{ 'bugtracker': 'GitHub',
+ 'build': { 'command': 'build command',
+ 'compilername': '',
+ 'compilerversion': '',
+ 'endtime': '2023-12-20T16:59:05 MST',
+ 'error': 0,
+ 'errors': [],
+ 'generator': 'ctest-3.24.3',
+ 'id': 1323424,
+ 'lastsubmitbuild': 0,
+ 'lastsubmitdate': 0,
+ 'name': 'PR-12620-test-rhel7_sems-gnu-8.3.0-openmpi-1.10.1-serial_debug_shared_no-kokkos-arch_no-asan_no-complex_no-fpic_mpi_no-pt_no-rdc_no-uvm_deprecated-on_no-package-enables-1957',
+ 'nerrors': 0,
+ 'note': 0,
+ 'nwarnings': 0,
+ 'osname': 'Linux',
+ 'osplatform': 'x86_64',
+ 'osrelease': '3.10.0-1062.1.2.el7.x86_64',
+ 'osversion': '#1 SMP Mon Sep 16 14:19:51 EDT 2019',
+ 'site': 'site1',
+ 'siteid': 49,
+ 'sitename_encoded': 'site1',
+ 'stamp': '20231220-2248-Pull Request',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'time': '2023-12-20T15:48:14 MST',
+ 'type': 'Pull Request',
+ 'warnings': []},
+ 'configure': { 'command': 'configure command here',
+ 'endtime': '2023-12-20T15:50:06 MST',
+ 'nerrors': 0,
+ 'nwarnings': 0,
+ 'output': 'loading initial cache file \n'
+ 'Trilinos repos versions:\n'
+ '--------------------------------------------------------------------------------\n'
+ '*** Base Git Repo: Trilinos\n'
+ 'dc6cb45 [Thu Dec 21 07:49:49 2023 -0700] '
+ '\n'
+ 'Merge commit '
+ "'71d07d7370583c071c3e0fa98cb00b4794be6cb2' into "
+ 'develop\n'
+ ' *** Parent 1:\n'
+ ' bs3_p1 [Mon Jan 15 22:26:29 2024 -0700] \n'
+ ' Cleaned up git log and cmake command argument formatting (#597)\n'
+ ' *** Parent 2:\n'
+ ' bs3_p2 [Wed Jan 17 12:33:03 2024 -0700] \n'
+ ' Cleaned up empty lines (#597)\n'
+ ' '
+ '--------------------------------------------------------------------------------\n'
+ '\n'
+ '\n',
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'status': 0},
+ 'currentdate': '2024-01-23',
+ 'date': '2023-12-20',
+ 'datetime': 'Tuesday, January 23 2024 16:00:15',
+ 'documentation': 'https://trilinos.github.io/documentation.html',
+ 'generationtime': 0.05,
+ 'googletracker': '',
+ 'hasconfigure': True,
+ 'hascoverage': False,
+ 'hasrelationships': False,
+ 'hasupdate': True,
+ 'home': 'https://trilinos.github.io/',
+ 'logoid': 1,
+ 'menu': { 'back': 'index.php?project=Trilinos&parentid=1323325',
+ 'current': '/build/0',
+ 'next': False,
+ 'previous': False},
+ 'newissueurl': False,
+ 'nextdate': '2023-12-21',
+ 'nightlytime': '22:00 MST',
+ 'notes': [],
+ 'previousdate': '2023-12-19',
+ 'projectid': 1,
+ 'projectname': 'Trilinos',
+ 'projectname_encoded': 'Trilinos',
+ 'public': 1,
+ 'relationships_from': [],
+ 'relationships_to': [],
+ 'startdate': 'Tuesday, December 19 2023 22:00:00',
+ 'test': { 'nerrors': 0,
+ 'nfailed': 0,
+ 'nnotrun': 0,
+ 'npassed': 178,
+ 'nwarnings': 0},
+ 'title': 'CDash : Trilinos',
+ 'unixtimestamp': 1703048400,
+ 'update': { 'command': '',
+ 'endtime': '2023-12-20T15:48:14 MST',
+ 'nerrors': 0,
+ 'nupdates': 0,
+ 'nwarnings': 0,
+ 'starttime': '2023-12-20T15:48:14 MST',
+ 'type': 'GIT'},
+ 'user': {'id': None},
+ 'vcs': 'https://github.com/trilinos/Trilinos/',
+ 'version': 'v3.1.0'}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/initialCDashNonPassingTests_2018-10-26_2018-10-28.json b/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/initialCDashNonPassingTests_2018-10-26_2018-10-28.json
new file mode 100644
index 000000000..e8eeac36b
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/initialCDashNonPassingTests_2018-10-26_2018-10-28.json
@@ -0,0 +1,89 @@
+{ u'bugtracker': u'https://github.com/trilinos/Trilinos/issues',
+ u'builds': [ { u'buildName': u'buildname1',
+ u'buildSummaryLink': u'buildSummary.php?buildid=1323424',
+ u'buildstarttime': u'2018-10-28T05:56:22 UTC',
+ u'details': u'Completed (Failed)\n',
+ u'nprocs': 4,
+ u'prettyProcTime': u'42s 880ms',
+ u'prettyTime': u'10s 720ms',
+ u'procTime': 42.88,
+ u'site': u'mutrino',
+ u'siteLink': u'viewSite.php?siteid=223',
+ u'status': u'Failed',
+ u'statusclass': u'error',
+ u'testDetailsLink': u'testDetails.php?test=57860629&build=1323424',
+ u'testname': u'testname1',
+ u'time': 10.72},
+ { u'buildName': u'buildname2',
+ u'buildSummaryLink': u'buildSummary.php?buildid=1323424',
+ u'buildstarttime': u'2018-10-26T05:56:22 UTC',
+ u'details': u'Completed (Failed)\n',
+ u'nprocs': 4,
+ u'prettyProcTime': u'42s 880ms',
+ u'prettyTime': u'10s 720ms',
+ u'procTime': 42.88,
+ u'site': u'mutrino',
+ u'siteLink': u'viewSite.php?siteid=223',
+ u'status': u'Failed',
+ u'statusclass': u'error',
+ u'testDetailsLink': u'testDetails.php?test=57860629&build=1323424',
+ u'testname': u'testname2',
+ u'time': 10.72}],
+ u'date': u'2018-10-28',
+ u'datetime': u'Wednesday, October 31 2018 19:42:20',
+ u'documentation': u'http://trilinos.org',
+ u'feed_enabled': False,
+ u'filterdata': { u'colorblind': 0,
+ u'debug': 0,
+ u'filtercombine': u'and',
+ u'filters': [ { u'compare': 61,
+ u'field': u'groupname',
+ u'value': u'Specialized'},
+ { u'compare': 65,
+ u'field': u'buildname',
+ u'value': u'Trilinos-atdm-'},
+ { u'compare': 62,
+ u'field': u'buildname',
+ u'value': u'Trilinos-atdm-cee-rhel6-gnu-7.2.0-opt-serial'},
+ { u'compare': 62,
+ u'field': u'buildname',
+ u'value': u'Trilinos-atdm-white-ride-cuda-9.2-debug-pt'},
+ { u'compare': 62,
+ u'field': u'site',
+ u'value': u'ride'},
+ { u'compare': 62,
+ u'field': u'status',
+ u'value': u'passed'}],
+ u'hasdateclause': 0,
+ u'limit': 0,
+ u'pageId': u'queryTests.php',
+ u'pageSpecificFilters': { u'TextConcat': u"GROUP_CONCAT(text SEPARATOR ', ')"},
+ u'showfilters': 1,
+ u'showlimit': 1,
+ u'sql': u"AND (bg.name = 'Specialized' AND b.name LIKE 'Trilinos-atdm-%' AND b.name != 'Trilinos-atdm-cee-rhel6-gnu-7.2.0-opt-serial' AND b.name != 'Trilinos-atdm-white-ride-cuda-9.2-debug-pt' AND site.name != 'ride' AND build2test.status != 'passed')"},
+ u'filterurl': u'',
+ u'footer': u'views/partials/footer.html',
+ u'generationtime': 0.969,
+ u'googletracker': u'',
+ u'hasprocessors': True,
+ u'header': u'views/partials/header.html',
+ u'home': u'http://trilinos.org',
+ u'logoid': 1,
+ u'menu': { u'back': u'index.php?project=Trilinos&date=2018-10-28',
+ u'current': u'queryTests.php?project=Trilinos&limit=0',
+ u'next': u'queryTests.php?project=Trilinos&date=2018-10-29&limit=0',
+ u'previous': u'queryTests.php?project=Trilinos&date=2018-10-27&limit=0'},
+ u'nextdate': u'2018-10-29',
+ u'previousdate': u'2018-10-27',
+ u'project': { u'showtesttime': 0},
+ u'projectid': 1,
+ u'projectname': u'Trilinos',
+ u'projectname_encoded': u'Trilinos',
+ u'public': 1,
+ u'showcalendar': 1,
+ u'startdate': u'Sunday, October 28 2018 04:01:00',
+ u'title': u'CDash : Trilinos',
+ u'unixtimestamp': 1540699260,
+ u'user': { u'id': 0},
+ u'vcs': u'http://github.com/trilinos/Trilinos',
+ u'version': None}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/test_history_cache/testname1_buildname1.json b/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/test_history_cache/testname1_buildname1.json
new file mode 100644
index 000000000..7b2cd50a5
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/test_history_cache/testname1_buildname1.json
@@ -0,0 +1,92 @@
+{ u'bugtracker': u'https://github.com/trilinos/Trilinos/issues',
+ u'builds': [ { u'buildName': u'build1',
+ u'buildSummaryLink': u'build/1',
+ u'buildstarttime': u'2018-10-28T05:56:22 UTC',
+ u'details': u'Completed (Failed)\n',
+ u'nprocs': 4,
+ u'prettyProcTime': u'42s 880ms',
+ u'prettyTime': u'10s 720ms',
+ u'procTime': 42.88,
+ u'site': u'mutrino',
+ u'siteLink': u'viewSite.php?siteid=223',
+ u'status': u'Passed',
+ u'statusclass': u'error',
+ u'testDetailsLink': u'testDetails.php?test=57860629&build=1',
+ u'testname': u'testname1',
+ u'time': 10.72
+ },
+ { u'buildName': u'build1',
+ u'buildSummaryLink': u'build/2',
+ u'buildstarttime': u'2018-10-28T05:56:22 UTC',
+ u'details': u'Completed (Failed)\n',
+ u'nprocs': 4,
+ u'prettyProcTime': u'42s 880ms',
+ u'prettyTime': u'10s 720ms',
+ u'procTime': 42.88,
+ u'site': u'mutrino',
+ u'siteLink': u'viewSite.php?siteid=223',
+ u'status': u'Failed',
+ u'statusclass': u'error',
+ u'testDetailsLink': u'testDetails.php?test=57860629&build=2',
+ u'testname': u'testname1',
+ u'time': 10.72
+ }
+ ],
+ u'date': u'2018-10-28',
+ u'datetime': u'Wednesday, October 31 2018 19:42:20',
+ u'documentation': u'http://trilinos.org',
+ u'feed_enabled': False,
+ u'filterdata': { u'colorblind': 0,
+ u'debug': 0,
+ u'filtercombine': u'and',
+ u'filters': [ { u'compare': 61,
+ u'field': u'groupname',
+ u'value': u'Specialized'},
+ { u'compare': 65,
+ u'field': u'buildname',
+ u'value': u'Trilinos-atdm-'},
+ { u'compare': 62,
+ u'field': u'buildname',
+ u'value': u'Trilinos-atdm-cee-rhel6-gnu-7.2.0-opt-serial'},
+ { u'compare': 62,
+ u'field': u'buildname',
+ u'value': u'Trilinos-atdm-white-ride-cuda-9.2-debug-pt'},
+ { u'compare': 62,
+ u'field': u'site',
+ u'value': u'ride'},
+ { u'compare': 62,
+ u'field': u'status',
+ u'value': u'passed'}],
+ u'hasdateclause': 0,
+ u'limit': 0,
+ u'pageId': u'queryTests.php',
+ u'pageSpecificFilters': { u'TextConcat': u"GROUP_CONCAT(text SEPARATOR ', ')"},
+ u'showfilters': 1,
+ u'showlimit': 1,
+ u'sql': u"AND (bg.name = 'Specialized' AND b.name LIKE 'Trilinos-atdm-%' AND b.name != 'Trilinos-atdm-cee-rhel6-gnu-7.2.0-opt-serial' AND b.name != 'Trilinos-atdm-white-ride-cuda-9.2-debug-pt' AND site.name != 'ride' AND build2test.status != 'passed')"},
+ u'filterurl': u'',
+ u'footer': u'views/partials/footer.html',
+ u'generationtime': 0.969,
+ u'googletracker': u'',
+ u'hasprocessors': True,
+ u'header': u'views/partials/header.html',
+ u'home': u'http://trilinos.org',
+ u'logoid': 1,
+ u'menu': { u'back': u'index.php?project=Trilinos&date=2018-10-28',
+ u'current': u'queryTests.php?project=Trilinos&limit=0',
+ u'next': u'queryTests.php?project=Trilinos&date=2018-10-29&limit=0',
+ u'previous': u'queryTests.php?project=Trilinos&date=2018-10-27&limit=0'},
+ u'nextdate': u'2018-10-29',
+ u'previousdate': u'2018-10-27',
+ u'project': { u'showtesttime': 0},
+ u'projectid': 1,
+ u'projectname': u'Trilinos',
+ u'projectname_encoded': u'Trilinos',
+ u'public': 1,
+ u'showcalendar': 1,
+ u'startdate': u'Sunday, October 28 2018 04:01:00',
+ u'title': u'CDash : Trilinos',
+ u'unixtimestamp': 1540699260,
+ u'user': { u'id': 0},
+ u'vcs': u'http://github.com/trilinos/Trilinos',
+ u'version': None}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/test_history_cache/testname2_buildname2.json b/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/test_history_cache/testname2_buildname2.json
new file mode 100644
index 000000000..25a33686d
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures/rft_1_ift_2/test_queries_cache/test_history_cache/testname2_buildname2.json
@@ -0,0 +1,108 @@
+{ u'bugtracker': u'https://github.com/trilinos/Trilinos/issues',
+ u'builds': [ { u'buildName': u'build2',
+ u'buildSummaryLink': u'build/1',
+ u'buildstarttime': u'2018-10-26T05:56:22 UTC',
+ u'details': u'Completed\n',
+ u'nprocs': 4,
+ u'prettyProcTime': u'42s 880ms',
+ u'prettyTime': u'10s 720ms',
+ u'procTime': 42.88,
+ u'site': u'mutrino',
+ u'siteLink': u'viewSite.php?siteid=223',
+ u'status': u'Passed',
+ u'statusclass': u'error',
+ u'testDetailsLink': u'testDetails.php?test=57860629&build=1',
+ u'testname': u'testname2',
+ u'time': 10.72
+ },
+ { u'buildName': u'build2',
+ u'buildSummaryLink': u'build/2',
+ u'buildstarttime': u'2018-10-26T05:56:22 UTC',
+ u'details': u'Completed (Failed)\n',
+ u'nprocs': 4,
+ u'prettyProcTime': u'42s 880ms',
+ u'prettyTime': u'10s 720ms',
+ u'procTime': 42.88,
+ u'site': u'mutrino',
+ u'siteLink': u'viewSite.php?siteid=223',
+ u'status': u'Failed',
+ u'statusclass': u'error',
+ u'testDetailsLink': u'testDetails.php?test=57860629&build=2',
+ u'testname': u'testname2',
+ u'time': 10.72
+ },
+ { u'buildName': u'build2',
+ u'buildSummaryLink': u'build/3',
+ u'buildstarttime': u'2018-10-26T05:56:22 UTC',
+ u'details': u'Completed (Failed)\n',
+ u'nprocs': 4,
+ u'prettyProcTime': u'42s 880ms',
+ u'prettyTime': u'10s 720ms',
+ u'procTime': 42.88,
+ u'site': u'mutrino',
+ u'siteLink': u'viewSite.php?siteid=223',
+ u'status': u'Failed',
+ u'statusclass': u'error',
+ u'testDetailsLink': u'testDetails.php?test=57860629&build=3',
+ u'testname': u'testname2',
+ u'time': 10.72
+ }
+ ],
+ u'date': u'2018-10-26',
+ u'datetime': u'Wednesday, October 31 2018 19:42:20',
+ u'documentation': u'http://trilinos.org',
+ u'feed_enabled': False,
+ u'filterdata': { u'colorblind': 0,
+ u'debug': 0,
+ u'filtercombine': u'and',
+ u'filters': [ { u'compare': 61,
+ u'field': u'groupname',
+ u'value': u'Specialized'},
+ { u'compare': 65,
+ u'field': u'buildname',
+ u'value': u'Trilinos-atdm-'},
+ { u'compare': 62,
+ u'field': u'buildname',
+ u'value': u'Trilinos-atdm-cee-rhel6-gnu-7.2.0-opt-serial'},
+ { u'compare': 62,
+ u'field': u'buildname',
+ u'value': u'Trilinos-atdm-white-ride-cuda-9.2-debug-pt'},
+ { u'compare': 62,
+ u'field': u'site',
+ u'value': u'ride'},
+ { u'compare': 62,
+ u'field': u'status',
+ u'value': u'passed'}],
+ u'hasdateclause': 0,
+ u'limit': 0,
+ u'pageId': u'queryTests.php',
+ u'pageSpecificFilters': { u'TextConcat': u"GROUP_CONCAT(text SEPARATOR ', ')"},
+ u'showfilters': 1,
+ u'showlimit': 1,
+ u'sql': u"AND (bg.name = 'Specialized' AND b.name LIKE 'Trilinos-atdm-%' AND b.name != 'Trilinos-atdm-cee-rhel6-gnu-7.2.0-opt-serial' AND b.name != 'Trilinos-atdm-white-ride-cuda-9.2-debug-pt' AND site.name != 'ride' AND build2test.status != 'passed')"},
+ u'filterurl': u'',
+ u'footer': u'views/partials/footer.html',
+ u'generationtime': 0.969,
+ u'googletracker': u'',
+ u'hasprocessors': True,
+ u'header': u'views/partials/header.html',
+ u'home': u'http://trilinos.org',
+ u'logoid': 1,
+ u'menu': { u'back': u'index.php?project=Trilinos&date=2018-10-28',
+ u'current': u'queryTests.php?project=Trilinos&limit=0',
+ u'next': u'queryTests.php?project=Trilinos&date=2018-10-29&limit=0',
+ u'previous': u'queryTests.php?project=Trilinos&date=2018-10-27&limit=0'},
+ u'nextdate': u'2018-10-29',
+ u'previousdate': u'2018-10-27',
+ u'project': { u'showtesttime': 0},
+ u'projectid': 1,
+ u'projectname': u'Trilinos',
+ u'projectname_encoded': u'Trilinos',
+ u'public': 1,
+ u'showcalendar': 1,
+ u'startdate': u'Sunday, October 28 2018 04:01:00',
+ u'title': u'CDash : Trilinos',
+ u'unixtimestamp': 1540699260,
+ u'user': { u'id': 0},
+ u'vcs': u'http://github.com/trilinos/Trilinos',
+ u'version': None}
diff --git a/test/ci_support/cdash_analyze_and_report_random_failures_UnitTests.py b/test/ci_support/cdash_analyze_and_report_random_failures_UnitTests.py
new file mode 100644
index 000000000..1bff74833
--- /dev/null
+++ b/test/ci_support/cdash_analyze_and_report_random_failures_UnitTests.py
@@ -0,0 +1,269 @@
+# @HEADER
+# ************************************************************************
+#
+# TriBTS: Tribal Build, Integrate, and Test System
+# Copyright 2013 Sandia Corporation
+#
+# Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
+# the U.S. Government retains certain rights in this software.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the Corporation nor the names of the
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# ************************************************************************
+# @HEADER
+
+import os
+import shutil
+import unittest
+import stat
+import tempfile
+
+from FindCISupportDir import *
+import CDashQueryAnalyzeReport as CDQAR
+from CDashQueryAnalyzeReportUnitTestHelpers import *
+
+# Base test directory in the build tree
+g_baseTestDir = "cdash_analyze_and_report_random_failures"
+
+
+def cdash_analyze_and_report_random_failures_setup_test_dir(testCaseName):
+ testInputDir = testCiSupportDir + "/" + g_baseTestDir + "/" + testCaseName
+ testOutputDir = os.getcwd()
+ for f in os.listdir(testInputDir):
+ thing = os.path.join(testInputDir, f)
+ if os.path.isdir(thing):
+ shutil.copytree(thing, os.path.join(testOutputDir, f))
+ else:
+ shutil.copy(thing, testOutputDir)
+ return testOutputDir
+
+
+def remove_dirs(dirname):
+ walk_gen = os.walk(dirname, topdown=False)
+ for dirpath, dirnames, filenames in walk_gen:
+ os.chmod(dirpath, stat.S_IRWXU)
+ shutil.rmtree(dirname)
+
+
+def create_file(fpath, perms=0o600, content=""):
+ path = os.path.split(fpath)[0]
+ if path and not path == "." and not os.path.isdir(path):
+ os.makedirs(path)
+ with open(fpath, "w+") as fptr:
+ fptr.write(content)
+ os.chmod(fpath, perms)
+ return os.path.abspath(fpath)
+
+
+class TemporaryDirectory(object):
+ def __init__(self, **kwargs):
+ self.orig_dir = os.getcwd()
+ self.name = tempfile.mkdtemp(
+ suffix=kwargs.get("suffix", ""),
+ prefix=kwargs.get("prefix", "tmp"),
+ dir=kwargs.get("dir", None),
+ )
+
+ def remove(self):
+ os.chdir(self.orig_dir)
+ if os.path.exists(self.name):
+ remove_dirs(self.name)
+
+ def __enter__(self):
+ os.chdir(self.name)
+ return self
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ self.remove()
+
+
+#############################################################################
+#
+# System-level tests for cdash_analyze_and_report_random_failures.py
+#
+#############################################################################
+
+
+class test_cdash_analyze_and_report_random_failures(unittest.TestCase):
+ def cdash_analyze_and_report_random_failures_run_case(
+ self,
+ expectedRtnCode,
+ stdoutRegexList,
+ htmlFileRegexList,
+ extraCmndLineOptionsList=None,
+ verbose=False,
+ debugPrint=False,
+ ):
+ if not extraCmndLineOptionsList:
+ extraCmndLineOptionsList = []
+
+ htmlFileName = "htmlFile.html"
+ htmlFileAbsPath = os.getcwd()+"/"+htmlFileName
+
+ cmnd = (
+ testCiSupportDir
+ + "/example_cdash_analyze_and_report_random_failures.py"
+ + " --cdash-project-name='Project Name'"
+ + " --cdash-testing-day-start-time='00:00'"
+ + " --group-name='Group Name'"
+ + " --initial-nonpassing-test-filters='initial_nonpassing_test_filters'"
+ + " --cdash-site-url='https://something.com/cdash'"
+ + " --reference-date=2018-10-28"
+ + " --write-email-to-file="+htmlFileName
+ + " "
+ + " ".join(extraCmndLineOptionsList)
+ )
+
+ stdoutFile = "stdout.out"
+ stdoutFileAbsPath = os.getcwd() + "/" + stdoutFile
+ rtnCode = CDQAR.echoRunSysCmnd(
+ cmnd, throwExcept=False, outFile=stdoutFile, verbose=verbose
+ )
+
+ stdout = ""
+ try:
+ with open(stdoutFile, "r") as inf:
+ stdout = inf.read()
+ except Exception:
+ print("WARNING: No stdout available from this test")
+
+ # UNCOMMENT THIS TO SEE OUTPUT FROM THE SCRIPT (Can use the test to help develop)
+ # print(stdout)
+
+ self.assertEqual(rtnCode, expectedRtnCode, "Failed with stdout: " + stdout)
+
+ # Grep stdout for expected list of strings
+ assertListOfRegexsFoundInListOfStrs(self, stdoutRegexList,
+ stdout.splitlines(), stdoutFileAbsPath, debugPrint=debugPrint)
+
+ # Grep written HTML file for expected strings
+ try:
+ with open(htmlFileName, 'r') as htmlFile:
+ htmlFileStrList = htmlFile.read().split("\n")
+ except Exception:
+ print("WARNING: HTML file not available for this test: "+htmlFileAbsPath)
+
+ assertListOfRegexsFoundInListOfStrs(self, htmlFileRegexList,
+ htmlFileStrList, htmlFileAbsPath, debugPrint=debugPrint)
+
+
+ def setUp(self):
+ self.test_dir = TemporaryDirectory()
+ os.chdir(self.test_dir.name)
+
+ def tearDown(self):
+ self.test_dir.remove()
+
+
+ # Test the random failure case starting from two initial failing tests (ift)
+ # in which one of the initial failing test contains a history of two tests
+ # with the same sha1 pair, but one is a passing case and the other nonpassing.
+ #
+ def test_random_failure(self):
+
+ testCaseName = "rft_1_ift_2"
+ cdash_analyze_and_report_random_failures_setup_test_dir(testCaseName)
+
+ self.cdash_analyze_and_report_random_failures_run_case(
+ expectedRtnCode=0,
+ stdoutRegexList=[
+ "[*][*][*] CDash random failure analysis for Project Name Group Name from 2018-10-26 to 2018-10-28",
+ "Total number of initial failing tests: 2",
+
+ "Found random failing tests: 1",
+ "Test name: testname1",
+ "Build name: build1",
+ "Identical sha1 pairs: \(\'592ea0d5\', \'b07e361c\'\)",
+ "Test history browser URL:",
+ " https://something[.]com/cdash/queryTests[.]php[?]project=Project%20Name&begin=2018-10-26&end=2018-10-28&filtercount=3&showfilters=1&filtercombine=and&field1=testname&compare1=63&value1=testname1&field2=groupname&compare2=63&value2=Group%20Name&field3=buildname&compare3=63&value3=buildname1",
+
+ "FAILED \(rft=1, ift=2\): Project Name Group Name on 2018-10-26 to 2018-10-28"
+ ],
+ htmlFileRegexList=[
+ "FAILED \(rft=1, ift=2\): Project Name Group Name on 2018-10-26 to 2018-10-28
",
+
+ "Random test failure scan results for Project Name from 2018-10-26 to 2018-10-28
",
+
+ "",
+ "Nonpassing tests scanned on CDash=2
",
+ "
",
+ "Found random failing tests: 1
",
+ "
Build name: build1",
+ "
Test name: testname1",
+ "
Test history URL: https://something[.]com/cdash/queryTests[.]php[?]project=Project%20Name&begin=2018-10-26&end=2018-10-28&filtercount=3&showfilters=1&filtercombine=and&field1=testname&compare1=63&value1=testname1&field2=groupname&compare2=63&value2=Group%20Name&field3=buildname&compare3=63&value3=buildname1",
+ "
Sha1 Pair : \('592ea0d5', 'b07e361c'\)",
+ "
"
+ ],
+ extraCmndLineOptionsList=[
+ "--days-of-history=3"
+ ]
+ )
+
+
+ # Test to no random failure case starting from two initial failing tests (ift).
+ # Each ift has a test history containing multiple tests with passing and nonpassing results,
+ # but non share the same sha1 pair.
+ #
+ def test_no_random_failure(self):
+
+ testCaseName = "rft_0_ift_2"
+ cdash_analyze_and_report_random_failures_setup_test_dir(testCaseName)
+
+ self.cdash_analyze_and_report_random_failures_run_case(
+ expectedRtnCode=0,
+ stdoutRegexList=[
+ "[*][*][*] CDash random failure analysis for Project Name Group Name from 2018-10-26 to 2018-10-28",
+ "Total number of initial failing tests: 2",
+
+ "Found random failing tests: 0",
+
+ "PASSED \(rft=0, ift=2\): Project Name Group Name on 2018-10-26 to 2018-10-28"
+ ],
+ htmlFileRegexList=[
+ "PASSED \(rft=0, ift=2\): Project Name Group Name on 2018-10-26 to 2018-10-28
",
+
+ "Random test failure scan results for Project Name from 2018-10-26 to 2018-10-28
",
+
+ "",
+ "Nonpassing tests scanned on CDash=2
",
+ "
",
+
+ "",
+ "Found random failing tests: 0
",
+ "
"
+ ],
+ extraCmndLineOptionsList=[
+ "--days-of-history=3"
+ ]
+ )
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/test/ci_support/example_cdash_analyze_and_report_random_failures.py b/test/ci_support/example_cdash_analyze_and_report_random_failures.py
new file mode 100755
index 000000000..6c93f5dd0
--- /dev/null
+++ b/test/ci_support/example_cdash_analyze_and_report_random_failures.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+
+import sys
+import argparse
+import re as regex
+
+from FindCISupportDir import *
+import CDashAnalyzeReportRandomFailures as CDARRF
+
+
+usageHelp = \
+r"""
+Example usageHelp string
+"""
+
+
+def main():
+
+ cdashAnalyzeAndReportRandomFailures = \
+ CDARRF.CDashAnalyzeReportRandomFailuresDriver(
+ ExampleVersionInfoStrategy(),
+ ExampleExtractBuildNameStrategy(),
+ usageHelp=usageHelp)
+
+ cdashAnalyzeAndReportRandomFailures.runDriver()
+
+
+class ExampleVersionInfoStrategy:
+
+ def getTargetTopicSha1s(self, buildData):
+ pattern = r"Parent [12]:\n\s+(\w+)"
+ matchedList = regex.findall(pattern, buildData)
+
+ if len(matchedList) != 2: return None
+ return tuple(matchedList)
+
+ def checkTargetTopicRandomFailure(self, targetTopicPair, knownTargetTopicPairs):
+ return targetTopicPair in knownTargetTopicPairs
+
+
+class ExampleExtractBuildNameStrategy:
+
+ def getCoreBuildName(self, fullBuildName):
+ coreBuildName = fullBuildName.rsplit('-',1)[0]
+ return coreBuildName
+
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/tribits/ci_support/CDashAnalyzeReportRandomFailures.py b/tribits/ci_support/CDashAnalyzeReportRandomFailures.py
new file mode 100644
index 000000000..4973bec16
--- /dev/null
+++ b/tribits/ci_support/CDashAnalyzeReportRandomFailures.py
@@ -0,0 +1,339 @@
+
+import os
+import argparse
+import datetime
+
+from FindGeneralScriptSupport import *
+import CDashQueryAnalyzeReport as CDQAR
+import cdash_build_testing_date as CBTD
+
+
+class CDashAnalyzeReportRandomFailuresDriver:
+
+ def __init__(self, versionInfoStrategy, extractBuildNameStrategy,
+ usageHelp=""):
+ self.versionInfoStrategy = versionInfoStrategy
+ self.extractBuildNameStrategy = extractBuildNameStrategy
+ self.args = None
+ self.usageHelp = usageHelp
+
+ def runDriver(self):
+
+ self.getCmndLineArgs()
+
+ cdashProjectTestingDayStartTime = self.args.cdash_testing_day_start_time
+ cdashSiteUrl = self.args.cdash_site_url
+ cdashProjectName = self.args.cdash_project_name
+ initialNonpassingTestFilters = self.args.initial_nonpassing_test_filters
+ date = self.args.reference_date
+ groupName = self.args.group_name
+ daysOfHistory = self.args.days_of_history
+ printUrlMode = self.args.print_url_mode
+ writeEmailToFile = self.args.write_email_to_file
+ sendEmailFrom = self.args.send_email_from
+ sendEmailTo = self.args.send_email_to
+
+ randomFailureSummaries = []
+
+ # A.1) Set up date range and directories
+
+ # Construct date range for queryTests filter string
+ referenceDateDT = CDQAR.convertInputDateArgToYYYYMMDD(
+ cdashProjectTestingDayStartTime, date)
+ dateRangeStart, dateRangeEnd = self.getDateRangeTuple(referenceDateDT, daysOfHistory)
+ dateUrlField = "begin="+dateRangeStart+"&end="+dateRangeEnd
+ dateRangeStr = dateRangeStart+" to "+dateRangeEnd
+
+ testQueriesCacheDir = os.getcwd()+"/test_queries_cache"
+ testHistoryCacheDir = testQueriesCacheDir+"/test_history_cache"
+ createDirsFromPath(testQueriesCacheDir)
+ createDirsFromPath(testHistoryCacheDir)
+
+ # Construct queryTest.php filter for a date range
+ initialNonpassingTestQueryFilters = \
+ dateUrlField+"&"+initialNonpassingTestFilters
+
+ # A.2) Create starting email body and html string aggregation var
+
+ cdashReportData = CDQAR.CDashReportData()
+
+ cdashReportData.htmlEmailBodyTop += \
+ "Random test failure scan results for "+cdashProjectName\
+ +" from "+dateRangeStr+"
\n\n"
+
+
+ # B.1) Get all failing test result for past daysOfHistory
+
+ # Beginning of scanned details and links paragraph
+ cdashReportData.htmlEmailBodyTop +="\n"
+
+ print("\nGetting list of initial nonpassing tests from CDash from "+dateRangeStr)
+
+ initialNonpassingTestsQueryUrl = CDQAR.getCDashQueryTestsQueryUrl(
+ cdashSiteUrl, cdashProjectName, None, initialNonpassingTestQueryFilters)
+ initialNonpassingTestBrowserUrl = CDQAR.getCDashQueryTestsBrowserUrl(
+ cdashSiteUrl, cdashProjectName, None, initialNonpassingTestQueryFilters)
+
+ if printUrlMode == 'initial' or printUrlMode == 'all':
+ print("\nCDash nonpassing tests browser URL:\n\n"+\
+ " "+initialNonpassingTestBrowserUrl+"\n")
+ print("\nCDash nonpassing tests query URL:\n\n"+\
+ " "+initialNonpassingTestsQueryUrl+"\n")
+
+ initialNonpassingTestsQueryCacheFile = testQueriesCacheDir +\
+ "/initialCDashNonPassingTests_"+dateRangeStart+"_"+dateRangeEnd+".json"
+
+ # List of dictionaries containing the cdash results in rows
+ initialNonpassingTestsLOD = CDQAR.downloadTestsOffCDashQueryTestsAndFlatten(
+ initialNonpassingTestsQueryUrl, initialNonpassingTestsQueryCacheFile,\
+ alwaysUseCacheFileIfExists=True)
+
+ cdashReportData.htmlEmailBodyTop += \
+ "" +\
+ "Nonpassing tests scanned on CDash=" +\
+ str(len(initialNonpassingTestsLOD))+"
\n"
+
+ # Ending of scanned details and links paragraph
+ # and start of scanning summaries and table
+ cdashReportData.htmlEmailBodyTop +="
\n\n\n"
+
+ # B.2) Get each nonpassing test's testing history
+ for nonpassingTest in initialNonpassingTestsLOD:
+
+ # Remove unique jenkins run ID from build name
+ correctedBuildName = self.extractBuildNameStrategy.getCoreBuildName(nonpassingTest['buildName'])
+
+ testNameBuildName = nonpassingTest['testname']+"_"+nonpassingTest['buildName']
+ testNameBuildName = CDQAR.getCompressedFileNameIfTooLong(testNameBuildName)
+
+ print("\n Getting history from "+dateRangeStr+" for\n"+\
+ " Test name: "+nonpassingTest['testname']+"\n"+\
+ " Build name: "+correctedBuildName)
+
+ groupNameNormUrl, = CDQAR.normalizeUrlStrings(groupName)
+
+ testHistoryFilters = \
+ "filtercount=3&showfilters=1&filtercombine=and"+\
+ "&field1=testname&compare1=63&value1="+nonpassingTest['testname']+\
+ "&field2=groupname&compare2=63&value2="+groupNameNormUrl+\
+ "&field3=buildname&compare3=63&value3="+correctedBuildName
+
+ testHistoryQueryFilters = dateUrlField+"&"+testHistoryFilters
+
+ testHistoryCacheFile = testHistoryCacheDir+"/"+\
+ CDQAR.getCompressedFileNameIfTooLong(testNameBuildName+".json", ext=".json")
+
+ print("\n Creating file to write test history:\n "+testHistoryCacheFile)
+
+ testHistoryQueryUrl = CDQAR.getCDashQueryTestsQueryUrl(
+ cdashSiteUrl, cdashProjectName, None, testHistoryQueryFilters)
+ testHistoryBrowserUrl = CDQAR.getCDashQueryTestsBrowserUrl(
+ cdashSiteUrl, cdashProjectName, None, testHistoryQueryFilters)
+
+ testHistoryLOD = CDQAR.downloadTestsOffCDashQueryTestsAndFlatten(
+ testHistoryQueryUrl, testHistoryCacheFile, alwaysUseCacheFileIfExists=True)
+
+ print("\n Size of test history: "+str(len(testHistoryLOD)))
+
+ if printUrlMode == 'all':
+ print("\n CDash test history browser URL for "+nonpassingTest['testname']+" "+\
+ correctedBuildName+":\n\n"+" "+testHistoryBrowserUrl)
+ print("\n CDash test history query URL for "+nonpassingTest['testname']+" "+\
+ correctedBuildName+":\n\n"+" "+testHistoryQueryUrl)
+
+ if len(testHistoryLOD) < 2:
+ print("\n Size of test history too small for any comparisons, skipping ...\n")
+ continue
+
+ # B.3) Split full testing history to passed and nonpassed lists of dicts
+ passingTestHistoryLOD = [test for test in testHistoryLOD if test.get("status") == "Passed"]
+ nonpassingTestHistoryLOD = [test for test in testHistoryLOD if test.get("status") == "Failed"]
+ nonpassingSha1Pairs = set()
+
+ print("\n Num of passing tests in test history: "+str(len(passingTestHistoryLOD)))
+ print("\n Num of nonpassing tests in test history: "+str(len(nonpassingTestHistoryLOD)))
+
+ buildSummaryCacheDir = testQueriesCacheDir+"/build_summary_cache/"+testNameBuildName
+ createDirsFromPath(buildSummaryCacheDir)
+ # NOTE: There is an argument to be made that test histories should get their own directory
+ # instead of build summaries and that build summaries should live inside of there
+
+ # C.1) Get all nonpassing tests' sha1s into a set
+ for test in nonpassingTestHistoryLOD:
+
+ buildId = self.getBuildIdFromTest(test)
+
+ buildSummaryCacheFile = buildSummaryCacheDir+"/"+buildId
+ buildSummaryQueryUrl = CDQAR.getCDashBuildSummaryQueryUrl(cdashSiteUrl, buildId)
+ buildConfigOutput = self.downloadBuildSummaryOffCDash(
+ buildSummaryQueryUrl, buildSummaryCacheFile, verbose=printUrlMode =='all',
+ alwaysUseCacheFileIfExists=True)['configure']['output']
+
+ nonpassingSha1Pairs.add(
+ self.versionInfoStrategy.getTargetTopicSha1s(buildConfigOutput))
+
+ print("\n Test history failing sha1s: "+str(nonpassingSha1Pairs))
+
+ # C.2) Check if passing tests' sha1s exist in nonpassing sha1s set
+ for test in passingTestHistoryLOD:
+
+ buildId = self.getBuildIdFromTest(test)
+
+ buildSummaryCacheFile = buildSummaryCacheDir+"/"+buildId
+ buildSummaryQueryUrl = CDQAR.getCDashBuildSummaryQueryUrl(cdashSiteUrl, buildId)
+ buildConfigOutput = self.downloadBuildSummaryOffCDash(
+ buildSummaryQueryUrl, buildSummaryCacheFile, verbose=printUrlMode =='all',
+ alwaysUseCacheFileIfExists=True)['configure']['output']
+
+ passingSha1Pair = \
+ self.versionInfoStrategy.getTargetTopicSha1s(buildConfigOutput)
+
+ if self.versionInfoStrategy.checkTargetTopicRandomFailure(passingSha1Pair, nonpassingSha1Pairs):
+ print("\n Found passing sha1 pair, " + str(passingSha1Pair)+\
+ " in set of nonpassing sha1 pairs: \n"+str(nonpassingSha1Pairs))
+
+ randomFailureSummaries.append(
+ RandomFailureSummary(test['buildName'], test['testname'],
+ testHistoryBrowserUrl, passingSha1Pair))
+
+
+ print("\n*** CDash random failure analysis for " +\
+ cdashProjectName+" "+groupName+" from " +dateRangeStr)
+
+ print("Total number of initial failing tests: "+str(len(initialNonpassingTestsLOD))+"\n")
+
+ print("Found random failing tests: "+str(len(randomFailureSummaries))+"\n")
+
+ cdashReportData.htmlEmailBodyTop += \
+ "Found random failing tests: "+str(len(randomFailureSummaries))+"
\n"
+
+ if len(randomFailureSummaries) > 0:
+ cdashReportData.globalPass = False
+
+ # Add number of random failing tests 'rft' found to summary data list
+ cdashReportData.summaryLineDataNumbersList.append(
+ "rft="+str(len(randomFailureSummaries)))
+
+ # Add number of initial failing tests 'ift' scanned to summary
+ # data list
+ cdashReportData.summaryLineDataNumbersList.append(
+ "ift="+str(len(initialNonpassingTestsLOD)))
+
+ for summary in randomFailureSummaries:
+ print(str(summary))
+ summary.singleSummaryReporter(cdashReportData)
+
+ summaryLine = CDQAR.getOverallCDashReportSummaryLine(
+ cdashReportData, cdashProjectName+" "+groupName, dateRangeStr)
+ print("\n"+summaryLine)
+
+ # Finish HTML body paragraph
+ cdashReportData.htmlEmailBodyTop += "\n
"
+
+ defaultPageStyle = CDQAR.getDefaultHtmlPageStyleStr()
+
+ if writeEmailToFile:
+ print("\nWriting HTML to file: "+writeEmailToFile+" ...")
+ htmlStr = CDQAR.getFullCDashHtmlReportPageStr(cdashReportData,
+ pageTitle=summaryLine, pageStyle=defaultPageStyle)
+ # print(htmlStr)
+ with open(writeEmailToFile, 'w') as outFile:
+ outFile.write(htmlStr)
+
+ if sendEmailTo:
+ htmlStr = CDQAR.getFullCDashHtmlReportPageStr(cdashReportData,
+ pageStyle=defaultPageStyle)
+ for emailAddress in sendEmailTo.split(','):
+ emailAddress = emailAddress.strip()
+ print("\nSending email to '"+emailAddress+"' ...")
+ msg=CDQAR.createHtmlMimeEmail(
+ sendEmailFrom, emailAddress, summaryLine, "", htmlStr)
+ CDQAR.sendMineEmail(msg)
+
+ def getCmndLineArgs(self):
+ parser = argparse.ArgumentParser(description=self.usageHelp)
+
+ parser.add_argument("--cdash-site-url", default="", required=True,
+ help="Base CDash site (e.g. 'https://testing.sandia.gov/cdash')."+\
+ " [REQUIRED]")
+ parser.add_argument("--cdash-project-name", default="", required=True,
+ help="CDash project name (e.g. TriBITS)."+\
+ " [REQUIRED]")
+ parser.add_argument("--initial-nonpassing-test-filters", default="", required=True,
+ help="Partial URL fragment containing CDash filters for the initial set"+\
+ " of nonpassing tests (e.g. 'filtercount=2&showfilters=1&filtercombine=and&field1=status&compare1=63&"+\
+ "value1=Failed&field2=groupname&compare2=63&value2=Pull%%20Request')."+\
+ " [REQUIRED]")
+ parser.add_argument("--group-name", default="", required=True,
+ help="Name of the build group index for filtering a set of test (e.g. 'Pull Request')."+\
+ " [REQUIRED]")
+ parser.add_argument("--cdash-testing-day-start-time", default="00:00",
+ help="CDash project's testing day start time in UTC format ':'."+\
+ " [default='00:00']")
+ parser.add_argument("--reference-date", default="yesterday",
+ help="Starting reference date for querying failing tests as or"+\
+ " special values 'today' or 'yesterday.'"+\
+ " [default='yesterday']")
+ parser.add_argument("--days-of-history", default=1, type=int,
+ help="Number of days of testing history to query starting from the reference and going"+\
+ " backwards in time."+\
+ " [default=1]")
+ parser.add_argument("--print-url-mode", choices=['none','initial','all'], default='none',
+ help="Mode of url printing."+\
+ " [default=none]")
+ parser.add_argument("--write-email-to-file", default="",
+ help="Name of file to write built email HTML to."+\
+ " [default='']")
+ parser.add_argument("--send-email-to", default="",
+ help="Target email address to send script summary results to."+\
+ " [default='']")
+ parser.add_argument("--send-email-from", default="random-failure-script@noreply.org",
+ help="Addressed sender of the script summary results email."+\
+ " [default='random-failure-script@noreply.org']")
+
+ self.args = parser.parse_args()
+
+ def getDateRangeTuple(self, referenceDateTime, dayTimeDelta):
+ beginDateTime = referenceDateTime - datetime.timedelta(days=(dayTimeDelta-1))
+ beginDateTimeStr = CBTD.getDateStrFromDateTime(beginDateTime)
+ endDateTimeStr = CBTD.getDateStrFromDateTime(referenceDateTime)
+ return (beginDateTimeStr, endDateTimeStr)
+
+ def getBuildIdFromTest(self, test):
+ return test['buildSummaryLink'].split("/")[-1]
+
+ def downloadBuildSummaryOffCDash(self,
+ cdashBuildSummaryQueryUrl, buildSummaryCacheFile=None,
+ useCachedCDashData=False, alwaysUseCacheFileIfExists=False,
+ verbose='False'
+ ):
+ verbose = verbose == 'all'
+ buildSummaryJson = CDQAR.getAndCacheCDashQueryDataOrReadFromCache(
+ cdashBuildSummaryQueryUrl, buildSummaryCacheFile, useCachedCDashData,
+ alwaysUseCacheFileIfExists, verbose)
+ return buildSummaryJson
+
+
+class RandomFailureSummary(object):
+
+ def __init__(self, buildName, testName, testHistoryUrl, sha1Pair):
+ self.buildName = buildName
+ self.testName = testName
+ self.testHistoryUrl = testHistoryUrl
+ self.sha1Pair = sha1Pair
+
+ def __str__(self):
+ myStr = "Test name: "+self.testName +\
+ "\nBuild name: "+self.buildName +\
+ "\nIdentical sha1 pairs: "+str(self.sha1Pair) +\
+ "\nTest history browser URL: " +\
+ "\n "+self.testHistoryUrl+"\n"
+ return myStr
+
+ def singleSummaryReporter(self, cdashReportData):
+ cdashReportData.htmlEmailBodyTop += \
+ "\n
Build name: "+ self.buildName +\
+ "\n
Test name: "+ self.testName +\
+ "\n
Test history URL: "+ self.testHistoryUrl +\
+ "\n
Sha1 Pair : "+ str(self.sha1Pair)
+
diff --git a/tribits/ci_support/CDashQueryAnalyzeReport.py b/tribits/ci_support/CDashQueryAnalyzeReport.py
index dc20a2f54..c5cc46b7e 100644
--- a/tribits/ci_support/CDashQueryAnalyzeReport.py
+++ b/tribits/ci_support/CDashQueryAnalyzeReport.py
@@ -762,6 +762,16 @@ def getCDashQueryTestsBrowserUrl(cdashUrl, projectName, date, filterFields):
return cdashUrl+"/queryTests.php?project="+projectName+dateArg+"&"+filterFields
+# Construct full cdash/api/v1/buildSummary.php query URL given the buildId
+def getCDashBuildSummaryQueryUrl(cdashUrl, buildId):
+ return cdashUrl+"/api/v1/buildSummary.php?buildid="+buildId
+
+
+# Construct full cdash/build browser URL given the buildId
+def getCDashBuildSummaryBrowserUrl(cdashUrl, buildId):
+ return cdashUrl+"/build/"+buildId
+
+
# Copy a key/value pair from one dict to another if it eixsts
def copyKeyDictIfExists(sourceDict_in, keyName_in, dict_inout):
value = sourceDict_in.get(keyName_in, None)