private string BuildHistogramPage(NameValueCollection parts) { StringBuilder stb = new StringBuilder(); var query = parts[QueryPartId] ?? string.Empty; var duration = parts[QueryDurationId] ?? string.Empty; QueryDuration queryDuration = QueryDuration.D1h; _ = Enum.TryParse <QueryDuration>(duration, out queryDuration); IncludeDataTableFiles(stb); IncludeResourceScript(stb, "iframeResizer.contentWindow.min.js"); try { var culture = CultureInfo.CurrentUICulture; TimeSpan durationTimeSpan = InfluxDbQueryBuilder.GetTimeSpan(queryDuration); var queryData = GetData(HttpUtility.UrlDecode(query)); var histogram = InfluxDBHelper.CreateHistogram(queryData, durationTimeSpan); if (histogram.Count > 0) { //Display the first row/column only stb.Append("<table id=\"results\" class=\"cell-border compact\" style=\"width:100%\">"); stb.Append(@"<thead align='left'><tr>"); stb.Append(@"<th>Value</th>"); stb.Append(@"<th>Total time</th>"); stb.Append(@"<th>Percentage</th>"); stb.Append(@"</tr></thead>"); stb.Append(@"<tbody>"); var firstRow = queryData[0]; foreach (var pair in histogram) { stb.Append(@"<tr class='tablecell'>"); stb.Append(@"<td>"); stb.Append(HtmlEncode(FirstCharToUpper(pair.Key, culture))); stb.Append(@"</td>"); stb.Append(@"<td>"); stb.Append(HtmlEncode(InfluxDBHelper.GetSerieValue(culture, pair.Value))); stb.Append(@"</td>"); stb.Append(@"<td>"); double percentage = 100 * pair.Value.TotalMilliseconds / durationTimeSpan.TotalMilliseconds; stb.Append(HtmlEncode(InfluxDBHelper.GetSerieValue(culture, percentage))); stb.Append(@"</td>"); stb.Append(@"</tr>"); } stb.Append(@"</tbody>"); stb.AppendLine(@"</table>"); } return(stb.ToString()); } catch (Exception ex) { return(Invariant($"<br><div style='color:Red'>{ex.GetFullMessage()}</div><br>")); } }