UNPKG

1.95 kBJavaScriptView Raw
1'use strict'
2
3const debug = require('debug')('doctor')
4
5function hasPerformanceIssue (issue) {
6 return issue === 'performance'
7}
8
9function hasDataIssue (issue) {
10 return issue === 'data'
11}
12
13function aggregateMemoryIssue (memory) {
14 const memoryDataIssue = (
15 hasDataIssue(memory.external) ||
16 hasDataIssue(memory.rss) ||
17 hasDataIssue(memory.heapTotal) ||
18 hasDataIssue(memory.heapUsed)
19 )
20 const memoryPerformanceIssue = (
21 hasPerformanceIssue(memory.external) ||
22 hasPerformanceIssue(memory.rss) ||
23 hasPerformanceIssue(memory.heapTotal) ||
24 hasPerformanceIssue(memory.heapUsed)
25 )
26
27 if (memoryDataIssue) {
28 return 'data'
29 }
30 return memoryPerformanceIssue ? 'performance' : 'none'
31}
32
33function issueCategory (issues) {
34 debug('detected issues', issues)
35 const memoryIssue = aggregateMemoryIssue(issues.memory)
36
37 let category = 'unknown'
38 if (hasDataIssue(memoryIssue) || hasDataIssue(issues.cpu) ||
39 hasDataIssue(issues.handles) || hasDataIssue(issues.delay)) {
40 category = 'data'
41 } else if (hasPerformanceIssue(memoryIssue) &&
42 !hasPerformanceIssue(issues.cpu) &&
43 !hasPerformanceIssue(issues.handles)) {
44 category = 'gc'
45 } else if (!hasPerformanceIssue(memoryIssue) &&
46 hasPerformanceIssue(issues.delay) &&
47 !hasPerformanceIssue(issues.cpu) &&
48 !hasPerformanceIssue(issues.handles)) {
49 category = 'event-loop'
50 } else if (!hasPerformanceIssue(memoryIssue) &&
51 !hasPerformanceIssue(issues.delay) &&
52 (hasPerformanceIssue(issues.cpu) || hasPerformanceIssue(issues.handles))) {
53 category = 'io'
54 } else if (!hasPerformanceIssue(memoryIssue) &&
55 !hasPerformanceIssue(issues.delay) &&
56 !hasPerformanceIssue(issues.cpu) &&
57 !hasPerformanceIssue(issues.handles)) {
58 category = 'none'
59 }
60
61 debug('category', category)
62
63 return category
64}
65module.exports = issueCategory