From 3ac02df4216917f35f7c45afb031659222215ffc Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Mon, 25 May 2020 23:48:22 +0000 Subject: [PATCH] --- .vscode/launch.json | 2 +- .../Controllers/ServerMetricsController.cs | 28 ++++++++++++++++--- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 6b9a0d68..95c9b301 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -50,7 +50,7 @@ "AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles", "AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles", "AYANOVA_METRICS_USE_INFLUXDB": "false", - "AYANOVA_SERVER_TEST_MODE":"true", + "AYANOVA_SERVER_TEST_MODE":"false", "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL":"small", "AYANOVA_SERVER_TEST_MODE_TZ_OFFSET":"-7", "AYANOVA_BACKUP_PG_DUMP_PATH":"C:\\data\\code\\PostgreSQLPortable_12.0\\App\\PgSQL\\bin\\" diff --git a/server/AyaNova/Controllers/ServerMetricsController.cs b/server/AyaNova/Controllers/ServerMetricsController.cs index dc5364f0..698b4428 100644 --- a/server/AyaNova/Controllers/ServerMetricsController.cs +++ b/server/AyaNova/Controllers/ServerMetricsController.cs @@ -1,6 +1,7 @@ using System; using System.ComponentModel.DataAnnotations; using System.Linq; +using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; @@ -55,7 +56,7 @@ namespace AyaNova.Api.Controllers /// Optional maximum records to return. If there are more records for the time period selected than this value the result will be downsampled using Largest-Triangle-Three-Buckets algorithm /// Snapshot of metrics [HttpGet] - public async Task GetMetrics([FromQuery, Required] int hours, [FromQuery] int? maxRecords) + public async Task GetMetrics([FromQuery] int? hours, [FromQuery] int? maxRecords) { if (serverState.IsClosed) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); @@ -64,11 +65,30 @@ namespace AyaNova.Api.Controllers { return StatusCode(403, new ApiNotAuthorizedResponse()); } - + //use specified values or just return all + maxRecords ??= int.MaxValue; + List MinuteMetrics = new List(); //Query the data and downsample if required - var maxDate = DateTime.UtcNow.Subtract(new TimeSpan(hours, 0, 0, 0)); - var MinuteMetrics = await ct.MetricMM.AsNoTracking().Where(z => z.t < maxDate).OrderBy(z => z.t).ToListAsync(); + if (hours != null) + { + DateTime maxDate = DateTime.UtcNow.Subtract(new TimeSpan((int)hours, 0, 0, 0)); + MinuteMetrics = await ct.MetricMM.AsNoTracking().Where(z => z.t > maxDate).OrderBy(z => z.t).ToListAsync(); + } + else + { + MinuteMetrics = await ct.MetricMM.AsNoTracking().OrderBy(z => z.t).ToListAsync(); + } + + + + + if (maxRecords < MinuteMetrics.Count) + { + //downsample it here + ;//https://github.com/sveinn-steinarsson/flot-downsample/ + + } //Log await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserIdFromContext.Id(HttpContext.Items), 0, AyaType.Metrics, AyaEvent.Retrieved), ct);