From 7d02af3aeff21bbd12eb26ebcc8657cd6bdaa4f8 Mon Sep 17 00:00:00 2001 From: Alan Edwardes Date: Tue, 6 Aug 2024 22:45:04 +0100 Subject: [PATCH] Adds page limit to stats server. --- misc/Ae.Dns.Console/Startup.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/misc/Ae.Dns.Console/Startup.cs b/misc/Ae.Dns.Console/Startup.cs index 7f61ceb..76bd7fb 100644 --- a/misc/Ae.Dns.Console/Startup.cs +++ b/misc/Ae.Dns.Console/Startup.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Data; @@ -66,6 +67,12 @@ async Task WriteTable(DataTable table) await context.Response.WriteAsync(""); } + var pageLimit = 20; + if (context.Request.Query.ContainsKey("limit")) + { + _ = int.TryParse(context.Request.Query["limit"], out pageLimit); + } + async Task GroupToTable(IEnumerable> groups, params string[] headings) { var table = new DataTable(); @@ -77,17 +84,17 @@ async Task GroupToTable(IEnumerable> groups, params table.Columns.Add("Percentage"); - var itemCounts = groups.Select(x => KeyValuePair.Create(x.Key, x.Count())).OrderByDescending(x => x.Value).ToList(); + var itemCounts = groups.Select(x => KeyValuePair.Create(x.Key, x.Count())).OrderByDescending(x => x.Value).ToList(); var totalCount = itemCounts.Sum(x => x.Value); int CalculatePercentage(int count) => (int)(count / (double)totalCount * (double)100d); - foreach (var group in itemCounts.Take(20)) + foreach (var group in itemCounts.Take(pageLimit)) { table.Rows.Add(group.Key, group.Value, CalculatePercentage(group.Value) + "%"); } - var remaining = itemCounts.Skip(20).Sum(x => x.Value); + var remaining = itemCounts.Skip(pageLimit).Sum(x => x.Value); if (remaining > 0) { table.Rows.Add("Other", remaining, CalculatePercentage(remaining) + "%");