1declare function local:parse-duration ($d as xs:string) as xs:dayTimeDuration {
2  xs:time ($d) - xs:time ("00:00:00")
3};
4
5declare function local:percentage ($n as xs:double) as xs:string {
6  concat (string (fn:round ($n * 100)), "%")
7};
8
9declare variable $buildtag external;
10declare variable $now := "RIGHT NOW";
11declare variable $rev := "12345";
12declare variable $tests := fn:doc("./Testing/$buildtag/Test.xml")/Site/Testing/Test;
13declare variable $tests_old := fn:doc("./Testing/PreviousTest.xml")/Site/Testing/Test;
14
15<html>
16<head>
17<title>Integration report for Zorba</title>
18<style>
19table {{ border-collapse: collapse; }}
20td, th {{ border: solid black 1px; padding: 0.5em; }}
21</style>
22</head>
23
24<body>
25
26<h2>About this report</h2>
27
28<p><a href="../{ $now }">This report</a> was created on { $now } for Zorba revision { $rev }.
29</p>
30
31<a name="qtimes"></a>
32<h2>Execution times</h2>
33<table summary="Execution times">
34<tr><th>Query</th><th>Time</th><th>Previous time</th><th>Change</th></tr>
35{
36  for $test in $tests
37  let $testname := data($test/Name)
38  let $qt := data($test/Results/NamedMeasurement[@name eq "Execution Time"]/Value)
39  let $test_old := $tests_old[data(Name) eq $testname]
40  let $qt_old := data($tests_old/Results/NamedMeasurement[@name eq "Execution Time"]/Value)
41  return <tr>
42  <td>{$testname}</td>
43  <td>{$qt}</td>
44  <td>{$qt_old}</td>
45  <td>{ let $d := local:parse-duration ($qt) return
46        (local:percentage ((local:parse-duration ($qt_old) - $d) div $d),
47        "+/-", local:percentage (xs:dayTimeDuration ("PT0.5S") div $d))
48  }</td>
49</tr> }
50</table>
51
52</body>
53</html>
54