Skip to content

Commit 05d6741

Browse files
authored
Merge pull request #12 from NiceOneFox/T9_Modify_Factory_Add_ResultManager
Close T9 modify factory add result manager
2 parents dfeb5e6 + 0e92a3b commit 05d6741

File tree

14 files changed

+206
-30
lines changed

14 files changed

+206
-30
lines changed

backend/ServiceSimulation/Bll.Domain/Bll.Domain.csproj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,9 @@
66
<Nullable>enable</Nullable>
77
</PropertyGroup>
88

9+
<ItemGroup>
10+
<PackageReference Include="Castle.Core" Version="4.4.1" />
11+
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" />
12+
</ItemGroup>
13+
914
</Project>

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,33 @@
11
using Api.enums;
22
using Bll.Domain.Factories;
33
using Bll.Domain.Interfaces;
4+
using Castle.DynamicProxy;
5+
using Microsoft.Extensions.DependencyInjection;
46

57
namespace Bll.Domain.Entities;
68

79
public class BufferManagerFactory : IBufferManagerFactory
810
{
9-
private readonly IServiceProvider serviceProvider;
11+
private readonly IServiceProvider _serviceProvider;
1012

1113
public BufferManagerFactory(IServiceProvider serviceProvider)
1214
{
13-
this.serviceProvider = serviceProvider;
15+
_serviceProvider = serviceProvider;
1416
}
1517

16-
public IBufferManager CreateBufferManager(SimulationType simulationType)
18+
public IBufferManager CreateBufferManager(SimulationType simulationType) // TODO PASS MORE PARAMETERS. SIZE BUFFER
1719
{
20+
// var a = ActivatorUtilities.CreateInstance<IBufferManager>(_serviceProvider,
21+
// new StandardBufferManager(_serviceProvider.GetRequiredService<IResults>(),
22+
// _serviceProvider.GetRequiredService<ITimeProvider>(), 5));
23+
1824
return simulationType switch
1925
{
20-
0 => (IBufferManager)serviceProvider.GetService(typeof(StandardBufferManager)),
26+
0 => new StandardBufferManager(_serviceProvider.GetRequiredService<IResults>(), _serviceProvider.GetRequiredService<ITimeProvider>(), 5),
27+
//0 => (IBufferManager)_serviceProvider.GetRequiredService(typeof(StandardBufferManager)),
28+
//0 => Activator.CreateInstance<IBufferManager>(nameof(StandardBufferManager), 5),// (IBufferManager)_serviceProvider.GetService(typeof(StandardBufferManager)),
29+
// 0 => ActivatorUtilities.CreateInstance<IBufferManager>(_serviceProvider,
30+
// new StandardBufferManager(_serviceProvider.GetRequiredService<IResults>(), _serviceProvider.GetRequiredService<ITimeProvider>())),
2131
_ => throw new NotImplementedException()
2232
};
2333
}

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+
};
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using Bll.Domain.Interfaces;
2+
3+
namespace Bll.Domain.Entities;
4+
5+
public class ResultManager : IResultManager
6+
{
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+
16+
public double AverageProbabilityOfMaintenance(int amountOfServedRequests, int totalAmountOfRequests)
17+
{
18+
return amountOfServedRequests / (double)totalAmountOfRequests;
19+
}
20+
21+
public double BandwidthOfSystem(int amountOfServedRequests, double modelingTime)
22+
{
23+
return amountOfServedRequests / modelingTime;
24+
}
25+
26+
public double ProbabilityOfFailure(int amountOfDeclinedRequests, int totalAmountOfRequests)
27+
{
28+
return amountOfDeclinedRequests / (double)totalAmountOfRequests;
29+
}
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+
}
43+
}

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,19 @@ namespace Bll.Domain.Entities;
44

55
public class StandardBufferManager : IBufferManager
66
{
7-
private readonly IResults _resultChannel;
7+
private readonly IResults _resultChannel;
88

9-
private readonly ITimeProvider _time;
9+
private readonly ITimeProvider _time;
1010

1111
private readonly LinkedList<Request> _requests = new();
1212

13-
public const int Capacity = 5;
13+
public int Capacity = 4;
1414

15-
public StandardBufferManager(IResults resultChannel, ITimeProvider time)
15+
public StandardBufferManager(IResults resultChannel, ITimeProvider time, int capacity)
1616
{
1717
_resultChannel = resultChannel;
1818
_time = time;
19+
Capacity = capacity;
1920
}
2021

2122
public void Add(Request request)
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using Bll.Domain.Entities;
2+
3+
namespace Bll.Domain.Interfaces;
4+
5+
public interface IResultManager
6+
{
7+
/// <summary>
8+
/// P = N served / N total
9+
/// </summary>
10+
double AverageProbabilityOfMaintenance(int amountOfServedRequests, int totalAmountOfRequests);
11+
12+
/// <summary>
13+
/// A = N served / T modeling
14+
/// </summary>
15+
double BandwidthOfSystem(int amountOfServedRequests, double modelingTime);
16+
17+
/// <summary>
18+
/// P failire of request = N declined / N total
19+
/// </summary>
20+
double ProbabilityOfFailure(int amountOfDeclinedRequests, int totalAmountOfRequests);
21+
public FinalResults CalculateResultsOfModeling();
22+
}

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

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,24 @@ 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)
2429
{
25-
List<Source> sources = new List<Source>(parameters.NumberOfSources);
26-
List<Device> devices = new List<Device>(parameters.NumberOfDevices);
30+
var sources = new List<Source>(parameters.NumberOfSources);
31+
var devices = new List<Device>(parameters.NumberOfDevices);
2732

2833
for (int i = 0; i < parameters.NumberOfSources; i++)
2934
{
@@ -50,7 +55,7 @@ public void StartSimulation(InputParameters parameters)
5055
}
5156

5257
var bufferManager = _bufferManagerFactory.CreateBufferManager(parameters.SimulationType);
53-
58+
5459
foreach (var source in sources) // Generate first requests that generated by sources.
5560
{
5661
_sourceManager.GetNewRequest(source);
@@ -60,7 +65,9 @@ public void StartSimulation(InputParameters parameters)
6065
{
6166
if (_results.AmountOfGeneratedRequests >= parameters.AmountOfRequests &&
6267
bufferManager.IsFree() &&
63-
IsAllDevicesFree(devices))
68+
IsAllDevicesFree(devices) ||
69+
_time.Now >= parameters.ModelingTime)
70+
// _results.AmountOfServedRequest == parameters.AmountOfRequests) // TODO CHECK FOR REQUESTS ON SOURCES. WHEN TO END SYSTEM MODELING
6471
{
6572
break;
6673
}
@@ -76,7 +83,7 @@ private void FindNextSpecialEvent(List<Device> devices, List<Source> sources, IB
7683
int indexOfRequestWithClosestTimeCome = -1;
7784
for (int i = 0; i < sources.Count; i++)
7885
{
79-
if (_results.AmountOfGeneratedRequests >= parameters.AmountOfRequests) break;
86+
// if (_results.AmountOfGeneratedRequests >= parameters.AmountOfRequests) break;
8087
if (sources[i].TimeOfNextRequest < timeOfClosestRequestCome)
8188
{
8289
timeOfClosestRequestCome = sources[i].TimeOfNextRequest;
@@ -94,7 +101,8 @@ private void FindNextSpecialEvent(List<Device> devices, List<Source> sources, IB
94101
}
95102
}
96103

97-
if (timeOfClosestDeviceFree < timeOfClosestRequestCome)
104+
if (timeOfClosestDeviceFree < timeOfClosestRequestCome
105+
|| _results.AmountOfGeneratedRequests == parameters.AmountOfRequests)
98106
{
99107
_deviceManager.FreeDevice(devices[indexOfDeviceWithClosestTimeFree]);
100108

@@ -107,7 +115,7 @@ private void FindNextSpecialEvent(List<Device> devices, List<Source> sources, IB
107115
else
108116
{
109117
// Take request on work or add to buffer.
110-
if (_results.AmountOfGeneratedRequests >= parameters.AmountOfRequests) return;
118+
//if (_results.AmountOfGeneratedRequests >= parameters.AmountOfRequests) return;
111119

112120
var newRequestInSystem = _sourceManager.GetNewRequest(sources[indexOfRequestWithClosestTimeCome]);
113121
// find out free device
@@ -131,7 +139,15 @@ private void FindNextSpecialEvent(List<Device> devices, List<Source> sources, IB
131139

132140
}
133141

134-
public bool IsAllDevicesFree(List<Device> devices) =>
135-
devices.Any(d => d.IsWorking);
136-
142+
public bool IsAllDevicesFree(List<Device> devices)
143+
{
144+
foreach (var device in devices)
145+
{
146+
if (device.IsWorking)
147+
{
148+
return false;
149+
}
150+
}
151+
return true;
152+
}
137153
}

backend/ServiceSimulation/WebApplication2/Api.csproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +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\" />
16+
<Folder Include="Entities\" />
17+
<Folder Include="Configuration\" />
1618
</ItemGroup>
1719

1820
<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+
}

0 commit comments

Comments
 (0)