diff --git a/backend/api/EventHandlers/InspectionFindingEventHandler.cs b/backend/api/EventHandlers/InspectionFindingEventHandler.cs index c3d340f5e..ea4d73e61 100644 --- a/backend/api/EventHandlers/InspectionFindingEventHandler.cs +++ b/backend/api/EventHandlers/InspectionFindingEventHandler.cs @@ -1,4 +1,5 @@ using System.Globalization; +using System.Net; using System.Net.Http.Headers; using System.Text; using Api.Database.Models; @@ -19,68 +20,69 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { - try - { - await Task.Delay(_interval, stoppingToken); + await Task.Delay(_interval, stoppingToken); - var lastReportingTime = DateTime.UtcNow - _timeSpan; + var lastReportingTime = DateTime.UtcNow - _timeSpan; - var inspectionFindings = await InspectionFindingService.RetrieveInspectionFindings(lastReportingTime); + var inspectionFindings = await InspectionFindingService.RetrieveInspectionFindings(lastReportingTime); - logger.LogInformation("Found {count} inspection findings in the last {interval}.", inspectionFindings.Count, _timeSpan); + logger.LogInformation("Found {count} inspection findings in the last {interval}.", inspectionFindings.Count, _timeSpan); - if (inspectionFindings.Count > 0) - { - var findingsList = await GenerateFindingsList(inspectionFindings); + if (inspectionFindings.Count > 0) + { + var findingsList = await GenerateFindingsList(inspectionFindings); - string messageString = GenerateReportFromFindingsReportsList(findingsList); + string messageString = GenerateReportFromFindingsReportsList(findingsList); - string adaptiveCardJson = GenerateAdaptiveCard(messageString); + string adaptiveCardJson = GenerateAdaptiveCard(messageString); - string url = GetWebhookURL("TeamsInspectionFindingsWebhook"); + string url = GetWebhookURL("TeamsInspectionFindingsWebhook"); - var client = new HttpClient(); - client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); - var content = new StringContent(adaptiveCardJson, Encoding.UTF8, "application/json"); - var response = await client.PostAsync(url, content, stoppingToken); - //if (response.StatusCode == StatusCodes.Status201Created) ; + var client = new HttpClient(); + client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + var content = new StringContent(adaptiveCardJson, Encoding.UTF8, "application/json"); + var response = await client.PostAsync(url, content, stoppingToken); + if (response.StatusCode == HttpStatusCode.OK) + { + logger.LogInformation("Post request via teams incomming webhook was successful, Status Code: {response.StatusCode}", response.StatusCode); + } + else + { + logger.LogInformation("Post request via teams incomming webhook was not successful, Status Code: {response.StatusCode}", response.StatusCode); } } - catch (OperationCanceledException) { throw; } } } + private async Task> GenerateFindingsList(List inspectionFindings) { var findingsList = new List(); foreach (var inspectionFinding in inspectionFindings) { - try + var missionRun = await InspectionFindingService.GetMissionRunByIsarStepId(inspectionFinding); + var task = await InspectionFindingService.GetMissionTaskByIsarStepId(inspectionFinding); + + if (task?.TagId != null && missionRun?.Area?.Plant?.Name != null && missionRun?.Area?.Name != null) { - var missionRun = await InspectionFindingService.GetMissionRunByIsarStepId(inspectionFinding); - var task = await InspectionFindingService.GetMissionTaskByIsarStepId(inspectionFinding); + var finding = new Finding( + task.TagId, + missionRun.Area.Plant.Name, + missionRun.Area.Name, + inspectionFinding.Finding, + inspectionFinding.InspectionDate, + missionRun.Robot.Name + ); - if (task?.TagId != null && missionRun?.Area?.Plant?.Name != null && missionRun?.Area?.Name != null) - { - var finding = new Finding( - task.TagId, - missionRun.Area.Plant.Name, - missionRun.Area.Name, - inspectionFinding.Finding, - inspectionFinding.InspectionDate, - missionRun.Robot.Name - ); - - findingsList.Add(finding); - } - else - { - logger.LogInformation("Failed to generate a finding since TagId in missionTask or Area in MissionRun is null"); - continue; - } + findingsList.Add(finding); + } + else + { + logger.LogInformation("Failed to generate a finding since TagId in missionTask or Area in MissionRun is null"); + continue; } - catch { throw; } } + logger.LogInformation("Findings List sucessfully generated"); return findingsList; } @@ -133,6 +135,7 @@ public static string GenerateAdaptiveCard(string messageContent) }}"; return adaptiveCardJson; } + public static string GetWebhookURL(string secretName) { string environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")!; diff --git a/backend/api/Services/InspectionFindingService.cs b/backend/api/Services/InspectionFindingService.cs index ccde56757..d2c8d20c1 100644 --- a/backend/api/Services/InspectionFindingService.cs +++ b/backend/api/Services/InspectionFindingService.cs @@ -17,21 +17,17 @@ public async Task> RetrieveInspectionFindings(DateTime l public async Task GetMissionRunByIsarStepId(InspectionFinding inspectionFinding) { return await context.MissionRuns - .Include(mr => mr.Area).ThenInclude(area => area != null ? area.Plant : null) - .Include(mr => mr.Robot) - .Where(mr => mr.Tasks.Any(mt => mt.Inspections.Any(i => i.IsarStepId == inspectionFinding.IsarStepId))) - .FirstOrDefaultAsync() - ?? null; + .Include(missionRun => missionRun.Area).ThenInclude(area => area != null ? area.Plant : null) + .Include(missionRun => missionRun.Robot) + .Where(missionRun => missionRun.Tasks.Any(missionTask => missionTask.Inspections.Any(inspection => inspection.IsarStepId == inspectionFinding.IsarStepId))) + .FirstOrDefaultAsync(); } public async Task GetMissionTaskByIsarStepId(InspectionFinding inspectionFinding) { return await context.MissionTasks - .Where(mt => mt.Inspections.Any(i => i.IsarStepId == inspectionFinding.IsarStepId)) - .FirstOrDefaultAsync() - ?? null; + .Where(missionTask => missionTask.Inspections.Any(inspection => inspection.IsarStepId == inspectionFinding.IsarStepId)) + .FirstOrDefaultAsync(); } - } - }