Skip to content

Commit e9a172d

Browse files
committed
Add ResultManager. Modify Factory
1 parent dfeb5e6 commit e9a172d

File tree

8 files changed

+86
-17
lines changed

8 files changed

+86
-17
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
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using Bll.Domain.Interfaces;
2+
3+
namespace Bll.Domain.Entities;
4+
5+
public class ResultManager : IResultManager
6+
{
7+
public double AverageProbabilityOfMaintenance(int amountOfServedRequests, int totalAmountOfRequests)
8+
{
9+
return amountOfServedRequests / (double)totalAmountOfRequests;
10+
}
11+
12+
public double BandwidthOfSystem(int amountOfServedRequests, double modelingTime)
13+
{
14+
return amountOfServedRequests / modelingTime;
15+
}
16+
17+
public double ProbabilityOfFailure(int amountOfDeclinedRequests, int totalAmountOfRequests)
18+
{
19+
return amountOfDeclinedRequests / (double)totalAmountOfRequests;
20+
}
21+
}

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

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

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ public SimulationService(ISourceManager sourceManager, IDeviceManager deviceMana
2222

2323
public void StartSimulation(InputParameters parameters)
2424
{
25-
List<Source> sources = new List<Source>(parameters.NumberOfSources);
26-
List<Device> devices = new List<Device>(parameters.NumberOfDevices);
25+
var sources = new List<Source>(parameters.NumberOfSources);
26+
var devices = new List<Device>(parameters.NumberOfDevices);
2727

2828
for (int i = 0; i < parameters.NumberOfSources; i++)
2929
{
@@ -50,7 +50,7 @@ public void StartSimulation(InputParameters parameters)
5050
}
5151

5252
var bufferManager = _bufferManagerFactory.CreateBufferManager(parameters.SimulationType);
53-
53+
5454
foreach (var source in sources) // Generate first requests that generated by sources.
5555
{
5656
_sourceManager.GetNewRequest(source);
@@ -60,7 +60,8 @@ public void StartSimulation(InputParameters parameters)
6060
{
6161
if (_results.AmountOfGeneratedRequests >= parameters.AmountOfRequests &&
6262
bufferManager.IsFree() &&
63-
IsAllDevicesFree(devices))
63+
IsAllDevicesFree(devices) &&
64+
_results.AmountOfServedRequest == parameters.AmountOfRequests) // TODO CHECK FOR REQUESTS ON SOURCES. WHEN TO END SYSTEM MODELING
6465
{
6566
break;
6667
}
@@ -131,7 +132,15 @@ private void FindNextSpecialEvent(List<Device> devices, List<Source> sources, IB
131132

132133
}
133134

134-
public bool IsAllDevicesFree(List<Device> devices) =>
135-
devices.Any(d => d.IsWorking);
136-
135+
public bool IsAllDevicesFree(List<Device> devices)
136+
{
137+
foreach (var device in devices)
138+
{
139+
if (device.IsWorking)
140+
{
141+
return false;
142+
}
143+
}
144+
return true;
145+
}
137146
}

backend/ServiceSimulation/WebApplication2/Api.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<ItemGroup>
1414
<Folder Include="Controllers\" />
1515
<Folder Include="Models\" />
16+
<Folder Include="Entities\" />
1617
</ItemGroup>
1718

1819
<ItemGroup>

backend/ServiceSimulation/WebApplication2/Program.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,18 @@
1414

1515
builder.Services.AddScoped<ITimeProvider, TimeProvider>();
1616
builder.Services.AddScoped<IResults, Bll.Domain.Entities.Results>();
17+
builder.Services.AddScoped<IResultManager, ResultManager>();
1718
//builder.Services.AddTransient<IBufferManager, StandardBufferManager>();
1819
builder.Services.AddTransient<IBufferManagerFactory, BufferManagerFactory>();
1920
builder.Services.AddTransient<IDeviceManager, DeviceManager>();
2021
builder.Services.AddTransient<ISourceManager, SourceManager>();
2122

2223

23-
builder.Services.AddScoped<StandardBufferManager>()
24-
.AddScoped<IBufferManager, StandardBufferManager>(s => s.GetService<StandardBufferManager>());
24+
//builder.Services.AddScoped<StandardBufferManager>()
25+
// .AddScoped<IBufferManager, StandardBufferManager>(s => s.GetRequiredService<StandardBufferManager>());
2526

27+
//builder.Services.AddScoped<IBufferManager>(s =>
28+
// ActivatorUtilities.CreateInstance<StandardBufferManager>(s));
2629
#endregion
2730

2831
var app = builder.Build();

0 commit comments

Comments
 (0)