From 6d7fc999625a8f3042c08b03616a512428fd71fe Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 28 May 2020 14:37:56 +0000 Subject: [PATCH] --- .../Controllers/ServerMetricsController.cs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/server/AyaNova/Controllers/ServerMetricsController.cs b/server/AyaNova/Controllers/ServerMetricsController.cs index 15e659fd..08fccbbc 100644 --- a/server/AyaNova/Controllers/ServerMetricsController.cs +++ b/server/AyaNova/Controllers/ServerMetricsController.cs @@ -58,22 +58,23 @@ 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. There is a 400 record maximum fixed default /// Snapshot of metrics [HttpGet] - public async Task GetMetrics([FromQuery] DateTime tsStart, [FromQuery] DateTime tsEnd, [FromQuery] int? maxRecords) + public async Task GetMetrics([FromQuery, Required] DateTime? tsStart, [FromQuery, Required] DateTime? tsEnd, [FromQuery] int? maxRecords) { + //Note: the date and times are nullable and required so that the regular modelstate code kicks in to ensure they are present + if (serverState.IsClosed) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); - if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.Metrics)) - { return StatusCode(403, new ApiNotAuthorizedResponse()); - } + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); //use specified values or just return all maxRecords ??= MAX_RECORDS_BEFORE_DOWNSAMPLING; List MinuteMetrics = new List(); //touniversal is because the parameters are converted to local time here, but then sent to the query as local time as well and not universal time which is what it should be - MinuteMetrics = await ct.MetricMM.AsNoTracking().Where(z => z.t >= tsStart.ToUniversalTime() && z.t <= tsEnd.ToUniversalTime()).OrderBy(z => z.t).ToListAsync(); + MinuteMetrics = await ct.MetricMM.AsNoTracking().Where(z => z.t >= ((DateTime)tsStart).ToUniversalTime() && z.t <= ((DateTime)tsEnd).ToUniversalTime()).OrderBy(z => z.t).ToListAsync(); //Log await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserIdFromContext.Id(HttpContext.Items), 0, AyaType.Metrics, AyaEvent.Retrieved), ct); @@ -82,7 +83,7 @@ namespace AyaNova.Api.Controllers //Downsample if (maxRecords < MinuteMetrics.Count) - { + { var dsCPU = MinuteMetrics.Select(z => new Tuple(z.t.ToOADate(), z.CPU)).ToList(); dsCPU = Util.DataUtil.LargestTriangleThreeBuckets(dsCPU, (int)maxRecords) as List>; @@ -137,7 +138,7 @@ namespace AyaNova.Api.Controllers { DownSampled = false, MetricMM = new - { + { labels = MinuteMetrics.Select(z => z.t).ToArray(), cpu = MinuteMetrics.Select(z => z.CPU).ToArray(), gen0 = MinuteMetrics.Select(z => z.Gen0).ToArray(),