diff --git a/PARR.API/Contracts/V1/ApiRoutes.cs b/PARR.API/Contracts/V1/ApiRoutes.cs index daf87d89..f07a4151 100644 --- a/PARR.API/Contracts/V1/ApiRoutes.cs +++ b/PARR.API/Contracts/V1/ApiRoutes.cs @@ -220,7 +220,7 @@ public static class StatRobotState { - public const string Get = BaseStat + "/robot-states/"; + public const string Get = BaseStat + "/robot-states/{robot}"; public const string Send = BaseStat + "/robot-states/"; } diff --git a/PARR.API/Contracts/V1/Requests/Queries/RobotStateGetQuery.cs b/PARR.API/Contracts/V1/Requests/Queries/RobotStateGetQuery.cs new file mode 100644 index 00000000..963e70b2 --- /dev/null +++ b/PARR.API/Contracts/V1/Requests/Queries/RobotStateGetQuery.cs @@ -0,0 +1,8 @@ +namespace PARR.API.Contracts.V1.Requests.Queries +{ + public class RobotStateGetQuery + { + public DateTimeOffset? DateStart { get; set; } + public DateTimeOffset? DateEnd { get; set; } + } +} diff --git a/PARR.API/Controllers/V1/Statistics/StatRobotStateController.cs b/PARR.API/Controllers/V1/Statistics/StatRobotStateController.cs index b6532576..60453e2e 100644 --- a/PARR.API/Controllers/V1/Statistics/StatRobotStateController.cs +++ b/PARR.API/Controllers/V1/Statistics/StatRobotStateController.cs @@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using PARR.API.Contracts.V1; using PARR.API.Contracts.V1.Requests; +using PARR.API.Contracts.V1.Requests.Queries; using PARR.API.Contracts.V1.Responses.Base; using PARR.API.Controllers.V1.Base; using PARR.Constants; @@ -35,6 +36,54 @@ namespace PARR.API.Controllers.V1.Statistics } + /// + /// Доступность робота + /// + /// + [HttpGet(ApiRoutes.StatRobotState.Get)] + public async Task Get([FromRoute] RobotsAllEnum robot, [FromQuery] RobotStateGetQuery query) + { + + var result = await influxDbService.QueryAsync(async handler => + { + //var flux = "from(bucket:\"robots\") " + + // "|> range(start: 0) " + + // "|> filter(fn: (r) => " + + // "r._measurement == \"altitude\" and " + + // "r._value > 3500)"; + + var query = $"from(bucket:\"{influxDbSettings.Robots!.Bucket}\") " + + $"|> range(start: -3h) " + + $"|> filter(fn: (r) => " + + $"r._measurement == \"robots\" " + + $"and r.robot == \"{robot.ToString()}\"" + + $")"; + + + var tables = await handler.QueryAsync(query, influxDbSettings.Organization); + + + //return tables.SelectMany(table => + // table.Records.Select(record => + // new AltitudeModel + // { + // Time = record.GetTime().ToString(), + // Altitude = int.Parse(record.GetValue()?.ToString() ?? "0") + // })); + + + return ""; + }, influxDbSettings.Robots!.Token); + + if (result == null) + return BadRequest(new Response(false, new List { new ErrorModel { Message = $"Ошибка при получении статистики" } })); + + + return Ok(); + } + + + /// /// Статистика доступности роботов. Передать инф-у о доступности /// @@ -59,7 +108,7 @@ namespace PARR.API.Controllers.V1.Statistics }, influxDbSettings.Robots!.Token); if (!result) - return BadRequest($"Ошибка при отправке данных"); + return BadRequest(new Response(false, new List { new ErrorModel { Message = $"Ошибка при отправке данных" } })); return Ok(new Response("", true)); } diff --git a/PARR.DAL/InfluxDbServices/InfluxDbService.cs b/PARR.DAL/InfluxDbServices/InfluxDbService.cs index 1235863e..901c4123 100644 --- a/PARR.DAL/InfluxDbServices/InfluxDbService.cs +++ b/PARR.DAL/InfluxDbServices/InfluxDbService.cs @@ -19,9 +19,6 @@ namespace PARR.DAL.InfluxDbServices { try { - //using var client = new InfluxDBClient(settings.Url, token); - //using var write = client.GetWriteApi(); - using var client = new InfluxDBClient(settings.Url, token); using (var write = client.GetWriteApi()) { @@ -39,21 +36,21 @@ namespace PARR.DAL.InfluxDbServices public async Task QueryAsync(Func> action, string token) { - //TODO: - throw new NotImplementedException(); - //try - //{ - using var client = InfluxDBClientFactory.Create(settings.Url, token); - var query = client.GetQueryApi(); + try + { + using var client = new InfluxDBClient(settings.Url, token); + var query = client.GetQueryApi(); - return await action(query); - //} - //catch (Exception ex) - //{ - // logger.LogError(ex, "Ошибка при запросе данных из БД, InfuxDb"); - // // return Task.FromResult(); - // return Task.CompletedTask; - //} + return await action(query); + } + catch (Exception ex) + { + logger.LogError(ex, "Ошибка при запросе данных из БД, InfuxDb"); + // return Task.FromResult(); + // return Task.CompletedTask; + //return default(T); + return default(T); + } } } }