github.com/vlifesystems/rulehunter@v0.0.0-20180501090014-673078aa4a83/html/reports.go (about)

     1  // Copyright (C) 2016-2017 vLife Systems Ltd <http://vlifesystems.com>
     2  // Licensed under an MIT licence.  Please see LICENSE.md for details.
     3  
     4  package html
     5  
     6  import (
     7  	"html/template"
     8  	"io/ioutil"
     9  	"path/filepath"
    10  
    11  	"github.com/vlifesystems/rulehunter/config"
    12  	"github.com/vlifesystems/rulehunter/progress"
    13  	"github.com/vlifesystems/rulehunter/report"
    14  )
    15  
    16  func generateReports(
    17  	cfg *config.Config,
    18  	pm *progress.Monitor,
    19  ) error {
    20  	type TplData struct {
    21  		Reports []*TplReport
    22  		Html    map[string]template.HTML
    23  	}
    24  
    25  	reportFiles, err := ioutil.ReadDir(filepath.Join(cfg.BuildDir, "reports"))
    26  	if err != nil {
    27  		return err
    28  	}
    29  
    30  	numReportFiles := countFiles(reportFiles)
    31  	tplReports := make([]*TplReport, numReportFiles)
    32  
    33  	for i, file := range reportFiles {
    34  		if !file.IsDir() {
    35  			report, err := report.LoadJSON(cfg, file.Name(), maxReportLoadAttempts)
    36  			if err != nil {
    37  				return err
    38  			}
    39  			reportURLDir, err := generateReport(report, cfg)
    40  			if err != nil {
    41  				return err
    42  			}
    43  			tplReports[i] = newTplReport(
    44  				report.Mode,
    45  				report.Title,
    46  				makeTagLinks(report.Tags),
    47  				report.Category,
    48  				makeCategoryLink(report.Category),
    49  				reportURLDir,
    50  				report.Stamp,
    51  			)
    52  		}
    53  	}
    54  	sortTplReportsByDate(tplReports)
    55  	tplData := TplData{
    56  		Reports: tplReports,
    57  		Html:    makeHtml(cfg, "reports"),
    58  	}
    59  
    60  	outputFilename := filepath.Join("reports", "index.html")
    61  	return writeTemplate(cfg, outputFilename, reportsTpl, tplData)
    62  }