Skip to content

Commit fcd32bf

Browse files
committed
GH-389 merge IP address and host name
1 parent cbc954f commit fcd32bf

File tree

1 file changed

+71
-37
lines changed

1 file changed

+71
-37
lines changed

visualvm/jfr/src/org/graalvm/visualvm/jfr/views/socketio/SocketIONode.java

Lines changed: 71 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2019, 2021 Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,6 @@
2424
*/
2525
package org.graalvm.visualvm.jfr.views.socketio;
2626

27-
import java.text.NumberFormat;
2827
import java.time.Duration;
2928
import java.util.ArrayList;
3029
import java.util.List;
@@ -45,20 +44,23 @@
4544
*/
4645
abstract class SocketIONode extends CCTNode {
4746

47+
private static final String UNKNOWN = "<unknown>";
4848
private static final SocketIONode[] NO_NODES = new SocketIONode[0];
4949

5050
private final SocketIONode parent;
5151
private final List<SocketIONode> children;
5252

53-
final String name;
53+
final String key;
54+
String name;
5455
final Icon icon;
5556

5657
long countR, countW = 0;
5758
long bytesR, bytesW = 0;
5859
Duration durationR, durationRMax, durationW, durationWMax;
5960

6061

61-
SocketIONode(String name, Icon icon, SocketIONode parent, List<SocketIONode> children) {
62+
SocketIONode(String key, String name, Icon icon, SocketIONode parent, List<SocketIONode> children) {
63+
this.key = key;
6264
this.parent = parent;
6365
this.children = children;
6466

@@ -90,10 +92,10 @@ final void processWrite(Duration duration, long bytes) {
9092
}
9193

9294

93-
SocketIONode getChild(String name) {
95+
SocketIONode getChild(String key) {
9496
if (children != null)
9597
for (SocketIONode child : children)
96-
if (Objects.equals(name, child.name))
98+
if (Objects.equals(key, child.key))
9799
return child;
98100
return null;
99101
}
@@ -141,28 +143,34 @@ protected void removeAllChildren() {
141143

142144
@Override
143145
public int hashCode() {
144-
return name.hashCode();
146+
return key.hashCode();
145147
}
146148

147149
@Override
148150
public boolean equals(Object o) {
149151
if (!(o instanceof SocketIONode)) return false;
150-
return Objects.equals(name, ((SocketIONode)o).name);
152+
return Objects.equals(key, ((SocketIONode)o).key);
151153
}
152154

153155
@Override
154156
public String toString() {
155157
return name;
156158
}
159+
160+
private void setName(String newName) {
161+
if (name == null || newName.length() > name.length()) {
162+
name = newName;
163+
}
164+
}
157165

158166

159167
static final class Address extends SocketIONode {
160168

161169
private static final String IMAGE_PATH = "org/graalvm/visualvm/jfr/resources/host.png"; // NOI18N
162170
private static final Icon ICON = new ImageIcon(ImageUtilities.loadImage(IMAGE_PATH, true));
163171

164-
Address(String name, SocketIONode parent, boolean terminal) {
165-
super(name, ICON, parent, terminal ? null : new ArrayList());
172+
Address(String key, String name, SocketIONode parent, boolean terminal) {
173+
super(key, name, ICON, parent, terminal ? null : new ArrayList());
166174
}
167175

168176
}
@@ -173,7 +181,7 @@ static final class Port extends SocketIONode {
173181
private static final Icon ICON = new ImageIcon(ImageUtilities.loadImage(IMAGE_PATH, true));
174182

175183
Port(String name, SocketIONode parent, boolean terminal) {
176-
super(name, ICON, parent, terminal ? null : new ArrayList());
184+
super(name, name, ICON, parent, terminal ? null : new ArrayList());
177185
}
178186

179187
}
@@ -182,7 +190,7 @@ static final class Port extends SocketIONode {
182190
static final class Thread extends SocketIONode {
183191

184192
Thread(String name, SocketIONode parent, boolean terminal) {
185-
super(name, Icons.getIcon(ProfilerIcons.THREAD), parent, terminal ? null : new ArrayList());
193+
super(name, name, Icons.getIcon(ProfilerIcons.THREAD), parent, terminal ? null : new ArrayList());
186194
}
187195

188196
}
@@ -199,7 +207,7 @@ static final class Root extends SocketIONode implements JFREventVisitor {
199207
}
200208

201209
Root(SocketIOViewSupport.Aggregation primary, SocketIOViewSupport.Aggregation secondary) {
202-
super(null, null, null, primary == null && secondary == null ? null : new ArrayList());
210+
super(null, null, null, null, primary == null && secondary == null ? null : new ArrayList());
203211

204212
this.primary = primary;
205213
this.secondary = SocketIOViewSupport.Aggregation.NONE.equals(secondary) ? null : secondary;
@@ -214,40 +222,43 @@ public boolean visit(String typeName, JFREvent event) {
214222
else rw = null;
215223

216224
if (rw != null) {
225+
String primaryKey = getKey(primary, event);
217226
String primaryName = getName(primary, event);
218-
if (primaryName == null) primaryName = "<unknown>";
227+
if (primaryKey == null) primaryKey = UNKNOWN;
228+
if (primaryName == null) primaryName = UNKNOWN;
219229

220-
SocketIONode primaryNode = getChild(primaryName);
230+
SocketIONode primaryNode = getChild(primaryKey);
221231
if (primaryNode == null) {
222-
primaryNode = createNode(primaryName, primary, this, secondary == null);
232+
primaryNode = createNode(primaryKey, primaryName, primary, this, secondary == null);
223233
addChild(primaryNode);
224234
}
225235

226236
if (secondary != null) {
237+
String secondaryKey = getKey(secondary, event);
227238
String secondaryName = getName(secondary, event);
228-
if (secondaryName == null) secondaryName = "<unknown>";
229-
239+
if (secondaryKey == null) secondaryKey = UNKNOWN;
240+
if (secondaryName == null) secondaryName = UNKNOWN;
230241

231-
SocketIONode secondaryNode = primaryNode.getChild(secondaryName);
242+
SocketIONode secondaryNode = primaryNode.getChild(secondaryKey);
232243
if (secondaryNode == null) {
233-
secondaryNode = createNode(secondaryName, secondary, primaryNode, true);
244+
secondaryNode = createNode(secondaryKey, secondaryName, secondary, primaryNode, true);
234245
primaryNode.addChild(secondaryNode);
235246
}
236247

237-
processEvent(secondaryNode, event, rw);
248+
processEvent(secondaryNode, secondaryName, event, rw);
238249
} else {
239-
processEvent(primaryNode, event, rw);
250+
processEvent(primaryNode, primaryName, event, rw);
240251
}
241252
}
242253

243254
return false;
244255
}
245256

246-
247-
private static void processEvent(SocketIONode node, JFREvent event, Boolean rw) {
257+
private static void processEvent(SocketIONode node, String name, JFREvent event, Boolean rw) {
248258
try {
249-
if (Boolean.FALSE.equals(rw)) node.processRead(event.getDuration("eventDuration"), event.getLong("bytesRead")); // NOI18N
250-
else node.processWrite(event.getDuration("eventDuration"), event.getLong("bytesWritten")); // NOI18N
259+
node.setName(name);
260+
if (Boolean.FALSE.equals(rw)) node.processRead(getDuration(event), event.getLong("bytesRead")); // NOI18N
261+
else node.processWrite(getDuration(event), event.getLong("bytesWritten")); // NOI18N
251262
} catch (JFRPropertyNotAvailableException e) {
252263
System.err.println(">>> " + e);
253264
}
@@ -265,33 +276,56 @@ public boolean equals(Object o) {
265276
}
266277

267278

268-
private static String getName(SocketIOViewSupport.Aggregation aggregation, JFREvent event) {
279+
private static String getKey(SocketIOViewSupport.Aggregation aggregation, JFREvent event) {
269280
try {
270281
if (SocketIOViewSupport.Aggregation.ADDRESS.equals(aggregation)) {
271-
String address = event.getString("address"); // NOI18N
272-
String host = event.getString("host"); // NOI18N
273-
return host == null || host.trim().isEmpty() ? address : address + " (" + host + ")"; // NOI18N
282+
return getAddress(event); // NOI18N
274283
}
275284
if (SocketIOViewSupport.Aggregation.PORT.equals(aggregation)) return getPort(event);
276285
if (SocketIOViewSupport.Aggregation.ADDRESS_PORT.equals(aggregation)) {
277-
String address = event.getString("address"); // NOI18N
278-
String host = event.getString("host"); // NOI18N
279-
if (host != null && !host.trim().isEmpty()) address = address + " (" + host + ")"; // NOI18N
286+
String address = getAddress(event); // NOI18N
280287
return address + " : " + getPort(event); // NOI18N
281288
}
282289
if (SocketIOViewSupport.Aggregation.THREAD.equals(aggregation)) return event.getThread("eventThread").getName();
283290
} catch (JFRPropertyNotAvailableException e) {}
284291
return null;
285292
}
293+
294+
private static Duration getDuration(JFREvent event) throws JFRPropertyNotAvailableException {
295+
return event.getDuration("eventDuration");
296+
}
286297

298+
private static String getAddress(JFREvent event) throws JFRPropertyNotAvailableException {
299+
return event.getString("address");
300+
}
301+
302+
private static String getName(SocketIOViewSupport.Aggregation aggregation, JFREvent event) {
303+
try {
304+
if (SocketIOViewSupport.Aggregation.ADDRESS.equals(aggregation)) return getFullAddress(event);
305+
if (SocketIOViewSupport.Aggregation.PORT.equals(aggregation)) return getPort(event);
306+
if (SocketIOViewSupport.Aggregation.ADDRESS_PORT.equals(aggregation)) {
307+
return getFullAddress(event) + " : " + getPort(event); // NOI18N
308+
}
309+
if (SocketIOViewSupport.Aggregation.THREAD.equals(aggregation)) return event.getThread("eventThread").getName();
310+
} catch (JFRPropertyNotAvailableException e) {}
311+
return null;
312+
}
313+
287314
private static String getPort(JFREvent event) throws JFRPropertyNotAvailableException {
288-
return NumberFormat.getIntegerInstance().format(event.getInt("port")); // NOI18N
315+
return String.valueOf(event.getInt("port")); // NOI18N
316+
}
317+
318+
private static String getFullAddress(JFREvent event) throws JFRPropertyNotAvailableException {
319+
String address = getAddress(event); // NOI18N
320+
String host = event.getString("host"); // NOI18N
321+
if (host != null && !host.trim().isEmpty() && !host.equals(address)) address = address + " (" + host + ")"; // NOI18N
322+
return address;
289323
}
290324

291-
private SocketIONode createNode(String name, SocketIOViewSupport.Aggregation aggregation, SocketIONode parent, boolean terminal) {
292-
if (SocketIOViewSupport.Aggregation.ADDRESS.equals(aggregation)) return new SocketIONode.Address(name, parent, terminal);
325+
private SocketIONode createNode(String key, String name, SocketIOViewSupport.Aggregation aggregation, SocketIONode parent, boolean terminal) {
326+
if (SocketIOViewSupport.Aggregation.ADDRESS.equals(aggregation)) return new SocketIONode.Address(key, name, parent, terminal);
293327
if (SocketIOViewSupport.Aggregation.PORT.equals(aggregation)) return new SocketIONode.Port(name, parent, terminal);
294-
if (SocketIOViewSupport.Aggregation.ADDRESS_PORT.equals(aggregation)) return new SocketIONode.Address(name, parent, terminal);
328+
if (SocketIOViewSupport.Aggregation.ADDRESS_PORT.equals(aggregation)) return new SocketIONode.Address(key, name, parent, terminal);
295329
if (SocketIOViewSupport.Aggregation.THREAD.equals(aggregation)) return new SocketIONode.Thread(name, parent, terminal);
296330
return null;
297331
}

0 commit comments

Comments
 (0)