javacore-analyser 2.0rc1__py3-none-any.whl → 2.0rc3__py3-none-any.whl
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.
- javacore_analyser/data/jquery/wait2scripts.js +27 -5
- javacore_analyser/data/xml/javacores/javacore.xsl +126 -117
- javacore_analyser/data/xml/report.xsl +1 -1
- javacore_analyser/data/xml/threads/thread.xsl +162 -153
- javacore_analyser/javacore_set.py +37 -12
- javacore_analyser/templates/index.html +9 -4
- {javacore_analyser-2.0rc1.dist-info → javacore_analyser-2.0rc3.dist-info}/METADATA +2 -2
- {javacore_analyser-2.0rc1.dist-info → javacore_analyser-2.0rc3.dist-info}/RECORD +11 -11
- {javacore_analyser-2.0rc1.dist-info → javacore_analyser-2.0rc3.dist-info}/WHEEL +0 -0
- {javacore_analyser-2.0rc1.dist-info → javacore_analyser-2.0rc3.dist-info}/entry_points.txt +0 -0
- {javacore_analyser-2.0rc1.dist-info → javacore_analyser-2.0rc3.dist-info}/licenses/LICENSE +0 -0
@@ -145,12 +145,34 @@ const loadChartGC = function() {
|
|
145
145
|
});
|
146
146
|
|
147
147
|
// 3. find the HEAP_SIZE
|
148
|
-
const MB_SIZE = Math.pow(1024, 2)
|
148
|
+
const MB_SIZE = Math.pow(1024, 2);
|
149
|
+
let heapAsString = document.getElementById('sys_info_table').rows[2].cells[1].innerHTML;
|
149
150
|
let HEAP_SIZE;
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
151
|
+
let heapUnit = heapAsString.slice(-1).toLowerCase();
|
152
|
+
|
153
|
+
if(!isNaN(Number(heapUnit))) {
|
154
|
+
HEAP_SIZE = Number(heapAsString);
|
155
|
+
}
|
156
|
+
else {
|
157
|
+
|
158
|
+
switch (heapUnit) {
|
159
|
+
case "g":
|
160
|
+
HEAP_SIZE =
|
161
|
+
Number(heapAsString.slice(0, -1)) * MB_SIZE * 1024;
|
162
|
+
break;
|
163
|
+
case "m":
|
164
|
+
HEAP_SIZE =
|
165
|
+
Number(heapAsString.slice(0, -1)) * MB_SIZE;
|
166
|
+
break;
|
167
|
+
case "k":
|
168
|
+
HEAP_SIZE =
|
169
|
+
Number(heapAsString.slice(0, -1)) * 1024;
|
170
|
+
break;
|
171
|
+
default:
|
172
|
+
console.log("Hmm, what now .. heap unit undefined!");
|
173
|
+
break;
|
174
|
+
}
|
175
|
+
}
|
154
176
|
|
155
177
|
// 4. create input data for GC chart
|
156
178
|
// start with gc collection done after the first javacore creation
|
@@ -20,139 +20,148 @@
|
|
20
20
|
<script type="text/javascript" src="../data/jquery/wait2scripts.js"> _ </script>
|
21
21
|
<script type="text/javascript" src="../data/jquery/sorting.js"> _ </script>
|
22
22
|
<script type="text/javascript" src="../data/expand.js"> _ </script>
|
23
|
-
|
24
|
-
|
23
|
+
<script src="../data/jquery/jquery.mark.min.js"> _ </script>
|
24
|
+
<script type="text/javascript" src="../data/jquery/search.js"> _ </script>
|
25
25
|
</head>
|
26
26
|
|
27
27
|
<body id="doc_body" height="100%">
|
28
|
-
<
|
29
|
-
|
30
|
-
|
31
|
-
<
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
</thead>
|
42
|
-
<tbody>
|
43
|
-
<xsl:for-each select="//Thread/all_snapshot_collection/snapshot_collection/stack[file_name='{id}']">
|
44
|
-
<xsl:variable name="i" select="position()" />
|
28
|
+
<div class="searchbar">
|
29
|
+
<input id="search-input" type="search" />
|
30
|
+
<button data-search="search" id="search-button">Search</button>
|
31
|
+
<button data-search="next">Next</button>
|
32
|
+
<button data-search="prev">Prev</button>
|
33
|
+
<button data-search="clear">✖</button>
|
34
|
+
</div>
|
35
|
+
<div class="content">
|
36
|
+
<p class="right"><a href="../index.html"> Back to Main page </a></p>
|
37
|
+
<h2>Wait Report for: <b>{id}</b></h2>
|
38
|
+
<div id="all_threads">
|
39
|
+
<table id="javacore_threads_table" class="tablesorter_blue">
|
40
|
+
<thead>
|
45
41
|
<tr>
|
46
|
-
<
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
42
|
+
<th class="sixty">Thread name</th>
|
43
|
+
<th>Total CPU usage (s)</th>
|
44
|
+
<th>% CPU usage</th>
|
45
|
+
<th>Memory allocated since last GC (MB)</th>
|
46
|
+
<th>Java stack depth</th>
|
47
|
+
<th>Status</th>
|
48
|
+
</tr>
|
49
|
+
</thead>
|
50
|
+
<tbody>
|
51
|
+
<xsl:for-each select="//Thread/all_snapshot_collection/snapshot_collection/stack[file_name='{id}']">
|
52
|
+
<xsl:variable name="i" select="position()" />
|
53
|
+
<tr>
|
54
|
+
<td class="left">
|
55
|
+
<div>
|
56
|
+
<xsl:attribute name="id">
|
57
|
+
<xsl:value-of select="concat('stack',$i)"/>
|
54
58
|
</xsl:attribute>
|
55
|
-
<
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
59
|
+
<a target="_blank">
|
60
|
+
<xsl:attribute name="href">
|
61
|
+
<xsl:value-of select="concat('../threads/thread_', thread_hash, '.html')"/>
|
62
|
+
</xsl:attribute>
|
63
|
+
<xsl:value-of select="thread_name"/>
|
64
|
+
</a>
|
65
|
+
<xsl:choose>
|
66
|
+
<xsl:when test="stack_depth > 0">
|
67
|
+
<div>
|
68
|
+
<div class="toggle_expand">
|
69
|
+
<a href="javaScript:;" class="show">[+] Expand</a> <!-- "show" class is used in expand.js -->
|
70
|
+
</div>
|
71
|
+
<p class="stacktrace">
|
72
|
+
<xsl:for-each select="*[starts-with(name(), 'line')]">
|
73
|
+
<span>
|
74
|
+
<xsl:attribute name="class">
|
75
|
+
<xsl:value-of select="@kind"/>
|
76
|
+
</xsl:attribute>
|
77
|
+
<xsl:value-of select="current()"/>
|
78
|
+
</span>
|
79
|
+
<br/>
|
80
|
+
</xsl:for-each>
|
81
|
+
</p>
|
62
82
|
</div>
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
</div>
|
83
|
+
</xsl:when>
|
84
|
+
<xsl:otherwise>
|
85
|
+
No stack
|
86
|
+
</xsl:otherwise>
|
87
|
+
</xsl:choose>
|
88
|
+
</div>
|
89
|
+
</td>
|
90
|
+
<td>
|
91
|
+
<xsl:choose>
|
92
|
+
<xsl:when test="cpu_usage >= 0">
|
93
|
+
<xsl:value-of select='format-number(cpu_usage, "0.00")'/>
|
75
94
|
</xsl:when>
|
76
95
|
<xsl:otherwise>
|
77
|
-
|
96
|
+
<div class="warning">[!]
|
97
|
+
<span class="warningtooltip">Error computing CPU usage, javacores may be corrupted</span>
|
98
|
+
</div>
|
78
99
|
</xsl:otherwise>
|
79
100
|
</xsl:choose>
|
80
|
-
</
|
81
|
-
|
82
|
-
<td>
|
83
|
-
<xsl:choose>
|
84
|
-
<xsl:when test="cpu_usage >= 0">
|
85
|
-
<xsl:value-of select='format-number(cpu_usage, "0.00")'/>
|
86
|
-
</xsl:when>
|
87
|
-
<xsl:otherwise>
|
88
|
-
<div class="warning">[!]
|
89
|
-
<span class="warningtooltip">Error computing CPU usage, javacores may be corrupted</span>
|
90
|
-
</div>
|
91
|
-
</xsl:otherwise>
|
92
|
-
</xsl:choose>
|
93
|
-
</td>
|
94
|
-
<td>
|
95
|
-
<xsl:choose>
|
96
|
-
<xsl:when test="cpu_percentage >= 0">
|
97
|
-
<xsl:value-of select='format-number(cpu_percentage, "0.0")'/>
|
98
|
-
</xsl:when>
|
99
|
-
<xsl:otherwise>
|
100
|
-
<div class="warning">[!]
|
101
|
-
<span class="warningtooltip">Error computing CPU percentage, javacores may be corrupted</span>
|
102
|
-
</div>
|
103
|
-
</xsl:otherwise>
|
104
|
-
</xsl:choose>
|
105
|
-
</td>
|
106
|
-
<td><xsl:value-of select='format-number(allocated_memory div 1024 div 1024, "0.00")'/></td>
|
107
|
-
<td><xsl:value-of select='java_stack_depth'/></td>
|
108
|
-
<xsl:choose>
|
109
|
-
<xsl:when test="state='CW'">
|
110
|
-
<td class="waiting">Waiting on condition</td>
|
111
|
-
</xsl:when>
|
112
|
-
<xsl:when test="state='R'">
|
113
|
-
<td class="runnable">Runnable</td>
|
114
|
-
</xsl:when>
|
115
|
-
<xsl:when test="state='P'">
|
116
|
-
<td class="parked">
|
101
|
+
</td>
|
102
|
+
<td>
|
117
103
|
<xsl:choose>
|
118
|
-
<xsl:when test="
|
119
|
-
|
104
|
+
<xsl:when test="cpu_percentage >= 0">
|
105
|
+
<xsl:value-of select='format-number(cpu_percentage, "0.0")'/>
|
120
106
|
</xsl:when>
|
121
107
|
<xsl:otherwise>
|
122
|
-
<
|
123
|
-
<
|
124
|
-
|
125
|
-
</xsl:attribute>
|
126
|
-
<xsl:attribute name="title">
|
127
|
-
<xsl:value-of select="blocked_by/@name" />
|
128
|
-
</xsl:attribute>
|
129
|
-
Parked on <xsl:value-of select="blocked_by/@thread_id"/>
|
130
|
-
</a>
|
108
|
+
<div class="warning">[!]
|
109
|
+
<span class="warningtooltip">Error computing CPU percentage, javacores may be corrupted</span>
|
110
|
+
</div>
|
131
111
|
</xsl:otherwise>
|
132
112
|
</xsl:choose>
|
133
113
|
</td>
|
134
|
-
|
135
|
-
|
136
|
-
<
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
114
|
+
<td><xsl:value-of select='format-number(allocated_memory div 1024 div 1024, "0.00")'/></td>
|
115
|
+
<td><xsl:value-of select='java_stack_depth'/></td>
|
116
|
+
<xsl:choose>
|
117
|
+
<xsl:when test="state='CW'">
|
118
|
+
<td class="waiting">Waiting on condition</td>
|
119
|
+
</xsl:when>
|
120
|
+
<xsl:when test="state='R'">
|
121
|
+
<td class="runnable">Runnable</td>
|
122
|
+
</xsl:when>
|
123
|
+
<xsl:when test="state='P'">
|
124
|
+
<td class="parked">
|
125
|
+
<xsl:choose>
|
126
|
+
<xsl:when test="blocked_by=''">
|
127
|
+
Parked
|
128
|
+
</xsl:when>
|
129
|
+
<xsl:otherwise>
|
130
|
+
<a target="_blank">
|
131
|
+
<xsl:attribute name="href">
|
132
|
+
<xsl:value-of select="concat('../threads/thread_', blocked_by/@thread_hash, '.html')"/>
|
133
|
+
</xsl:attribute>
|
134
|
+
<xsl:attribute name="title">
|
135
|
+
<xsl:value-of select="blocked_by/@name" />
|
136
|
+
</xsl:attribute>
|
137
|
+
Parked on <xsl:value-of select="blocked_by/@thread_id"/>
|
138
|
+
</a>
|
139
|
+
</xsl:otherwise>
|
140
|
+
</xsl:choose>
|
141
|
+
</td>
|
142
|
+
</xsl:when>
|
143
|
+
<xsl:when test="state='B'">
|
144
|
+
<td class="blocked">
|
145
|
+
<a target="_blank">
|
146
|
+
<xsl:attribute name="href">
|
147
|
+
<xsl:value-of select="concat('../threads/thread_', blocked_by/@thread_hash, '.html')"/>
|
148
|
+
</xsl:attribute>
|
149
|
+
<xsl:attribute name="title">
|
150
|
+
<xsl:value-of select="blocked_by/@name" />
|
151
|
+
</xsl:attribute>
|
152
|
+
Blocked by <xsl:value-of select="blocked_by/@thread_id"/>
|
153
|
+
</a>
|
154
|
+
</td>
|
155
|
+
</xsl:when>
|
156
|
+
<xsl:otherwise>
|
157
|
+
<td><xsl:value-of select="state"/></td>
|
158
|
+
</xsl:otherwise>
|
159
|
+
</xsl:choose>
|
160
|
+
</tr>
|
161
|
+
</xsl:for-each>
|
162
|
+
</tbody>
|
163
|
+
</table>
|
164
|
+
</div>
|
156
165
|
</div>
|
157
166
|
</body>
|
158
167
|
<script type="text/javascript" src="../data/expand.js"> _ <!-- underscore character is required to prevent converting to <script /> which does not work --> </script>
|
@@ -748,7 +748,7 @@
|
|
748
748
|
|
749
749
|
<p></p>
|
750
750
|
<div class="margined">
|
751
|
-
<a href="https://
|
751
|
+
<a href="https://github.com/IBM/javacore-analyser/wiki" target="_blank">Documentation</a>
|
752
752
|
</div>
|
753
753
|
<div class="margined">
|
754
754
|
In case of any issues with the tool use Slack group:
|
@@ -20,177 +20,186 @@
|
|
20
20
|
<script type="text/javascript" src="../data/jquery/chart.js"> _ </script>
|
21
21
|
<script type="text/javascript" src="../data/jquery/chartjs-adapter-date-fns.bundle.min.js"> _ </script>
|
22
22
|
<script type="text/javascript" src="../data/jquery/wait2scripts.js"> _ </script>
|
23
|
-
|
23
|
+
<script src="../data/jquery/jquery.mark.min.js"> _ </script>
|
24
|
+
<script type="text/javascript" src="../data/jquery/search.js"> _ </script>
|
24
25
|
</head>
|
25
|
-
|
26
26
|
<body id="doc_body" height="100%">
|
27
|
-
<
|
28
|
-
|
29
|
-
|
30
|
-
<
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
<
|
42
|
-
<
|
43
|
-
<
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
<
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
</xsl:choose>
|
73
|
-
<xsl:choose>
|
74
|
-
<xsl:when test="position()=1">
|
75
|
-
<td>N/A</td>
|
76
|
-
</xsl:when>
|
77
|
-
<xsl:otherwise>
|
78
|
-
<td><xsl:value-of select='format-number(cpu_usage, "0.##")'/></td>
|
79
|
-
</xsl:otherwise>
|
80
|
-
</xsl:choose>
|
81
|
-
<xsl:choose>
|
27
|
+
<div class="searchbar">
|
28
|
+
<input id="search-input" type="search" />
|
29
|
+
<button data-search="search" id="search-button">Search</button>
|
30
|
+
<button data-search="next">Next</button>
|
31
|
+
<button data-search="prev">Prev</button>
|
32
|
+
<button data-search="clear">✖</button>
|
33
|
+
</div>
|
34
|
+
<div class="content">
|
35
|
+
<p class="right"><a href="../index.html"> Back to Main page </a></p>
|
36
|
+
<h2>Wait Report for thread: <b><xsl:value-of select="thread_name"/></b></h2>
|
37
|
+
<xsl:choose>
|
38
|
+
<xsl:when test="//javacore_count = 1">
|
39
|
+
System resource utilization data cannot be calculated with only a single javacore.
|
40
|
+
</xsl:when>
|
41
|
+
<xsl:otherwise>
|
42
|
+
<div class="chart-container" height="25%">
|
43
|
+
<canvas id="myChart" height="100%"></canvas>
|
44
|
+
</div>
|
45
|
+
</xsl:otherwise>
|
46
|
+
</xsl:choose>
|
47
|
+
<div id="all_threads">
|
48
|
+
<table id="all_threads_table_thread_xsl">
|
49
|
+
<thead>
|
50
|
+
<tr>
|
51
|
+
<th>Timestamp</th>
|
52
|
+
<th>Elapsed time (s)</th>
|
53
|
+
<th>CPU usage (s)</th>
|
54
|
+
<th>% CPU usage</th>
|
55
|
+
<th class='sixty'>Stack trace</th>
|
56
|
+
<th>State</th>
|
57
|
+
<th>Blocking</th>
|
58
|
+
</tr>
|
59
|
+
</thead>
|
60
|
+
<!-- Snapshot starts here -->
|
61
|
+
<xsl:for-each select="*[starts-with(name(), 'stack')]">
|
62
|
+
<tr>
|
63
|
+
<td>
|
64
|
+
<a>
|
65
|
+
<xsl:attribute name="href">
|
66
|
+
../javacores/<xsl:value-of select="file_name"/>.html
|
67
|
+
</xsl:attribute>
|
68
|
+
<xsl:value-of select='timestamp'/>
|
69
|
+
</a>
|
70
|
+
</td>
|
71
|
+
<xsl:choose>
|
82
72
|
<xsl:when test="position()=1">
|
83
73
|
<td>N/A</td>
|
84
74
|
</xsl:when>
|
85
75
|
<xsl:otherwise>
|
86
|
-
<td
|
76
|
+
<td>
|
77
|
+
<xsl:value-of select='format-number(elapsed_time, "0.##")'/>
|
78
|
+
</td>
|
87
79
|
</xsl:otherwise>
|
88
80
|
</xsl:choose>
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
<xsl:value-of select="current()"/>
|
101
|
-
</span>
|
102
|
-
<br/>
|
103
|
-
</xsl:for-each>
|
104
|
-
</p>
|
81
|
+
<xsl:choose>
|
82
|
+
<xsl:when test="position()=1">
|
83
|
+
<td>N/A</td>
|
84
|
+
</xsl:when>
|
85
|
+
<xsl:otherwise>
|
86
|
+
<td><xsl:value-of select='format-number(cpu_usage, "0.##")'/></td>
|
87
|
+
</xsl:otherwise>
|
88
|
+
</xsl:choose>
|
89
|
+
<xsl:choose>
|
90
|
+
<xsl:when test="position()=1">
|
91
|
+
<td>N/A</td>
|
105
92
|
</xsl:when>
|
106
93
|
<xsl:otherwise>
|
107
|
-
|
94
|
+
<td><xsl:value-of select='format-number(cpu_percentage, "0.#")'/></td>
|
108
95
|
</xsl:otherwise>
|
109
96
|
</xsl:choose>
|
110
|
-
|
111
|
-
|
112
|
-
<xsl:choose>
|
113
|
-
<xsl:when test="state='CW'">
|
114
|
-
<td class="waiting">
|
115
|
-
<xsl:choose>
|
116
|
-
<xsl:when test="blocked_by=''">
|
117
|
-
Waiting on condition
|
118
|
-
</xsl:when>
|
119
|
-
<xsl:otherwise>
|
120
|
-
<a target="_blank">
|
121
|
-
<xsl:attribute name="href">
|
122
|
-
<xsl:value-of select="concat('thread_', blocked_by/@thread_hash, '.html')"/>
|
123
|
-
</xsl:attribute>
|
124
|
-
<xsl:attribute name="title">
|
125
|
-
<xsl:value-of select="blocked_by/@name" />
|
126
|
-
</xsl:attribute>
|
127
|
-
Waiting for <xsl:value-of select="blocked_by/@thread_id"/>
|
128
|
-
</a>
|
129
|
-
</xsl:otherwise>
|
130
|
-
</xsl:choose>
|
131
|
-
</td>
|
132
|
-
</xsl:when>
|
133
|
-
<xsl:when test="state='R'">
|
134
|
-
<td class="runnable">Runnable</td>
|
135
|
-
</xsl:when>
|
136
|
-
<xsl:when test="state='P'">
|
137
|
-
<td class="parked">
|
97
|
+
<td class="left">
|
98
|
+
<div>
|
138
99
|
<xsl:choose>
|
139
|
-
<xsl:when test="
|
140
|
-
|
100
|
+
<xsl:when test="stack_depth > 0">
|
101
|
+
<div class="toggle_expand">
|
102
|
+
<a href="javaScript:;" class="show">[+] Expand</a>
|
103
|
+
</div>
|
104
|
+
<p class="stacktrace">
|
105
|
+
<xsl:for-each select="*[starts-with(name(), 'line')]">
|
106
|
+
<span>
|
107
|
+
<xsl:attribute name="class"><xsl:value-of select="@kind"/></xsl:attribute>
|
108
|
+
<xsl:value-of select="current()"/>
|
109
|
+
</span>
|
110
|
+
<br/>
|
111
|
+
</xsl:for-each>
|
112
|
+
</p>
|
141
113
|
</xsl:when>
|
142
114
|
<xsl:otherwise>
|
143
|
-
|
144
|
-
<xsl:attribute name="href">
|
145
|
-
<xsl:value-of select="concat('thread_', blocked_by/@thread_hash, '.html')"/>
|
146
|
-
</xsl:attribute>
|
147
|
-
<xsl:attribute name="title">
|
148
|
-
<xsl:value-of select="blocked_by/@name" />
|
149
|
-
</xsl:attribute>
|
150
|
-
Parked on <xsl:value-of select="blocked_by/@thread_id"/>
|
151
|
-
</a>
|
115
|
+
No Stack
|
152
116
|
</xsl:otherwise>
|
153
117
|
</xsl:choose>
|
154
|
-
</
|
155
|
-
</
|
156
|
-
<xsl:when test="state='B'">
|
157
|
-
<td class="blocked">
|
158
|
-
<a target="_blank">
|
159
|
-
<xsl:attribute name="href">
|
160
|
-
<xsl:value-of select="concat('thread_', blocked_by/@thread_hash, '.html')"/>
|
161
|
-
</xsl:attribute>
|
162
|
-
<xsl:attribute name="title">
|
163
|
-
<xsl:value-of select="blocked_by/@name" />
|
164
|
-
</xsl:attribute>
|
165
|
-
Blocked by <xsl:value-of select="blocked_by/@thread_id"/>
|
166
|
-
</a>
|
167
|
-
</td>
|
168
|
-
</xsl:when>
|
169
|
-
<xsl:otherwise>
|
170
|
-
<td><xsl:value-of select="state"/></td>
|
171
|
-
</xsl:otherwise>
|
172
|
-
</xsl:choose>
|
173
|
-
<td>
|
118
|
+
</div>
|
119
|
+
</td>
|
174
120
|
<xsl:choose>
|
175
|
-
|
176
|
-
|
177
|
-
<xsl:
|
178
|
-
<
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
<
|
183
|
-
<xsl:
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
121
|
+
<xsl:when test="state='CW'">
|
122
|
+
<td class="waiting">
|
123
|
+
<xsl:choose>
|
124
|
+
<xsl:when test="blocked_by=''">
|
125
|
+
Waiting on condition
|
126
|
+
</xsl:when>
|
127
|
+
<xsl:otherwise>
|
128
|
+
<a target="_blank">
|
129
|
+
<xsl:attribute name="href">
|
130
|
+
<xsl:value-of select="concat('thread_', blocked_by/@thread_hash, '.html')"/>
|
131
|
+
</xsl:attribute>
|
132
|
+
<xsl:attribute name="title">
|
133
|
+
<xsl:value-of select="blocked_by/@name" />
|
134
|
+
</xsl:attribute>
|
135
|
+
Waiting for <xsl:value-of select="blocked_by/@thread_id"/>
|
136
|
+
</a>
|
137
|
+
</xsl:otherwise>
|
138
|
+
</xsl:choose>
|
139
|
+
</td>
|
140
|
+
</xsl:when>
|
141
|
+
<xsl:when test="state='R'">
|
142
|
+
<td class="runnable">Runnable</td>
|
143
|
+
</xsl:when>
|
144
|
+
<xsl:when test="state='P'">
|
145
|
+
<td class="parked">
|
146
|
+
<xsl:choose>
|
147
|
+
<xsl:when test="blocked_by=''">
|
148
|
+
Parked
|
149
|
+
</xsl:when>
|
150
|
+
<xsl:otherwise>
|
151
|
+
<a target="_blank">
|
152
|
+
<xsl:attribute name="href">
|
153
|
+
<xsl:value-of select="concat('thread_', blocked_by/@thread_hash, '.html')"/>
|
154
|
+
</xsl:attribute>
|
155
|
+
<xsl:attribute name="title">
|
156
|
+
<xsl:value-of select="blocked_by/@name" />
|
157
|
+
</xsl:attribute>
|
158
|
+
Parked on <xsl:value-of select="blocked_by/@thread_id"/>
|
159
|
+
</a>
|
160
|
+
</xsl:otherwise>
|
161
|
+
</xsl:choose>
|
162
|
+
</td>
|
163
|
+
</xsl:when>
|
164
|
+
<xsl:when test="state='B'">
|
165
|
+
<td class="blocked">
|
166
|
+
<a target="_blank">
|
167
|
+
<xsl:attribute name="href">
|
168
|
+
<xsl:value-of select="concat('thread_', blocked_by/@thread_hash, '.html')"/>
|
169
|
+
</xsl:attribute>
|
170
|
+
<xsl:attribute name="title">
|
171
|
+
<xsl:value-of select="blocked_by/@name" />
|
172
|
+
</xsl:attribute>
|
173
|
+
Blocked by <xsl:value-of select="blocked_by/@thread_id"/>
|
174
|
+
</a>
|
175
|
+
</td>
|
176
|
+
</xsl:when>
|
177
|
+
<xsl:otherwise>
|
178
|
+
<td><xsl:value-of select="state"/></td>
|
179
|
+
</xsl:otherwise>
|
180
|
+
</xsl:choose>
|
181
|
+
<td>
|
182
|
+
<xsl:choose>
|
183
|
+
<xsl:when test="blocking/thread">
|
184
|
+
blocking:
|
185
|
+
<xsl:for-each select="blocking/thread">
|
186
|
+
<a target="_blank">
|
187
|
+
<xsl:attribute name="href">
|
188
|
+
<xsl:value-of select="concat('thread_', @thread_hash, '.html')"/>
|
189
|
+
</xsl:attribute>
|
190
|
+
<xsl:attribute name="title">
|
191
|
+
<xsl:value-of select="@name" />
|
192
|
+
</xsl:attribute>
|
193
|
+
<xsl:value-of select="@thread_id" />
|
194
|
+
</a>;
|
195
|
+
</xsl:for-each>
|
196
|
+
</xsl:when>
|
197
|
+
</xsl:choose>
|
198
|
+
</td>
|
199
|
+
</tr>
|
200
|
+
</xsl:for-each>
|
201
|
+
</table>
|
202
|
+
</div>
|
194
203
|
</div>
|
195
204
|
</body>
|
196
205
|
<script>loadChart();</script>
|
@@ -15,8 +15,10 @@ from pathlib import Path
|
|
15
15
|
from xml.dom.minidom import parseString
|
16
16
|
|
17
17
|
import importlib_resources
|
18
|
+
from importlib_resources.abc import Traversable
|
18
19
|
from lxml import etree
|
19
20
|
from lxml.etree import XMLSyntaxError
|
21
|
+
from tqdm import tqdm
|
20
22
|
|
21
23
|
from javacore_analyser import tips
|
22
24
|
from javacore_analyser.code_snapshot_collection import CodeSnapshotCollection
|
@@ -140,28 +142,28 @@ class JavacoreSet:
|
|
140
142
|
shutil.rmtree(data_output_dir, ignore_errors=True)
|
141
143
|
logging.info("Data dir: " + data_output_dir)
|
142
144
|
|
143
|
-
style_css_resource = importlib_resources.files("javacore_analyser") / "data" / "style.css"
|
145
|
+
style_css_resource: Traversable = importlib_resources.files("javacore_analyser") / "data" / "style.css"
|
144
146
|
data_dir = os.path.dirname(style_css_resource)
|
145
147
|
os.mkdir(data_output_dir)
|
146
148
|
shutil.copytree(data_dir, data_output_dir, dirs_exist_ok=True)
|
147
149
|
|
148
150
|
def __generate_htmls_for_threads(self, output_dir, temp_dir_name):
|
149
|
-
_create_xml_xsl_for_collection(temp_dir_name
|
150
|
-
output_dir
|
151
|
+
_create_xml_xsl_for_collection(os.path.join(temp_dir_name, "threads"),
|
152
|
+
os.path.join(output_dir, "data", "xml", "threads"), "thread",
|
151
153
|
self.threads,
|
152
154
|
"thread")
|
153
155
|
self.generate_htmls_from_xmls_xsls(self.report_xml_file,
|
154
|
-
temp_dir_name
|
155
|
-
output_dir
|
156
|
+
os.path.join(temp_dir_name, "threads"),
|
157
|
+
os.path.join(output_dir, "threads"))
|
156
158
|
|
157
159
|
def __generate_htmls_for_javacores(self, output_dir, temp_dir_name):
|
158
|
-
_create_xml_xsl_for_collection(temp_dir_name
|
159
|
-
output_dir
|
160
|
+
_create_xml_xsl_for_collection(os.path.join(temp_dir_name, "javacores"),
|
161
|
+
os.path.join(output_dir, "data", "xml", "javacores"), "javacore",
|
160
162
|
self.javacores,
|
161
163
|
"")
|
162
164
|
self.generate_htmls_from_xmls_xsls(self.report_xml_file,
|
163
|
-
temp_dir_name
|
164
|
-
output_dir
|
165
|
+
os.path.join(temp_dir_name, "javacores"),
|
166
|
+
os.path.join(output_dir, "javacores"))
|
165
167
|
|
166
168
|
def populate_snapshot_collections(self):
|
167
169
|
for javacore in self.javacores:
|
@@ -519,10 +521,13 @@ class JavacoreSet:
|
|
519
521
|
os.mkdir(output_dir)
|
520
522
|
shutil.copy2(report_xml_file, data_input_dir)
|
521
523
|
|
524
|
+
list_files = os.listdir(data_input_dir)
|
525
|
+
progress_bar = tqdm(desc="Generating html files", unit=' files')
|
526
|
+
|
522
527
|
# Generating list of tuples. This is required attribute for p.map function executed few lines below.
|
523
528
|
generate_html_from_xml_xsl_files_params = []
|
524
|
-
for file in
|
525
|
-
generate_html_from_xml_xsl_files_params.append((file, data_input_dir, output_dir))
|
529
|
+
for file in list_files:
|
530
|
+
generate_html_from_xml_xsl_files_params.append((file, data_input_dir, output_dir, progress_bar))
|
526
531
|
|
527
532
|
# https://docs.python.org/3.8/library/multiprocessing.html
|
528
533
|
threads_no = JavacoreSet.get_number_of_parallel_threads()
|
@@ -530,6 +535,7 @@ class JavacoreSet:
|
|
530
535
|
with Pool(threads_no) as p:
|
531
536
|
p.map(JavacoreSet.generate_html_from_xml_xsl_files, generate_html_from_xml_xsl_files_params)
|
532
537
|
|
538
|
+
progress_bar.close()
|
533
539
|
logging.info(f"Generated html files in {output_dir}")
|
534
540
|
|
535
541
|
# Run with the same number of threads as you have processes but leave one thread for something else.
|
@@ -540,7 +546,7 @@ class JavacoreSet:
|
|
540
546
|
@staticmethod
|
541
547
|
def generate_html_from_xml_xsl_files(args):
|
542
548
|
|
543
|
-
collection_file, collection_input_dir, output_dir = args
|
549
|
+
collection_file, collection_input_dir, output_dir, progress_bar = args
|
544
550
|
|
545
551
|
if not collection_file.endswith(".xsl"): return
|
546
552
|
|
@@ -567,6 +573,25 @@ class JavacoreSet:
|
|
567
573
|
logging.debug("Generating file " + html_file)
|
568
574
|
output_doc.write(html_file, pretty_print=True)
|
569
575
|
|
576
|
+
progress_bar.update(1)
|
577
|
+
|
578
|
+
def create_xml_xsl_for_collection(self, tmp_dir, xml_xsls_prefix_path, collection, output_file_prefix):
|
579
|
+
logging.info("Creating xmls and xsls in " + tmp_dir)
|
580
|
+
os.mkdir(tmp_dir)
|
581
|
+
extensions = [".xsl", ".xml"]
|
582
|
+
for extension in extensions:
|
583
|
+
file_content = Path(xml_xsls_prefix_path + extension).read_text()
|
584
|
+
for element in tqdm(collection, desc="Creating xml/xsl files", unit=" files"):
|
585
|
+
element_id = element.get_id()
|
586
|
+
filename = output_file_prefix + "_" + str(element_id) + extension
|
587
|
+
if filename.startswith("_"):
|
588
|
+
filename = filename[1:]
|
589
|
+
file = os.path.join(tmp_dir, filename)
|
590
|
+
logging.debug("Writing file " + file)
|
591
|
+
f = open(file, "w")
|
592
|
+
f.write(file_content.format(id=element_id))
|
593
|
+
f.close()
|
594
|
+
|
570
595
|
@staticmethod
|
571
596
|
def parse_mem_arg(line):
|
572
597
|
line = line.split()[-1] # avoid matching the '2' in tag name 2CIUSERARG
|
@@ -17,12 +17,17 @@
|
|
17
17
|
|
18
18
|
<h2>Generate report:</h2>
|
19
19
|
<form action="/upload" method="post" enctype="multipart/form-data">
|
20
|
-
<
|
21
|
-
<
|
20
|
+
<ol>
|
21
|
+
<li>Choose archive (zip, 7z, tgz, bz2) file or multiple javacore files:
|
22
|
+
<input type="file" name="files" multiple required>
|
23
|
+
</li>
|
24
|
+
<li>Give the name for your report: <input type="text" id="report_name" name="report_name" required></li>
|
25
|
+
<li>Click button to process: <input type="submit" value="Run"></li>
|
26
|
+
</ol>
|
22
27
|
<strong>
|
23
|
-
NOTE:
|
28
|
+
NOTE: Report generation is an expensive operation. It may take a few minutes. Please be patient.
|
24
29
|
</strong>
|
25
|
-
|
30
|
+
|
26
31
|
</form>
|
27
32
|
<br></br>
|
28
33
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: javacore_analyser
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.0rc3
|
4
4
|
Summary: The tool to review IBM Javacore files
|
5
5
|
Project-URL: Homepage, https://github.com/IBM/javacore-analyser
|
6
6
|
Project-URL: Issues, https://github.com/IBM/javacore-analyser/issues
|
@@ -226,12 +226,12 @@ Classifier: Programming Language :: Python :: 3.11
|
|
226
226
|
Classifier: Programming Language :: Python :: 3.12
|
227
227
|
Classifier: Programming Language :: Python :: 3.13
|
228
228
|
Requires-Python: >=3.9
|
229
|
-
Requires-Dist: dicttoxml
|
230
229
|
Requires-Dist: flask
|
231
230
|
Requires-Dist: importlib-resources
|
232
231
|
Requires-Dist: lxml
|
233
232
|
Requires-Dist: py7zr
|
234
233
|
Requires-Dist: pyana
|
234
|
+
Requires-Dist: tqdm
|
235
235
|
Requires-Dist: waitress
|
236
236
|
Description-Content-Type: text/markdown
|
237
237
|
|
@@ -6,7 +6,7 @@ javacore_analyser/java_thread.py,sha256=4zUfmmlH47SrIxgfPmrJHl_YUziVJXVNVedD5X25
|
|
6
6
|
javacore_analyser/javacore.py,sha256=NkvxN6C93eG24wEB_kfH-yf0_f_ECj7Let4bQ1i22AM,6860
|
7
7
|
javacore_analyser/javacore_analyser_batch.py,sha256=ApC_xcDMIP4DxQ0MUiD6XrF3hzcyFmofVH1Jq4-6_4s,5408
|
8
8
|
javacore_analyser/javacore_analyser_web.py,sha256=DJgzHKuGUkATKaE7pI6zOQPGITB6hdM86tUXsZ1fCWw,4526
|
9
|
-
javacore_analyser/javacore_set.py,sha256=
|
9
|
+
javacore_analyser/javacore_set.py,sha256=3_KfoT4wKYmUROUQXJInaPxKi60zauqAK11Iat3Y55Q,30689
|
10
10
|
javacore_analyser/logging_utils.py,sha256=vLob0ikezysjGv9XGqv9GbLekxu4eO_csq22M-gtLiQ,966
|
11
11
|
javacore_analyser/snapshot_collection.py,sha256=fLEnwg9-cOjVVUUludtzI7R2yO9BBVgJgxkhvqG5QDg,443
|
12
12
|
javacore_analyser/snapshot_collection_collection.py,sha256=JyNr038nC8mcX1mjeXjNSzZT4oE9ACFmCYJORUKzyvw,1265
|
@@ -29,16 +29,16 @@ javacore_analyser/data/jquery/search.js,sha256=hY0kp5ZIUazzM32hEmArA3ql6MTiOjjf5
|
|
29
29
|
javacore_analyser/data/jquery/sorting.js,sha256=HsuVLa7F70IM4ZMXZpjj7wtVI1TXL1SPbZGWenv0Jp8,369
|
30
30
|
javacore_analyser/data/jquery/theme.blue.css,sha256=mI0RCGd6G5GOKSG7BPagp0N58xipSjPXUKvrcHJ4h1Q,7528
|
31
31
|
javacore_analyser/data/jquery/theme.default.min.css,sha256=5sgExNTnkN8NcApKIU73_aqgZmqq_zJp9-9zXf9aSEw,4502
|
32
|
-
javacore_analyser/data/jquery/wait2scripts.js,sha256=
|
32
|
+
javacore_analyser/data/jquery/wait2scripts.js,sha256=CMbSqte7Ln0hP9ZScESGdIDfWEmxJwvfLZjDfYNc1Sg,8427
|
33
33
|
javacore_analyser/data/xml/index.xml,sha256=9VH2rmri3FQpXcW39kbyi2dON94C5XTiaQn0ioExCe8,282
|
34
|
-
javacore_analyser/data/xml/report.xsl,sha256=
|
34
|
+
javacore_analyser/data/xml/report.xsl,sha256=XEwgf0qfXL1fXjj-X5iYYwt-D0cPjI9mLjhTmRvyNnk,49697
|
35
35
|
javacore_analyser/data/xml/javacores/javacore.xml,sha256=6dG89Whx1_kpEYVS_F6Upa2XuXnXorlQATFc8kD5Mfc,280
|
36
|
-
javacore_analyser/data/xml/javacores/javacore.xsl,sha256=
|
36
|
+
javacore_analyser/data/xml/javacores/javacore.xsl,sha256=5cnIp08Q9FccljHH8duoJQYofyW8lwUCGtpdzz5Y0Y8,11644
|
37
37
|
javacore_analyser/data/xml/threads/thread.xml,sha256=6dG89Whx1_kpEYVS_F6Upa2XuXnXorlQATFc8kD5Mfc,280
|
38
|
-
javacore_analyser/data/xml/threads/thread.xsl,sha256=
|
39
|
-
javacore_analyser/templates/index.html,sha256=
|
40
|
-
javacore_analyser-2.
|
41
|
-
javacore_analyser-2.
|
42
|
-
javacore_analyser-2.
|
43
|
-
javacore_analyser-2.
|
44
|
-
javacore_analyser-2.
|
38
|
+
javacore_analyser/data/xml/threads/thread.xsl,sha256=rkqr5GQ2aZ_xrdhUjl2QZDCZ-09zxqUmtV8DFZVjTAA,13927
|
39
|
+
javacore_analyser/templates/index.html,sha256=aEuyry-HZ9HlQNwfbugugvqbSxwlo7LrQnrDmqO34YE,1682
|
40
|
+
javacore_analyser-2.0rc3.dist-info/METADATA,sha256=BuAHmwoorqey194rBsfXSbM8kTaBWfZE0OyjgADWlS0,20358
|
41
|
+
javacore_analyser-2.0rc3.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
|
42
|
+
javacore_analyser-2.0rc3.dist-info/entry_points.txt,sha256=W3S799zI58g5-jWMsC3wY9xksz21LPEMYOILv8sayfM,160
|
43
|
+
javacore_analyser-2.0rc3.dist-info/licenses/LICENSE,sha256=xllut76FgcGL5zbIRvuRc7aezPbvlMUTWJPsVr2Sugg,11358
|
44
|
+
javacore_analyser-2.0rc3.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|