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

     1  // Copyright (C) 2016-2018 vLife Systems Ltd <http://vlifesystems.com>
     2  // Licensed under an MIT licence.  Please see LICENSE.md for details.
     3  
     4  package html
     5  
     6  const reportTpl = `
     7  <!DOCTYPE html>
     8  <html>
     9  	<head>
    10  		{{ index .Html "head" }}
    11  		<title>{{.Title}}</title>
    12  	</head>
    13  
    14  	<body>
    15  		{{ index .Html "nav" }}
    16  
    17  		<div id="content">
    18  			<div class="container">
    19  				<h1>{{.Title}}</h1>
    20  				Date: {{ .DateTime }} &nbsp;
    21  				Mode: {{ .Mode }} &nbsp;
    22  				{{if .Category}}
    23  					Category: <a href="{{ .CategoryURL }}">{{ .Category }}</a> &nbsp;
    24  				{{end}}
    25  				{{if .Tags}}
    26  					Tags:
    27  					{{range $tag, $tagLink := .Tags}}
    28  						<a href="{{ $tagLink }}">{{ $tag }}</a> &nbsp;
    29  					{{end}}
    30  				{{end}}
    31  				<br />
    32  				<br />
    33  			</div>
    34  
    35  			<div class="container">
    36  				<h2>Results</h2>
    37  
    38  				{{ $numAssessments := len .Assessments }}
    39  				{{ $assessments := .Assessments }}
    40  				{{range $i, $a := .Assessments}}
    41  					<div class="rule">
    42  						{{if eq $numAssessments 1}}
    43  							<h3>No rule found that improves on the original dataset</h3>
    44  
    45  							<div class="pull-left aggregators">
    46  								<table class="table table-bordered">
    47  									<tr>
    48  										<th>Aggregator</th>
    49  										<th>Value</th>
    50  									</tr>
    51  									{{ range $a.Aggregators }}
    52  									<tr>
    53  										<td>{{ .Name }}</td>
    54  										<td>{{ .OriginalValue }}</td>
    55  									</tr>
    56  									{{ end }}
    57  								</table>
    58  							</div>
    59  
    60  							{{if $a.Goals}}
    61  								<div class="pull-left">
    62  									<table class="table table-bordered">
    63  										<tr>
    64  											<th>Goal</th><th>Value</th>
    65  										</tr>
    66  										{{ range $a.Goals }}
    67  										<tr>
    68  											<td>{{ .Expr }}</td>
    69  											<td class="goalPassed-{{.OriginalPassed}}">
    70  												{{ .OriginalPassed }}
    71  											</td>
    72  										</tr>
    73  										{{ end }}
    74  									</table>
    75  								</div>
    76  							{{end}}
    77  
    78  						{{else}}
    79  							{{ if IsLast $i $assessments | not}}
    80  								<h3>{{ .Rule }}</h3>
    81  								<div class="pull-left aggregators">
    82  									<table class="table table-bordered">
    83  										<tr>
    84  											<th>Aggregator</th>
    85  											<th>Original Value</th>
    86  											<th>Rule Value</th>
    87  											<th>Change</th>
    88  										</tr>
    89  										{{ range $a.Aggregators }}
    90  										<tr>
    91  											<td>{{ .Name }}</td>
    92  											<td>{{ .OriginalValue }}</td>
    93  											<td>{{ .RuleValue }}</td>
    94  											<td>{{ .Difference }}</td>
    95  										</tr>
    96  										{{ end }}
    97  									</table>
    98  								</div>
    99  
   100  								{{if $a.Goals}}
   101  									<div class="pull-left">
   102  										<table class="table table-bordered">
   103  											<tr>
   104  												<th>Goal</th><th>Original Value</th><th>Rule Value</th>
   105  											</tr>
   106  											{{ range $a.Goals }}
   107  											<tr>
   108  												<td>{{ .Expr }}</td>
   109  												<td class="goalPassed-{{.OriginalPassed}}">
   110  													{{ .OriginalPassed }}
   111  												</td>
   112  												<td class="goalPassed-{{.RulePassed}}">
   113  													{{ .RulePassed }}
   114  												</td>
   115  											</tr>
   116  											{{ end }}
   117  										</table>
   118  									</div>
   119  								{{end}}
   120  
   121  							{{ end }}
   122  						{{ end }}
   123  					</div>
   124  				{{ end }}
   125  			</div>
   126  
   127  
   128  			<div class="container">
   129  				<h2>Experiment Details</h2>
   130  				<p>Experiment file: {{ .ExperimentFilename }}</p>
   131  				<br />
   132  				<table class="table table-bordered table-nonfluid">
   133  					<tr>
   134  						<th>Sort Order</th><th>Direction</th>
   135  					</tr>
   136  					{{range .SortOrder}}
   137  						<tr>
   138  							<td>{{ .Aggregator }}</td><td>{{ .Direction }}</td>
   139  						</tr>
   140  					{{end}}
   141  				</table>
   142  
   143  				{{if .Aggregators}}
   144  					<table class="table table-bordered">
   145  						<tr>
   146  							<th>Aggregator Name</th><th>Kind</th><th>Arg</th>
   147  						</tr>
   148  						{{range .Aggregators}}
   149  							<tr>
   150  								<td>{{ .Name }}</td><td>{{ .Kind }}</td><td>{{ .Arg }}</td>
   151  							</tr>
   152  						{{end}}
   153  					</table>
   154  				{{end}}
   155        </div>
   156  
   157  			<div class="container">
   158  				<h2>Data Set</h2>
   159  				The data set contained {{ .NumRecords }} records.</br />
   160  				<br />
   161  				<table class="table table-bordered">
   162  					<tr>
   163  						<th>Field</th>
   164  						<th>Kind</th>
   165  						<th>Min</th>
   166  						<th>Max</th>
   167  						<th>MaxDP</th>
   168  						<th>Values - ('value', freq)</th>
   169  					</tr>
   170  					{{range $field, $fd := .Description.Fields}}
   171  						<tr>
   172  							<td>{{ $field }}</td>
   173  							<td>{{ $fd.Kind }}</td>
   174  							{{if eq $fd.Kind.String "Number"}}
   175  								<td>{{ $fd.Min }}</td>
   176  								<td>{{ $fd.Max }}</td>
   177  								<td>{{ $fd.MaxDP }}</td>
   178  							{{else}}
   179  								<td>N/A</td><td>N/A</td><td>N/A</td>
   180  							{{end}}
   181  							<td>
   182  								{{range $value, $valueDesc := $fd.Values}}
   183  							    ('{{ $value }}', {{ $valueDesc.Num }}) &nbsp;
   184  								{{end}}
   185  							</td>
   186  						</tr>
   187  					{{end}}
   188  				</table>
   189  			</div>
   190  
   191  		</div>
   192  
   193  
   194  		<div id="footer" class="container">
   195  			{{ index .Html "footer" }}
   196  		</div>
   197  
   198  		{{ index .Html "bootstrapJS" }}
   199  	</body>
   200  </html>`