Skip to content

Commit c2e0bca

Browse files
committed
RE1-T121 PR#396 fixes
1 parent 3c63df0 commit c2e0bca

5 files changed

Lines changed: 60 additions & 30 deletions

File tree

Core/Resgrid.Services/ReportingRollupProcessor.cs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,23 @@ public async Task<int> RunDailyRollupForAllAsync(DateTime dayUtc, IEnumerable<in
6565

6666
foreach (var departmentId in (departmentIds ?? Enumerable.Empty<int>()).Distinct())
6767
{
68-
var calls = await _callsService.GetAllCallsByDepartmentDateRangeAsync(departmentId, dayStart, dayEnd);
69-
70-
var rows = BuildCallRollups(calls);
71-
rows.AddRange(await ComputeUtilizationRollupsAsync(departmentId, dayStart, dayEnd, cancellationToken));
72-
written += await _rollupRepository.UpsertDailyRollupAsync(departmentId, dayStart, rows, cancellationToken);
73-
74-
systemCallCount += calls.Count;
75-
systemProcessing.AddRange(CallProcessingSamples(calls));
68+
try
69+
{
70+
var calls = await _callsService.GetAllCallsByDepartmentDateRangeAsync(departmentId, dayStart, dayEnd);
71+
72+
var rows = BuildCallRollups(calls);
73+
rows.AddRange(await ComputeUtilizationRollupsAsync(departmentId, dayStart, dayEnd, cancellationToken));
74+
written += await _rollupRepository.UpsertDailyRollupAsync(departmentId, dayStart, rows, cancellationToken);
75+
76+
systemCallCount += calls.Count;
77+
systemProcessing.AddRange(CallProcessingSamples(calls));
78+
}
79+
catch (Exception ex)
80+
{
81+
// One department's failure must not abort the nightly batch; log it and continue so the
82+
// remaining departments and the system-wide aggregate still complete.
83+
Logging.LogException(ex, $"ReportingRollupProcessor dept={departmentId} day={dayUtc:o}");
84+
}
7685
}
7786

7887
// System-wide aggregate row (DepartmentId null) from the combined samples.

Repositories/Resgrid.Repositories.DataRepository/ReportingRepository.cs

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ public async Task<long> GetCallsCountAsync(int? departmentId, DateTime? startUtc
5555
query = _queryFactory.GetQuery<SelectReportCallsCountAllTimeQuery>();
5656
}
5757

58-
return await conn.ExecuteScalarAsync<long>(sql: query, param: p, transaction: _unitOfWork.Transaction);
58+
var command = new CommandDefinition(query, p, _unitOfWork.Transaction, cancellationToken: cancellationToken);
59+
return await conn.ExecuteScalarAsync<long>(command);
5960
});
6061
}
6162

@@ -65,7 +66,8 @@ public async Task<long> GetActiveCallsCountAsync(int? departmentId, Cancellation
6566
{
6667
var p = ScopeParams(departmentId);
6768
var query = _queryFactory.GetQuery<SelectReportActiveCallsCountQuery>();
68-
return await conn.ExecuteScalarAsync<long>(sql: query, param: p, transaction: _unitOfWork.Transaction);
69+
var command = new CommandDefinition(query, p, _unitOfWork.Transaction, cancellationToken: cancellationToken);
70+
return await conn.ExecuteScalarAsync<long>(command);
6971
});
7072
}
7173

@@ -75,7 +77,8 @@ public async Task<long> GetPersonnelCountAsync(int? departmentId, CancellationTo
7577
{
7678
var p = ScopeParams(departmentId);
7779
var query = _queryFactory.GetQuery<SelectReportPersonnelCountQuery>();
78-
return await conn.ExecuteScalarAsync<long>(sql: query, param: p, transaction: _unitOfWork.Transaction);
80+
var command = new CommandDefinition(query, p, _unitOfWork.Transaction, cancellationToken: cancellationToken);
81+
return await conn.ExecuteScalarAsync<long>(command);
7982
});
8083
}
8184

@@ -85,7 +88,8 @@ public async Task<long> GetUnitsCountAsync(int? departmentId, CancellationToken
8588
{
8689
var p = ScopeParams(departmentId);
8790
var query = _queryFactory.GetQuery<SelectReportUnitsCountQuery>();
88-
return await conn.ExecuteScalarAsync<long>(sql: query, param: p, transaction: _unitOfWork.Transaction);
91+
var command = new CommandDefinition(query, p, _unitOfWork.Transaction, cancellationToken: cancellationToken);
92+
return await conn.ExecuteScalarAsync<long>(command);
8993
});
9094
}
9195

@@ -95,7 +99,8 @@ public async Task<long> GetMessagesCountAsync(int? departmentId, DateTime startU
9599
{
96100
var p = WindowScopeParams(departmentId, startUtc, endUtc);
97101
var query = _queryFactory.GetQuery<SelectReportMessagesCountQuery>();
98-
return await conn.ExecuteScalarAsync<long>(sql: query, param: p, transaction: _unitOfWork.Transaction);
102+
var command = new CommandDefinition(query, p, _unitOfWork.Transaction, cancellationToken: cancellationToken);
103+
return await conn.ExecuteScalarAsync<long>(command);
99104
});
100105
}
101106

@@ -114,11 +119,13 @@ public async Task<long> GetDepartmentsCountAsync(DateTime? startUtc, DateTime? e
114119
p.Add("StartDate", startUtc.Value);
115120
p.Add("EndDate", endUtc.Value);
116121
var newQuery = _queryFactory.GetQuery<SelectReportNewDepartmentsQuery>();
117-
return await conn.ExecuteScalarAsync<long>(sql: newQuery, param: p, transaction: _unitOfWork.Transaction);
122+
var newCommand = new CommandDefinition(newQuery, p, _unitOfWork.Transaction, cancellationToken: cancellationToken);
123+
return await conn.ExecuteScalarAsync<long>(newCommand);
118124
}
119125

120126
var totalQuery = _queryFactory.GetQuery<SelectReportDepartmentsTotalQuery>();
121-
return await conn.ExecuteScalarAsync<long>(sql: totalQuery, param: new DynamicParametersExtension(), transaction: _unitOfWork.Transaction);
127+
var totalCommand = new CommandDefinition(totalQuery, new DynamicParametersExtension(), _unitOfWork.Transaction, cancellationToken: cancellationToken);
128+
return await conn.ExecuteScalarAsync<long>(totalCommand);
122129
});
123130
}
124131

@@ -134,7 +141,8 @@ public async Task<IEnumerable<CountByDateBucketResult>> GetCallsByDateBucketAsyn
134141
var query = granularity == ReportGranularity.Month
135142
? _queryFactory.GetQuery<SelectReportCallsByMonthQuery>()
136143
: _queryFactory.GetQuery<SelectReportCallsByDayQuery>();
137-
return await conn.QueryAsync<CountByDateBucketResult>(sql: query, param: p, transaction: _unitOfWork.Transaction);
144+
var command = new CommandDefinition(query, p, _unitOfWork.Transaction, cancellationToken: cancellationToken);
145+
return await conn.QueryAsync<CountByDateBucketResult>(command);
138146
});
139147
}
140148

@@ -146,7 +154,8 @@ public async Task<IEnumerable<CountByDateBucketResult>> GetMessagesByDateBucketA
146154
var query = granularity == ReportGranularity.Month
147155
? _queryFactory.GetQuery<SelectReportMessagesByMonthQuery>()
148156
: _queryFactory.GetQuery<SelectReportMessagesByDayQuery>();
149-
return await conn.QueryAsync<CountByDateBucketResult>(sql: query, param: p, transaction: _unitOfWork.Transaction);
157+
var command = new CommandDefinition(query, p, _unitOfWork.Transaction, cancellationToken: cancellationToken);
158+
return await conn.QueryAsync<CountByDateBucketResult>(command);
150159
});
151160
}
152161

@@ -164,7 +173,8 @@ public async Task<IEnumerable<CountByStringKeyResult>> GetCallsBreakdownByTypeAs
164173
{
165174
var p = WindowScopeParams(departmentId, startUtc, endUtc);
166175
var query = _queryFactory.GetQuery<SelectReportCallsByTypeQuery>();
167-
return await conn.QueryAsync<CountByStringKeyResult>(sql: query, param: p, transaction: _unitOfWork.Transaction);
176+
var command = new CommandDefinition(query, p, _unitOfWork.Transaction, cancellationToken: cancellationToken);
177+
return await conn.QueryAsync<CountByStringKeyResult>(command);
168178
});
169179
}
170180

@@ -174,7 +184,8 @@ public async Task<IEnumerable<CountByKeyResult>> GetCallsBreakdownByPriorityAsyn
174184
{
175185
var p = WindowScopeParams(departmentId, startUtc, endUtc);
176186
var query = _queryFactory.GetQuery<SelectReportCallsByPriorityQuery>();
177-
return await conn.QueryAsync<CountByKeyResult>(sql: query, param: p, transaction: _unitOfWork.Transaction);
187+
var command = new CommandDefinition(query, p, _unitOfWork.Transaction, cancellationToken: cancellationToken);
188+
return await conn.QueryAsync<CountByKeyResult>(command);
178189
});
179190
}
180191

@@ -184,7 +195,8 @@ public async Task<IEnumerable<CountByKeyResult>> GetCallsBreakdownByStateAsync(i
184195
{
185196
var p = WindowScopeParams(departmentId, startUtc, endUtc);
186197
var query = _queryFactory.GetQuery<SelectReportCallsByStateQuery>();
187-
return await conn.QueryAsync<CountByKeyResult>(sql: query, param: p, transaction: _unitOfWork.Transaction);
198+
var command = new CommandDefinition(query, p, _unitOfWork.Transaction, cancellationToken: cancellationToken);
199+
return await conn.QueryAsync<CountByKeyResult>(command);
188200
});
189201
}
190202

@@ -198,7 +210,8 @@ public async Task<IEnumerable<CountByKeyResult>> GetLatestPersonnelStateCountsAs
198210
{
199211
var p = ScopeParams(departmentId);
200212
var query = _queryFactory.GetQuery<SelectReportLatestPersonnelStatesQuery>();
201-
return await conn.QueryAsync<CountByKeyResult>(sql: query, param: p, transaction: _unitOfWork.Transaction);
213+
var command = new CommandDefinition(query, p, _unitOfWork.Transaction, cancellationToken: cancellationToken);
214+
return await conn.QueryAsync<CountByKeyResult>(command);
202215
});
203216
}
204217

@@ -208,7 +221,8 @@ public async Task<IEnumerable<CountByKeyResult>> GetLatestUnitStateCountsAsync(i
208221
{
209222
var p = ScopeParams(departmentId);
210223
var query = _queryFactory.GetQuery<SelectReportLatestUnitStatesQuery>();
211-
return await conn.QueryAsync<CountByKeyResult>(sql: query, param: p, transaction: _unitOfWork.Transaction);
224+
var command = new CommandDefinition(query, p, _unitOfWork.Transaction, cancellationToken: cancellationToken);
225+
return await conn.QueryAsync<CountByKeyResult>(command);
212226
});
213227
}
214228

Repositories/Resgrid.Repositories.DataRepository/ReportingRollupRepository.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,14 @@ public async Task<int> UpsertDailyRollupAsync(int? departmentId, DateTime bucket
5656
deleteParams.Add("DepartmentId", departmentId ?? 0);
5757

5858
var deleteQuery = _queryFactory.GetQuery<DeleteReportRollupForDateQuery>();
59-
await conn.ExecuteAsync(sql: deleteQuery, param: deleteParams, transaction: _unitOfWork.Transaction);
59+
var deleteCommand = new CommandDefinition(deleteQuery, deleteParams, _unitOfWork.Transaction, cancellationToken: cancellationToken);
60+
await conn.ExecuteAsync(deleteCommand);
6061

6162
if (rowList.Count > 0)
6263
{
6364
var insertQuery = _queryFactory.GetQuery<InsertReportRollupQuery>();
64-
await conn.ExecuteAsync(sql: insertQuery, param: rowList, transaction: _unitOfWork.Transaction);
65+
var insertCommand = new CommandDefinition(insertQuery, rowList, _unitOfWork.Transaction, cancellationToken: cancellationToken);
66+
await conn.ExecuteAsync(insertCommand);
6567
}
6668

6769
return rowList.Count;
@@ -81,7 +83,8 @@ public async Task<IEnumerable<ReportingDailyRollup>> GetRollupsAsync(int? depart
8183
p.Add("DepartmentId", departmentId ?? 0);
8284

8385
var query = _queryFactory.GetQuery<SelectReportRollupsQuery>();
84-
return await conn.QueryAsync<ReportingDailyRollup>(sql: query, param: p, transaction: _unitOfWork.Transaction);
86+
var command = new CommandDefinition(query, p, _unitOfWork.Transaction, cancellationToken: cancellationToken);
87+
return await conn.QueryAsync<ReportingDailyRollup>(command);
8588
});
8689
}
8790

Repositories/Resgrid.Repositories.DataRepository/SystemAuditRepository.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,10 @@ public async Task<IEnumerable<SystemAudit>> GetByUserIdPagedAsync(string userId,
3939
dynamicParameters.Add("UserId", userId);
4040
dynamicParameters.Add("StartDate", startDate);
4141
dynamicParameters.Add("EndDate", endDate);
42-
dynamicParameters.Add("Offset", Math.Max(0, (page - 1) * pageSize));
43-
dynamicParameters.Add("PageSize", pageSize);
42+
var safePage = page < 1 ? 1 : page;
43+
var safePageSize = pageSize < 1 ? 1 : pageSize;
44+
dynamicParameters.Add("Offset", (safePage - 1) * safePageSize);
45+
dynamicParameters.Add("PageSize", safePageSize);
4446

4547
var query = _queryFactory.GetQuery<SelectSystemAuditsByUserIdPagedQuery>();
4648

@@ -84,8 +86,10 @@ public async Task<IEnumerable<SystemAudit>> GetByDepartmentIdPagedAsync(int depa
8486
dynamicParameters.Add("DepartmentId", departmentId);
8587
dynamicParameters.Add("StartDate", startDate);
8688
dynamicParameters.Add("EndDate", endDate);
87-
dynamicParameters.Add("Offset", Math.Max(0, (page - 1) * pageSize));
88-
dynamicParameters.Add("PageSize", pageSize);
89+
var safePage = page < 1 ? 1 : page;
90+
var safePageSize = pageSize < 1 ? 1 : pageSize;
91+
dynamicParameters.Add("Offset", (safePage - 1) * safePageSize);
92+
dynamicParameters.Add("PageSize", safePageSize);
8993

9094
var query = _queryFactory.GetQuery<SelectSystemAuditsByDepartmentIdPagedQuery>();
9195

Workers/Resgrid.Workers.Console/Tasks/ReportingRollupTask.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public class ReportingRollupTask : IQuidjiboHandler<ReportingRollupCommand>
2222
{
2323
public string Name => "Reporting Rollup";
2424
public int Priority => 1;
25-
public ILogger _logger;
25+
private readonly ILogger _logger;
2626

2727
public ReportingRollupTask(ILogger logger)
2828
{

0 commit comments

Comments
 (0)