Skip to content

Commit b2ef0f4

Browse files
Thierry Habarthabarthierry-hue
authored andcommitted
Ticket ## : Display the performance + fix the number of threads created
1 parent 418e108 commit b2ef0f4

File tree

128 files changed

+6183
-3309
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

128 files changed

+6183
-3309
lines changed

src/CaseManagement.CMMN.Host/Startup.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,17 @@ public Startup(IHostingEnvironment env) { }
2121

2222
public void ConfigureServices(IServiceCollection services)
2323
{
24-
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
25-
.AddCookie();
24+
services.AddMvc();
25+
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie();
2626
services.AddAuthorization(policy =>
2727
{
2828
policy.AddPolicy("IsConnected", p => p.RequireAuthenticatedUser());
2929
});
30-
var builder = services.AddCMMN();
3130
services.AddCors(options => options.AddPolicy("AllowAll", p => p.AllowAnyOrigin()
3231
.AllowAnyMethod()
3332
.AllowAnyHeader()));
3433
var files = Directory.EnumerateFiles(Path.Combine(Directory.GetCurrentDirectory(), "Cmmns"), "*.cmmn").ToList();
35-
builder.AddDefinitions(files)
34+
services.AddCMMN().AddDefinitions(files)
3635
.AddCaseProcesses(new List<ProcessAggregate>
3736
{
3837
new CaseManagementProcessAggregate

src/CaseManagement.CMMN/Apis/CaseDefinitionsController.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,11 @@ namespace CaseManagement.CMMN.Apis
1414
[Route(CMMNConstants.RouteNames.CaseDefinitions)]
1515
public class CaseDefinitionsController : Controller
1616
{
17-
private readonly IWorkflowDefinitionQueryRepository _queryRepository;
18-
private readonly IStatisticQueryRepository _staticQueryRepository;
17+
private readonly ICaseDefinitionQueryRepository _queryRepository;
1918

20-
public CaseDefinitionsController(IWorkflowDefinitionQueryRepository queryRepository, IStatisticQueryRepository statisticQueryRepository)
19+
public CaseDefinitionsController(ICaseDefinitionQueryRepository queryRepository)
2120
{
2221
_queryRepository = queryRepository;
23-
_staticQueryRepository = statisticQueryRepository;
2422
}
2523

2624
[HttpGet("{id}")]
@@ -38,10 +36,10 @@ public async Task<IActionResult> Get(string id)
3836
[HttpGet("{id}/history")]
3937
public async Task<IActionResult> GetHistory(string id)
4038
{
41-
var result = await _staticQueryRepository.FindById(id);
39+
var result = await _queryRepository.FindHistoryById(id);
4240
if (result == null)
4341
{
44-
result = new CaseDefinitionStatisticAggregate
42+
result = new CaseDefinitionHistoryAggregate
4543
{
4644
CaseDefinitionId = id,
4745
NbInstances = 0
@@ -89,7 +87,7 @@ private static JObject ToDto(CaseDefinition def)
8987
};
9088
}
9189

92-
private static JObject ToDto(CaseDefinitionStatisticAggregate def)
90+
private static JObject ToDto(CaseDefinitionHistoryAggregate def)
9391
{
9492
return new JObject
9593
{

src/CaseManagement.CMMN/Apis/CaseFilesController.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ namespace CaseManagement.CMMN.Apis
1414
[Route(CMMNConstants.RouteNames.CaseFiles)]
1515
public class CaseFilesController : Controller
1616
{
17-
private readonly IWorkflowFileQueryRepository _queryRepository;
17+
private readonly ICaseFileQueryRepository _queryRepository;
1818

19-
public CaseFilesController(IWorkflowFileQueryRepository queryRepository)
19+
public CaseFilesController(ICaseFileQueryRepository queryRepository)
2020
{
2121
_queryRepository = queryRepository;
2222
}

src/CaseManagement.CMMN/Apis/CaseInstancesController.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ public class CaseInstancesController : Controller
3131
private readonly ICloseCommandHandler _closeCommandHandler;
3232
private readonly IConfirmFormCommandHandler _confirmFormCommandHandler;
3333
private readonly IActivateCommandHandler _activateCommandHandler;
34-
private readonly IWorkflowInstanceQueryRepository _cmmnWorkflowInstanceQueryRepository;
34+
private readonly ICaseInstanceQueryRepository _cmmnWorkflowInstanceQueryRepository;
3535

36-
public CaseInstancesController(ICreateCaseInstanceCommandHandler createCaseInstanceCommandHandler, ILaunchCaseInstanceCommandHandler launchCaseInstanceCommandHandler, ISuspendCommandHandler suspendCommandHandler, IResumeCommandHandler resumeCommandHandler, ITerminateCommandHandler terminateCommandHandler, IReactivateCommandHandler reactivateCommandHandler, ICloseCommandHandler closeCommandHandler, IConfirmFormCommandHandler confirmFormCommandHandler, IActivateCommandHandler activateCommandHandler, IWorkflowInstanceQueryRepository cmmnWorkflowInstanceQueryRepository)
36+
public CaseInstancesController(ICreateCaseInstanceCommandHandler createCaseInstanceCommandHandler, ILaunchCaseInstanceCommandHandler launchCaseInstanceCommandHandler, ISuspendCommandHandler suspendCommandHandler, IResumeCommandHandler resumeCommandHandler, ITerminateCommandHandler terminateCommandHandler, IReactivateCommandHandler reactivateCommandHandler, ICloseCommandHandler closeCommandHandler, IConfirmFormCommandHandler confirmFormCommandHandler, IActivateCommandHandler activateCommandHandler, ICaseInstanceQueryRepository cmmnWorkflowInstanceQueryRepository)
3737
{
3838
_createCaseInstanceCommandHandler = createCaseInstanceCommandHandler;
3939
_launchCaseInstanceCommandHandler = launchCaseInstanceCommandHandler;

src/CaseManagement.CMMN/Apis/StatisticsController.cs

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Newtonsoft.Json.Linq;
99
using System;
1010
using System.Linq;
11+
using System.Threading;
1112
using System.Threading.Tasks;
1213

1314
namespace CaseManagement.CMMN.Apis
@@ -55,6 +56,22 @@ public async Task<IActionResult> Search()
5556
return new OkObjectResult(ToDto(result));
5657
}
5758

59+
[HttpGet("performances")]
60+
public async Task<IActionResult> GetPerformances()
61+
{
62+
var result = await _statisticQueryRepository.GetMachineNames();
63+
return new OkObjectResult(result);
64+
}
65+
66+
67+
[HttpGet("performances/.search")]
68+
public async Task<IActionResult> SearchPerformances()
69+
{
70+
var query = HttpContext.Request.Query;
71+
var result = await _statisticQueryRepository.FindPerformanceStatistics(ExtractFindPerformanceParameter(query));
72+
return new OkObjectResult(ToDto(result));
73+
}
74+
5875
private static JObject ToDto(FindResponse<DailyStatisticAggregate> resp)
5976
{
6077
return new JObject
@@ -65,6 +82,16 @@ private static JObject ToDto(FindResponse<DailyStatisticAggregate> resp)
6582
{ "content", new JArray(resp.Content.Select(r => ToDto(r))) }
6683
};
6784
}
85+
private static JObject ToDto(FindResponse<PerformanceStatisticAggregate> resp)
86+
{
87+
return new JObject
88+
{
89+
{ "start_index", resp.StartIndex },
90+
{ "total_length", resp.TotalLength },
91+
{ "count", resp.Count },
92+
{ "content", new JArray(resp.Content.Select(r => ToDto(r))) }
93+
};
94+
}
6895

6996
private static JObject ToDto(DailyStatisticAggregate caseStatistic)
7097
{
@@ -84,6 +111,17 @@ private static JObject ToDto(DailyStatisticAggregate caseStatistic)
84111
};
85112
}
86113

114+
private static JObject ToDto(PerformanceStatisticAggregate performanceStatistic)
115+
{
116+
return new JObject
117+
{
118+
{ "datetime", performanceStatistic.CaptureDateTime },
119+
{ "machine_name", performanceStatistic.MachineName },
120+
{ "nb_working_threads", performanceStatistic.NbWorkingThreads },
121+
{ "memory_consumed_mb", performanceStatistic.MemoryConsumedMB }
122+
};
123+
}
124+
87125
private static FindDailyStatisticsParameter ExtractFindParameter(IQueryCollection query)
88126
{
89127
DateTime startDateTime;
@@ -102,5 +140,30 @@ private static FindDailyStatisticsParameter ExtractFindParameter(IQueryCollectio
102140

103141
return parameter;
104142
}
143+
144+
private static FindPerformanceStatisticsParameter ExtractFindPerformanceParameter(IQueryCollection query)
145+
{
146+
string machineName;
147+
DateTime startDateTime;
148+
string groupBy;
149+
var parameter = new FindPerformanceStatisticsParameter();
150+
parameter.ExtractFindParameter(query);
151+
if (query.TryGet("machine_name", out machineName))
152+
{
153+
parameter.MachineName = machineName;
154+
}
155+
156+
if (query.TryGet("start_datetime", out startDateTime))
157+
{
158+
parameter.StartDateTime = startDateTime;
159+
}
160+
161+
if (query.TryGet("group_by", out groupBy))
162+
{
163+
parameter.GroupBy = groupBy;
164+
}
165+
166+
return parameter;
167+
}
105168
}
106169
}

src/CaseManagement.CMMN/CMMNConstants.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
{
33
public static class CMMNConstants
44
{
5+
public const int WAIT_INTERVAL_MS = 20;
6+
public const int MONITORING_INTERVAL_MS = 1000;
7+
58
public static class RouteNames
69
{
710
public const string CaseFiles = "case-files";
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
namespace CaseManagement.CMMN
2+
{
3+
public class CMMNServerOptions
4+
{
5+
public CMMNServerOptions()
6+
{
7+
PerformanceIntervalInSeconds = 4;
8+
BlockThreadMS = 20;
9+
MaxNbPerformanceRecords = 10;
10+
}
11+
12+
/// <summary>
13+
/// Set the interval time in seconds to compute the performance.
14+
/// </summary>
15+
public int PerformanceIntervalInSeconds { get; set; }
16+
/// <summary>
17+
/// Set the time in milliseconds used to block a thread.
18+
/// </summary>
19+
public int BlockThreadMS { get; set; }
20+
/// <summary>
21+
/// Set the maximum number of records (performance).
22+
/// </summary>
23+
public int MaxNbPerformanceRecords { get; set; }
24+
}
25+
}

src/CaseManagement.CMMN/CaseInstance/CommandHandlers/CloseCommandHandler.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
using CaseManagement.CMMN.Domains;
44
using CaseManagement.Workflow.Infrastructure.Bus;
55
using CaseManagement.Workflow.Infrastructure.EvtStore;
6+
using System;
7+
using System.Linq;
68
using System.Threading.Tasks;
79

810
namespace CaseManagement.CMMN.CaseInstance.CommandHandlers
@@ -26,8 +28,16 @@ public async Task Handle(CloseCommand closeCommand)
2628
throw new UnknownCaseInstanceException(closeCommand.CaseInstanceId);
2729
}
2830

29-
caseInstance.MakeTransition(CMMNTransitions.Close);
30-
await _queueProvider.QueueTransition(caseInstance.Id, null, CMMNTransitions.Close);
31+
if (caseInstance.State == Enum.GetName(typeof(CaseStates), CaseStates.Suspended))
32+
{
33+
caseInstance.MakeTransition(CMMNTransitions.Close);
34+
await _queueProvider.QueueTransition(caseInstance.Id, null, CMMNTransitions.Close);
35+
}
36+
else
37+
{
38+
caseInstance.MakeTransition(CMMNTransitions.Close);
39+
await _queueProvider.QueueEvent(caseInstance.DomainEvents.Last());
40+
}
3141
}
3242
}
3343
}

src/CaseManagement.CMMN/CaseInstance/CommandHandlers/ConfirmFormCommandHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ public class ConfirmFormCommandHandler : IConfirmFormCommandHandler
1818
private readonly IFormQueryRepository _formQueryRepository;
1919
private readonly IEventStoreRepository _eventStoreRepository;
2020
private readonly IRoleQueryRepository _roleQueryRepository;
21-
private readonly IWorkflowDefinitionQueryRepository _cmmnWorkflowDefinitionQueryRepository;
21+
private readonly ICaseDefinitionQueryRepository _cmmnWorkflowDefinitionQueryRepository;
2222

23-
public ConfirmFormCommandHandler(IQueueProvider queueProvider, IFormQueryRepository formQueryRepository, IEventStoreRepository eventStoreRepository, IRoleQueryRepository roleQueryRepository, IWorkflowDefinitionQueryRepository cmmnWorkflowDefinitionQueryRepository)
23+
public ConfirmFormCommandHandler(IQueueProvider queueProvider, IFormQueryRepository formQueryRepository, IEventStoreRepository eventStoreRepository, IRoleQueryRepository roleQueryRepository, ICaseDefinitionQueryRepository cmmnWorkflowDefinitionQueryRepository)
2424
{
2525
_queueProvider = queueProvider;
2626
_formQueryRepository = formQueryRepository;

src/CaseManagement.CMMN/CaseInstance/CommandHandlers/CreateCaseInstanceCommandHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ namespace CaseManagement.CMMN.CaseInstance.CommandHandlers
99
{
1010
public class CreateCaseInstanceCommandHandler : ICreateCaseInstanceCommandHandler
1111
{
12-
private readonly IWorkflowDefinitionQueryRepository _cmmnWorkflowDefinitionQueryRepository;
12+
private readonly ICaseDefinitionQueryRepository _cmmnWorkflowDefinitionQueryRepository;
1313
private readonly ICommitAggregateHelper _commitAggregateHelper;
1414

15-
public CreateCaseInstanceCommandHandler(IWorkflowDefinitionQueryRepository cmmnWorkflowDefinitionQueryRepository, ICommitAggregateHelper commitAggregateHelper)
15+
public CreateCaseInstanceCommandHandler(ICaseDefinitionQueryRepository cmmnWorkflowDefinitionQueryRepository, ICommitAggregateHelper commitAggregateHelper)
1616
{
1717
_cmmnWorkflowDefinitionQueryRepository = cmmnWorkflowDefinitionQueryRepository;
1818
_commitAggregateHelper = commitAggregateHelper;

0 commit comments

Comments
 (0)