31 #ifndef GRAPHCHI_HTML_REPORTER
32 #define GRAPHCHI_HTML_REPORTER
45 class html_reporter :
public imetrics_reporter {
54 html_reporter(std::string fname) : filename(fname) {
56 f = fopen(fname.c_str(),
"w");
58 fprintf(f,
"<html><head><title>GraphCHI Metrics Report</title>");
59 fprintf(f,
"<style>\n");
60 fprintf(f,
"table { border: 1px solid #999999; font: normal 80%%/140%% arial, helvetica, sans-serif; color: #555; background: #fff;} td, th {border: 1px dotted #bbb; padding: .5em; width:100px} ");
61 fprintf(f,
"</style></head><body>");
64 virtual ~html_reporter() {
65 fprintf(f,
"</body></html>");
69 virtual void do_report(std::string name, std::string ident, std::map<std::string, metrics_entry> & entries) {
71 fprintf(f,
"<h3>%s:%s</h3>\n", name.c_str(), ident.c_str());
73 fprintf(f,
"<h3>%s</h3>\n", name.c_str());
78 for(
int round=0; round<4; round++) {
79 std::map<std::string, metrics_entry>::iterator it;
81 fprintf(f,
"<!-- Round %d -->\n", round);
83 for(it = entries.begin(); it != entries.end(); ++it) {
84 metrics_entry ent = it->second;
89 fprintf(f,
"<table><tr><th>Key</th><th>Value</th><th>Count</th><th>Min</th><th>Max</th><th>Average</th></tr>");
91 fprintf(f,
"<tr><td>%s</td>\n", it->first.c_str());
93 fprintf(f,
"<td>%ld</td>\n", (
long int) ent.value);
95 fprintf(f,
"<td>%ld</td>\n", (
long int) ent.count);
96 fprintf(f,
"<td>%ld</td>\n", (
long int) ent.minvalue);
97 fprintf(f,
"<td>%ld</td>\n", (
long int) ent.maxvalue);
98 fprintf(f,
"<td>%.3lf</td>\n", ent.cumvalue/(
double)ent.count);
99 }
else fprintf(f,
"<td colspan=4> </td>");
106 fprintf(f,
"<table><tr><th>Key</th><th>Value</th><th>Count</th><th>Min</th><th>Max</th><th>Average</th></tr>");
109 if (ent.valtype == TIME && round == 1) {
111 fprintf(f,
"<table><tr><th>Key</th><th>Value (sec)</th><th>Count</th><th>Min (sec)</th><th>Max (sec)</th><th>Average (sec)</th></tr>\n");
113 if ((round == 0 && ent.valtype == REAL)||(round == 1 && ent.valtype == TIME)) {
114 fprintf(f,
"<tr><td>%s</td>\n", it->first.c_str());
116 fprintf(f,
"<td>%lf</td>\n", ent.value);
118 fprintf(f,
"<td>%ld</td>\n", (
long int) ent.count);
119 fprintf(f,
"<td>%.3lf</td>\n", ent.minvalue);
120 fprintf(f,
"<td>%.3lf</td>\n", ent.maxvalue);
121 fprintf(f,
"<td>%.3lf</td>\n", ent.cumvalue/(
double)ent.count);
122 }
else fprintf(f,
"<td colspan=4> </td>");
129 fprintf(f,
"<table><tr><th>Key</th><th>Value</th></tr>\n");
130 fprintf(f,
"<tr><td>%s</td><td width=400>%s</td>\n", it->first.c_str(), ent.stringval.c_str());
142 if (c>0) fprintf(f,
"</table>");