private string BuildStatsPage(NameValueCollection parts) { StringBuilder stb = new StringBuilder(); IncludeResourceScript(stb, "iframeResizer.contentWindow.min.js"); var culture = CultureInfo.CurrentUICulture; var query = parts[QueryPartId] ?? string.Empty; try { var queryData = GetData(HttpUtility.UrlDecode(query)); if (queryData.Count > 0) { //Display the first row/column only stb.Append("<table id=\"results\" class=\"cell-border compact\" style=\"width:100%\">"); var firstRow = queryData[0]; foreach (var pair in firstRow) { if (string.CompareOrdinal(pair.Key, InfluxDBHelper.TimeColumn) != 0) { 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(@"</tr>"); } } stb.AppendLine(@"</table>"); } return(stb.ToString()); } catch (Exception ex) { return(Invariant($"<br><div style='color:Red'>{ex.GetFullMessage()}</div><br>")); } }
private void BuildTable(string query, StringBuilder stb, int pageLength) { try { var culture = CultureInfo.CurrentUICulture; var queryData = GetData(query); if (queryData.Count > 0) { var columns = queryData[0].Keys; stb.Append("<table id=\"results\" class=\"cell-border compact\" style=\"width:100%\">"); stb.Append(@"<thead><tr>"); foreach (var column in columns) { stb.Append(Invariant($"<th>{ HtmlEncode(FirstCharToUpper(column, culture))}</th>")); } stb.Append(@"</tr></thead>"); stb.Append(@"<tbody>"); DateTimeOffset today = DateTimeOffset.Now.Date; foreach (var row in queryData) { bool anyValue = row.Any(x => (string.CompareOrdinal(x.Key, InfluxDBHelper.TimeColumn) != 0) && (x.Value != null)); if (!anyValue) { continue; } stb.Append(@"<tr>"); foreach (var columnName in columns) { object column = row[columnName]; string value = string.Empty; string sortValue = null; if (string.CompareOrdinal(columnName, InfluxDBHelper.TimeColumn) == 0) { DateTime timePoint = ((DateTime)column).ToLocalTime(); sortValue = (new DateTimeOffset(timePoint)).ToUnixTimeSeconds().ToString(CultureInfo.InvariantCulture); value = ConvertInfluxDBDateTimeToString(today, culture, timePoint); } else { value = InfluxDBHelper.GetSerieValue(culture, column); } if (sortValue != null) { stb.Append(Invariant($"<td data-order='{HtmlEncode(sortValue)}' class='tablecell'>{HtmlEncode(value)}</td>")); } else { stb.Append(Invariant($"<td class='tablecell'>{HtmlEncode(value)}</td>")); } } stb.Append(@"</tr>"); } stb.Append(@"</tbody>"); stb.Append(@"</table>"); stb.AppendLine("<script type='text/javascript'>"); stb.AppendLine(@"$(document).ready(function() {"); stb.AppendLine(@"$('#results').DataTable({ 'order': [],"); stb.AppendLine(Invariant($" 'pageLength': {pageLength}, ")); stb.AppendLine(@" 'columnDefs': [ { 'className': 'dt-left', 'targets': '_all'} ] }); });"); stb.AppendLine("</script>"); } else { stb.AppendLine("No data"); } } catch (Exception ex) { stb.Append(Invariant($"<br><div style='color:Red'>{ex.GetFullMessage()}</div><br>")); } }
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>")); } }
private string BuildChartsPage(NameValueCollection parts) { CultureInfo cultureInfo = CultureInfo.CurrentUICulture; StringBuilder stb = new StringBuilder(); var query = parts[QueryPartId] ?? string.Empty; var title = parts[TitlePartId] ?? string.Empty; try { var queryData = GetData(HttpUtility.UrlDecode(query)); IncludeResourceCSS(stb, "metricsgraphics.css"); IncludeResourceScript(stb, "d3.min.js"); IncludeResourceScript(stb, "metricsgraphics.min.js"); stb.AppendLine("<table align=\"center\" "); stb.AppendLine("<tr><td id='chartGraph2' align=\"center\"></td>"); stb.AppendLine("<tr><td id='legend' align=\"center\"></td>"); stb.AppendLine("</table>"); stb.AppendLine("<script>"); stb.AppendLine(@"function chartData() {"); var legands = new List <string>(); if (queryData.Count > 0) { var nonTimeColumns = queryData.First().Keys.Where(x => (0 != string.CompareOrdinal(x, InfluxDBHelper.TimeColumn))); foreach (var nonTimeColumn in nonTimeColumns) { legands.Add(Invariant($"'{FirstCharToUpper(nonTimeColumn, cultureInfo)}'")); } var dataStrings = new Dictionary <string, StringBuilder>(); foreach (var row in queryData) { long jsMilliseconds = 0; foreach (var pair in row) { if (string.CompareOrdinal(pair.Key, InfluxDBHelper.TimeColumn) == 0) { var timePoint = (DateTime)pair.Value; jsMilliseconds = (new DateTimeOffset(timePoint)).ToLocalTime().ToUnixTimeMilliseconds(); } else { if (pair.Value != null) { if (!dataStrings.TryGetValue(pair.Key, out StringBuilder stringBuilder)) { stringBuilder = new StringBuilder(); dataStrings.Add(pair.Key, stringBuilder); } stringBuilder.AppendLine(Invariant($"{{ date: new Date({jsMilliseconds}),value: {InfluxDBHelper.GetSerieValue(CultureInfo.InvariantCulture, pair.Value)}}},")); } } } } stb.AppendLine("return ["); foreach (var nonTimeColumn in nonTimeColumns) { stb.AppendLine("["); stb.Append(dataStrings[nonTimeColumn].ToString()); stb.AppendLine("],"); } stb.AppendLine("]"); } stb.AppendLine(@"} var chartDataFromDB = chartData();"); stb.AppendLine(@"MG.data_graphic({ data: chartDataFromDB, target: document.getElementById('chartGraph2'), width: 900, x_extended_ticks: true, height: 450, area: true, interpolate: d3.curveStep, min_y_from_data: true, right: 40, // y_rollover_format: function(d) { return ' ' + String(d.value); }, x_rollover_format: function(d) { return d.date.toLocaleString() + ' '; },"); stb.AppendLine(Invariant($" title:'{title}',")); stb.AppendLine(Invariant($" legend:[{string.Join(",", legands)}],")); stb.AppendLine("legend_target: document.getElementById('legend'),"); stb.AppendLine("});"); stb.AppendLine("</script>"); IncludeResourceScript(stb, "iframeResizer.contentWindow.min.js"); return(stb.ToString()); } catch (Exception ex) { return(Invariant($"<br><div style='color:Red'>{ex.GetFullMessage()}</div><br>")); } }