@@ -22,7 +22,9 @@ class JStatData {
22
22
val rawHeaders = lines[currentIndex].split(" \\ s+" .toRegex()).filter { it != " " }
23
23
val rawValues = lines[++ currentIndex].split(" \\ s+" .toRegex()).filter { it != " " }
24
24
25
- val (headers, value) = removeConcurrentGCTimes(rawHeaders, rawValues)
25
+ val typeOfCollector = getCollector(rawHeaders, rawValues)
26
+
27
+ val (headers, value) = preparePairsByCollector(typeOfCollector, rawHeaders, rawValues)
26
28
27
29
if (headers.size == value.size && checkValuesAraValid(value)) {
28
30
val process = lines[++ currentIndex].split(" \\ s+" .toRegex())
@@ -35,39 +37,94 @@ class JStatData {
35
37
aux++
36
38
}
37
39
processes[process.first()] = ProcessJstat (
38
- capacity = totalCapacity(jspMapValues),
39
- usage = usage(jspMapValues),
40
+ capacity = totalCapacity(typeOfCollector, jspMapValues),
41
+ usage = usage(typeOfCollector, jspMapValues),
40
42
gcTime = gcTime(jspMapValues),
41
- uptime = uptime(jspMapValues)
43
+ uptime = uptime(jspMapValues),
44
+ typeGC = typeOfCollector.name
42
45
)
43
46
44
47
}
45
48
}
46
49
return processes
47
50
}
48
51
49
- // When using ParallelGC argument concurrent gc times are not informed, generating an output like
50
- // Timestamp S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT CGC CGCT GCT
51
- // 298.0 22.0 20.0 0.0 0.0 1.0 1.8 1.0 0.9 4.0 8.3 6.0 5.0 4 0.3 4 0.7 - - 1
52
- // We need to remove the entries CGC and CGCT from the headers and values
53
- private fun removeConcurrentGCTimes (
52
+ private fun getCollector (rawHeaders : List <String >, rawValues : List <String >): TypeCollector {
53
+ val socHeaderPosition = rawHeaders.indexOf(" S0C" )
54
+ val soc = rawValues[socHeaderPosition]
55
+ if (soc == " -" ) {
56
+ return TypeCollector .Z
57
+ } else {
58
+ val socCGC = rawHeaders.indexOf(" CGC" )
59
+ val cgc = rawValues[socCGC]
60
+ if (cgc == " -" ) {
61
+ return TypeCollector .PARALLEL
62
+ } else {
63
+ return TypeCollector .G1
64
+ }
65
+ }
66
+ }
67
+
68
+ private fun preparePairsByCollector (
69
+ typeOfCollector : TypeCollector ,
54
70
rawHeaders : List <String >,
55
71
rawValues : List <String >
56
72
): Pair <List <String >, List<String>> {
57
- return if (rawHeaders.contains(" CGC" ) && rawHeaders.contains(" CGCT" )
58
- && rawHeaders.size == rawValues.size ) {
59
- val concurrentGCTime = rawHeaders.indexOf(" CGC" )
60
- val concurrentGCTimeTotal = rawHeaders.indexOf(" CGCT" )
61
-
62
- val headers = rawHeaders.toMutableList()
63
- headers.removeAt(concurrentGCTime)
64
- headers.removeAt(concurrentGCTimeTotal - 1 )
65
- val value = rawValues.toMutableList()
66
- value.removeAt(concurrentGCTime)
67
- value.removeAt(concurrentGCTimeTotal - 1 )
68
- Pair (headers.toList(), value.toList())
69
- } else {
70
- Pair (rawHeaders, rawValues)
73
+ when (typeOfCollector) {
74
+ TypeCollector .G1 -> {
75
+ return Pair (rawHeaders, rawValues)
76
+ }
77
+
78
+ TypeCollector .PARALLEL -> {
79
+ val concurrentGCTime = rawHeaders.indexOf(" CGC" )
80
+ val concurrentGCTimeTotal = rawHeaders.indexOf(" CGCT" )
81
+
82
+ val headers = rawHeaders.toMutableList()
83
+ headers.removeAt(concurrentGCTime)
84
+ headers.removeAt(concurrentGCTimeTotal - 1 )
85
+ val value = rawValues.toMutableList()
86
+ value.removeAt(concurrentGCTime)
87
+ value.removeAt(concurrentGCTimeTotal - 1 )
88
+ return Pair (headers.toList(), value.toList())
89
+ }
90
+
91
+ TypeCollector .Z -> {
92
+ val soc = rawHeaders.indexOf(" S0C" )
93
+ val s1c = rawHeaders.indexOf(" S1C" )
94
+ val sou = rawHeaders.indexOf(" S0U" )
95
+ val s1u = rawHeaders.indexOf(" S1U" )
96
+ val ec = rawHeaders.indexOf(" EC" )
97
+ val eu = rawHeaders.indexOf(" EU" )
98
+ val ygc = rawHeaders.indexOf(" YGC" )
99
+ val ygct = rawHeaders.indexOf(" YGCT" )
100
+ val fgc = rawHeaders.indexOf(" FGC" )
101
+ val fgct = rawHeaders.indexOf(" FGCT" )
102
+
103
+ val headers = rawHeaders.toMutableList()
104
+ headers.removeAt(soc)
105
+ headers.removeAt(s1c - 1 )
106
+ headers.removeAt(sou - 2 )
107
+ headers.removeAt(s1u - 3 )
108
+ headers.removeAt(ec - 4 )
109
+ headers.removeAt(eu - 5 )
110
+ headers.removeAt(ygc - 6 )
111
+ headers.removeAt(ygct - 7 )
112
+ headers.removeAt(fgc - 8 )
113
+ headers.removeAt(fgct - 9 )
114
+
115
+ val value = rawValues.toMutableList()
116
+ value.removeAt(soc)
117
+ value.removeAt(s1c - 1 )
118
+ value.removeAt(sou - 2 )
119
+ value.removeAt(s1u - 3 )
120
+ value.removeAt(ec - 4 )
121
+ value.removeAt(eu - 5 )
122
+ value.removeAt(ygc - 6 )
123
+ value.removeAt(ygct - 7 )
124
+ value.removeAt(fgc - 8 )
125
+ value.removeAt(fgct - 9 )
126
+ return Pair (headers.toList(), value.toList())
127
+ }
71
128
}
72
129
}
73
130
@@ -82,12 +139,20 @@ class JStatData {
82
139
return true
83
140
}
84
141
85
- private fun totalCapacity (jspMapValues : Map <String , Double >): Double {
86
- return jspMapValues[" EC" ]!! + jspMapValues[" OC" ]!! + jspMapValues[" S0C" ]!! + jspMapValues[" S1C" ]!!
142
+ private fun totalCapacity (typeOfCollector : TypeCollector , jspMapValues : Map <String , Double >): Double {
143
+ if (typeOfCollector == TypeCollector .Z ) {
144
+ return jspMapValues[" OC" ]!! + jspMapValues[" MC" ]!!
145
+ } else {
146
+ return jspMapValues[" EC" ]!! + jspMapValues[" OC" ]!! + jspMapValues[" S0C" ]!! + jspMapValues[" S1C" ]!!
147
+ }
87
148
}
88
149
89
- private fun usage (jspMapValues : Map <String , Double >): Double {
90
- return jspMapValues[" S0U" ]!! + jspMapValues[" S1U" ]!! + jspMapValues[" EU" ]!! + jspMapValues[" OU" ]!!
150
+ private fun usage (typeOfCollector : TypeCollector , jspMapValues : Map <String , Double >): Double {
151
+ if (typeOfCollector == TypeCollector .Z ) {
152
+ return jspMapValues[" OU" ]!! + jspMapValues[" MU" ]!!
153
+ } else {
154
+ return jspMapValues[" S0U" ]!! + jspMapValues[" S1U" ]!! + jspMapValues[" EU" ]!! + jspMapValues[" OU" ]!!
155
+ }
91
156
}
92
157
93
158
private fun gcTime (jspMapValues : Map <String , Double >): Double {
@@ -98,3 +163,9 @@ class JStatData {
98
163
return jspMapValues[" Timestamp" ]!!
99
164
}
100
165
}
166
+
167
+ enum class TypeCollector {
168
+ G1 ,
169
+ PARALLEL ,
170
+ Z
171
+ }
0 commit comments