Beispiel #1
0
        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>"));
            }
        }
Beispiel #2
0
        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>"));
            }
        }
Beispiel #3
0
        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>"));
            }
        }
Beispiel #4
0
        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>"));
            }
        }