Skip to content

Commit 0e92a3b

Browse files
committed
Add AutoMapper. Fix Simulation depends on Time or Amount Requests
1 parent e9a172d commit 0e92a3b

File tree

11 files changed

+123
-16
lines changed

11 files changed

+123
-16
lines changed

backend/ServiceSimulation/Bll.Domain/Entities/DeviceManager.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public void TakeRequest(Request request, Device device)
3030

3131
public bool FreeDevice(Device device)
3232
{
33+
_ = device ?? throw new ArgumentNullException(nameof(device));
3334
device.Request.EndTime = _time.Now;
3435

3536
_time.Now = device.Request.EndTime;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace Bll.Domain.Entities;
2+
3+
public record FinalResults
4+
{
5+
public double AverageProbabilityOfMaintenance { get; init; }
6+
public double BandwidthOfSystem { get; init; }
7+
public double ProbabilityOfFailure { get; init; }
8+
};

backend/ServiceSimulation/Bll.Domain/Entities/ResultManager.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,15 @@ namespace Bll.Domain.Entities;
44

55
public class ResultManager : IResultManager
66
{
7+
private readonly IResults _results;
8+
private readonly ITimeProvider _timeProvider;
9+
10+
public ResultManager(IResults results, ITimeProvider timeProvider)
11+
{
12+
_results = results;
13+
_timeProvider = timeProvider;
14+
}
15+
716
public double AverageProbabilityOfMaintenance(int amountOfServedRequests, int totalAmountOfRequests)
817
{
918
return amountOfServedRequests / (double)totalAmountOfRequests;
@@ -18,4 +27,17 @@ public double ProbabilityOfFailure(int amountOfDeclinedRequests, int totalAmount
1827
{
1928
return amountOfDeclinedRequests / (double)totalAmountOfRequests;
2029
}
30+
31+
public FinalResults CalculateResultsOfModeling()
32+
{
33+
_results.ModelingTime = _timeProvider.Now;
34+
return new FinalResults
35+
{
36+
AverageProbabilityOfMaintenance = AverageProbabilityOfMaintenance(_results.AmountOfServedRequest,
37+
_results.AmountOfGeneratedRequests),
38+
BandwidthOfSystem = BandwidthOfSystem(_results.AmountOfServedRequest, _results.ModelingTime),
39+
ProbabilityOfFailure = ProbabilityOfFailure(_results.Cancelled.Count,
40+
_results.AmountOfGeneratedRequests),
41+
};
42+
}
2143
}

backend/ServiceSimulation/Bll.Domain/Interfaces/IResultManager.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
namespace Bll.Domain.Interfaces;
1+
using Bll.Domain.Entities;
2+
3+
namespace Bll.Domain.Interfaces;
24

35
public interface IResultManager
46
{
@@ -16,4 +18,5 @@ public interface IResultManager
1618
/// P failire of request = N declined / N total
1719
/// </summary>
1820
double ProbabilityOfFailure(int amountOfDeclinedRequests, int totalAmountOfRequests);
21+
public FinalResults CalculateResultsOfModeling();
1922
}

backend/ServiceSimulation/Bll.Domain/Services/SimulationService.cs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,18 @@ public class SimulationService : ISimulationService
1111
private readonly IDeviceManager _deviceManager;
1212
private readonly IBufferManagerFactory _bufferManagerFactory;
1313
private readonly IResults _results;
14-
15-
public SimulationService(ISourceManager sourceManager, IDeviceManager deviceManager, IBufferManagerFactory bufferManagerFactory, IResults results)
14+
private readonly ITimeProvider _time;
15+
public SimulationService(ISourceManager sourceManager,
16+
IDeviceManager deviceManager,
17+
IBufferManagerFactory bufferManagerFactory,
18+
IResults results,
19+
ITimeProvider time)
1620
{
1721
_sourceManager = sourceManager;
1822
_deviceManager = deviceManager;
1923
_bufferManagerFactory = bufferManagerFactory;
2024
_results = results;
25+
_time = time;
2126
}
2227

2328
public void StartSimulation(InputParameters parameters)
@@ -60,8 +65,9 @@ public void StartSimulation(InputParameters parameters)
6065
{
6166
if (_results.AmountOfGeneratedRequests >= parameters.AmountOfRequests &&
6267
bufferManager.IsFree() &&
63-
IsAllDevicesFree(devices) &&
64-
_results.AmountOfServedRequest == parameters.AmountOfRequests) // TODO CHECK FOR REQUESTS ON SOURCES. WHEN TO END SYSTEM MODELING
68+
IsAllDevicesFree(devices) ||
69+
_time.Now >= parameters.ModelingTime)
70+
// _results.AmountOfServedRequest == parameters.AmountOfRequests) // TODO CHECK FOR REQUESTS ON SOURCES. WHEN TO END SYSTEM MODELING
6571
{
6672
break;
6773
}
@@ -77,7 +83,7 @@ private void FindNextSpecialEvent(List<Device> devices, List<Source> sources, IB
7783
int indexOfRequestWithClosestTimeCome = -1;
7884
for (int i = 0; i < sources.Count; i++)
7985
{
80-
if (_results.AmountOfGeneratedRequests >= parameters.AmountOfRequests) break;
86+
// if (_results.AmountOfGeneratedRequests >= parameters.AmountOfRequests) break;
8187
if (sources[i].TimeOfNextRequest < timeOfClosestRequestCome)
8288
{
8389
timeOfClosestRequestCome = sources[i].TimeOfNextRequest;
@@ -95,7 +101,8 @@ private void FindNextSpecialEvent(List<Device> devices, List<Source> sources, IB
95101
}
96102
}
97103

98-
if (timeOfClosestDeviceFree < timeOfClosestRequestCome)
104+
if (timeOfClosestDeviceFree < timeOfClosestRequestCome
105+
|| _results.AmountOfGeneratedRequests == parameters.AmountOfRequests)
99106
{
100107
_deviceManager.FreeDevice(devices[indexOfDeviceWithClosestTimeFree]);
101108

@@ -108,7 +115,7 @@ private void FindNextSpecialEvent(List<Device> devices, List<Source> sources, IB
108115
else
109116
{
110117
// Take request on work or add to buffer.
111-
if (_results.AmountOfGeneratedRequests >= parameters.AmountOfRequests) return;
118+
//if (_results.AmountOfGeneratedRequests >= parameters.AmountOfRequests) return;
112119

113120
var newRequestInSystem = _sourceManager.GetNewRequest(sources[indexOfRequestWithClosestTimeCome]);
114121
// find out free device

backend/ServiceSimulation/WebApplication2/Api.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@
77
</PropertyGroup>
88

99
<ItemGroup>
10+
<PackageReference Include="AutoMapper" Version="11.0.1" />
1011
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.3.0" />
1112
</ItemGroup>
1213

1314
<ItemGroup>
1415
<Folder Include="Controllers\" />
15-
<Folder Include="Models\" />
1616
<Folder Include="Entities\" />
17+
<Folder Include="Configuration\" />
1718
</ItemGroup>
1819

1920
<ItemGroup>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using Api.Entities;
2+
using AutoMapper;
3+
using Bll.Domain.Entities;
4+
using Bll.Domain.Interfaces;
5+
6+
namespace Api.Configuration;
7+
8+
public class ApiMapperConfigurator
9+
{
10+
private readonly IMapperConfigurationExpression _expression;
11+
public IMapperConfigurationExpression AddConfiguration() => _expression;
12+
13+
public ApiMapperConfigurator(IMapperConfigurationExpression expression)
14+
{
15+
MappingApiResults(expression);
16+
17+
_expression = expression;
18+
}
19+
20+
private void MappingApiResults(IMapperConfigurationExpression expression)
21+
{
22+
expression.CreateMap<(FinalResults, IResults), ApiResults>()
23+
.ForMember(dst => dst.AverageProbabilityOfMaintenance,
24+
opt => opt.MapFrom(src => src.Item1.AverageProbabilityOfMaintenance));
25+
//TODO CONTINUE MAP MEMBERS
26+
}
27+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using AutoMapper;
2+
3+
namespace Api.Configuration;
4+
5+
public static class MapperRegistration
6+
{
7+
public static void AddMapper(this IServiceCollection services)
8+
{
9+
var mapper = new MapperConfiguration(cfg => cfg.AddApi());
10+
11+
services.AddSingleton(mapper.CreateMapper());
12+
}
13+
public static IMapperConfigurationExpression AddApi(this IMapperConfigurationExpression expression)
14+
{
15+
return new ApiMapperConfigurator(expression).AddConfiguration();
16+
}
17+
}
Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using Api.enums;
1+
using Api.Entities;
2+
using Api.enums;
3+
using AutoMapper;
24
using Bll.Domain.Entities;
35
using Bll.Domain.Interfaces;
46
using Microsoft.AspNetCore.Mvc;
@@ -11,19 +13,23 @@ public class Simulation : Controller
1113
private readonly ISimulationService _simulationService;
1214
private readonly ITimeProvider _time;
1315
private readonly IResults _results;
14-
15-
public Simulation(ISimulationService simulationService, ITimeProvider time, IResults results)
16+
private readonly IResultManager _resultManager;
17+
private readonly IMapper _mapper;
18+
public Simulation(ISimulationService simulationService, ITimeProvider time, IResults results, IResultManager resultManager, IMapper mapper)
1619
{
1720
_simulationService = simulationService;
1821
_time = time;
1922
_results = results;
23+
_resultManager = resultManager;
24+
_mapper = mapper;
2025
}
2126

2227
[HttpGet("/start")]
2328
public IActionResult Start(InputParameters parameters)
2429
{
2530
_simulationService.StartSimulation(parameters);
26-
_results.ModelingTime = _time.Now; // TODO Add AutoMapper
27-
return Ok(_results);
31+
var endResultsOfModeling = _resultManager.CalculateResultsOfModeling();
32+
var apiResults = _mapper.Map<ApiResults>((endResultsOfModeling, _results)); // TODO OTHER PARAMS>?
33+
return Ok(apiResults); // TODO AUTOMAPPER CONFIGURATION!
2834
}
2935
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using Bll.Domain.Entities;
2+
3+
namespace Api.Entities;
4+
5+
public record ApiResults
6+
{
7+
public double ModelingTime { get; init; }
8+
public int AmountOfGeneratedRequests { get; init; }
9+
public int AmountOfServedRequest { get; init; }
10+
public double AverageProbabilityOfMaintenance { get; init; }
11+
public double BandwidthOfSystem { get; init; }
12+
public double ProbabilityOfFailure { get; init; }
13+
}

0 commit comments

Comments
 (0)