@chevre/domain 24.0.0-alpha.30 → 24.0.0-alpha.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/lib/chevre/repo/aggregateAction.js +1 -1
  2. package/lib/chevre/repo/mongoose/schemas/reservation.d.ts +1 -1
  3. package/lib/chevre/repo/order.js +2 -1
  4. package/lib/chevre/repo/reservation.d.ts +6 -24
  5. package/lib/chevre/repo/reservation.js +35 -48
  6. package/lib/chevre/repository.d.ts +0 -5
  7. package/lib/chevre/repository.js +1 -12
  8. package/lib/chevre/service/assetTransaction/cancelReservation/factory.js +1 -17
  9. package/lib/chevre/service/assetTransaction/reserve/start/factory/createReservation.js +1 -41
  10. package/lib/chevre/service/assetTransaction/reserve/start/factory/createStartParams.js +1 -11
  11. package/lib/chevre/service/assetTransaction/reserve/start.js +2 -5
  12. package/lib/chevre/service/delivery/factory.js +0 -1
  13. package/lib/chevre/service/delivery/reservation/factory.js +8 -13
  14. package/lib/chevre/service/offer/event/authorize/factory.js +0 -38
  15. package/lib/chevre/service/offer/event/authorize/processStartReserve4chevre.d.ts +0 -2
  16. package/lib/chevre/service/offer/event/authorize.d.ts +4 -3
  17. package/lib/chevre/service/offer/event/authorize.js +22 -21
  18. package/lib/chevre/service/offer/event/voidTransaction.d.ts +2 -0
  19. package/lib/chevre/service/offer/event/voidTransactionByActionId.d.ts +5 -0
  20. package/lib/chevre/service/offer/event/voidTransactionByActionId.js +2 -2
  21. package/lib/chevre/service/order/deleteOrder.js +1 -1
  22. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing/processOrder.js +1 -2
  23. package/lib/chevre/service/order/placeOrder/createPlacingOrderFromExistingTransaction.d.ts +7 -6
  24. package/lib/chevre/service/order/placeOrder/factory/orderedItem.js +0 -20
  25. package/lib/chevre/service/order/placeOrder/factory.js +0 -1
  26. package/lib/chevre/service/report.d.ts +1 -2
  27. package/lib/chevre/service/report.js +1 -3
  28. package/lib/chevre/service/reserve/cancelReservation.js +4 -11
  29. package/lib/chevre/service/reserve/findByCode.d.ts +1 -1
  30. package/lib/chevre/service/reserve/potentialActions/onReservationCanceled.d.ts +1 -2
  31. package/lib/chevre/service/reserve/potentialActions/onReservationCanceled.js +1 -0
  32. package/lib/chevre/service/reserve/searchByOrder.d.ts +1 -1
  33. package/lib/chevre/service/task/voidReserveTransaction.js +2 -0
  34. package/lib/chevre/service/transaction/placeOrder/confirm/validation.js +2 -4
  35. package/lib/chevre/service/transaction/placeOrder/confirm.js +1 -3
  36. package/lib/chevre/service/validation/validateOrder.js +1 -3
  37. package/package.json +2 -2
  38. package/lib/chevre/repo/mongoose/schemas/telemetry.d.ts +0 -10
  39. package/lib/chevre/repo/mongoose/schemas/telemetry.js +0 -80
  40. package/lib/chevre/repo/telemetry.d.ts +0 -9
  41. package/lib/chevre/repo/telemetry.js +0 -14
  42. package/lib/chevre/service/report/telemetry.d.ts +0 -313
  43. package/lib/chevre/service/report/telemetry.js +0 -444
@@ -1,444 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.TelemetryPurposeType = exports.TelemetryScope = void 0;
30
- exports.searchGlobalFlow = searchGlobalFlow;
31
- exports.searchGlobalStock = searchGlobalStock;
32
- exports.searchSellerFlow = searchSellerFlow;
33
- exports.searchSellerStock = searchSellerStock;
34
- exports.search = search;
35
- exports.createFlow = createFlow;
36
- exports.createStock = createStock;
37
- const debug_1 = __importDefault(require("debug"));
38
- const moment_1 = __importDefault(require("moment"));
39
- const factory = __importStar(require("../../factory"));
40
- const debug = (0, debug_1.default)('chevre-domain:service');
41
- const TELEMETRY_UNIT_OF_MEASUREMENT_IN_SECONDS = 60; // 測定単位時間(秒)
42
- var TelemetryScope;
43
- (function (TelemetryScope) {
44
- TelemetryScope["Global"] = "Global";
45
- TelemetryScope["Seller"] = "Seller";
46
- })(TelemetryScope || (exports.TelemetryScope = TelemetryScope = {}));
47
- var TelemetryPurposeType;
48
- (function (TelemetryPurposeType) {
49
- TelemetryPurposeType["Flow"] = "Flow";
50
- TelemetryPurposeType["Stock"] = "Stock";
51
- })(TelemetryPurposeType || (exports.TelemetryPurposeType = TelemetryPurposeType = {}));
52
- function searchGlobalFlow(searchConditions) {
53
- return search({ ...searchConditions, ...{ scope: TelemetryScope.Global, purpose: TelemetryPurposeType.Flow } });
54
- }
55
- function searchGlobalStock(searchConditions) {
56
- return search({ ...searchConditions, ...{ scope: TelemetryScope.Global, purpose: TelemetryPurposeType.Stock } });
57
- }
58
- function searchSellerFlow(searchConditions) {
59
- return search({ ...searchConditions, ...{ scope: TelemetryScope.Seller, purpose: TelemetryPurposeType.Flow } });
60
- }
61
- function searchSellerStock(searchConditions) {
62
- return search({ ...searchConditions, ...{ scope: TelemetryScope.Seller, purpose: TelemetryPurposeType.Stock } });
63
- }
64
- /**
65
- * 計測データを検索する
66
- * @param searchConditions.measuredFrom 計測日時from
67
- * @param searchConditions.measuredThrough 計測日時through
68
- */
69
- function search(searchConditions) {
70
- return async (repos) => {
71
- return repos.telemetry.telemetryModel.find({
72
- 'object.scope': {
73
- $exists: true,
74
- $eq: searchConditions.scope
75
- },
76
- 'object.measuredAt': {
77
- $exists: true,
78
- $gte: searchConditions.measuredFrom,
79
- $lt: searchConditions.measuredThrough
80
- },
81
- 'purpose.typeOf': {
82
- $exists: true,
83
- $eq: searchConditions.purpose
84
- }
85
- })
86
- .sort({ 'object.measuredAt': 1 })
87
- .lean()
88
- .exec();
89
- };
90
- }
91
- /**
92
- * フロー測定データを作成する
93
- */
94
- /* istanbul ignore next */
95
- function createFlow(target) {
96
- return async (repos) => {
97
- const startDate = new Date();
98
- const measuredThrough = (0, moment_1.default)(target.measuredAt);
99
- const measuredFrom = (0, moment_1.default)(measuredThrough)
100
- .add(-TELEMETRY_UNIT_OF_MEASUREMENT_IN_SECONDS, 'seconds');
101
- let telemetry;
102
- if (target.sellerId !== undefined) {
103
- const flowData = await createSellerFlow(measuredFrom.toDate(), measuredThrough.toDate(), target.sellerId)(repos);
104
- debug('flowData created.');
105
- telemetry = {
106
- purpose: { typeOf: TelemetryPurposeType.Flow },
107
- object: {
108
- scope: TelemetryScope.Seller,
109
- measuredAt: target.measuredAt,
110
- sellerId: target.sellerId
111
- },
112
- result: flowData,
113
- startDate: startDate,
114
- endDate: new Date()
115
- };
116
- }
117
- else {
118
- const flowData = await createGlobalFlow(measuredFrom.toDate(), measuredThrough.toDate())({
119
- task: repos.task
120
- });
121
- debug('flowData created.');
122
- telemetry = {
123
- purpose: { typeOf: TelemetryPurposeType.Flow },
124
- object: {
125
- scope: TelemetryScope.Global,
126
- measuredAt: target.measuredAt
127
- },
128
- result: flowData,
129
- startDate: startDate,
130
- endDate: new Date()
131
- };
132
- }
133
- await repos.telemetry.telemetryModel.create(telemetry);
134
- debug('telemetry saved.');
135
- };
136
- }
137
- /**
138
- * ストック測定データを作成する
139
- */
140
- /* istanbul ignore next */
141
- function createStock(target) {
142
- return async (repos) => {
143
- const startDate = new Date();
144
- let telemetry;
145
- if (target.sellerId !== undefined) {
146
- const stockData = await createSellerStock(target.measuredAt, target.sellerId)(repos);
147
- debug('stockData created.');
148
- telemetry = {
149
- purpose: { typeOf: TelemetryPurposeType.Stock },
150
- object: {
151
- scope: TelemetryScope.Seller,
152
- measuredAt: target.measuredAt,
153
- sellerId: target.sellerId
154
- },
155
- result: stockData,
156
- startDate: startDate,
157
- endDate: new Date()
158
- };
159
- }
160
- else {
161
- const stockData = await createGlobalStock(target.measuredAt)({ task: repos.task });
162
- debug('stockData created.');
163
- telemetry = {
164
- purpose: { typeOf: TelemetryPurposeType.Stock },
165
- object: {
166
- scope: TelemetryScope.Global,
167
- measuredAt: target.measuredAt
168
- },
169
- result: stockData,
170
- startDate: startDate,
171
- endDate: new Date()
172
- };
173
- }
174
- await repos.telemetry.telemetryModel.create(telemetry);
175
- debug('telemetry saved.');
176
- };
177
- }
178
- /**
179
- * フロー計測データーを作成する
180
- * @param measuredFrom 計測開始日時
181
- * @param measuredThrough 計測終了日時
182
- */
183
- /* istanbul ignore next */
184
- function createSellerFlow(measuredFrom, measuredThrough, sellerId) {
185
- return async (repos) => {
186
- const { sellerFlowTransactionResult, expiredTransactionIds } = await createSellerFlowTransactionResult(measuredFrom, measuredThrough, sellerId)(repos);
187
- // 期限切れ取引数
188
- const numberOfTransactionsExpired = sellerFlowTransactionResult.numberOfExpired;
189
- // 期限切れ取引に対して作成されたアクションを取得
190
- const actionsOnExpiredTransactions = await repos.action.search({
191
- typeOf: { $eq: factory.actionType.AuthorizeAction },
192
- purpose: { id: { $in: expiredTransactionIds } }
193
- }, []);
194
- debug(actionsOnExpiredTransactions.length, 'actionsOnExpiredTransactions found.');
195
- const numbersOfActionsOnExpired = expiredTransactionIds.map((transactionId) => {
196
- return actionsOnExpiredTransactions.filter((action) => action.purpose?.id === transactionId).length;
197
- });
198
- const totalNumberOfActionsOnExpired = numbersOfActionsOnExpired.reduce((a, b) => a + b, 0);
199
- const maxNumberOfActionsOnExpired = numbersOfActionsOnExpired.reduce((a, b) => Math.max(a, b), 0);
200
- const minNumberOfActionsOnExpired = numbersOfActionsOnExpired.reduce((a, b) => Math.min(a, b), (numberOfTransactionsExpired > 0) ? numbersOfActionsOnExpired[0] : 0);
201
- const averageNumberOfActionsOnExpired = (numberOfTransactionsExpired > 0) ? totalNumberOfActionsOnExpired / numberOfTransactionsExpired : 0;
202
- return {
203
- transactions: {
204
- ...sellerFlowTransactionResult,
205
- totalNumberOfActionsOnExpired: totalNumberOfActionsOnExpired,
206
- maxNumberOfActionsOnExpired: maxNumberOfActionsOnExpired,
207
- minNumberOfActionsOnExpired: minNumberOfActionsOnExpired,
208
- averageNumberOfActionsOnExpired: parseFloat(averageNumberOfActionsOnExpired.toFixed(1)),
209
- totalNumberOfOrderItems: 0, // TODO 実装
210
- maxNumberOfOrderItems: 0, // TODO 実装
211
- minNumberOfOrderItems: 0, // TODO 実装
212
- averageNumberOfOrderItems: 0 // TODO 実装
213
- },
214
- measuredFrom: measuredFrom,
215
- measuredThrough: measuredThrough
216
- };
217
- };
218
- }
219
- function createSellerFlowTransactionResult(measuredFrom, measuredThrough, sellerId) {
220
- return async (repos) => {
221
- // 計測期間内に開始された取引数を算出する
222
- const { count } = await repos.placeOrder.countPlaceOrder({
223
- typeOf: factory.transactionType.PlaceOrder,
224
- seller: { ids: [sellerId] },
225
- startFrom: measuredFrom,
226
- startThrough: measuredThrough
227
- });
228
- const numberOfTransactionsStarted = count;
229
- // 計測期間内に開始され、かつ、すでに終了している取引を検索
230
- const startedAndEndedTransactions = await repos.placeOrder.findPlaceOrderTransactions({
231
- typeOf: factory.transactionType.PlaceOrder,
232
- seller: { ids: [sellerId] },
233
- startFrom: measuredFrom,
234
- startThrough: measuredThrough,
235
- endThrough: new Date(),
236
- inclusion: ['status']
237
- });
238
- const numberOfStartedAndConfirmed = startedAndEndedTransactions.filter((transaction) => transaction.status === factory.transactionStatusType.Confirmed).length;
239
- const numberOfStartedAndExpired = startedAndEndedTransactions.filter((transaction) => transaction.status === factory.transactionStatusType.Expired).length;
240
- const endedTransactions = await repos.placeOrder.findPlaceOrderTransactions({
241
- typeOf: factory.transactionType.PlaceOrder,
242
- seller: { ids: [sellerId] },
243
- endFrom: measuredFrom,
244
- endThrough: measuredThrough,
245
- inclusion: ['status', 'endDate', 'startDate', 'result']
246
- });
247
- debug(endedTransactions.length, 'endedTransactions found.');
248
- const confirmedTransactions = endedTransactions.filter((transaction) => transaction.status === factory.transactionStatusType.Confirmed);
249
- const expiredTransactions = endedTransactions.filter((transaction) => transaction.status === factory.transactionStatusType.Expired);
250
- const numberOfTransactionsConfirmed = confirmedTransactions.length;
251
- // 所要時間算出(期間の成立取引リストを取得し、開始時刻と成立時刻の差を所要時間とする)
252
- const requiredTimesConfirmed = confirmedTransactions.map((transaction) => (0, moment_1.default)(transaction.endDate)
253
- .diff((0, moment_1.default)(transaction.startDate, 'milliseconds')));
254
- const totalRequiredTimeInMilliseconds = requiredTimesConfirmed.reduce((a, b) => a + b, 0);
255
- const maxRequiredTimeInMilliseconds = requiredTimesConfirmed.reduce((a, b) => Math.max(a, b), 0);
256
- const minRequiredTimeInMilliseconds = requiredTimesConfirmed.reduce((a, b) => Math.min(a, b), (numberOfTransactionsConfirmed > 0) ? requiredTimesConfirmed[0] : 0);
257
- const averageRequiredTimeInMilliseconds = (numberOfTransactionsConfirmed > 0) ? totalRequiredTimeInMilliseconds / numberOfTransactionsConfirmed : 0;
258
- // const totalTimeLeftUntilEventInMilliseconds = timesLeftUntilEvent.reduce((a, b) => a + b, 0);
259
- // const maxTimeLeftUntilEventInMilliseconds = timesLeftUntilEvent.reduce((a, b) => Math.max(a, b), 0);
260
- // const minTimeLeftUntilEventInMilliseconds =
261
- // timesLeftUntilEvent.reduce((a, b) => Math.min(a, b), (numberOfTransactionsConfirmed > 0) ? timesLeftUntilEvent[0] : 0);
262
- // const averageTimeLeftUntilEventInMilliseconds =
263
- // (numberOfTransactionsConfirmed > 0) ? totalTimeLeftUntilEventInMilliseconds / numberOfTransactionsConfirmed : 0;
264
- // 金額算出
265
- const amounts = confirmedTransactions.map((transaction) => transaction.result.order.price);
266
- const totalAmount = amounts.reduce((a, b) => a + b, 0);
267
- const maxAmount = amounts.reduce((a, b) => Math.max(a, b), 0);
268
- const minAmount = amounts.reduce((a, b) => Math.min(a, b), (numberOfTransactionsConfirmed > 0) ? amounts[0] : 0);
269
- const averageAmount = (numberOfTransactionsConfirmed > 0) ? totalAmount / numberOfTransactionsConfirmed : 0;
270
- // アクション数集計
271
- // const numbersOfActions = confirmedTransactions.map((t) => t.object.authorizeActions.length);
272
- // const totalNumberOfActions = numbersOfActions.reduce((a, b) => a + b, 0);
273
- // const maxNumberOfActions = numbersOfActions.reduce((a, b) => Math.max(a, b), 0);
274
- // const minNumberOfActions = numbersOfActions.reduce(
275
- // (a, b) => Math.min(a, b), (numberOfTransactionsConfirmed > 0) ? numbersOfActions[0] : 0
276
- // );
277
- // const averageNumberOfActions = (numberOfTransactionsConfirmed > 0) ? totalNumberOfActions / numberOfTransactionsConfirmed : 0;
278
- // 期限切れ取引数
279
- const numberOfTransactionsExpired = expiredTransactions.length;
280
- const expiredTransactionIds = expiredTransactions.map((transaction) => transaction.id);
281
- return {
282
- sellerFlowTransactionResult: {
283
- numberOfStarted: numberOfTransactionsStarted,
284
- numberOfStartedAndConfirmed: numberOfStartedAndConfirmed,
285
- numberOfStartedAndExpired: numberOfStartedAndExpired,
286
- numberOfConfirmed: numberOfTransactionsConfirmed,
287
- numberOfExpired: numberOfTransactionsExpired,
288
- totalRequiredTimeInMilliseconds: totalRequiredTimeInMilliseconds,
289
- maxRequiredTimeInMilliseconds: maxRequiredTimeInMilliseconds,
290
- minRequiredTimeInMilliseconds: minRequiredTimeInMilliseconds,
291
- averageRequiredTimeInMilliseconds: parseFloat(averageRequiredTimeInMilliseconds.toFixed(1)),
292
- // totalTimeLeftUntilEventInMilliseconds: totalTimeLeftUntilEventInMilliseconds,
293
- // maxTimeLeftUntilEventInMilliseconds: maxTimeLeftUntilEventInMilliseconds,
294
- // minTimeLeftUntilEventInMilliseconds: minTimeLeftUntilEventInMilliseconds,
295
- // averageTimeLeftUntilEventInMilliseconds: averageTimeLeftUntilEventInMilliseconds,
296
- totalAmount: totalAmount,
297
- maxAmount: maxAmount,
298
- minAmount: minAmount,
299
- averageAmount: parseFloat(averageAmount.toFixed(1)),
300
- // totalNumberOfActionsOnConfirmed: totalNumberOfActions,
301
- // maxNumberOfActionsOnConfirmed: maxNumberOfActions,
302
- // minNumberOfActionsOnConfirmed: minNumberOfActions,
303
- // averageNumberOfActionsOnConfirmed: parseFloat(averageNumberOfActions.toFixed(1)),
304
- totalNumberOfOrderItems: 0, // TODO 実装
305
- maxNumberOfOrderItems: 0, // TODO 実装
306
- minNumberOfOrderItems: 0, // TODO 実装
307
- averageNumberOfOrderItems: 0 // TODO 実装
308
- },
309
- expiredTransactionIds
310
- };
311
- };
312
- }
313
- /**
314
- * ストック計測データを作成する
315
- * @param measuredAt 計測日時
316
- */
317
- /* istanbul ignore next */
318
- function createSellerStock(measuredAt, sellerId) {
319
- return async (repos) => {
320
- // {measuredAt}以前に開始し、{measuredAt}以後に成立あるいは期限切れした取引
321
- const { count } = await repos.placeOrder.countPlaceOrder({
322
- typeOf: factory.transactionType.PlaceOrder,
323
- seller: { ids: [sellerId] },
324
- startThrough: measuredAt,
325
- endFrom: measuredAt
326
- });
327
- const numTransactionsUnderway1 = count;
328
- // {measuredAt}以前に開始し、いまだに進行中の取引
329
- const count2Result = await repos.placeOrder.countPlaceOrder({
330
- typeOf: factory.transactionType.PlaceOrder,
331
- seller: { ids: [sellerId] },
332
- startThrough: measuredAt,
333
- statuses: [factory.transactionStatusType.InProgress]
334
- });
335
- const numTransactionsUnderway2 = count2Result.count;
336
- const numberOfTransactionsUnderway = numTransactionsUnderway1 + numTransactionsUnderway2;
337
- debug('numberOfTransactionsUnderway:', numberOfTransactionsUnderway);
338
- return {
339
- transactions: {
340
- numberOfUnderway: numberOfTransactionsUnderway
341
- },
342
- measuredAt: measuredAt
343
- };
344
- };
345
- }
346
- /**
347
- * フロー計測データーを作成する
348
- * @param measuredFrom 計測開始日時
349
- * @param measuredThrough 計測終了日時
350
- */
351
- /* istanbul ignore next */
352
- function createGlobalFlow(measuredFrom, measuredThrough) {
353
- return async (repos) => {
354
- // 全タスク名リスト
355
- const targetTaskNames = Object.keys(factory.taskName)
356
- .map((k) => factory.taskName[k]);
357
- const taskResults = await Promise.all(targetTaskNames.map(async (taskName) => {
358
- const numberOfTasksCreated = await repos.task.taskModel.countDocuments({
359
- name: taskName,
360
- createdAt: {
361
- $gte: measuredFrom,
362
- $lt: measuredThrough
363
- }
364
- })
365
- .exec();
366
- debug('numberOfTasksCreated:', numberOfTasksCreated);
367
- // 実行中止ステータスで、最終試行日時が範囲にあるものを実行タスク数とする
368
- const numberOfTasksAborted = await repos.task.taskModel.countDocuments({
369
- name: taskName,
370
- lastTriedAt: {
371
- $type: 'date',
372
- $gte: measuredFrom,
373
- $lt: measuredThrough
374
- },
375
- status: factory.taskStatus.Aborted
376
- })
377
- .exec();
378
- debug('numberOfTasksAborted:', numberOfTasksAborted);
379
- // 実行済みステータスで、最終試行日時が範囲にあるものを実行タスク数とする
380
- const executedTasks = await repos.task.taskModel.find({
381
- name: taskName,
382
- lastTriedAt: {
383
- $type: 'date',
384
- $gte: measuredFrom,
385
- $lt: measuredThrough
386
- },
387
- status: factory.taskStatus.Executed
388
- }, 'runsAt lastTriedAt numberOfTried')
389
- .exec()
390
- .then((docs) => docs.map((doc) => doc.toObject()));
391
- debug(executedTasks.length, 'executedTasks found.');
392
- const numberOfTasksExecuted = executedTasks.length;
393
- const latencies = executedTasks.map((task) => (0, moment_1.default)(task.lastTriedAt)
394
- .diff((0, moment_1.default)(task.runsAt, 'milliseconds')));
395
- const totalLatency = latencies.reduce((a, b) => a + b, 0);
396
- const maxLatency = latencies.reduce((a, b) => Math.max(a, b), 0);
397
- const minLatency = latencies.reduce((a, b) => Math.min(a, b), (numberOfTasksExecuted > 0) ? latencies[0] : 0);
398
- const numbersOfTrials = await Promise.all(executedTasks.map((task) => task.numberOfTried));
399
- const totalNumberOfTrials = numbersOfTrials.reduce((a, b) => a + b, 0);
400
- const maxNumberOfTrials = numbersOfTrials.reduce((a, b) => Math.max(a, b), 0);
401
- const minNumberOfTrials = numbersOfTrials.reduce((a, b) => Math.min(a, b), (numberOfTasksExecuted > 0) ? numbersOfTrials[0] : 0);
402
- return {
403
- name: taskName,
404
- numberOfCreated: numberOfTasksCreated,
405
- numberOfExecuted: numberOfTasksExecuted,
406
- numberOfAborted: numberOfTasksAborted,
407
- totalLatencyInMilliseconds: totalLatency,
408
- maxLatencyInMilliseconds: maxLatency,
409
- minLatencyInMilliseconds: minLatency,
410
- totalNumberOfTrials: totalNumberOfTrials,
411
- maxNumberOfTrials: maxNumberOfTrials,
412
- minNumberOfTrials: minNumberOfTrials
413
- };
414
- }));
415
- return {
416
- tasks: taskResults,
417
- measuredFrom: measuredFrom,
418
- measuredThrough: measuredThrough
419
- };
420
- };
421
- }
422
- /**
423
- * ストック計測データを作成する
424
- * @param measuredAt 計測日時
425
- */
426
- /* istanbul ignore next */
427
- function createGlobalStock(measuredAt) {
428
- return async (repos) => {
429
- // 待機状態のタスク数を算出
430
- debug('counting waiting tasks globally...');
431
- const numberOfTasksUnexecuted = await repos.task.taskModel.countDocuments({
432
- runsAt: { $lt: measuredAt }, // 実行日時を超過している
433
- status: { $in: [factory.taskStatus.Ready, factory.taskStatus.Running] }
434
- })
435
- .exec();
436
- debug('global waiting tasks count', numberOfTasksUnexecuted);
437
- return {
438
- tasks: {
439
- numberOfUnexecuted: numberOfTasksUnexecuted
440
- },
441
- measuredAt: measuredAt
442
- };
443
- };
444
- }