1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Notes for dart developers</title>
<style TYPE="text/css">
code {color: #FF0000;}
</style>
</head>
<body>
<h1>The Dart Source</h1>
<p>This document is aimed at Dart developers, or anyone who runs a Dart server
and wants to change something.</p>
<h2>How the Client works</h2>
<p>The Client is relatively straight forward. Depending on the Options passed to
DashboardManager.tcl, the client will run several programs, and store each
programs standard output log, and return status. It will then attempt to parse
the logs, and produce an XML file for each stage in the build process. The
client then uses one of various means to transfer the XML files to the server.
The submission process finally triggers the server to copy the XML files to the
appropriate place in the build tree. Note that if the server runs a dashboard
client in the same directory tree, you will not need an explicit submit - the
files will already be in the correct place.</p>
<ul>
<li><code>Client/DashboardManager.tcl</code><br>
Manages the client process.</li>
<li><code>Client/Update.tcl</code><br>
Runs a cvs update command and produces <code> Update.xml</code></li>
<li><code>Client/Configure.tcl</code><br>
Runs a Configure command and produces <code> Configure.xml</code></li>
<li><code>Client/Build.tcl</code><br>
Runs a build command and produces <code> Build.xml</code></li>
<li><code>Client/ftp.tcl</code><br>
Actually performs ftp protocol when using ftp submission</li>
<li><code>Client/Utility.conf.in</code><br>
Configuration Source for CMake to control Dart parameters.</li>
<li><code>Client/Submit.tcl</code><br>
Manages submission process</li>
<li><code>Client/Test.tcl</code><br>
Runs all the Tests and produces <code> Test.xml.</code><br>
Test.tcl parses the output of a test looking for DartMeasurement and
DartMeasurementFile tags. When
it finds a tagset, it converts the tag into a NamedMeasurement tag in the
Test.xml file. If the tag
was a DartMeasurementFile tag, the data from the file is read and converted to
base64 and placed
within the NamedMeasurement tag in the Test.xml file. Any part of the
test's stdout that is not
within DartMeasurements tags is passed as the measurement for a test (just like
before).</li>
</ul>
<p>
</p>
<h2>How the Server works</h2>
<p>The Server is fairly complicated beast. The first point is that in some
senses it is just another client. The server does not actively manage the
receiving of client submission. Some intermediate scripts place that data into
the server's directory tree. The server roll-up process is started when
something (Cron or a roll-up web button) calls <code>DashboardManager.tcl ...
DashboardEnd</code> </p>
<p>The roll-up process goes roughly as follows</p>
<ul>
<li>Dashboard manager looks for new dashboard submission directories ($d) with
dates that fit into the current dashboard's timeframe. In each directory $d:
<ul>
<li>The manager goes through all the <code> $d/XML/$s.xml</code> files that could have
been submitted, and if the equivalent <code> $d/$s.html</code> does not exist it
passes the <code> $d/XML/$s.xml</code> file to the XSLT processor running
<code> Server/XSL/$s.xsl</code>
<ul>
<li><code>Server/XSL/Update.xsl</code><br>
produces <code>$d/Update.html</code> which displays the update details for
that build and <code>$d/UpdateSummary.xml</code> which will be used to build the
dashboard.</li>
<li><code>Server/XSL/Configure.xsl</code><br>
produces <code>$d/Configure.html</code> which displays the configure details for
that build and <code>$d/ConfigureSummary.xml</code> which will be used to build the
dashboard.</li>
<li><code>Server/XSL/Build.xsl</code><br>
produces <code>$d/Build.html</code>, an empty file which indicates
that this step has been run, <code>$d/BuildError.html </code>which displays
that build's error details, <code>$d/BuildError.html </code> which displays
that build's warning details, and <code>$d/BuildSummary.xml</code> which will be used to build the
dashboard, and the dashboard's build summary.</li>
<li><code>Server/XSL/Test.xsl</code><br>
produces <code>$d/Test.html</code> which displays that build's
list of tests along with summary details, (probably a <code>$d/Results/__$t.html</code>
for each test $t with the test output,) and <code>$d/TestSummary.xml</code> which will be used to build the
dashboard, and the dashboard's all builds test summary. If there are
any identified measurements in a test output, <code>Test.xsl</code> creates a
table labelling the rows with the "name"'s of the measurements and
filling in the entries with the
specific measurement. If the measurement was an image, <code> Test.xsl</code> extracts
the base64 data for that
image from <code> Test.xml</code> into a separate file. An <code> img</code> tagset is placed in the
measurement table,
referencing an image whose name is constructed from the "measurement
name" (i.e. the value of the
"name" attribute in the tag). (<code>DashboardManager.tcl</code> then converts
all base64 files into the unencoded
files.)</li>
</ul>
<li>The manager examines the summary files using functions like <code>GetErrorsWarningsFromBuildSummary()</code>
in <code>Client/Utility.tcl</code> to decide if and what to send in an
email. It records if it has already sent an email in this module by
leaving an empty <code> mailsent.txt</code> file in the submission directory.</li>
</ul>
</li>
<li>The Manager then starts (over)-writing <code> Dashboard.xml</code> in the Dashboard directory with
the information about date, etc. It then concatenates the <code>UpdateSummary.xml</code>,
<code>ConfigureSummary.xml</code>, etc. from each of the day's
submission directories to form a finished <code>Dashboard.xml</code>.</li>
<li>If needed, <code>Server/XSL/Dashboard.xsl<br>
</code>takes <code> Dashboard.xml</code> and produces <code>Dashboard.html</code>,
<code> TestOverview.xml</code>
and <code>BuildOverview.xml</code>. Needed means if <code>Dashboard.xml</code>
is newer that <code>Dashboard.html</code>. <code>TestOverview.xml</code> is
only produced if a newly submitted test file was processed above.</li>
<li>If needed, <code>Server/XSL/</code><code>BuildOverview.xsl<br>
</code>takes <code>BuildOverview.xml</code> and produces <code>BuildOverview.html</code>.
Needed means if <code>BuildOverview.xml</code> is newer that <code>BuildOverview.html</code>.</li>
<li>If needed, <code>Server/XSL/TestOverview.xsl<br>
</code>takes <code>TestOverview.xml</code> and produces <code>TestOverview.html</code>,
and others.</li>
</ul>
<p>Things I haven't explained:</p>
<ul>
<li>How the specialist builds work.</li>
<li>How the notes system works</li>
<li>How the detailed test information and summaries are created.</li>
<li>How the nightly server update information is built.</li>
</ul>
<hr>
<p>Feel free to fix any errors.</p>
<p>Ian Scott<br>
24 Feb 2003</p>
</body>
</html>
|