Login
reports-by-year.fossi1ish at [c0b759f730]
Login

File th1ish/cgi/pages/reports-by-year.fossi1ish artifact 8dbd3038db part of check-in c0b759f730


const CGI = api.cgi
const F = CGI.getFossilInstance()
const out = api.io.output


const util = api.import(Fossil.file.dirPart(__FILE)+'reports-util')
assert 'object' === typename util
util.initReportsView2(__FILE) || return

$out {<h2>Repository activity (} util.getEventTypeLabel() {)  by year}
util.user && $out ' for user ' util.user
$out {</h2>}

util.generateRemoveUserLink()

var stmt = F.db.prepare({
        SELECT substr(date(mtime),1,4) AS timeframe,
        count(*) AS eventCount
        FROM v_reports
        GROUP BY timeframe ORDER BY timeframe DESC})

var maxEvents = 0, nCount
while(stmt.step()){
    nCount = stmt.get(1)
    (nCount>maxEvents) && (maxEvents = nCount)
}
stmt.reset()


var nEventTotal = 0, rowNumber = 0
if(!maxEvents){
    $out '<div>No activity :&apos;(.</div>'
}else{
    $out <<<EOF
        <table class='reports-table-events' border='0' cellpadding='2' cellspacing='0'>
        <thead><tr>
        <th>Year</th>
        <th>Events</th>
        <th width='90%'><!-- relative commits graph --></th>
        </tr></thead><tbody>
    EOF
    const timeLink = proc(time){
        return util.createAnchor( 'reports/by-month', time, object{
                year: time
        })
    }
    var user, nSize, timeframe, showYearTotal = 0, prevYear, year
    var nEventsPerYear = 0
    while(stmt.step()){
        rowNumber += 1
        timeframe = stmt.get(0)
        nCount = stmt.get(1)
        nCount || continue
        nSize = nCount ? (100 * nCount / maxEvents) : 0
        nSize || (nSize=1)
        showYearTotal = 0
        year = timeframe

        nEventTotal += nCount
        nEventsPerYear += nCount
        
        $out {<tr>}
        //$out {<tr class=} ((rowNumber%2) ? {'odd'} : {'even'}) {>}
        $out {<td>} timeLink(timeframe) {</td>}
        $out {<td>} nCount {</td>}
        $out {<td><div class='reports-graph-line' style=}
        $out {'width:%1$d%%;'}.applyFormat(nSize) {>&nbsp;</div>}
        $out {</td></tr>}
    }
    $out <<<EOF
        </tbody></table>
    EOF
}
stmt.finalize()

if(!util.year && nEventTotal){
    const nAvg = rowNumber ? (nEventTotal/rowNumber) : 0
    $out {<br/><div>Total events:} ' ' nEventTotal {<br/>}
    $out {Average per active year:} ' ' nAvg {</div>}
}