Coder Social home page Coder Social logo

kitware / cdash Goto Github PK

View Code? Open in Web Editor NEW
208.0 23.0 75.0 59.93 MB

An open source, web-based software testing server

Home Page: http://www.cdash.org/

License: Other

CMake 0.89% PHP 85.96% XSLT 2.00% HTML 3.12% Shell 0.10% C++ 0.03% Vue 5.32% Blade 2.36% Dockerfile 0.22%

cdash's Introduction

CDash

Build Status Packagist Version Packagist License

About CDash

CDash is an open source, web-based software testing server. CDash aggregates, analyzes and displays the results of software testing processes submitted from clients located around the world. Developers depend on CDash to convey the state of a software system, and to continually improve its quality. CDash is a part of a larger software process that integrates Kitware’s CMake, CTest, and CPack tools, as well as other external packages used to design, manage and maintain large-scale software systems. Good examples of a CDash are the CMake quality dashboard and the VTK quality dashboard.

Using CDash

The easiest way to start using CDash is to register an account and create a new project at https://my.cdash.org.

Installing CDash

If you'd prefer to install your own CDash server, please follow one of these guides:

Development

Your efforts to improve CDash are welcome and appreciated!

Browse our open issues if you'd like to help but you're not sure where to start.

For bigger changes, please begin by introducing yourself on our mailing list.

cdash's People

Contributors

betsymcphail avatar billhoffman avatar brianhelba avatar bryonbean avatar cpatrick avatar danlamanna avatar dependabot[bot] avatar dkuegler avatar dlrdave avatar jamiesnape avatar jcfr avatar josephsnyder avatar juraj67 avatar kislinsk avatar kylefromkitware avatar m-grabner avatar matthiasdiener avatar opadron avatar oyarzun avatar pcavezzan avatar rpshaw avatar sbelsk avatar seanm avatar sjoubert avatar skalessio avatar spitamatus avatar vgezer avatar williamjallen avatar zachmullen avatar zackgalbreath avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cdash's Issues

my.cdash.org is not accepting file uploads

http://my.cdash.org/index.php?project=Boost.AFIO is not showing files uploaded. The cdash error log shows this:

 Error reported on 2016-07-27 04:12:00 for build #1013318
(/data/www/CDashMy/xml_handlers/upload_handler.php:348 - endElement): UploadFile model - Failed to insert row associated with file: 'afio_v2_binaries_win64.tar.xz'

 Error reported on 2016-07-27 04:11:59 for build #1013318
(/data/www/CDashMy/models/uploadfile.php:50 - Insert): Filesize is not set

http://my.cdash.org/viewErrorLog.php?buildid=1013318&projectid=964&date=

To my best knowledge, I am not doing anything wrong. cmake doing the upload from appveyor is 3.5.2.

Insecure random number generators used throughout CDash

Random number generators from PHP that are insecurely seeded (often with the current timestamp) are used throughout the CDash codebase. Using random numbers in this way often has security implications.

The use of random number generators can be improved using the same solution applied in pull request #147. This uses the PHP 7 native random number generation functions, and relies upon the paragonie/random_compat library to provide support in PHP 5.

./cdash/common.php: srand(make_seed_recoverpass());
./login.php:$stamp = md5(srand(5));
./login_functions.php: srand(make_seed_recoverpass());
./login_functions.php: srand(make_seed_recoverpass());
./manageProjectRoles.php: srand(make_seed_recoverpass());
./register.php: srand(microtime_float());
./cdash/do_submit.php: $filename = $CDASH_BACKUP_DIRECTORY."/".mt_rand().".xml";

Failure to report build error

(( Ps: Thanks for all the recent improvements to CDash 😄 ))

The real build error is:

[  2%] Building CXX object QuickTCGA/Logic/NucleusSeg_Yi/CMakeFiles/NucleiSegLib.dir/Normalization.cpp.o
/Users/kitware/Dashboards/Nightly/S-0-E-b/SlicerPathology/QuickTCGA/Logic/NucleusSeg_Yi/Normalization.cpp:221:24: error: call to 'pow' is
      ambiguous
        LMS_ptr[j*3] = pow(10.0, log_LMS_ptr[j*3]);
                       ^~~
/Developer/SDKs/MacOSX10.6.sdk/usr/include/architecture/i386/math.h:343:15: note: candidate function
extern double pow ( double, double );
              ^
/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/cmath:356:3: note: candidate function
  pow(float __x, float __y)

[...]

/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/cmath:372:3: note: candidate function
  pow(long double __x, int __n)
  ^
3 errors generated.
make[2]: *** [QuickTCGA/Logic/NucleusSeg_Yi/CMakeFiles/NucleiSegLib.dir/Normalization.cpp.o] Error 1
make[1]: *** [QuickTCGA/Logic/NucleusSeg_Yi/CMakeFiles/NucleiSegLib.dir/all] Error 2
make: *** [all] Error 2

Looking at the Build.xml, the error is captured:

[...]
               <Error>
                        <BuildLogLine>10</BuildLogLine>
                        <Text>/.../SlicerPathology/QuickTCGA/Logic/NucleusSeg_Yi/Normalization.cpp:221:24: error: call to 'pow' is ambiguous</Text>
                        <SourceFile>QuickTCGA/Logic/NucleusSeg_Yi/Normalization.cpp</SourceFile>
                        <SourceLineNumber>221</SourceLineNumber>
                        <PreContext>Scanning dependencies of target ConfigureAdditionalLauncherSettings
[  1%] Configuring: AdditionalLauncherSettings.ini
[  1%] Built target ConfigureAdditionalLauncherSettings
Scanning dependencies of target NucleiSegLib
[  1%] Building CXX object QuickTCGA/Logic/NucleusSeg_Yi/CMakeFiles/NucleiSegLib.dir/BinaryMaskAnalysisFilter.cxx.o
Scanning dependencies of target CopyvtkSlicerQuickTCGAModuleLogicPythonScriptFiles
[  2%] Copying python Script: vtkSlicerQuickTCGAModuleLogic.py
[  2%] Built target CopyvtkSlicerQuickTCGAModuleLogicPythonScriptFiles
[  3%] Building CXX object QuickTCGA/Logic/NucleusSeg_Yi/CMakeFiles/NucleiSegLib.dir/Normalization.cpp.o
</PreContext>
                        <PostContext>        LMS_ptr[j*3] = pow(10.0, log_LMS_ptr[j*3]);
                       ^~~
</PostContext>
                        <RepeatCount>0</RepeatCount>
                </Error>

[...]

                <Error>
                        <BuildLogLine>31</BuildLogLine>
                        <Text>/.../SlicerPathology/QuickTCGA/Logic/NucleusSeg_Yi/Normalization.cpp:222:26: error: call to 'pow' is ambiguous</Text>
                        <SourceFile>QuickTCGA/Logic/NucleusSeg_Yi/Normalization.cpp</SourceFile>
                        <SourceLineNumber>222</SourceLineNumber>
                        <PreContext></PreContext>
                        <PostContext>        LMS_ptr[j*3+1] = pow(10.0, log_LMS_ptr[j*3+1]);
                         ^~~
</PostContext>
                        <RepeatCount>0</RepeatCount>
                </Error>

[...]

but CDash does not report the string call to 'pow' is ambiguous:

Looks like only the Postcontext is listed with omission of the Text ?

2016 05 02_cdash_error-not-fully-reported

Special handling of terminal control characters

They currently render as CTest sends them, e.g.

[NON-XML-CHAR-0x1B][31mCreate a data hierarchy: 42 of 46 passed.[NON-XML-CHAR-0x1B][0m

We should transform that special string [NON-XML-CHAR-0x1B] into its appropriate UTF8 value and use some existing javascript library to render the text in the appropriate style as it would appear in the terminal.

Show uploaded files which have been deleted

If uploaded files have been deleted due to size requirements, it would be nice to show that they did indeed exist at one point rather than appearing as though they were never uploaded in the first place. Bonus points for showing when and why the files were deleted.

Reorganize repository to use a new 'web' subdirectory

Currently DocumentRoot is meant to be set to the base of the repository. This is less than ideal, as it allows you to do funny stuff like this:
https://open.cdash.org/tests/CMakeLists.txt

While this example isn't too terrible, you can see how inadvertently exposing our entire repository to the web browser might pose security risks.

Instead, we should create a subdirectory called web and move everything that a web browser is meant to see in there. This change will require all our production & testing instances to modify their DocumentRoot setting, but I think it's worthwhile.

Some CDash API files do not require authentication

Some files within the CDash API (api/v1) do not require authentication. While these files are often not useful or provide nothing more than information disclosures, they should be adjusted to consistently enforce authentication.

Below is an example of this behaviour, but I haven't hunted extensively for other files:
api/v1/getuserid.php?author=[email protected] returns numeric user ID.

This could be working as intended if these API interfaces are expected to be exposed publicly, but I suspect this is not always the case.

Build time is reported before build is completed

The information reported in the "Build time" column is somewhat confusing ...

In the enclosed screenshot, for Linux-g++4.4.3-64bits-QT4.8.6-NoVTKDebugLeaks-Doxygen-Release, it reports 46mins ago whereas the build is not complete.

cdash-built-time-reported-before-it-is-complete

Automatic creation of new Groups / Tracks

I am using ctest_start(Model TRACK ) with track names that include the branch name of the checkout currently being tested.

I was hoping this would result in implicit creation of these groups on CDash but instead e.g. "Continuous [test]" (which does not yet exist as a group) is sorted into "Experimental".

It would be nice if there were an option to automatically create missing groups or at the very least if
builds were sorted into a default track corresponding to their model (i.e. "Continuous" rather than "Experimental" in the example).

Build history links have typo in URL

I want the build history for a particular machine.
Let's start at a particular build number, like:
https://drake-jenkins.csail.mit.edu/view/Continuous%20Production/job/linux-clang-continuous-debug/1328/
Click on "view in CDash".
Click on the build name in the table (linux-clang-continuous-debug-drake).
Click on "show build history": then a table appears with clickable links.
If I click a link (the time of the build), it goes to a URL with a typo in the URL: buidlSummary , which should be buildSummary.

DynamicGroup: Improve flexibility

For the https://github.com/python-cmake-buildsystem/python-cmake-buildsystem project, each commit trigger the build for multiple version of python and compilers, I would like the latest set of builds to be displayed in a given group.

For a given "dynamic group row (or matching rule)" I was thinking about these approaches:

  • display latest builds associated with latest commit

and/or

  • display N last builds

For the moment, I manually added rows to select build names.

cdash is not accepting uploads

I have two projects PIO and CIME and both are failing with errors like:
Submission failed: Checksum failed for file. Expected 5f6c0e8cefce1646393952230c4918ce but got d41d8cd98f00b204e9800998ecf8427e.

Allow for dynamic trend ranges in dashboard plots or API

For any of the trend plots that are displayed on the project overview page (e.g., build warnings, or coverage %), allow the plots to have a dynamic date range to allow investigation of trends over wider timescales and event detection.

If I want to find out when my project's coverage dropped, currently I need to pull up the correct dashboard view, then move the date param in the URL back by 2 weeks at a time until I find the event.

It would be great if any of these trends would also support an API with a date range, so I could query something like (coverage, linux, nightly, total, startDate, endDate).

Database schema doesn't match with the version of CDash which installed it

Hi,

After installing CDash from the release branch, I got the following error message when navigating to viewProjects.php:

The current database schema doesn't match the version of CDash you are running, upgrade your database structure in the  Administration/CDash maintenance panel of CDash

image

Problem is that the database has been initialized by the exact same CDash instance (I clicked on All projects after install.php and new project creation steps) 😕

Clicking on the Upgrade CDash button of the upgrade.php is not fixing the issue.

Not all errors are reported when calling "ctest_build() / ctest_submit(PARTS Build)" multiple times in a row

The scenario is fully described here and also summarized below.

Despite of the Build.xml (also copied below) containing error, the error is not reported on CDash.

cdash-slicer-extension-no-error

ctest_configure(
    BUILD ${EXTENSION_SUPERBUILD_BINARY_DIR}
    SOURCE ${EXTENSION_SOURCE_DIR}
    RETURN_VALUE res
    )
ctest_submit(PARTS Configure)

ctest_build(BUILD ${EXTENSION_SUPERBUILD_BINARY_DIR} NUMBER_ERRORS build_errors APPEND)
ctest_submit(PARTS Build)

ctest_test(
  BUILD ${EXTENSION_SUPERBUILD_BINARY_DIR}/${EXTENSION_BUILD_SUBDIRECTORY}
  PARALLEL_LEVEL ${CTEST_PARALLEL_LEVEL})

ctest_submit(PARTS Test)

ctest_build(
  TARGET packageupload
  BUILD ${EXTENSION_SUPERBUILD_BINARY_DIR}/${EXTENSION_BUILD_SUBDIRECTORY}
  APPEND
  )
ctest_submit(PARTS Build)

File /Users/kitware/Dashboards/Nightly/S-0-E-b/DTIProcess-build:

<?xml version="1.0" encoding="UTF-8"?>
<Site BuildName="24585-DTIProcess-git8cd9ff0-clang++-64bits-Qt4.8-Release"
    BuildStamp="20150930-0300-Extensions-Nightly"
    Name="factory.kitware.com"
    Generator="ctest-3.0.1"
    Append="true"
    CompilerName=""
    OSName="Mac OS X"
    Hostname="factory.kitware.com"
    OSRelease="10.6.8"
    OSVersion="10K549"
    OSPlatform="x86_64"
    Is64Bits="1"
    VendorString="GenuineIntel"
    VendorID="Intel Corporation"
    FamilyID="6"
    ModelID="44"
    ProcessorCacheSize="32768"
    NumberOfLogicalCPU="24"
    NumberOfPhysicalCPU="12"
    TotalVirtualMemory="64"
    TotalPhysicalMemory="32768"
    LogicalProcessorsPerPhysical="16"
    ProcessorClockFrequency="2930"
>
<Subproject name="DTIProcess">
</Subproject>
<Labels>
  <Label>DTIProcess</Label>
</Labels>
<Build>
    <StartDateTime>Sep 30 01:46 EDT</StartDateTime>
    <StartBuildTime>1443592018</StartBuildTime>
<BuildCommand>/Users/kitware/Dashboards/Support/CMake\ 3.0.1.app/Contents/bin/cmake --build . --config &quot;Release&quot; --target &quot;packageupload&quot; -- -i</BuildCommand>
    <Error>
        <BuildLogLine>1</BuildLogLine>
        <Text>make[3]: *** No rule to make target `packageupload'.  Stop.
</Text>
        <PreContext></PreContext>
        <PostContext></PostContext>
        <RepeatCount>0</RepeatCount>
</Error>


    <Warning>
        <BuildLogLine>1</BuildLogLine>
        <Text>*** WARNING non-zero return value in ctest from: /Users/kitware/Dashboards/Support/CMake 3.0.1.app/Contents/bin/cmake
</Text>
        <PreContext></PreContext>
        <PostContext></PostContext>
        <RepeatCount>0</RepeatCount>
</Warning>


    <Log Encoding="base64" Compression="/bin/gzip">
    </Log>
    <EndDateTime>Sep 30 01:46 EDT</EndDateTime>
    <EndBuildTime>1443592018</EndBuildTime>
<ElapsedMinutes>0</ElapsedMinutes></Build>
</Site>

Restructuring CDash Testing

Leaving an issue here to capture some thoughts I've had/bounced off of @zackgalbreath.

CDash maintains shared state across its tests, this has already caused me a couple of headaches and is a bit counter intuitive. It breaks the local development environment configs after running, and the tests are dependent on the order in which they're run - hindering the ability to parallelize them.

Contrast this to an approach similar to Girder's, where CherryPy is setup/tore down and a database is created for each individual test. If we were to implement something similar it would give us isolated and more easily parallelized testing environments.

A few things that might help with this, I'd like some input on:

  • Using the built in PHP dev server for testing?
    I've been using this for dev and it's worked well and although I'm sure there are shortcomings, it might be useful for testing.
  • Letting env variables specify configurations
    If configurations/configuration files could be specified as an environment variable then it would be easier to spin up multiple instances of CDash from the same codebase utilizing different databases or whatever instance specific configuration we want.

Show CTEST_CHANGE_ID on the UI

In the case when CTEST_CHANGE_ID refers to a GitHub pull request, it should be prefixed with "#" and link to the pull request page.

improvements for testSummary.php

  • Show spinner while graph data is loading (right now it just looks blank)
  • Distinguish between failed and notrun on the graph. (show both as separate bars?)
  • Allow user to customize query based on:
    • time range
    • build name
    • site
    • revision

Use a SQL query builder

This is probably pretty obvious to people already, but building SQL strings manually seems scary to me. Using a SQL query builder (random Google result: Laravel) seems like it would make the code cleaner and safer (e.g. cleans strings for you).

Speed up page rendering using one-time binding

See https://docs.angularjs.org/guide/expression#one-time-binding

xref #359

Similarly to what was done in 815597b

Update the remaining of the templates to use one-time binding where appropriate.

$ ack --html "\{\{[^\:]"
public/views/viewProjects.html
8:    <link rel="stylesheet" type="text/css" ng-href="{{cssfile}}" />
28:          <a ng-href="{{cdash.home}}">
29:            <img ng-show="cdash.logoid > 0" ng-src="displayImage.php?imgid={{cdash.logoid}}" border="0" height="50px"/>
68:            <a ng-href="{{project.link}}">
69:              {{project.name}}
72:          <td align="left">{{project.description}}</td>
75:              {{project.lastbuilddatefull}}
77:            <a class="builddateelapsed" ng-alt="{{project.lastbuild}}" ng-href="{{project.link}}&date={{project.lastbuilddate}}">
78:              {{project.lastbuild_elapsed}}
80:            <img src="img/cleardot.gif" ng-class="'activity-level-{{project.activity}}'"/>
94:              Show all {{cdash.nprojects}} projects

public/views/testSummary.html
8:    <link rel="stylesheet" type="text/css" ng-href="{{cssfile}}" />
22:        Testing summary for <u>{{cdash.testName}}</u> performed between {{cdash.teststarttime}} and {{cdash.testendtime}}
25:        {{cdash.percentagepassed}}% passed, {{cdash.numfailed}} failed out of {{cdash.numtotal}}.
30:        {{ showgraph ? 'Hide Test Failure Trend' : 'Show Test Failure Trend' }}
44:      <a ng-href="{{cdash.csvlink}}">Download Table as CSV File</a>
82:              {{column}}
89:            {{build.site}}
93:            <a ng-href="{{build.buildLink}}">
94:              {{build.buildName}}
99:            {{build.buildStamp}}
103:            <a ng-href="{{build.testLink}}">
104:              {{build.status}}
109:            {{build.time}}
113:            <a ng-href="{{build.update.revisionurl}}">
114:              {{build.update.revision}}

public/views/manageBuildGroup.html
8:    <link rel="stylesheet" type="text/css" ng-href="{{cssfile}}" />
25:          <form class="form-inline" name="form1" method="post" action="{{'manageBuildGroup.php?projectid=' + cdash.projectid}}">
30:                <option ng-repeat="proj in cdash.availableprojects" value="{{proj.id}}" ng-selected="proj.id==cdash.projectid">
31:                  {{proj.name}}
76:                  <div class="row" ng-repeat="buildgroup in cdash.buildgroups" id="{{buildgroup.id}}" style="cursor: move;" ng-class-even="'even'" ng-class-odd="'odd'">
79:                      <span ng-click="showOptions = !showOptions" ng-class="showOptions ? 'glyphicon glyphicon-chevron-down' : 'glyphicon glyphicon-chevron-right'" style="cursor: pointer;"></span> {{buildgroup.name}}
88:                        <input type="hidden" name="buildgroupid" value="{{buildgroup.id}}"/>
164:                        <img id="buildgroup_updated_{{buildgroup.id}}" src="img/check.gif" style="display: none; height:16px; width=16px; margin-top:9px;" />
302:                    <td>{{wildcard.buildgroupname}}</td>
303:                    <td>{{wildcard.match}}</td>
304:                    <td>{{wildcard.buildtype}}</td>
366:                    <td>{{rule.parentgroupname}}</td>
367:                    <td>{{rule.sitename}}</td>
368:                    <td>{{rule.match}}</td>

public/views/partials/footer.html
12:        | {{cdash.generationtime}}s
21:  var pageTracker = _gat._getTracker("{{cdash.googletracker}}");

public/views/partials/buildError.html
17:      {{cdash.errortypename}} while building
18:      <code>{{error.language}}</code> {{error.outputtype}} "
19:      <code>{{error.outputfile}}</code>"
20:      in target {{error.targetname}}
29:      <a href="{{cdash.cvsurl}}">
30:        {{cdash.cvsurl}}
40:      {{error.logline}}
46:      <span class="nobr"> {{cdash.errortypename}} </span>
49:      <pre ng-if="error.precontext" class="compiler-output">{{error.precontext}}</pre>
53:      <pre ng-if="error.postcontext" class="compiler-output">{{error.postcontext}}</pre>
62:      {{error.sourcefile}}
73:        {{label}}
82:        <span id="showarguments_{{error.id}}" ng-hide="error.showArguments">
86:          <span class="nobr">"<font class="argument">{{error.argumentfirst}}</font>"</span>
89:        <span id="argumentlist_{{error.id}}" ng-show="error.showArguments">
93:          <span class="nobr">"<font class="argument">{{error.argumentfirst}}</font>"</span>
94:          <span ng-repeat="argument in error.arguments track by $index">"<font class="argument nobr">{{argument}}</font>" </span>
105:      {{error.workingdirectory}}
114:      {{error.exitcondition}}
123:      <pre class="compiler-output" name="stdout">{{error.stdoutput}}</pre>
132:      <pre class="compiler-output" name="stderr">{{error.stderror}}</pre>

public/views/partials/filterdataTemplate.html
10:          <a ng-href="http://public.kitware.com/Wiki/CDash:Documentation#Filters_on_{{cdash.page}}" target="_blank">Help</a>
18:              <input type="hidden" name="filtercombine"  id="id_filtercombine" value="{{filterdata.filtercombine}}">
37:      <tr ng-repeat="filter in filterdata.filters" class="filterFields" number="{{$index + 1}}" id="filter{{$index+1}}" ng-class-even="'treven'" ng-class-odd="'trodd'">
39:          <select id="id_field{{$index+1}}" name="field{{$index+1}}" ng-model="filter.key" ng-change="changeFilter($index+1)">
40:            <option ng-repeat="availablefilter in filterdata.availablefilters" value="{{availablefilter}}" ng-selected="filterdata.availablefilters[$index] == filter.key">
41:              {{filterdefinitions[availablefilter].text}}
47:          <select id="id_compare{{$index+1}}" name="compare{{$index+1}}" ng-model="filter.compare">
49:            <option ng-repeat="comparison in comparisons[filterdefinitions[filter.key].type]" value="{{comparison.value}}" ng-selected="filter.compare == comparison.value">
50:              {{comparison.text}}
56:          <input type="text" size="60" id="id_value{{$index+1}}" name="value{{$index+1}}" value="{{filter.value}}" ng-model="filter.value">
61:          <input type="button" value="-" name="remove{{$index+1}}" ng-click="removeFilter($index+1)" ng-disabled="$last && $first">
63:          <input type="button" value="+" name="add{{$index+1}}" ng-click="addFilter($index+1)">
70:          <input type="hidden" id="id_limit" name="limit" value="{{filterdata.limit}}">
75:          <input type="text" size="3" id="id_limit" name="limit" align="center" value="{{filterdata.limit}}">
83:          <input type="hidden" name="filtercount" id="id_filtercount" value="{{filterdata.filters.length}}">

public/views/partials/subProjectTable.html
4:      <td colspan="11" align="left" class="nob"><h3>{{cdash.tableName}}</h3></td>
75:        <a ng-href="index.php?subproject={{subproject.name_encoded}}&{{cdash.linkparams}}">
76:          {{subproject.name}}
82:          {{subproject.nconfigureerror}}
88:          {{subproject.nconfigurewarning}}
94:          {{subproject.nconfigurepass}}
100:          {{subproject.nbuilderror}}
106:          {{subproject.nbuildwarning}}
112:          {{subproject.nbuildpass}}
118:          {{subproject.ntestnotrun}}
124:          {{subproject.ntestfail}}
130:          {{subproject.ntestpass}}
135:        {{subproject.lastsubmission}}

public/views/partials/header.html
12:    <div id="datetime"> {{cdash.datetime}} </div>
14:      <a href="rss/SubmissionRSS{{cdash.projectname}}.xml">
22:      <a href="{{cdash.home}}">
23:        <img ng-if="cdash.logoid>0" id="projectlogo" border="0" height="50px" ng-src="displayImage.php?imgid={{cdash.logoid}}"/>
28:      {{cdash.projectname}}
29:      <span ng-if="cdash.subheadername" id="subheadername">{{cdash.subprojectname}}</span>
34:          <a href="index.php?project={{cdash.projectname_encoded}}&date={{cdash.date}}">
39:              <a href="viewSubProjects.php?project={{cdash.projectname_encoded}}&date={{cdash.date}}">
44:              <a href="overview.php?project={{cdash.projectname_encoded}}&date={{cdash.date}}">
49:              <a href="viewChanges.php?project={{cdash.projectname_encoded}}&date={{cdash.date}}{{cdash.extraurl}}">
54:              <a href="buildOverview.php?project={{cdash.projectname_encoded}}&date={{cdash.date}}{{cdash.extraurl}}">
59:              <a href="testOverview.php?project={{cdash.projectname_encoded}}&date={{cdash.date}}{{cdash.extraurl}}">
64:              <a ng-if="cdash.parentid <= 0" href="queryTests.php?project={{cdash.projectname_encoded}}&date={{cdash.date}}{{cdash.extraurl}}{{cdash.extrafilterurl}}">
67:              <a ng-if="cdash.parentid > 0" href="queryTests.php?project={{cdash.projectname_encoded}}&parentid={{cdash.parentid}}{{cdash.extraurl}}{{cdash.extrafilterurl}}">
72:              <a href="userStatistics.php?projectid={{cdash.projectid}}">
77:              <a href="viewMap.php?project={{cdash.projectname_encoded}}&date={{cdash.date}}{{cdash.extraurl}}">
84:          <a href="{{cdash.menu.back}}{{cdash.extrafilterurl}}">Back</a>
88:          <span id="date_now" style="display:none;">{{cdash.date}}</span>
91:          <a ng-if="cdash.menu.previous" href="{{cdash.menu.previous}}{{cdash.filterurl}}">Previous</a>
92:          <a ng-if="!cdash.menu.previous && !cdash.menu.noprevious" href="index.php?project={{cdash.projectname_encoded}}&date={{cdash.previousdate}}{{cdash.extraurl}}{{cdash.filterurl}}">
97:          <a ng-if="cdash.menu.current" href="{{cdash.menu.current}}{{cdash.filterurl}}">
100:          <a ng-if="!cdash.menu.current" href="index.php?project={{cdash.projectname_encoded}}{{cdash.extraurl}}{{cdash.filterurl}}">
105:          <a ng-if="cdash.menu.next" href="{{cdash.menu.next}}{{cdash.filterurl}}">
108:          <a ng-if="!cdash.menu.next" href="index.php?project={{cdash.projectname_encoded}}&date={{cdash.nextdate}}{{cdash.filterurl}}">
116:              <a href="{{cdash.home}}">Home</a>
119:              <a href="{{cdash.documentation}}">Documentation</a>
122:              <a href="{{cdash.vcs}}">Repository</a>
125:              <a href="{{cdash.bugtracker}}">Bug Tracker</a>
128:              <a href="subscribeProject.php?projectid={{cdash.projectid}}">Subscribe</a>
136:              <a href="createProject.php?edit=1&projectid={{cdash.projectid}}">
141:              <a href="manageProjectRoles.php?projectid={{cdash.projectid}}">
146:              <a href="manageBuildGroup.php?projectid={{cdash.projectid}}">
151:              <a href="manageCoverage.php?projectid={{cdash.projectid}}">
156:              <a href="manageBanner.php?projectid={{cdash.projectid}}">
161:              <a href="manageMeasurements.php?projectid={{cdash.projectid}}">
166:              <a href="manageSubProject.php?projectid={{cdash.projectid}}">
171:              <a href="manageOverview.php?projectid={{cdash.projectid}}">
187:  <b>Error: {{cdash.error}}</b>
190:  <b>Warning: {{cdash.warning}}</b>

public/views/viewBuildError.html
11:    <link rel="stylesheet" type="text/css" ng-href="{{cssfile}}" />
27:            <a href="viewSite.php?siteid={{cdash.build.siteid}}">
28:              {{cdash.build.site}}
35:            {{cdash.build.buildname}}
41:            {{cdash.build.starttime}}
51:            Found <b>{{cdash.numErrors}}</b> {{cdash.errortypename}}s
52:            <span ng-if="cdash.parentBuild"> across <b>{{cdash.numSubprojects}}</b> subprojects</span>
57:            <a href="viewBuildError.php?type={{cdash.nonerrortype}}&buildid={{cdash.build.buildid}}">
58:              {{cdash.nonerrortypename}}s are here.
81:            <td style="vertical-align:top">{{subprojectName}}</td>
82:            <td><a href="#" ng-click="showErrors = !showErrors">{{errors.length}} {{cdash.errortypename}}s found.</a>

public/views/viewNotes.html
8:    <link rel="stylesheet" type="text/css" ng-href="{{cssfile}}" />
11:    <title>{{cdash.title || "CDash : View notes"}}</title>
26:            <a href="viewSite.php?siteid={{cdash.build.siteid}}">{{cdash.build.site}}</a>
33:            <a href="buildSummary.php?buildid={{cdash.build.buildid}}">{{cdash.build.buildname}}</a>
40:            {{cdash.build.stamp}}
48:        {{note.time}} -- {{note.name}}
57:        <div class="title-divider"  id="note{{$index}}">
58:          <b>{{note.time}} -- {{note.name}}</b>
62:          {{note.text}}

public/views/index.html
8:    <link rel="stylesheet" type="text/css" ng-href="{{cssfile}}" />

public/views/compareCoverage.html
8:    <link rel="stylesheet" type="text/css" ng-href="{{cssfile}}" />
33:            <td colspan={{cdash.builds.length}} + 1 align="right" class="nob"></td>
42:            <th class="timeheader botl" align="center" colspan={{cdash.builds.length}}>
49:            {{build.name}}
50:            <span class="glyphicon" ng-class="sortCoverage.orderByFields.indexOf('-{{build.key}}') != -1 ? 'glyphicon-chevron-down' : (sortCoverage.orderByFields.indexOf('{{build.key}}') != -1 ? 'glyphicon-chevron-up' : 'glyphicon-none')"></span>
60:              <b>{{group.label}}</b>
65:              <a ng-if="group[build.key] >= 0"> {{group[build.key]}}% </a>
72:              {{coverage.label}}
76:              <a ng-if="coverage[build.key] >= 0 && build.key != 'aggregate'" ng-href="viewCoverage.php?buildid={{coverage[build.key +'id']}}">
77:                {{coverage[build.key]}}%
80:                {{coverage[build.key]}}%
82:              <sub ng-if="coverage[build.key+'percentagediff'] > 0">+{{coverage[build.key+'percentagediff']}}%</sub>
83:              <sub ng-if="coverage[build.key+'percentagediff'] < 0">{{coverage[build.key+'percentagediff']}}%</sub>
93:              {{coverage.label}}
97:              <a ng-if="coverage[build.key] >= 0 && build.key != 'aggregate'" ng-href="viewCoverage.php?buildid={{coverage[build.key+'id']}}">
98:                {{coverage[build.key]}}%
101:                {{coverage[build.key]}}%
103:              <sub ng-if="coverage[build.key+'percentagediff'] > 0">+{{coverage[build.key+'percentagediff']}}%</sub>
104:              <sub ng-if="coverage[build.key+'percentagediff'] < 0">{{coverage[build.key+'percentagediff']}}%</sub>

public/views/queryTests.html
8:    <link rel="stylesheet" type="text/css" ng-href="{{cssfile}}" />
22:      <h3 id="numtests">Query {{cdash.dashboard.projectname}} Tests: {{cdash.builds.length}} matches</h3>
95:      <a href="{{build.siteLink}}">{{build.site}}</a>
99:      <a href="{{build.buildSummaryLink}}">{{build.buildName}}</a>
103:      {{build.testname}}
107:      <a href="{{build.testDetailsLink}}">{{build.status}}</a>
111:      <a href="{{build.testDetailsLink}}">{{build.timestatus}}</a>
115:      {{build.time}}
119:      {{build.details}}
123:      {{build.buildstarttime}}

public/views/manageSubProject.html
8:    <link rel="stylesheet" type="text/css" ng-href="{{cssfile}}" />
23:          <form class="form-inline" name="form1" method="post" action="{{'manageSubProject.php?projectid=' + cdash.projectid}}">
28:                <option ng-repeat="proj in cdash.availableprojects" value="{{proj.id}}" ng-selected="proj.id==cdash.projectid">
29:                  {{proj.name}}
75:                  <span ng-click="loadData(subproject.id); showDetails = !showDetails" ng-class="showDetails ? 'glyphicon glyphicon-chevron-down' : 'glyphicon glyphicon-chevron-right'"></span> {{subproject.name}}
91:                      <img id="group_changed_{{details.subprojectid}}" src="img/check.gif" style="display: none; height:16px; width=16px; margin-top:9px;" />
97:                    <label for="dependency_selection_{{details.subprojectid}}">Add dependency: </label>
98:                    <select class="dependency_selector form-control" name="dependency_selection_{{details.subprojectid}}" ng-model="dependencySelection" ng-options="avail as avail.name for avail in details.available_dependencies | orderBy:'name'">
116:                    - {{dep.name}}
198:                        id={{group.id}}>
204:                        <input type="radio" name="groupRadio" ng-model="cdash.default_group_id" value="{{group.id}}">
215:                        <img id="group_updated_{{group.id}}" src="img/check.gif" style="display: none; height:16px; width=16px; margin-top:9px;" />

public/views/viewTest.html
8:    <link rel="stylesheet" type="text/css" ng-href="{{cssfile}}" />
22:      <h3>Testing started on {{cdash.build.testtime}}</h3>
30:            <a href="viewSite.php?siteid={{cdash.build.siteid}}">{{cdash.build.site}}</a>
39:            <a href="buildSummary.php?buildid={{cdash.build.buildid}}">{{cdash.build.buildname}}</a>
48:            {{cdash.totaltime}}
58:            {{cdash.build.osname}}
67:            {{cdash.build.osplatform}}
76:            {{cdash.build.osrelease}}
85:            {{cdash.build.osversion}}
95:            {{cdash.build.compilername}}
104:            {{cdash.build.compilerversion}}
119:        <h3 ng-switch-when="onlypassed">{{cdash.numPassed}} tests passed.</h3>
120:        <h3 ng-switch-when="onlyfailed">{{cdash.numFailed}} tests failed.</h3>
121:        <h3 ng-switch-when="onlynotrun">{{cdash.numNotRun}} tests not run.</h3>
122:        <h3 ng-switch-when="onlytimestatus">{{cdash.numTimeFailed}} tests timed out.</h3>
124:          {{cdash.numPassed}} passed,
125:          {{cdash.numFailed}} failed,
126:          {{cdash.numTimeFailed}} timed out,
127:          {{cdash.numNotRun}} not run.
206:                <a href="viewTest.php?buildid={{test.buildid}}">{{test.subprojectname}}</a>
212:              <a href="{{test.detailsLink}}">{{test.name}}</a>
216:              <a href="{{test.detailsLink}}">{{test.status}}</a>
220:              <a href="{{test.detailsLink}}">{{test.timestatus}}</a>
224:              <span style="display:none">{{test.execTimeFull}}</span>
225:              {{test.execTime}}
229:              {{test.details}}
233:              <span ng-repeat="label in test.labels">{{label}}</span>
237:              {{test.history}}
241:              <a href="{{test.summaryLink}}">{{test.summary}}</a>
269:        <a href="{{cdash.csvlink}}">Download Table as CSV File</a>

public/views/testDetails.html
8:    <link rel="stylesheet" type="text/css" ng-href="{{cssfile}}" />
22:        <span class="builddateelapsed" alt="Mean time: {{cdash.test.timemean}}s<br/>STD time: {{cdash.test.timestd}}s">
23:          {{cdash.test.time}}s
29:      <a ng-href="{{cdash.test.summaryLink}}">
30:        {{cdash.test.test}}
32:      <font color="{{cdash.test.statusColor}}">
33:        ({{cdash.test.status}})
38:      <a ng-href="buildSummary.php?buildid={{cdash.test.buildid}}">
39:        {{cdash.test.build}}
41:      <a ng-href="viewSite.php?siteid={{cdash.test.siteid}}">
42:        ({{cdash.test.site}})
44:      on {{cdash.test.buildstarttime}}
50:          {{cdash.test.update.revision}}
57:        {{cdash.test.details}}
64:        <font color="{{cdash.test.timeStatusColor}}">
65:          {{cdash.test.timestatus}}
77:                   src="displayImage.php?imgid={{image.imgid}}"
78:                   alt="{{image.role}}"
86:          <th class="measurement">{{image.role}}</th>
88:            <img src="displayImage.php?imgid={{image.imgid}}" alt="{{image.role}}">
94:          <th class="measurement">{{measurement.name}}</th>
97:            {{measurement.value}}
101:            <a href="testDetails.php?test={{cdash.test.id}}&build={{cdash.test.buildid}}&fileid={{measurement.fileid}}">
108:            <a ng-href="{{measurement.value}}">{{measurement.name}}</a>
122:        {{cdash.test.command}}
136:          {{measurement.name}}
141:      <a ng-show="cdash.csvlink != ''" ng-href="{{cdash.csvlink}}">
150:      <pre>{{cdash.test.output}}</pre>

public/views/viewSubProjects.html
7:    <link rel="stylesheet" type="text/css" ng-href="{{cssfile}}" />
21:            <b>{{banner.text}}</b>
62:            <a ng-href="index.php?{{cdash.linkparams}}">
63:              {{cdash.projectname}}
65:            <a ng-href="index.php?{{cdash.linkparams}}&showfilters=1">
72:              {{cdash.project.nconfigureerror}}
78:              {{cdash.project.nconfigurewarning}}
84:              {{cdash.project.nconfigurepass}}
90:            {{cdash.project.nbuilderror}}
96:              {{cdash.project.nbuildwarning}}
102:              {{cdash.project.nbuildpass}}
108:            {{cdash.project.ntestnotrun}}
114:              {{cdash.project.ntestfail}}
120:              {{cdash.project.ntestpass}}
125:            {{cdash.project.lastsubmission}}
143:      <a ng-href="viewSubProjectDependencies.php?{{cdash.linkparams}}">
146:      <a ng-href="viewSubProjectDependenciesGraph.php?{{cdash.linkparams}}">

public/views/manageOverview.html
7:    <link rel="stylesheet" type="text/css" ng-href="{{cssfile}}" />
25:                id="{{build.id}}">
31:              <p id="label" class="text-center">{{build.name}}</p>
40:                    id="{{static.id}}">
42:                    {{static.name}}
96:            <a ng-href="overview.php?project={{cdash.projectname_encoded}}">

public/views/overview.html
8:    <link rel="stylesheet" type="text/css" ng-href="{{cssfile}}" />
31:            {{group.name}}
37:            <b>{{measurement.name}}</b>
41:            {{group.value}}
69:            {{buildgroup}}
76:            <b>{{coverage.name}}</b>
79:            {{group.current}}%
110:            <b>{{DA.name}}</b>
113:            {{group.name}}
116:            {{group.value}}
141:            <b>{{SA.group_name}}</b>
145:            {{measurement.name}}
148:            {{measurement.value}}

Support alternate timezones

Currently timestamps shown on buildSummary.php (and other pages) are displayed in the CDash server's default timezone. It would be nice if we had more fine-grained control over this.

Options I've considered so far:

  1. Sniff out a per-project timezone from the nightly start time. The benefit here is that we wouldn't have to add yet another project setting to the data model. The problem with this approach is that the nightly start time specifies timezones in the form UTC, EDT, etc. PHP prefers timezones like America/New_York and Europe/London, as it makes Daylight Saving Time less of a hassle.

  2. Use Javascript to detect the user's local timezone and use that when displaying timestamps. Some people might not like this because the dashboard will appear differently when they are traveling.

Please comment below if you have any other ideas on how to tackle this issue.

Cache GitHub API requests

We are getting severely rate-limited, but we have lots of builds of the same commit, so the request to and response from the API will be the same and could be cached.

Improve manageBuildGroup to add "include in project summary" option

On the Slicer dashboard, subproject are used to report configure/build/test information associated with plugins. In that case, on the main page listing the main project and associated sub project, we don't want the error/warning count associated with the main project 'Slicer4' to account for the error/warning of plugins.

To fix this, @zackgalbreath suggested that the manageBuildGroup page could be updated to add a setting include in project summary that would be similar to the existing one include in subproject summary.

CDash build graph axes are confusing

From @david-german-tri in RobotLocomotion/drake#3096:

Example: https://drake-cdash.csail.mit.edu/buildSummary.php?buildid=74284

There are left and right y-axes, both of which are labeled in minutes. The left axis (I think) corresponds to the curves with actual time dimensions. The right axis (I think) corresponds to the curves that are dimensionless, and the "minutes" label just shouldn't be there.

Given that the scales are not similar even among curves that have the same units, I suggest it would be more useful just to show four separate graphs.

API: Add endpoint similar to "filter" functionality

This would help me to get the start time, duration, etc ... of all extensions build associated with a given group (e.g Extensions-Nightly) and site (e.g factory-south-w) and get a better understanding of the bottleneck of a specific machine.

Now since the page are now paginated, it is not possible to simply parse the HTML using BeautifulSoup python module. (e.g https://github.com/fedorov/CDashWrangler )

See http://slicer.cdash.org/index.php?project=Slicer4&date=2016-04-11&filtercount=2&showfilters=1&filtercombine=and&field1=groupname&compare1=63&value1=Extensions-Nightly&field2=site&compare2=61&value2=factory-south-w

Cc: @fedorov @lassoan @thewtex

DynamicGroup: Automatic creation based on topic

Related to:
https://open.cdash.org/index.php?project=CPython
https://github.com/python-cmake-buildsystem/python-cmake-buildsystem

Each time a PR is published associated build are currently submitted to groups like Travis-CI, Appveyor-CI or Circle-CI, to be able to differentiate the submission associated with different topics (or PR), the build name is set to include the topic name (or PR number), this approach somewhat work .. but become unusable when a lot of topic are pushed.

Instead, I am wondering if the results associated with N latest topics could be listed. Each topic could be a different group (or a similar concept). The latest topic would be listed at the top.

New nightly start time discrepancy in release

Yesterday I upgraded our CDash installation from

20ee5c1
to
c9b921f (release).

Our builds from last night have now been sorted into yesterday instead of today like they had been before.

Configured nightly start time for all projects is 20:00 UTC (22:00 CEST - localtime).
One of the nightly build's build time is e.g. Apr 8 01:05 CEST (Apr 7 23:05 UTC).

Did something change here that I must account for or is this an unintentional break?

Missing rss folder per default

Hi,

I installed CDash with a clone of this repo. When finishing the installation The rss folder in the CDash folder was missing. Please add it! It seems to contain the same files as the backup folder.

Thanks,
Fabien

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.