<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Defect Statistics</title>
    <script src="/scripts/api.simile-widgets.org/timeplot/1.1/timeplot-api.js"  type="text/javascript">
    </script>
    <script type="text/javascript">
    var resizeTimerID = null;
    var timeplot;
    function onResize() {
        if (resizeTimerID == null)
        {
            resizeTimerID = window.setTimeout(function(){
                                              resizeTimerID = null;
                                             timeplot.repaint();
                                             }, 100);
        }
    }
    function onLoad() {
        var eventSource = new Timeplot.DefaultEventSource();
        var valueGeometry = new Timeplot.DefaultValueGeometry({
                                                              gridColor: "#000000",
                                                              axisLabelsPlacement: "left",
                                                              });
        var timeGeometry = new Timeplot.DefaultTimeGeometry({
                                                            gridColor: new Timeplot.Color("#000000"),
                                                            axisLabelsPlacement: "top"
                                                            });
        var plotInfo = [
                       Timeplot.createPlotInfo({
                                               id: "found",
                                               dataSource: new Timeplot.ColumnSource(eventSource,1),
                                               valueGeometry: valueGeometry,
                                               timeGeometry: timeGeometry,
                                               lineColor: "#BF0000",
                                               showValues: true
                                               }),
                       Timeplot.createPlotInfo({
                                               id: "fixed",
                                               dataSource: new Timeplot.ColumnSource(eventSource,2),
                                               valueGeometry: valueGeometry,
                                               timeGeometry: timeGeometry,
                                               lineColor: "#00BF00",
                                               showValues: true
                                               })
                       ];
        timeplot = Timeplot.create(document.getElementById("found"), plotInfo);
        timeplot.loadText("defects.txt", ",", eventSource);
    }
    </script>
</head>
<body onload="onLoad();" onresize="onResize();">
<h2>Defects: Found and Fixed</h2>

<div class="label">
    Cumulative Defects,
    <span style="color: #BF0000;">found</span>
    and <span style="color: #00BF00;">fixed</span> per month 
</div> 

<div id="found" style="height: 300px;"> </div> 

<p>
This chart shows the cumulative number of defects reported in Apache OpenOffice, as well as the cummulative number of bugs fixed.
These numbers are extracted from our Bugzilla issue tracking database, using this query for the
<a href="https://issues.apache.org/ooo/buglist.cgi?cmdtype=dorem&remaction=run&namedcmd=All_Reported_Since&sharer_id=249089">find</a> numbers,
and this one for the
<a href="https://issues.apache.org/ooo/buglist.cgi?cmdtype=dorem&remaction=run&namedcmd=All_Fixed_Since&sharer_id=249089">fix</a> numbers.
The query may be edited to adjust the date range.  We set the start date to 2011-06-01 (the start of the Apache Openoffice project) and the
end date for the date of the report.
</p>
<p>
You may note that initially more defects were fixed than found. This is not an error. The Bugzilla database contains many defect reports from the
legacy OpenOffice.org project, defects that were reported before 2011-06-01 and which are being fixed in addition to the newly reported defects.
</p>
<p>
This chart is updated per month.
</p>
</body> 
</html> 
