From 9e55dfa9b5d1a7703bfa3d715fecadb3094a748d Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Wed, 20 Dec 2023 13:43:03 +1000 Subject: [PATCH] =?UTF-8?q?fix(api):=20=D0=A1=D1=82=D0=B0=D1=82=D0=B8?= =?UTF-8?q?=D1=81=D1=82=D0=B8=D0=BA=D0=B0=20=D1=85=D0=BE=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=BC,=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=D0=BC,=20=D1=85=D0=BE=D1=81=D1=82=D0=B0=D0=BC=20?= =?UTF-8?q?=D0=B2=20=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PARR.API/Contracts/V1/ApiRoutes.cs | 11 ++++ .../Statistics/StatApplicationResponse.cs | 11 ++++ .../Responses/Statistics/StatHostResponse.cs | 11 ++++ .../Statistics/StatHostTemplateResponse.cs | 8 +++ .../Statistics/StatApplicationController.cs | 45 +++++++++++++ .../V1/Statistics/StatHostController.cs | 64 +++++++++++++++++++ 6 files changed, 150 insertions(+) create mode 100644 PARR.API/Contracts/V1/Responses/Statistics/StatApplicationResponse.cs create mode 100644 PARR.API/Contracts/V1/Responses/Statistics/StatHostResponse.cs create mode 100644 PARR.API/Contracts/V1/Responses/Statistics/StatHostTemplateResponse.cs create mode 100644 PARR.API/Controllers/V1/Statistics/StatApplicationController.cs create mode 100644 PARR.API/Controllers/V1/Statistics/StatHostController.cs diff --git a/PARR.API/Contracts/V1/ApiRoutes.cs b/PARR.API/Contracts/V1/ApiRoutes.cs index 8a210088..902e57b3 100644 --- a/PARR.API/Contracts/V1/ApiRoutes.cs +++ b/PARR.API/Contracts/V1/ApiRoutes.cs @@ -187,6 +187,17 @@ namespace PARR.API.Contracts.V1 public const string Get = BaseStat + "/templates/"; } + public static class StatHost + { + public const string Get = BaseStat + "/hosts/"; + public const string GetWithTemplates = BaseStat + "/hosts/templates"; + } + + public static class StatApplication + { + public const string Get = BaseStat + "/applications/"; + } + #endregion } diff --git a/PARR.API/Contracts/V1/Responses/Statistics/StatApplicationResponse.cs b/PARR.API/Contracts/V1/Responses/Statistics/StatApplicationResponse.cs new file mode 100644 index 00000000..5e5f38ef --- /dev/null +++ b/PARR.API/Contracts/V1/Responses/Statistics/StatApplicationResponse.cs @@ -0,0 +1,11 @@ +namespace PARR.API.Contracts.V1.Responses.Statistics +{ + public class StatApplicationResponse + { + public int AllApplications { get; set; } + + public int CreatedLastDay { get; set; } + + public int UpdatedLastDay { get; set; } + } +} diff --git a/PARR.API/Contracts/V1/Responses/Statistics/StatHostResponse.cs b/PARR.API/Contracts/V1/Responses/Statistics/StatHostResponse.cs new file mode 100644 index 00000000..4a1ea2bb --- /dev/null +++ b/PARR.API/Contracts/V1/Responses/Statistics/StatHostResponse.cs @@ -0,0 +1,11 @@ +namespace PARR.API.Contracts.V1.Responses.Statistics +{ + public class StatHostResponse + { + public int AllHosts { get; set; } + + public int CreatedLastDay { get; set; } + + public int UpdatedLastDay { get; set;} + } +} diff --git a/PARR.API/Contracts/V1/Responses/Statistics/StatHostTemplateResponse.cs b/PARR.API/Contracts/V1/Responses/Statistics/StatHostTemplateResponse.cs new file mode 100644 index 00000000..57f4683d --- /dev/null +++ b/PARR.API/Contracts/V1/Responses/Statistics/StatHostTemplateResponse.cs @@ -0,0 +1,8 @@ +namespace PARR.API.Contracts.V1.Responses.Statistics +{ + public class StatHostTemplateResponse + { + public int AllHosts { get; set; } + public int HostsInTemplates { get; set; } + } +} diff --git a/PARR.API/Controllers/V1/Statistics/StatApplicationController.cs b/PARR.API/Controllers/V1/Statistics/StatApplicationController.cs new file mode 100644 index 00000000..c8e461e2 --- /dev/null +++ b/PARR.API/Controllers/V1/Statistics/StatApplicationController.cs @@ -0,0 +1,45 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using PARR.API.Contracts.V1; +using PARR.API.Contracts.V1.Responses.Base; +using PARR.API.Contracts.V1.Responses.Statistics; +using PARR.API.Controllers.V1.Base; +using PARR.Constants; +using PARR.DAL.Services.Interfaces; + +namespace PARR.API.Controllers.V1.Statistics +{ + /// + /// Статистика по приложениям + /// + [Authorize(Roles = ParrRoles.Administrator.Role)] + public class StatApplicationController : BaseApiController + { + private readonly IApplicationService applicationService; + + public StatApplicationController(IApplicationService applicationService) + { + this.applicationService = applicationService; + } + + /// + /// Статистика синхронизации приложений с АИХИТ за последние сутки + /// + /// + [HttpGet(ApiRoutes.StatApplication.Get)] + public async Task Get() + { + var queryDate = DateTimeOffset.UtcNow.AddDays(-1); + + var response = new StatApplicationResponse + { + AllApplications = await applicationService.Get().CountAsync(), + CreatedLastDay = await applicationService.Get().CountAsync(t => t.DateCreated >= queryDate), + UpdatedLastDay = await applicationService.Get().CountAsync(t => t.DateModified.HasValue && t.DateModified.Value >= queryDate), + }; + + return Ok(new Response(response, true)); + } + } +} diff --git a/PARR.API/Controllers/V1/Statistics/StatHostController.cs b/PARR.API/Controllers/V1/Statistics/StatHostController.cs new file mode 100644 index 00000000..9a3fd065 --- /dev/null +++ b/PARR.API/Controllers/V1/Statistics/StatHostController.cs @@ -0,0 +1,64 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using PARR.API.Contracts.V1; +using PARR.API.Contracts.V1.Responses.Base; +using PARR.API.Contracts.V1.Responses.Statistics; +using PARR.API.Controllers.V1.Base; +using PARR.Constants; +using PARR.DAL.Services.Interfaces; + +namespace PARR.API.Controllers.V1.Statistics +{ + /// + /// Статистика по хостам + /// + [Authorize(Roles = ParrRoles.Administrator.Role)] + public class StatHostController : BaseApiController + { + private readonly IHostService hostService; + + public StatHostController(IHostService hostService) + { + this.hostService = hostService; + } + + /// + /// Статистика синхронизации хостов с АИХИТ за последние сутки + /// + /// + [HttpGet(ApiRoutes.StatHost.Get)] + public async Task Get() + { + var queryDate = DateTimeOffset.UtcNow.AddDays(-1); + + var response = new StatHostResponse + { + AllHosts = await hostService.Get().CountAsync(), + CreatedLastDay = await hostService.Get().CountAsync(t => t.DateCreated >= queryDate), + UpdatedLastDay = await hostService.Get().CountAsync(t => t.DateModified.HasValue && t.DateModified.Value >= queryDate) + }; + + return Ok(new Response(response, true)); + } + + + /// + /// Количество хостов в шаблонах + /// + /// + [HttpGet(ApiRoutes.StatHost.GetWithTemplates)] + public async Task GetWithTemplates() + { + //считаем именно хосты в шаблонах, т е один хост может быть в нескольких шаблонах + + var response = new StatHostTemplateResponse + { + AllHosts = await hostService.Get().CountAsync(), + HostsInTemplates = await hostService.Get().Include(t => t.Templates).CountAsync(t =>t.Templates.Any()) + }; + + return Ok(new Response(response, true)); + } + } +}