From f010882f6d0c18db8236fb40113e824da8571f78 Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Fri, 9 Jun 2023 12:25:56 +0500 Subject: [PATCH 1/4] =?UTF-8?q?=D0=97=D0=B0=D0=BA=D1=80=D0=B5=D0=BF=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D0=BB=D1=8F=20"?= =?UTF-8?q?=D0=94=D0=B0=D1=82=D0=B0"=20=D0=B2=20=D0=A0=D0=A2=D0=9A-=D0=BE?= =?UTF-8?q?=D1=82=D1=87=D0=B5=D1=82=D0=B5=20(excel)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProcessMap/ProcessMapReportTemplate.xlsx | Bin 7857 -> 7850 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/AsbCloudInfrastructure/Services/ProcessMap/ProcessMapReportTemplate.xlsx b/AsbCloudInfrastructure/Services/ProcessMap/ProcessMapReportTemplate.xlsx index ecc6302b8f5938b94cc05ceaf927b7371a9206e2..dfdc742266c743218af4f156f99285faa9d0f09d 100644 GIT binary patch delta 3868 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 Date: Tue, 20 Jun 2023 12:35:21 +0500 Subject: [PATCH 2/4] RequerstTrackerMiddleware. Add RequestLogDto.RequestContentLength --- AsbCloudApp/Data/RequestLogDto.cs | 5 +++++ AsbCloudWebApi/Middlewares/RequerstTrackerMiddleware.cs | 2 ++ 2 files changed, 7 insertions(+) diff --git a/AsbCloudApp/Data/RequestLogDto.cs b/AsbCloudApp/Data/RequestLogDto.cs index ecdb183e..b930df52 100644 --- a/AsbCloudApp/Data/RequestLogDto.cs +++ b/AsbCloudApp/Data/RequestLogDto.cs @@ -61,5 +61,10 @@ namespace AsbCloudApp.Data /// стек вызовов /// public string? ExceptionStack { get; set; } = null!; + + /// + /// Размер body + /// + public long? RequestContentLength { get; set; } } } \ No newline at end of file diff --git a/AsbCloudWebApi/Middlewares/RequerstTrackerMiddleware.cs b/AsbCloudWebApi/Middlewares/RequerstTrackerMiddleware.cs index db4a2e33..e8910b5d 100644 --- a/AsbCloudWebApi/Middlewares/RequerstTrackerMiddleware.cs +++ b/AsbCloudWebApi/Middlewares/RequerstTrackerMiddleware.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; +using Org.BouncyCastle.Asn1.Ocsp; using System.Threading.Tasks; namespace AsbCloudWebApi.Middlewares @@ -23,6 +24,7 @@ namespace AsbCloudWebApi.Middlewares UserIp = context.Connection?.RemoteIpAddress?.ToString(), RequestMethod = context.Request.Method, RequestPath = context.Request.Path.Value, + RequestContentLength = context.Request.ContentLength, Referer = context.Request.Headers["Referer"].ToString(), }; { From 2e0206c6a08b7831a095a39bed80f588b3b5127e Mon Sep 17 00:00:00 2001 From: ngfrolov Date: Tue, 20 Jun 2023 14:41:19 +0500 Subject: [PATCH 3/4] fix TelemetryService.GetTimezone() --- AsbCloudApp/Services/ITelemetryService.cs | 3 +- .../ReportDataSourcePgCloud.cs | 15 ++--- .../TelemetryWirelineRunOutRepository.cs | 2 +- .../Services/SAUB/EventService.cs | 5 +- .../Services/SAUB/MessageService.cs | 6 +- .../Services/SAUB/TelemetryDataBaseService.cs | 11 ++-- .../Services/SAUB/TelemetryService.cs | 60 ++++++++----------- .../Services/SAUB/TelemetryUserService.cs | 4 +- .../Controllers/SAUB/GtrWitsController.cs | 4 +- .../WITS/WitsControllerAbstract.cs | 4 +- 10 files changed, 50 insertions(+), 64 deletions(-) diff --git a/AsbCloudApp/Services/ITelemetryService.cs b/AsbCloudApp/Services/ITelemetryService.cs index c46a32ec..5416baf7 100644 --- a/AsbCloudApp/Services/ITelemetryService.cs +++ b/AsbCloudApp/Services/ITelemetryService.cs @@ -1,6 +1,5 @@ using AsbCloudApp.Data; using AsbCloudApp.Data.SAUB; -using System; using System.Threading; using System.Threading.Tasks; @@ -28,7 +27,7 @@ namespace AsbCloudApp.Services /// /// /// - int GetOrCreateTelemetryIdByUid(string uid); + TelemetryDto GetOrCreateTelemetryByUid(string uid); /// /// получить временную зону скважины по idTelemetry diff --git a/AsbCloudInfrastructure/ReportDataSourcePgCloud.cs b/AsbCloudInfrastructure/ReportDataSourcePgCloud.cs index cde86686..13a44914 100644 --- a/AsbCloudInfrastructure/ReportDataSourcePgCloud.cs +++ b/AsbCloudInfrastructure/ReportDataSourcePgCloud.cs @@ -8,9 +8,9 @@ using System.Linq; namespace AsbCloudInfrastructure { - public class ReportDataSourcePgCloud : IReportDataSource { + private const string DefaultTimezoneId = "Asia/Yekaterinburg"; private readonly IAsbCloudDbContext context; private readonly int? idTelemetry; @@ -36,14 +36,11 @@ namespace AsbCloudInfrastructure .Include(w => w.RelationCompaniesWells) .ThenInclude(r => r.Company) .Include(w => w.Telemetry) - .FirstOrDefault(w => w.Id == idWell); + .FirstOrDefault(w => w.Id == idWell) + ?? throw new ArgumentInvalidException("idWell doesn`t exist", nameof(idWell)); - if(well is null) - throw new ArgumentInvalidException("idWell doesn`t exist", nameof(idWell)); - - idTelemetry = well?.IdTelemetry; - if (idTelemetry is null) - throw new ArgumentInvalidException($"Well {idWell} doesn't contain telemetry", nameof(idWell)); + idTelemetry = well?.IdTelemetry + ?? throw new ArgumentInvalidException($"Well {idWell} doesn't contain telemetry", nameof(idWell)); events = context.TelemetryEvents .Where(e => e.IdTelemetry == idTelemetry) @@ -62,7 +59,7 @@ namespace AsbCloudInfrastructure Well = well.Caption, Customer = well.RelationCompaniesWells.FirstOrDefault(c => c.Company.IdCompanyType == 1)?.Company.Caption, DrillingStartDate = well.Telemetry?.Info?.DrillingStartDate.ToRemoteDateTime(timezoneOffset) ?? default, - TimeZoneId = well.Telemetry?.Info?.TimeZoneId ?? well.Timezone?.TimezoneId ?? default, + TimeZoneId = well.Telemetry?.Info?.TimeZoneId ?? well.Timezone?.TimezoneId ?? DefaultTimezoneId, TimeZoneOffsetTotalHours = timezoneOffset, }; } diff --git a/AsbCloudInfrastructure/Repository/TelemetryWirelineRunOutRepository.cs b/AsbCloudInfrastructure/Repository/TelemetryWirelineRunOutRepository.cs index 410ee78c..81427cf6 100644 --- a/AsbCloudInfrastructure/Repository/TelemetryWirelineRunOutRepository.cs +++ b/AsbCloudInfrastructure/Repository/TelemetryWirelineRunOutRepository.cs @@ -31,7 +31,7 @@ namespace AsbCloudInfrastructure.Repository /// public async Task AddOrUpdateAsync(string uid, TelemetryWirelineRunOutBaseDto dto, CancellationToken token) { - var idTelemetry = telemetryService.GetOrCreateTelemetryIdByUid(uid); + var idTelemetry = telemetryService.GetOrCreateTelemetryByUid(uid).Id; var timezoneOffset = telemetryService.GetTimezone(idTelemetry).Hours; var entity = Convert(idTelemetry, dto, timezoneOffset); diff --git a/AsbCloudInfrastructure/Services/SAUB/EventService.cs b/AsbCloudInfrastructure/Services/SAUB/EventService.cs index eb60b691..2d861562 100644 --- a/AsbCloudInfrastructure/Services/SAUB/EventService.cs +++ b/AsbCloudInfrastructure/Services/SAUB/EventService.cs @@ -30,12 +30,12 @@ namespace AsbCloudInfrastructure.Services.SAUB if (!dtos.Any()) return; - var telemetryId = telemetryService.GetOrCreateTelemetryIdByUid(uid); + var telemetry = telemetryService.GetOrCreateTelemetryByUid(uid); var entities = dtos.Select(dto => new TelemetryEvent { IdEvent = dto.Id, - IdTelemetry = telemetryId, + IdTelemetry = telemetry.Id, IdCategory = dto.IdCategory, MessageTemplate = dto.Message }); @@ -43,5 +43,4 @@ namespace AsbCloudInfrastructure.Services.SAUB memoryCache.DropBasic(); } } - } diff --git a/AsbCloudInfrastructure/Services/SAUB/MessageService.cs b/AsbCloudInfrastructure/Services/SAUB/MessageService.cs index a35e5886..7b49d5c8 100644 --- a/AsbCloudInfrastructure/Services/SAUB/MessageService.cs +++ b/AsbCloudInfrastructure/Services/SAUB/MessageService.cs @@ -139,14 +139,14 @@ namespace AsbCloudInfrastructure.Services.SAUB if (!dtos.Any()) return Task.CompletedTask; - var telemetryId = telemetryService.GetOrCreateTelemetryIdByUid(uid); - var timezone = telemetryService.GetTimezone(telemetryId); + var telemetry = telemetryService.GetOrCreateTelemetryByUid(uid); + var timezone = telemetryService.GetTimezone(telemetry.Id); foreach (var dto in dtos) { var entity = dto.Adapt(); entity.Id = 0; - entity.IdTelemetry = telemetryId; + entity.IdTelemetry = telemetry.Id; entity.DateTime = dto.Date.ToUtcDateTimeOffset(timezone.Hours); db.TelemetryMessages.Add(entity); } diff --git a/AsbCloudInfrastructure/Services/SAUB/TelemetryDataBaseService.cs b/AsbCloudInfrastructure/Services/SAUB/TelemetryDataBaseService.cs index 359efd18..ffd6416c 100644 --- a/AsbCloudInfrastructure/Services/SAUB/TelemetryDataBaseService.cs +++ b/AsbCloudInfrastructure/Services/SAUB/TelemetryDataBaseService.cs @@ -9,7 +9,6 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; - namespace AsbCloudInfrastructure.Services.SAUB { public abstract class TelemetryDataBaseService : ITelemetryDataService @@ -51,15 +50,15 @@ namespace AsbCloudInfrastructure.Services.SAUB dtosList.Remove(duplicate); } - var idTelemetry = telemetryService.GetOrCreateTelemetryIdByUid(uid); - var timezone = telemetryService.GetTimezone(idTelemetry); + var telemetry = telemetryService.GetOrCreateTelemetryByUid(uid); + var timezone = telemetryService.GetTimezone(telemetry.Id); - telemetryDataCache.AddRange(idTelemetry, dtos); + telemetryDataCache.AddRange(telemetry.Id, dtos); var entities = dtosList.Select(dto => { var entity = Convert(dto, timezone.Hours); - entity.IdTelemetry = idTelemetry; + entity.IdTelemetry = telemetry.Id; return entity; }); @@ -76,7 +75,7 @@ namespace AsbCloudInfrastructure.Services.SAUB stopwatch.Stop(); Trace.WriteLine($"Fail to save data telemetry " + $"uid: {uid}, " + - $"idTelemetry {idTelemetry}, " + + $"idTelemetry {telemetry.Id}, " + $"count: {entities.Count()}, " + $"dataDate: {entities.FirstOrDefault()?.DateTime}, " + $"dbSaveDurationTime:{stopwatch.ElapsedMilliseconds}ms. " + diff --git a/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs b/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs index 8728cdaf..1ec0b0cf 100644 --- a/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs +++ b/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs @@ -14,7 +14,6 @@ using System.Threading.Tasks; namespace AsbCloudInfrastructure.Services.SAUB { - public class TelemetryService : ITelemetryService { private readonly IAsbCloudDbContext db; @@ -53,16 +52,13 @@ namespace AsbCloudInfrastructure.Services.SAUB return cacheDataRange; } - public int GetOrCreateTelemetryIdByUid(string uid) - => GetOrCreateTelemetryByUid(uid).Id; - public int? GetIdWellByTelemetryUid(string uid) => GetWellByTelemetryUid(uid)?.Id; public async Task UpdateInfoAsync(string uid, TelemetryInfoDto info, CancellationToken token) { - var telemetry = GetOrCreateTelemetryByUid(uid); + var telemetry = GetOrCreateTelemetry(uid); telemetry.Info = info.Adapt(); if (!string.IsNullOrEmpty(info.TimeZoneId) && @@ -78,6 +74,7 @@ namespace AsbCloudInfrastructure.Services.SAUB DropTelemetryCache(); } + [Obsolete("This method will be private. Use TelemetryDto.TimeZone prop.")] public SimpleTimezoneDto GetTimezone(int idTelemetry) { var telemetry = GetTelemetryCache().FirstOrDefault(t => t.Id == idTelemetry); @@ -85,41 +82,37 @@ namespace AsbCloudInfrastructure.Services.SAUB if (telemetry is null) throw new Exception($"Telemetry id: {idTelemetry} does not exist."); - if (telemetry.Well?.Timezone is not null) - { - telemetry.TimeZone = telemetry.Well.Timezone; - db.Telemetries.Upsert(telemetry); - db.SaveChanges(); - DropTelemetryCache(); + if (telemetry.Well?.Timezone is not null) return telemetry.TimeZone.Adapt(); - } - - if (telemetry.TimeZone is not null) + + if (telemetry.TimeZone is not null) return telemetry.TimeZone.Adapt(); - - if (telemetry.Info is not null) - { - telemetry.TimeZone = new SimpleTimezone - { - Hours = telemetry.Info.TimeZoneOffsetTotalHours, - IsOverride = false, - TimezoneId = telemetry.Info.TimeZoneId, - }; - db.Telemetries.Upsert(telemetry); - db.SaveChanges(); - DropTelemetryCache(); - return telemetry.TimeZone.Adapt(); - } - - + throw new Exception($"Telemetry id: {idTelemetry} can't find timezone."); } public TelemetryBaseDto? GetOrDefaultTelemetryByIdWell(int idWell) { - var telemetry = GetTelemetryCache() + var entity = GetTelemetryCache() .FirstOrDefault(t => t.Well?.Id == idWell); - return telemetry?.Adapt(); + if (entity.Well?.Timezone is not null && entity.TimeZone.Hours != entity.Well.Timezone.Hours) + { + entity.TimeZone = entity.Well.Timezone; + //TODO: выдаем предупреждение! + } + return entity?.Adapt(); + } + + public TelemetryDto GetOrCreateTelemetryByUid(string uid) + { + var entity = GetOrCreateTelemetry(uid); + if(entity.Well?.Timezone is not null && entity.TimeZone.Hours != entity.Well.Timezone.Hours) + { + entity.TimeZone = entity.Well.Timezone; + //TODO: выдаем предупреждение! + } + var dto = entity.Adapt(); + return dto; } private Well? GetWellByTelemetryUid(string uid) @@ -134,7 +127,7 @@ namespace AsbCloudInfrastructure.Services.SAUB return telemetry; } - private Telemetry GetOrCreateTelemetryByUid(string uid) + private Telemetry GetOrCreateTelemetry(string uid) { var telemetry = GetOrDefaultTelemetryByUid(uid); if (telemetry is null) @@ -320,5 +313,4 @@ namespace AsbCloudInfrastructure.Services.SAUB return affected; } } - } diff --git a/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs b/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs index 70614a88..20b53c43 100644 --- a/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs +++ b/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs @@ -63,12 +63,12 @@ namespace AsbCloudInfrastructure.Services.SAUB if (!dtos.Any()) return; - var telemetryId = telemetryService.GetOrCreateTelemetryIdByUid(uid); + var telemetry = telemetryService.GetOrCreateTelemetryByUid(uid); var entities = dtos.Distinct(new TelemetryUserDtoComparer()).Select(dto => { var entity = dto.Adapt(); entity.IdUser = dto.Id; - entity.IdTelemetry = telemetryId; + entity.IdTelemetry = telemetry.Id; return entity; }); var result = await db.Database.ExecInsertOrUpdateAsync(db.TelemetryUsers, entities, token); diff --git a/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs b/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs index 547b53c0..1209ea65 100644 --- a/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs +++ b/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs @@ -109,8 +109,8 @@ namespace AsbCloudWebApi.Controllers.SAUB [FromBody] IEnumerable dtos, CancellationToken token = default) { - var idTelemetry = telemetryService.GetOrCreateTelemetryIdByUid(uid); - await gtrRepository.SaveDataAsync(idTelemetry, dtos, token).ConfigureAwait(false); + var telemetry = telemetryService.GetOrCreateTelemetryByUid(uid); + await gtrRepository.SaveDataAsync(telemetry.Id, dtos, token).ConfigureAwait(false); var idWell = telemetryService.GetIdWellByTelemetryUid(uid); if (idWell is not null && dtos is not null) _ = Task.Run(() => telemetryHubContext.Clients.Group($"well_{idWell}_gtr") diff --git a/AsbCloudWebApi/Controllers/WITS/WitsControllerAbstract.cs b/AsbCloudWebApi/Controllers/WITS/WitsControllerAbstract.cs index 778ee67b..3e6a46ef 100644 --- a/AsbCloudWebApi/Controllers/WITS/WitsControllerAbstract.cs +++ b/AsbCloudWebApi/Controllers/WITS/WitsControllerAbstract.cs @@ -49,8 +49,8 @@ namespace AsbCloudWebApi.Controllers.WITS [FromServices] IWitsRecordRepository witsRecordRepository, CancellationToken token = default) { - var idTelemetry = telemetryService.GetOrCreateTelemetryIdByUid(uid); - await witsRecordRepository.SaveDataAsync(idTelemetry, dtos, token).ConfigureAwait(false); + var telemetry = telemetryService.GetOrCreateTelemetryByUid(uid); + await witsRecordRepository.SaveDataAsync(telemetry.Id, dtos, token).ConfigureAwait(false); var idWell = telemetryService.GetIdWellByTelemetryUid(uid); if (idWell != null && dtos.Any()) _ = Task.Run(() => telemetryHubContext.Clients.Group($"well_{idWell}_wits") From 7ef0954a9dacd52b2fa9686ed74b2acdf379e0b4 Mon Sep 17 00:00:00 2001 From: ngfrolov Date: Tue, 20 Jun 2023 15:41:36 +0500 Subject: [PATCH 4/4] Add AsNoTracking to MemoryCacheExtentions. --- AsbCloudInfrastructure/MemoryCacheExtentions.cs | 7 ++++++- AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/AsbCloudInfrastructure/MemoryCacheExtentions.cs b/AsbCloudInfrastructure/MemoryCacheExtentions.cs index c616aa9a..0153778a 100644 --- a/AsbCloudInfrastructure/MemoryCacheExtentions.cs +++ b/AsbCloudInfrastructure/MemoryCacheExtentions.cs @@ -23,10 +23,12 @@ namespace AsbCloudInfrastructure /// /// public static Task> GetOrCreateBasicAsync(this IMemoryCache memoryCache, IQueryable query, CancellationToken token) + where T : class { var getter = async (CancellationToken token) => { var entities = await query + .AsNoTracking() .ToArrayAsync(token); return entities.AsEnumerable(); }; @@ -63,8 +65,11 @@ namespace AsbCloudInfrastructure /// /// public static IEnumerable GetOrCreateBasic(this IMemoryCache memoryCache, IQueryable query) + where T : class { - var getter = () => query.ToArray(); + var getter = () => query + .AsNoTracking() + .ToArray(); return memoryCache.GetOrCreateBasic(getter); } diff --git a/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs b/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs index 1ec0b0cf..811f9beb 100644 --- a/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs +++ b/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs @@ -83,7 +83,7 @@ namespace AsbCloudInfrastructure.Services.SAUB throw new Exception($"Telemetry id: {idTelemetry} does not exist."); if (telemetry.Well?.Timezone is not null) - return telemetry.TimeZone.Adapt(); + return telemetry.Well.Timezone.Adapt(); if (telemetry.TimeZone is not null) return telemetry.TimeZone.Adapt();