@nahisaho/musubix-core 1.0.21 → 1.1.0
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.
- package/dist/utils/__tests__/threshold-alert.test.d.ts +5 -0
- package/dist/utils/__tests__/threshold-alert.test.d.ts.map +1 -0
- package/dist/utils/__tests__/threshold-alert.test.js +275 -0
- package/dist/utils/__tests__/threshold-alert.test.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/threshold-alert.d.ts +240 -0
- package/dist/utils/threshold-alert.d.ts.map +1 -0
- package/dist/utils/threshold-alert.js +416 -0
- package/dist/utils/threshold-alert.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threshold-alert.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/threshold-alert.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ThresholdAlert Tests
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
5
|
+
import { ThresholdAlert, MultiThresholdAlert, resourceUsageThreshold, inventoryThreshold, responseTimeThreshold, errorRateThreshold, capacityThreshold, batteryThreshold, } from '../threshold-alert.js';
|
|
6
|
+
describe('ThresholdAlert', () => {
|
|
7
|
+
describe('above direction (リソース使用率など)', () => {
|
|
8
|
+
let alert;
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
alert = new ThresholdAlert({
|
|
11
|
+
warningThreshold: 80,
|
|
12
|
+
criticalThreshold: 95,
|
|
13
|
+
direction: 'above',
|
|
14
|
+
name: 'CPU使用率',
|
|
15
|
+
unit: '%',
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
it('should return normal when below warning threshold', () => {
|
|
19
|
+
expect(alert.check(50)).toBe('normal');
|
|
20
|
+
expect(alert.check(79)).toBe('normal');
|
|
21
|
+
});
|
|
22
|
+
it('should return warning when at or above warning threshold', () => {
|
|
23
|
+
expect(alert.check(80)).toBe('warning');
|
|
24
|
+
expect(alert.check(85)).toBe('warning');
|
|
25
|
+
expect(alert.check(94)).toBe('warning');
|
|
26
|
+
});
|
|
27
|
+
it('should return critical when at or above critical threshold', () => {
|
|
28
|
+
expect(alert.check(95)).toBe('critical');
|
|
29
|
+
expect(alert.check(100)).toBe('critical');
|
|
30
|
+
});
|
|
31
|
+
it('should evaluate with detailed result', () => {
|
|
32
|
+
const result = alert.evaluate(85);
|
|
33
|
+
expect(result.level).toBe('warning');
|
|
34
|
+
expect(result.value).toBe(85);
|
|
35
|
+
expect(result.threshold).toBe(80);
|
|
36
|
+
expect(result.exceeded).toBe(true);
|
|
37
|
+
expect(result.direction).toBe('above');
|
|
38
|
+
expect(result.marginToWarning).toBe(-5); // 5超過
|
|
39
|
+
expect(result.marginToCritical).toBe(10); // 10残り
|
|
40
|
+
expect(result.message).toContain('WARNING');
|
|
41
|
+
});
|
|
42
|
+
it('should calculate percentage correctly', () => {
|
|
43
|
+
const result = alert.evaluate(95);
|
|
44
|
+
expect(result.percentage).toBe(100); // 95/95 = 100%
|
|
45
|
+
});
|
|
46
|
+
it('should generate appropriate messages', () => {
|
|
47
|
+
expect(alert.evaluate(50).message).toContain('[OK]');
|
|
48
|
+
expect(alert.evaluate(85).message).toContain('[WARNING]');
|
|
49
|
+
expect(alert.evaluate(98).message).toContain('[CRITICAL]');
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
describe('below direction (在庫数など)', () => {
|
|
53
|
+
let alert;
|
|
54
|
+
beforeEach(() => {
|
|
55
|
+
alert = new ThresholdAlert({
|
|
56
|
+
warningThreshold: 10,
|
|
57
|
+
criticalThreshold: 5,
|
|
58
|
+
direction: 'below',
|
|
59
|
+
name: '在庫数',
|
|
60
|
+
unit: '個',
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
it('should return normal when above warning threshold', () => {
|
|
64
|
+
expect(alert.check(100)).toBe('normal');
|
|
65
|
+
expect(alert.check(11)).toBe('normal');
|
|
66
|
+
});
|
|
67
|
+
it('should return warning when at or below warning threshold', () => {
|
|
68
|
+
expect(alert.check(10)).toBe('warning');
|
|
69
|
+
expect(alert.check(8)).toBe('warning');
|
|
70
|
+
expect(alert.check(6)).toBe('warning');
|
|
71
|
+
});
|
|
72
|
+
it('should return critical when at or below critical threshold', () => {
|
|
73
|
+
expect(alert.check(5)).toBe('critical');
|
|
74
|
+
expect(alert.check(3)).toBe('critical');
|
|
75
|
+
expect(alert.check(0)).toBe('critical');
|
|
76
|
+
});
|
|
77
|
+
it('should evaluate with detailed result', () => {
|
|
78
|
+
const result = alert.evaluate(7);
|
|
79
|
+
expect(result.level).toBe('warning');
|
|
80
|
+
expect(result.value).toBe(7);
|
|
81
|
+
expect(result.threshold).toBe(10);
|
|
82
|
+
expect(result.exceeded).toBe(true);
|
|
83
|
+
expect(result.direction).toBe('below');
|
|
84
|
+
expect(result.marginToWarning).toBe(-3); // 3下回り
|
|
85
|
+
expect(result.marginToCritical).toBe(2); // 2残り
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
describe('isExceeded / isWarningOrAbove / isCritical', () => {
|
|
89
|
+
const alert = new ThresholdAlert({
|
|
90
|
+
warningThreshold: 80,
|
|
91
|
+
criticalThreshold: 95,
|
|
92
|
+
direction: 'above',
|
|
93
|
+
});
|
|
94
|
+
it('should check exceeded correctly', () => {
|
|
95
|
+
expect(alert.isExceeded(50)).toBe(false);
|
|
96
|
+
expect(alert.isExceeded(80)).toBe(true);
|
|
97
|
+
expect(alert.isExceeded(95)).toBe(true);
|
|
98
|
+
});
|
|
99
|
+
it('should check warning or above correctly', () => {
|
|
100
|
+
expect(alert.isWarningOrAbove(50)).toBe(false);
|
|
101
|
+
expect(alert.isWarningOrAbove(80)).toBe(true);
|
|
102
|
+
expect(alert.isWarningOrAbove(95)).toBe(true);
|
|
103
|
+
});
|
|
104
|
+
it('should check critical correctly', () => {
|
|
105
|
+
expect(alert.isCritical(50)).toBe(false);
|
|
106
|
+
expect(alert.isCritical(85)).toBe(false);
|
|
107
|
+
expect(alert.isCritical(95)).toBe(true);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
describe('hysteresis (チャタリング防止)', () => {
|
|
111
|
+
it('should apply hysteresis when level drops', () => {
|
|
112
|
+
const alert = new ThresholdAlert({
|
|
113
|
+
warningThreshold: 80,
|
|
114
|
+
criticalThreshold: 95,
|
|
115
|
+
direction: 'above',
|
|
116
|
+
hysteresis: 5,
|
|
117
|
+
});
|
|
118
|
+
// 最初は警告レベル
|
|
119
|
+
expect(alert.check(85)).toBe('warning');
|
|
120
|
+
// ヒステリシスがあるので、75未満にならないと正常に戻らない
|
|
121
|
+
expect(alert.check(78)).toBe('warning'); // 80-5=75より上なので維持
|
|
122
|
+
expect(alert.check(74)).toBe('normal'); // 75未満なので正常に
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
describe('validation', () => {
|
|
126
|
+
it('should throw error for invalid above thresholds', () => {
|
|
127
|
+
expect(() => {
|
|
128
|
+
new ThresholdAlert({
|
|
129
|
+
warningThreshold: 95,
|
|
130
|
+
criticalThreshold: 80, // warning > critical は不正
|
|
131
|
+
direction: 'above',
|
|
132
|
+
});
|
|
133
|
+
}).toThrow();
|
|
134
|
+
});
|
|
135
|
+
it('should throw error for invalid below thresholds', () => {
|
|
136
|
+
expect(() => {
|
|
137
|
+
new ThresholdAlert({
|
|
138
|
+
warningThreshold: 5,
|
|
139
|
+
criticalThreshold: 10, // warning < critical は不正
|
|
140
|
+
direction: 'below',
|
|
141
|
+
});
|
|
142
|
+
}).toThrow();
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
describe('getConfig', () => {
|
|
146
|
+
it('should return current configuration', () => {
|
|
147
|
+
const alert = new ThresholdAlert({
|
|
148
|
+
warningThreshold: 80,
|
|
149
|
+
criticalThreshold: 95,
|
|
150
|
+
direction: 'above',
|
|
151
|
+
name: 'test',
|
|
152
|
+
unit: '%',
|
|
153
|
+
});
|
|
154
|
+
const config = alert.getConfig();
|
|
155
|
+
expect(config.warningThreshold).toBe(80);
|
|
156
|
+
expect(config.criticalThreshold).toBe(95);
|
|
157
|
+
expect(config.direction).toBe('above');
|
|
158
|
+
expect(config.name).toBe('test');
|
|
159
|
+
expect(config.unit).toBe('%');
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
describe('MultiThresholdAlert', () => {
|
|
164
|
+
let multi;
|
|
165
|
+
beforeEach(() => {
|
|
166
|
+
multi = new MultiThresholdAlert();
|
|
167
|
+
multi.register('cpu', {
|
|
168
|
+
warningThreshold: 80,
|
|
169
|
+
criticalThreshold: 95,
|
|
170
|
+
direction: 'above',
|
|
171
|
+
});
|
|
172
|
+
multi.register('memory', {
|
|
173
|
+
warningThreshold: 70,
|
|
174
|
+
criticalThreshold: 90,
|
|
175
|
+
direction: 'above',
|
|
176
|
+
});
|
|
177
|
+
multi.register('inventory', {
|
|
178
|
+
warningThreshold: 10,
|
|
179
|
+
criticalThreshold: 5,
|
|
180
|
+
direction: 'below',
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
it('should check individual alerts', () => {
|
|
184
|
+
expect(multi.check('cpu', 50)).toBe('normal');
|
|
185
|
+
expect(multi.check('cpu', 85)).toBe('warning');
|
|
186
|
+
expect(multi.check('memory', 95)).toBe('critical');
|
|
187
|
+
});
|
|
188
|
+
it('should throw error for unregistered alert', () => {
|
|
189
|
+
expect(() => multi.check('unknown', 50)).toThrow();
|
|
190
|
+
});
|
|
191
|
+
it('should evaluate all alerts with Map', () => {
|
|
192
|
+
const values = new Map([
|
|
193
|
+
['cpu', 85],
|
|
194
|
+
['memory', 95],
|
|
195
|
+
['inventory', 7],
|
|
196
|
+
]);
|
|
197
|
+
const result = multi.evaluateAll(values);
|
|
198
|
+
expect(result.overallLevel).toBe('critical');
|
|
199
|
+
expect(result.warningCount).toBe(2); // cpu + inventory
|
|
200
|
+
expect(result.criticalCount).toBe(1); // memory
|
|
201
|
+
expect(result.details.get('cpu')?.level).toBe('warning');
|
|
202
|
+
expect(result.details.get('memory')?.level).toBe('critical');
|
|
203
|
+
expect(result.details.get('inventory')?.level).toBe('warning');
|
|
204
|
+
});
|
|
205
|
+
it('should evaluate all alerts with object', () => {
|
|
206
|
+
const values = {
|
|
207
|
+
cpu: 50,
|
|
208
|
+
memory: 60,
|
|
209
|
+
inventory: 20,
|
|
210
|
+
};
|
|
211
|
+
const result = multi.evaluateAll(values);
|
|
212
|
+
expect(result.overallLevel).toBe('normal');
|
|
213
|
+
expect(result.warningCount).toBe(0);
|
|
214
|
+
expect(result.criticalCount).toBe(0);
|
|
215
|
+
expect(result.summary).toBe('All systems normal');
|
|
216
|
+
});
|
|
217
|
+
it('should return registered names', () => {
|
|
218
|
+
const names = multi.getRegisteredNames();
|
|
219
|
+
expect(names).toContain('cpu');
|
|
220
|
+
expect(names).toContain('memory');
|
|
221
|
+
expect(names).toContain('inventory');
|
|
222
|
+
expect(names.length).toBe(3);
|
|
223
|
+
});
|
|
224
|
+
it('should unregister alerts', () => {
|
|
225
|
+
multi.unregister('cpu');
|
|
226
|
+
const names = multi.getRegisteredNames();
|
|
227
|
+
expect(names).not.toContain('cpu');
|
|
228
|
+
expect(names.length).toBe(2);
|
|
229
|
+
});
|
|
230
|
+
it('should generate appropriate summary', () => {
|
|
231
|
+
const criticalResult = multi.evaluateAll({ cpu: 50, memory: 95 });
|
|
232
|
+
expect(criticalResult.summary).toContain('critical');
|
|
233
|
+
const warningResult = multi.evaluateAll({ cpu: 85, memory: 60 });
|
|
234
|
+
expect(warningResult.summary).toContain('warning');
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
describe('Preset Thresholds', () => {
|
|
238
|
+
it('should have correct resourceUsageThreshold', () => {
|
|
239
|
+
const alert = new ThresholdAlert(resourceUsageThreshold);
|
|
240
|
+
expect(alert.check(50)).toBe('normal');
|
|
241
|
+
expect(alert.check(85)).toBe('warning');
|
|
242
|
+
expect(alert.check(98)).toBe('critical');
|
|
243
|
+
});
|
|
244
|
+
it('should have correct inventoryThreshold', () => {
|
|
245
|
+
const alert = new ThresholdAlert(inventoryThreshold);
|
|
246
|
+
expect(alert.check(50)).toBe('normal');
|
|
247
|
+
expect(alert.check(8)).toBe('warning');
|
|
248
|
+
expect(alert.check(3)).toBe('critical');
|
|
249
|
+
});
|
|
250
|
+
it('should have correct responseTimeThreshold', () => {
|
|
251
|
+
const alert = new ThresholdAlert(responseTimeThreshold);
|
|
252
|
+
expect(alert.check(500)).toBe('normal');
|
|
253
|
+
expect(alert.check(1500)).toBe('warning');
|
|
254
|
+
expect(alert.check(5000)).toBe('critical');
|
|
255
|
+
});
|
|
256
|
+
it('should have correct errorRateThreshold', () => {
|
|
257
|
+
const alert = new ThresholdAlert(errorRateThreshold);
|
|
258
|
+
expect(alert.check(0.5)).toBe('normal');
|
|
259
|
+
expect(alert.check(2)).toBe('warning');
|
|
260
|
+
expect(alert.check(10)).toBe('critical');
|
|
261
|
+
});
|
|
262
|
+
it('should have correct capacityThreshold', () => {
|
|
263
|
+
const alert = new ThresholdAlert(capacityThreshold);
|
|
264
|
+
expect(alert.check(50)).toBe('normal');
|
|
265
|
+
expect(alert.check(85)).toBe('warning');
|
|
266
|
+
expect(alert.check(98)).toBe('critical');
|
|
267
|
+
});
|
|
268
|
+
it('should have correct batteryThreshold', () => {
|
|
269
|
+
const alert = new ThresholdAlert(batteryThreshold);
|
|
270
|
+
expect(alert.check(50)).toBe('normal');
|
|
271
|
+
expect(alert.check(15)).toBe('warning');
|
|
272
|
+
expect(alert.check(3)).toBe('critical');
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
//# sourceMappingURL=threshold-alert.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threshold-alert.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/threshold-alert.test.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC"}
|
package/dist/utils/index.js
CHANGED
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ThresholdAlert - 閾値ベースのアラート・監視ユーティリティ
|
|
3
|
+
*
|
|
4
|
+
* @description
|
|
5
|
+
* 値が閾値を超えた/下回った際のアラート判定を行うサービスクラス。
|
|
6
|
+
* 在庫管理、リソース監視、容量管理、SLA監視などで使用。
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const alert = new ThresholdAlert({
|
|
11
|
+
* warningThreshold: 80,
|
|
12
|
+
* criticalThreshold: 95,
|
|
13
|
+
* direction: 'above', // 閾値を超えたらアラート
|
|
14
|
+
* });
|
|
15
|
+
*
|
|
16
|
+
* // アラートレベルをチェック
|
|
17
|
+
* const level = alert.check(85); // 'warning'
|
|
18
|
+
* const level2 = alert.check(98); // 'critical'
|
|
19
|
+
*
|
|
20
|
+
* // 詳細な結果を取得
|
|
21
|
+
* const result = alert.evaluate(85);
|
|
22
|
+
* // { level: 'warning', value: 85, threshold: 80, exceeded: true, ... }
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @since 1.1.0
|
|
26
|
+
* @see REQ-LEARN-003 - 繰り返しパターンの抽出
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* アラートレベル
|
|
30
|
+
*/
|
|
31
|
+
export type AlertLevel = 'normal' | 'warning' | 'critical';
|
|
32
|
+
/**
|
|
33
|
+
* 閾値チェックの方向
|
|
34
|
+
*/
|
|
35
|
+
export type ThresholdDirection = 'above' | 'below';
|
|
36
|
+
/**
|
|
37
|
+
* ThresholdAlertの設定オプション
|
|
38
|
+
*/
|
|
39
|
+
export interface ThresholdConfig {
|
|
40
|
+
/** 警告閾値 */
|
|
41
|
+
warningThreshold: number;
|
|
42
|
+
/** 危険閾値 */
|
|
43
|
+
criticalThreshold: number;
|
|
44
|
+
/** 閾値チェックの方向。'above': 超過でアラート、'below': 下回りでアラート */
|
|
45
|
+
direction?: ThresholdDirection;
|
|
46
|
+
/** ヒステリシス(回復判定のマージン)。デフォルト: 0 */
|
|
47
|
+
hysteresis?: number;
|
|
48
|
+
/** 閾値名(ログ/通知用)。デフォルト: 'value' */
|
|
49
|
+
name?: string;
|
|
50
|
+
/** 単位(表示用)。デフォルト: '' */
|
|
51
|
+
unit?: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* アラート評価結果
|
|
55
|
+
*/
|
|
56
|
+
export interface AlertResult {
|
|
57
|
+
/** アラートレベル */
|
|
58
|
+
level: AlertLevel;
|
|
59
|
+
/** 現在値 */
|
|
60
|
+
value: number;
|
|
61
|
+
/** 超過した閾値(なければundefined) */
|
|
62
|
+
threshold: number | undefined;
|
|
63
|
+
/** 閾値を超過/下回ったか */
|
|
64
|
+
exceeded: boolean;
|
|
65
|
+
/** 閾値チェックの方向 */
|
|
66
|
+
direction: ThresholdDirection;
|
|
67
|
+
/** 警告閾値までの残り */
|
|
68
|
+
marginToWarning: number;
|
|
69
|
+
/** 危険閾値までの残り */
|
|
70
|
+
marginToCritical: number;
|
|
71
|
+
/** 使用率(%)- 0-criticalThresholdの範囲で計算 */
|
|
72
|
+
percentage: number;
|
|
73
|
+
/** メッセージ */
|
|
74
|
+
message: string;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 複数閾値の評価結果
|
|
78
|
+
*/
|
|
79
|
+
export interface MultiAlertResult {
|
|
80
|
+
/** 全体のアラートレベル(最も高いレベル) */
|
|
81
|
+
overallLevel: AlertLevel;
|
|
82
|
+
/** 各閾値の評価結果 */
|
|
83
|
+
details: Map<string, AlertResult>;
|
|
84
|
+
/** 警告以上のアラート数 */
|
|
85
|
+
warningCount: number;
|
|
86
|
+
/** 危険アラート数 */
|
|
87
|
+
criticalCount: number;
|
|
88
|
+
/** サマリーメッセージ */
|
|
89
|
+
summary: string;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* 閾値ベースのアラート評価サービス
|
|
93
|
+
*/
|
|
94
|
+
export declare class ThresholdAlert {
|
|
95
|
+
private readonly warningThreshold;
|
|
96
|
+
private readonly criticalThreshold;
|
|
97
|
+
private readonly direction;
|
|
98
|
+
private readonly hysteresis;
|
|
99
|
+
private readonly name;
|
|
100
|
+
private readonly unit;
|
|
101
|
+
private lastLevel;
|
|
102
|
+
constructor(config: ThresholdConfig);
|
|
103
|
+
/**
|
|
104
|
+
* 値のアラートレベルをチェック
|
|
105
|
+
*
|
|
106
|
+
* @param value - チェックする値
|
|
107
|
+
* @returns アラートレベル
|
|
108
|
+
*/
|
|
109
|
+
check(value: number): AlertLevel;
|
|
110
|
+
/**
|
|
111
|
+
* 値を詳細に評価
|
|
112
|
+
*
|
|
113
|
+
* @param value - 評価する値
|
|
114
|
+
* @returns 詳細な評価結果
|
|
115
|
+
*/
|
|
116
|
+
evaluate(value: number): AlertResult;
|
|
117
|
+
/**
|
|
118
|
+
* 閾値を超過しているかチェック
|
|
119
|
+
*
|
|
120
|
+
* @param value - チェックする値
|
|
121
|
+
* @returns 超過している場合true
|
|
122
|
+
*/
|
|
123
|
+
isExceeded(value: number): boolean;
|
|
124
|
+
/**
|
|
125
|
+
* 警告レベル以上かチェック
|
|
126
|
+
*
|
|
127
|
+
* @param value - チェックする値
|
|
128
|
+
* @returns 警告以上の場合true
|
|
129
|
+
*/
|
|
130
|
+
isWarningOrAbove(value: number): boolean;
|
|
131
|
+
/**
|
|
132
|
+
* 危険レベルかチェック
|
|
133
|
+
*
|
|
134
|
+
* @param value - チェックする値
|
|
135
|
+
* @returns 危険レベルの場合true
|
|
136
|
+
*/
|
|
137
|
+
isCritical(value: number): boolean;
|
|
138
|
+
/**
|
|
139
|
+
* 閾値までの残り値を計算
|
|
140
|
+
*
|
|
141
|
+
* @param value - 現在値
|
|
142
|
+
* @param threshold - 閾値
|
|
143
|
+
* @returns 残り値(負の場合は超過)
|
|
144
|
+
*/
|
|
145
|
+
private calculateMargin;
|
|
146
|
+
/**
|
|
147
|
+
* 使用率/消費率を計算(パーセンテージ)
|
|
148
|
+
*
|
|
149
|
+
* @param value - 現在値
|
|
150
|
+
* @returns パーセンテージ(0-100+)
|
|
151
|
+
*/
|
|
152
|
+
private calculatePercentage;
|
|
153
|
+
/**
|
|
154
|
+
* ヒステリシスを適用してチャタリングを防止
|
|
155
|
+
*
|
|
156
|
+
* @param value - 現在値
|
|
157
|
+
* @param newLevel - 新しいレベル
|
|
158
|
+
* @returns 調整後のレベル
|
|
159
|
+
*/
|
|
160
|
+
private applyHysteresis;
|
|
161
|
+
/**
|
|
162
|
+
* レベルの高低を比較
|
|
163
|
+
*/
|
|
164
|
+
private isLevelHigher;
|
|
165
|
+
/**
|
|
166
|
+
* アラートメッセージを生成
|
|
167
|
+
*/
|
|
168
|
+
private generateMessage;
|
|
169
|
+
/**
|
|
170
|
+
* 現在の設定を取得
|
|
171
|
+
*/
|
|
172
|
+
getConfig(): ThresholdConfig;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* 複数の閾値を一括管理するサービス
|
|
176
|
+
*/
|
|
177
|
+
export declare class MultiThresholdAlert {
|
|
178
|
+
private alerts;
|
|
179
|
+
/**
|
|
180
|
+
* 閾値アラートを登録
|
|
181
|
+
*
|
|
182
|
+
* @param name - 識別名
|
|
183
|
+
* @param config - 閾値設定
|
|
184
|
+
*/
|
|
185
|
+
register(name: string, config: ThresholdConfig): void;
|
|
186
|
+
/**
|
|
187
|
+
* 閾値アラートを削除
|
|
188
|
+
*
|
|
189
|
+
* @param name - 識別名
|
|
190
|
+
*/
|
|
191
|
+
unregister(name: string): void;
|
|
192
|
+
/**
|
|
193
|
+
* 単一の値をチェック
|
|
194
|
+
*
|
|
195
|
+
* @param name - 識別名
|
|
196
|
+
* @param value - チェックする値
|
|
197
|
+
* @returns アラートレベル
|
|
198
|
+
*/
|
|
199
|
+
check(name: string, value: number): AlertLevel;
|
|
200
|
+
/**
|
|
201
|
+
* 複数の値を一括評価
|
|
202
|
+
*
|
|
203
|
+
* @param values - 名前と値のマップ
|
|
204
|
+
* @returns 一括評価結果
|
|
205
|
+
*/
|
|
206
|
+
evaluateAll(values: Map<string, number> | Record<string, number>): MultiAlertResult;
|
|
207
|
+
/**
|
|
208
|
+
* 全アラートの名前を取得
|
|
209
|
+
*/
|
|
210
|
+
getRegisteredNames(): string[];
|
|
211
|
+
/**
|
|
212
|
+
* サマリーメッセージを生成
|
|
213
|
+
*/
|
|
214
|
+
private generateSummary;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* リソース使用率用の閾値設定(CPU、メモリ、ディスクなど)
|
|
218
|
+
*/
|
|
219
|
+
export declare const resourceUsageThreshold: ThresholdConfig;
|
|
220
|
+
/**
|
|
221
|
+
* 在庫数用の閾値設定
|
|
222
|
+
*/
|
|
223
|
+
export declare const inventoryThreshold: ThresholdConfig;
|
|
224
|
+
/**
|
|
225
|
+
* レスポンスタイム用の閾値設定(ミリ秒)
|
|
226
|
+
*/
|
|
227
|
+
export declare const responseTimeThreshold: ThresholdConfig;
|
|
228
|
+
/**
|
|
229
|
+
* エラー率用の閾値設定(%)
|
|
230
|
+
*/
|
|
231
|
+
export declare const errorRateThreshold: ThresholdConfig;
|
|
232
|
+
/**
|
|
233
|
+
* 容量使用率用の閾値設定(予約数、座席数など)
|
|
234
|
+
*/
|
|
235
|
+
export declare const capacityThreshold: ThresholdConfig;
|
|
236
|
+
/**
|
|
237
|
+
* バッテリー残量用の閾値設定
|
|
238
|
+
*/
|
|
239
|
+
export declare const batteryThreshold: ThresholdConfig;
|
|
240
|
+
//# sourceMappingURL=threshold-alert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threshold-alert.d.ts","sourceRoot":"","sources":["../../src/utils/threshold-alert.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ThresholdAlert - 閾値ベースのアラート・監視ユーティリティ
|
|
3
|
+
*
|
|
4
|
+
* @description
|
|
5
|
+
* 値が閾値を超えた/下回った際のアラート判定を行うサービスクラス。
|
|
6
|
+
* 在庫管理、リソース監視、容量管理、SLA監視などで使用。
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const alert = new ThresholdAlert({
|
|
11
|
+
* warningThreshold: 80,
|
|
12
|
+
* criticalThreshold: 95,
|
|
13
|
+
* direction: 'above', // 閾値を超えたらアラート
|
|
14
|
+
* });
|
|
15
|
+
*
|
|
16
|
+
* // アラートレベルをチェック
|
|
17
|
+
* const level = alert.check(85); // 'warning'
|
|
18
|
+
* const level2 = alert.check(98); // 'critical'
|
|
19
|
+
*
|
|
20
|
+
* // 詳細な結果を取得
|
|
21
|
+
* const result = alert.evaluate(85);
|
|
22
|
+
* // { level: 'warning', value: 85, threshold: 80, exceeded: true, ... }
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @since 1.1.0
|
|
26
|
+
* @see REQ-LEARN-003 - 繰り返しパターンの抽出
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* 閾値ベースのアラート評価サービス
|
|
30
|
+
*/
|
|
31
|
+
export class ThresholdAlert {
|
|
32
|
+
warningThreshold;
|
|
33
|
+
criticalThreshold;
|
|
34
|
+
direction;
|
|
35
|
+
hysteresis;
|
|
36
|
+
name;
|
|
37
|
+
unit;
|
|
38
|
+
lastLevel = 'normal';
|
|
39
|
+
constructor(config) {
|
|
40
|
+
this.warningThreshold = config.warningThreshold;
|
|
41
|
+
this.criticalThreshold = config.criticalThreshold;
|
|
42
|
+
this.direction = config.direction ?? 'above';
|
|
43
|
+
this.hysteresis = config.hysteresis ?? 0;
|
|
44
|
+
this.name = config.name ?? 'value';
|
|
45
|
+
this.unit = config.unit ?? '';
|
|
46
|
+
// 閾値の妥当性チェック
|
|
47
|
+
if (this.direction === 'above') {
|
|
48
|
+
if (this.warningThreshold > this.criticalThreshold) {
|
|
49
|
+
throw new Error('For "above" direction, warningThreshold must be <= criticalThreshold');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
if (this.warningThreshold < this.criticalThreshold) {
|
|
54
|
+
throw new Error('For "below" direction, warningThreshold must be >= criticalThreshold');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 値のアラートレベルをチェック
|
|
60
|
+
*
|
|
61
|
+
* @param value - チェックする値
|
|
62
|
+
* @returns アラートレベル
|
|
63
|
+
*/
|
|
64
|
+
check(value) {
|
|
65
|
+
return this.evaluate(value).level;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 値を詳細に評価
|
|
69
|
+
*
|
|
70
|
+
* @param value - 評価する値
|
|
71
|
+
* @returns 詳細な評価結果
|
|
72
|
+
*/
|
|
73
|
+
evaluate(value) {
|
|
74
|
+
let level;
|
|
75
|
+
let exceeded = false;
|
|
76
|
+
let threshold;
|
|
77
|
+
if (this.direction === 'above') {
|
|
78
|
+
// 超過でアラート(リソース使用率など)
|
|
79
|
+
if (value >= this.criticalThreshold) {
|
|
80
|
+
level = 'critical';
|
|
81
|
+
exceeded = true;
|
|
82
|
+
threshold = this.criticalThreshold;
|
|
83
|
+
}
|
|
84
|
+
else if (value >= this.warningThreshold) {
|
|
85
|
+
level = 'warning';
|
|
86
|
+
exceeded = true;
|
|
87
|
+
threshold = this.warningThreshold;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
level = 'normal';
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// 下回りでアラート(在庫数など)
|
|
95
|
+
if (value <= this.criticalThreshold) {
|
|
96
|
+
level = 'critical';
|
|
97
|
+
exceeded = true;
|
|
98
|
+
threshold = this.criticalThreshold;
|
|
99
|
+
}
|
|
100
|
+
else if (value <= this.warningThreshold) {
|
|
101
|
+
level = 'warning';
|
|
102
|
+
exceeded = true;
|
|
103
|
+
threshold = this.warningThreshold;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
level = 'normal';
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// ヒステリシスを適用(チャタリング防止)
|
|
110
|
+
if (this.hysteresis > 0) {
|
|
111
|
+
level = this.applyHysteresis(value, level);
|
|
112
|
+
}
|
|
113
|
+
this.lastLevel = level;
|
|
114
|
+
const marginToWarning = this.calculateMargin(value, this.warningThreshold);
|
|
115
|
+
const marginToCritical = this.calculateMargin(value, this.criticalThreshold);
|
|
116
|
+
const percentage = this.calculatePercentage(value);
|
|
117
|
+
return {
|
|
118
|
+
level,
|
|
119
|
+
value,
|
|
120
|
+
threshold,
|
|
121
|
+
exceeded,
|
|
122
|
+
direction: this.direction,
|
|
123
|
+
marginToWarning,
|
|
124
|
+
marginToCritical,
|
|
125
|
+
percentage,
|
|
126
|
+
message: this.generateMessage(level, value),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* 閾値を超過しているかチェック
|
|
131
|
+
*
|
|
132
|
+
* @param value - チェックする値
|
|
133
|
+
* @returns 超過している場合true
|
|
134
|
+
*/
|
|
135
|
+
isExceeded(value) {
|
|
136
|
+
return this.evaluate(value).exceeded;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* 警告レベル以上かチェック
|
|
140
|
+
*
|
|
141
|
+
* @param value - チェックする値
|
|
142
|
+
* @returns 警告以上の場合true
|
|
143
|
+
*/
|
|
144
|
+
isWarningOrAbove(value) {
|
|
145
|
+
const level = this.check(value);
|
|
146
|
+
return level === 'warning' || level === 'critical';
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* 危険レベルかチェック
|
|
150
|
+
*
|
|
151
|
+
* @param value - チェックする値
|
|
152
|
+
* @returns 危険レベルの場合true
|
|
153
|
+
*/
|
|
154
|
+
isCritical(value) {
|
|
155
|
+
return this.check(value) === 'critical';
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* 閾値までの残り値を計算
|
|
159
|
+
*
|
|
160
|
+
* @param value - 現在値
|
|
161
|
+
* @param threshold - 閾値
|
|
162
|
+
* @returns 残り値(負の場合は超過)
|
|
163
|
+
*/
|
|
164
|
+
calculateMargin(value, threshold) {
|
|
165
|
+
if (this.direction === 'above') {
|
|
166
|
+
return threshold - value;
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
return value - threshold;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* 使用率/消費率を計算(パーセンテージ)
|
|
174
|
+
*
|
|
175
|
+
* @param value - 現在値
|
|
176
|
+
* @returns パーセンテージ(0-100+)
|
|
177
|
+
*/
|
|
178
|
+
calculatePercentage(value) {
|
|
179
|
+
if (this.direction === 'above') {
|
|
180
|
+
// 0からcriticalThresholdの範囲で計算
|
|
181
|
+
if (this.criticalThreshold === 0)
|
|
182
|
+
return 0;
|
|
183
|
+
return Math.round((value / this.criticalThreshold) * 100);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
// warningThresholdから0の範囲で計算
|
|
187
|
+
if (this.warningThreshold === 0)
|
|
188
|
+
return 100;
|
|
189
|
+
const consumed = this.warningThreshold - value;
|
|
190
|
+
return Math.round((consumed / this.warningThreshold) * 100);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* ヒステリシスを適用してチャタリングを防止
|
|
195
|
+
*
|
|
196
|
+
* @param value - 現在値
|
|
197
|
+
* @param newLevel - 新しいレベル
|
|
198
|
+
* @returns 調整後のレベル
|
|
199
|
+
*/
|
|
200
|
+
applyHysteresis(value, newLevel) {
|
|
201
|
+
// レベルが下がる場合のみヒステリシスを適用
|
|
202
|
+
if (this.isLevelHigher(this.lastLevel, newLevel)) {
|
|
203
|
+
// 前回のレベルが高かった場合、ヒステリシス分の余裕を持たせる
|
|
204
|
+
if (this.direction === 'above') {
|
|
205
|
+
if (this.lastLevel === 'critical' &&
|
|
206
|
+
value > this.criticalThreshold - this.hysteresis) {
|
|
207
|
+
return 'critical';
|
|
208
|
+
}
|
|
209
|
+
if (this.lastLevel === 'warning' &&
|
|
210
|
+
value > this.warningThreshold - this.hysteresis) {
|
|
211
|
+
return 'warning';
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
if (this.lastLevel === 'critical' &&
|
|
216
|
+
value < this.criticalThreshold + this.hysteresis) {
|
|
217
|
+
return 'critical';
|
|
218
|
+
}
|
|
219
|
+
if (this.lastLevel === 'warning' &&
|
|
220
|
+
value < this.warningThreshold + this.hysteresis) {
|
|
221
|
+
return 'warning';
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return newLevel;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* レベルの高低を比較
|
|
229
|
+
*/
|
|
230
|
+
isLevelHigher(level1, level2) {
|
|
231
|
+
const order = {
|
|
232
|
+
normal: 0,
|
|
233
|
+
warning: 1,
|
|
234
|
+
critical: 2,
|
|
235
|
+
};
|
|
236
|
+
return order[level1] > order[level2];
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* アラートメッセージを生成
|
|
240
|
+
*/
|
|
241
|
+
generateMessage(level, value) {
|
|
242
|
+
const valueStr = this.unit ? `${value}${this.unit}` : String(value);
|
|
243
|
+
switch (level) {
|
|
244
|
+
case 'critical':
|
|
245
|
+
return `[CRITICAL] ${this.name} is at ${valueStr} (threshold: ${this.criticalThreshold}${this.unit})`;
|
|
246
|
+
case 'warning':
|
|
247
|
+
return `[WARNING] ${this.name} is at ${valueStr} (threshold: ${this.warningThreshold}${this.unit})`;
|
|
248
|
+
default:
|
|
249
|
+
return `[OK] ${this.name} is at ${valueStr}`;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* 現在の設定を取得
|
|
254
|
+
*/
|
|
255
|
+
getConfig() {
|
|
256
|
+
return {
|
|
257
|
+
warningThreshold: this.warningThreshold,
|
|
258
|
+
criticalThreshold: this.criticalThreshold,
|
|
259
|
+
direction: this.direction,
|
|
260
|
+
hysteresis: this.hysteresis,
|
|
261
|
+
name: this.name,
|
|
262
|
+
unit: this.unit,
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* 複数の閾値を一括管理するサービス
|
|
268
|
+
*/
|
|
269
|
+
export class MultiThresholdAlert {
|
|
270
|
+
alerts = new Map();
|
|
271
|
+
/**
|
|
272
|
+
* 閾値アラートを登録
|
|
273
|
+
*
|
|
274
|
+
* @param name - 識別名
|
|
275
|
+
* @param config - 閾値設定
|
|
276
|
+
*/
|
|
277
|
+
register(name, config) {
|
|
278
|
+
this.alerts.set(name, new ThresholdAlert({ ...config, name }));
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* 閾値アラートを削除
|
|
282
|
+
*
|
|
283
|
+
* @param name - 識別名
|
|
284
|
+
*/
|
|
285
|
+
unregister(name) {
|
|
286
|
+
this.alerts.delete(name);
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* 単一の値をチェック
|
|
290
|
+
*
|
|
291
|
+
* @param name - 識別名
|
|
292
|
+
* @param value - チェックする値
|
|
293
|
+
* @returns アラートレベル
|
|
294
|
+
*/
|
|
295
|
+
check(name, value) {
|
|
296
|
+
const alert = this.alerts.get(name);
|
|
297
|
+
if (!alert) {
|
|
298
|
+
throw new Error(`Alert "${name}" not registered`);
|
|
299
|
+
}
|
|
300
|
+
return alert.check(value);
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* 複数の値を一括評価
|
|
304
|
+
*
|
|
305
|
+
* @param values - 名前と値のマップ
|
|
306
|
+
* @returns 一括評価結果
|
|
307
|
+
*/
|
|
308
|
+
evaluateAll(values) {
|
|
309
|
+
const details = new Map();
|
|
310
|
+
let overallLevel = 'normal';
|
|
311
|
+
let warningCount = 0;
|
|
312
|
+
let criticalCount = 0;
|
|
313
|
+
const entries = values instanceof Map ? values.entries() : Object.entries(values);
|
|
314
|
+
for (const [name, value] of entries) {
|
|
315
|
+
const alert = this.alerts.get(name);
|
|
316
|
+
if (!alert)
|
|
317
|
+
continue;
|
|
318
|
+
const result = alert.evaluate(value);
|
|
319
|
+
details.set(name, result);
|
|
320
|
+
if (result.level === 'critical') {
|
|
321
|
+
overallLevel = 'critical';
|
|
322
|
+
criticalCount++;
|
|
323
|
+
}
|
|
324
|
+
else if (result.level === 'warning') {
|
|
325
|
+
if (overallLevel !== 'critical') {
|
|
326
|
+
overallLevel = 'warning';
|
|
327
|
+
}
|
|
328
|
+
warningCount++;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
const summary = this.generateSummary(overallLevel, warningCount, criticalCount);
|
|
332
|
+
return {
|
|
333
|
+
overallLevel,
|
|
334
|
+
details,
|
|
335
|
+
warningCount,
|
|
336
|
+
criticalCount,
|
|
337
|
+
summary,
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* 全アラートの名前を取得
|
|
342
|
+
*/
|
|
343
|
+
getRegisteredNames() {
|
|
344
|
+
return Array.from(this.alerts.keys());
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* サマリーメッセージを生成
|
|
348
|
+
*/
|
|
349
|
+
generateSummary(level, warningCount, criticalCount) {
|
|
350
|
+
if (level === 'critical') {
|
|
351
|
+
return `${criticalCount} critical alert(s), ${warningCount} warning(s)`;
|
|
352
|
+
}
|
|
353
|
+
else if (level === 'warning') {
|
|
354
|
+
return `${warningCount} warning(s)`;
|
|
355
|
+
}
|
|
356
|
+
return 'All systems normal';
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
// ========================================
|
|
360
|
+
// プリセット閾値設定
|
|
361
|
+
// ========================================
|
|
362
|
+
/**
|
|
363
|
+
* リソース使用率用の閾値設定(CPU、メモリ、ディスクなど)
|
|
364
|
+
*/
|
|
365
|
+
export const resourceUsageThreshold = {
|
|
366
|
+
warningThreshold: 80,
|
|
367
|
+
criticalThreshold: 95,
|
|
368
|
+
direction: 'above',
|
|
369
|
+
unit: '%',
|
|
370
|
+
};
|
|
371
|
+
/**
|
|
372
|
+
* 在庫数用の閾値設定
|
|
373
|
+
*/
|
|
374
|
+
export const inventoryThreshold = {
|
|
375
|
+
warningThreshold: 10,
|
|
376
|
+
criticalThreshold: 5,
|
|
377
|
+
direction: 'below',
|
|
378
|
+
unit: '個',
|
|
379
|
+
};
|
|
380
|
+
/**
|
|
381
|
+
* レスポンスタイム用の閾値設定(ミリ秒)
|
|
382
|
+
*/
|
|
383
|
+
export const responseTimeThreshold = {
|
|
384
|
+
warningThreshold: 1000,
|
|
385
|
+
criticalThreshold: 3000,
|
|
386
|
+
direction: 'above',
|
|
387
|
+
unit: 'ms',
|
|
388
|
+
};
|
|
389
|
+
/**
|
|
390
|
+
* エラー率用の閾値設定(%)
|
|
391
|
+
*/
|
|
392
|
+
export const errorRateThreshold = {
|
|
393
|
+
warningThreshold: 1,
|
|
394
|
+
criticalThreshold: 5,
|
|
395
|
+
direction: 'above',
|
|
396
|
+
unit: '%',
|
|
397
|
+
};
|
|
398
|
+
/**
|
|
399
|
+
* 容量使用率用の閾値設定(予約数、座席数など)
|
|
400
|
+
*/
|
|
401
|
+
export const capacityThreshold = {
|
|
402
|
+
warningThreshold: 80,
|
|
403
|
+
criticalThreshold: 95,
|
|
404
|
+
direction: 'above',
|
|
405
|
+
unit: '%',
|
|
406
|
+
};
|
|
407
|
+
/**
|
|
408
|
+
* バッテリー残量用の閾値設定
|
|
409
|
+
*/
|
|
410
|
+
export const batteryThreshold = {
|
|
411
|
+
warningThreshold: 20,
|
|
412
|
+
criticalThreshold: 5,
|
|
413
|
+
direction: 'below',
|
|
414
|
+
unit: '%',
|
|
415
|
+
};
|
|
416
|
+
//# sourceMappingURL=threshold-alert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threshold-alert.js","sourceRoot":"","sources":["../../src/utils/threshold-alert.ts"],"names":[],"mappings":"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"}
|