File: Dart2.tex

package info (click to toggle)
dart 0.20061109-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny
  • size: 5,668 kB
  • ctags: 247
  • sloc: tcl: 5,652; perl: 256; python: 141; cpp: 79; makefile: 68; sh: 36
file content (298 lines) | stat: -rwxr-xr-x 11,439 bytes parent folder | download
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
% \documentclass[journal]{IEEEtran}
%\documentclass[twocolumn]{IEEEtran}
\documentclass{InsightBook}

% If the IEEEtran.cls has not been installed into the LaTeX system files,
% manually specify the path to it:
% \documentclass[journal]{../sty/IEEEtran}

% \usepackage{graphicx}
\usepackage{cite}
\usepackage{subfigure}
\usepackage{graphicx}
\usepackage{enumerate}
\usepackage{fancyhdr}
% \usepackage{fncychap}
% \usepackage{float}
\usepackage{amsmath}
\usepackage[tight]{units}

%check if running PDFLaTeX
\newif\ifpdf%
\ifx\pdfoutput\undefined%
  \pdffalse% we are not running PDFLaTeX
  \DeclareGraphicsExtensions{.eps}%
\else%
  % \pdfoutput=1% we are running PDFLaTeX
  \DeclareGraphicsExtensions{.pdf}%
  \pdftrue%
\fi%

\ifpdf%
% yes we have PDFLaTeX, so use .pdf images
\else%
% sorry no PDFLaTeX, use .eps images
\fi%

\begin{document}
\title{Dart: Testing, Reports and Dashboards}
\author{Daniel J. Blezek}
\maketitle

\chapter{Dart v2}
This chapter describes the requirements and design criteria for the
next version of Dart, Dart2 (or Dart v2).

\section{Dart2 Statement of Purpose}
\begin{quote}
\emph{Dart2 shall aggregate data across many independant distributed
build and test hosts, summarizing the software quality aspects of the project
in a concise and informative fashion cross-sectionly and longitudinally.}
\end{quote}

\section{User Requirements}
\begin{enumerate}
\item A single server instance shall process multiple projects, with
simple, flexible configuration and management.
% \item Server configuration and management shall be simple but
% flexible.
\item Presentation of results shall be configurable, allowing results
to persist on the dashboard for different periods.  For instance,
coverage information is time consuming to produce but slowly
changing and ought to persist for more than one day.
\item Dashboards may be aggregated into Meta-Dashboards.  For
instance, Slicer depends on VTK, ITK, gsl and Tcl/Tk.  The Slicer
Meta-Dashboard shall present summary information from these
dependancies.
\item Dart2 shall support submission authentication and selectivly
reject or expire unauthenticated submissions.
\item Dart2 shall provide resource management tools for disk space,
bandwidth and processing time allowing both Clients and Servers to
efficiently manage resources.
\end{enumerate}

\section{Design Requirements}
\paragraph{Basic}
\begin{enumerate}
\item The server shall contain all components required and shall not
require any external packages, nor operating system applications.
The server shall run as a daemon and shall include these components:
	\begin{enumerate}
	\item Scheduler: Dart2 shall include an internal scheduling
system for routine systems tasks, \emph{etc}\ldots
	\item RDBMS: Dart2 shall include an embedded database to
handle small Projects.
	\item Web Server: Dart2 shall include an enmedded web server
to publish dashboard pages.
	\item Web Services: Dart2 shall communicate using an
established protocol for web services, allowing Results submissions
and query of Project status from remote, homogeneous clients.
	\end{enumerate}
\item The server shall be extensible with user supplied components,
including:
	\begin{enumerate}
	\item RDBMS: Dart2 shall use JDBC compliant drivers for all DB
access allowing different database systems such as MySQL, Postgres,
Oracle, \emph{etc.}
	\item Web Server: Apache and other web servers shall be
capable of serving Dart2 generated pages.
	\item Web Services: Dart2 shall allow the ability to
communicate using external web servers such as Apache, Tomcat,
\emph{etc.}
	\item Portal Server: If desired, a Portal server such as
Jetspeed may be used to interface with Dart2 results database.  This
capability is currently unspecified.
	\end{enumerate}
\end{enumerate}
\paragraph{Resource Management (Section~\ref{Sec:ResourceManagement})}
\begin{enumerate}
\item Dart2 shall, as an option, maintain compressed XML files, using
on-the-fly decompression.  This will result in approximately 10:1
spacing savings for the XML. 
\item Dart2 shall provide a policy mechanism to selectively delete
or archive unnecessary Builds.  An archived Build shall consume less
than 10K of disk space by retaining only summary information.
\end{enumerate}

\paragraph{Storage, Processing and Presentation Engines}
\begin{enumerate}
\item Dart2 shall comprise three engines: Storage, Processing and
Presentation.
\item The Storage engine shall accept submissions from clients parse
the input and store results in a generic format with large data items
stored in the file system, \emph{i.e.} images, with numeric and
shorter text information stored in a database system.
\item The Processing engine shall process and summarize the results
organized by the Storage engine at regular intervals and upon
user-defined event triggering processing actions.
\item The Presentation engine shall provide a customizable view of
data: both ``raw'' data from the Storage engine, and from the
Processing engine.  In the first instance, the Presentation engine
shall simply be HTML, potentially migrating to a Portal based server.
\end{enumerate}

\paragraph{Customization}
\begin{enumerate}
\item Dart2 shall provide an easy to modify template engine for
summarizing results.
\item Dart2 shall provide a server side plug in mechanism allowing
custom data aggregration and flexible reporting.
\item Dart2 shall make provide mechanisms for simple localization and
internationalization, where appropriate.
\end{enumerate} 


\subsection{Resource Management}
\label{Sec:ResourceManagement}
\subsubsection{Disk Space}
The Insight toolkit is the largest Dart project to date.  Currently,
with compressed HTML files, one day consumes over 650M of disk space.
This includes (from November 4, 2004):
\begin{itemize}
\item One Doxygen run (400K for XML, 13K for HTMLZ)
\item One Master Update (13K for XML, 4K for HTMLZ)
\item One Dashboard (12M for XML, 9K for HTMLZ)
\item One BuildOverview (250K for XML, 8K for HTMLZ)
\item One TestOverview (25M for XML, 2 x 29K for HTMLZ)
\item One Coverage build (24M for XML, 21M for HTMLZ)
\item Builds (average of 9M for XML and HTMLZ)
\begin{itemize}
 \item 52 Nightly Builds
 \item 19 Continuous Builds
 \item 22 Experimental Builds
\end{itemize}
\end{itemize}

Breaking down an example day, we have:

\begin{centering}
\begin{tabular}{|l|l|l|}
\hline
File & Size & Notes \\
\hline
Build.xml & 140K & 111 Warnings, average of 1.2K per warning \\
Configure.xml & 0.8K & \\
Test.xml & 4.3M & 859 Tests, average of 5K per test \\
Uptate.xml & 1.4K & 1 Updake, 1.4K per updated file \\
TestSummary.xml & 215K & \\
All.htmlz & 86K & Total for 8 HTMLZ files \\
\hline
\end{tabular}
\end{centering}

The largest generator of data is test output.  Errors/Warnings and
Update information are rather verbose, capturing context information.
In general, XML is verbose with low entropy.  A 4.3M Test.xml file
is 522K compressed with gzip.

\subsubsection{Dashboard Generation Time}

\subsubsection{Bandwidth}

\subsection{Historical Data}
Dart currently perserves data from previous days, it is not
linked across temporal Builds on the same system.  While simple, this
 restriction increases the difficulty of monitoring the quality of a
project.  To overcome this limitation, Dart2 shall link data in a
temporal fashion.
\subsection{Hierarchical Data}
  \subsubsection{Dashboards}
  \subsubsection{Tests}
  \subsubsection{Builds}

\subsection{Persistance of Builds/Results}
\subsubsection{Stream Concept}

\subsection{Documentation}

\subsection{Submissions}
\subsubsection{Incremental Submission}
\subsubsection{Mechanisms}
\subsubsection{Authentication}

\subsection{Configuration}
\subsubsection{Initial Setup}
\subsubsection{Options}

\subsection{Customization}
  \subsubsection{Dashboard presentation}
\subsection{Extensibility}

\chapter{Implementation Ideas}
This section captures some implementation ideas.
\section{Server}

\paragraph{Language}
Of all cross-platform languages, Java provides the most robust set of libraries suitable for
Dart2.  Java also allows simple distribution of compiled libraries,
\emph{i.e.} jar files, as plug-ins.  Potentially, a client could query
the server for a list of available plug-ins downloading and installing
as needed.

\paragraph{RDBMS}
There are several embedable Java RDBMS available,
two of the more interesting projects are Cloudscape, recently released
from IBM, and renamed Derby on the Apache site and Hypersonic SQL
(HSQLDB) project hosted on SourceForge.  Dart2 is envisioned to have a
RDBMS holding summary data; embedding a database into the server
should help to make it transparent and invisible to the casual Dart2
user.  For more scalability, the backing store could be any
RDBMS with a JDBC driver.  MySQL and Postgres come to mind.

\paragraph{Transport} 
Though over-designed and complex, SOAP has the elements need to
transmit XML files to the server from the client.  Specifically, SOAP
with attachements could deliver chunks of compressed XML to the server
via HTTP, since most (all?) firewalls allow HTTP traffic. SOAP could
also be used for Dashboard to Dashboard (D2D?)  communication and
remote management and monitoring of Dart2 servers.  XML-RPC is a much
simpler API, and identically suitable.  XML-RPC will be considered at
the same level as SOAP. Another possible use is dissimination of
plug-ins for clients.  The Java Messaging Service~(JMS) is another
possibility.  JMS gives great flexibility to transport mechanisms and
can operate asyncroniously.

\paragraph{Scheduling}
Quartz is an open source enterprise strength
scheduling system for Java.  Quartz will drive scheduled events such
as Dashboard roll ups, DB tasks, and archiving/deletion of old
results.  Quartz will replace cron.

\paragraph{Template Engine}
There are several competing Template engines for Java.  Velocity is an
Apache sponsored project and has some great features including close
integration with other Apache projects.  FreeMarker is another engine
that is more sophisticated than Velocity, but not as integrated.  The
Template engine will be the driver to produce HTML and other reports
replacing XSLT.

\paragraph{Jakarta}  The Apache Jakarta project provides several
packages of immediate use.
\begin{itemize}
\item Digester builds objects from XML,
greatly simplifying configuration from XML files.  Each object is
constructed as needed and automatically configured.
\item CLI should provide a great command line parsing interface.
\item Commons eMail provides a simple java email client.
\item ORO and RegExp, two regular expression packages.
\end{itemize}

\paragraph{Portal}  Though the current Dart HTML pages serve the
purpose well, adding a portal on top would allow custom portlets to be
developed for specific purposes.  For instance, one portlet could be
configured to show a particular build over the last several days, or
perhaps graph the performance of a Test or Result through time across
several architectures.  Dynamic generation of all the Dart2 results
places undo burden on the server, where a Portal could dynamically
generate limited data in an efficient manner.  One Portal project that
is interesting is Jetspeed 2, an Apache sponsored project.

Portals do add administrative overhead.  It is preferable to
have the ability to use Dart2 without a Portal, but easily being able
to add the increased utility if desired.


\section{Client}


\end{document}