JMX printvar improvements

This commit is contained in:
Jonathan Shook 2020-07-15 11:44:38 -05:00
parent 532c385497
commit 974ee6569d
5 changed files with 67 additions and 20 deletions

View File

@ -1,6 +1,7 @@
package io.nosqlbench.driver.jmx; package io.nosqlbench.driver.jmx;
import io.nosqlbench.driver.jmx.ops.JMXExplainOperation; import io.nosqlbench.driver.jmx.ops.JMXExplainOperation;
import io.nosqlbench.driver.jmx.ops.JMXPrintOperation;
import io.nosqlbench.driver.jmx.ops.JMXReadOperation; import io.nosqlbench.driver.jmx.ops.JMXReadOperation;
import io.nosqlbench.driver.jmx.ops.JmxOp; import io.nosqlbench.driver.jmx.ops.JmxOp;
import io.nosqlbench.engine.api.templating.CommandTemplate; import io.nosqlbench.engine.api.templating.CommandTemplate;
@ -42,9 +43,11 @@ public class ReadyJmxOp {
e.printStackTrace(); e.printStackTrace();
} }
if (cmdmap.containsKey("readvar")) { if (cmdmap.containsKey(JMXReadOperation.READVAR)) {
return new JMXReadOperation(connector, objectName, cmdmap.get("readvar"), cmdmap.get("as_type"),cmdmap.get("as_name")); return new JMXReadOperation(connector, objectName, cmdmap.get(JMXReadOperation.READVAR), cmdmap);
} else if (cmdmap.containsKey("explain")) { } else if (cmdmap.containsKey(JMXPrintOperation.PRINTVAR)) {
return new JMXPrintOperation(connector,objectName, cmdmap.get(JMXPrintOperation.PRINTVAR), cmdmap);
} else if (cmdmap.containsKey(JMXExplainOperation.EXPLAIN)) {
return new JMXExplainOperation(connector,objectName); return new JMXExplainOperation(connector,objectName);
} }

View File

@ -7,6 +7,8 @@ import javax.management.remote.JMXConnector;
import java.io.IOException; import java.io.IOException;
public class JMXExplainOperation extends JmxOp { public class JMXExplainOperation extends JmxOp {
public final static String EXPLAIN = "explain";
public JMXExplainOperation(JMXConnector connector, ObjectName objectName) { public JMXExplainOperation(JMXConnector connector, ObjectName objectName) {
super(connector,objectName); super(connector,objectName);
} }

View File

@ -0,0 +1,32 @@
package io.nosqlbench.driver.jmx.ops;
import io.nosqlbench.driver.jmx.ValueConverter;
import io.nosqlbench.virtdata.library.basics.core.threadstate.SharedState;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import java.util.Map;
public class JMXPrintOperation extends JMXReadOperation {
public static final String PRINTVAR = "printvar";
public JMXPrintOperation(JMXConnector connector, ObjectName objectName, String attribute, Map<String, String> cfg) {
super(connector, objectName, attribute, cfg);
}
@Override
public void execute() {
Object value = readObject(attribute);
System.out.println("# read JMX attribute '" + attribute + "' as " + value.getClass() +
((asType != null) ? " as_type=" + asType : "") +
((asName != null) ? " as_name=" + asName : ""));
if (asType != null) {
value = ValueConverter.convert(asType, value);
}
String storedName = (asName == null) ? attribute : asName;
System.out.println(storedName + "=" + value + "\n");
}
}

View File

@ -8,35 +8,35 @@ import javax.management.*;
import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnector;
import javax.management.remote.JMXServiceURL; import javax.management.remote.JMXServiceURL;
import java.io.IOException; import java.io.IOException;
import java.util.Map;
public class JMXReadOperation extends JmxOp { public class JMXReadOperation extends JmxOp {
private final String attribute; public final static String READVAR = "readvar";
private final String asType; public final static String AS_TYPE = "as_type";
private final String asName; public final static String AS_NAME = "as_name";
public JMXReadOperation(JMXConnector connector, ObjectName objectName, String attribute, String asType, String asName) { protected final String attribute;
protected final String asType;
protected final String asName;
public JMXReadOperation(JMXConnector connector, ObjectName objectName, String attribute, Map<String, String> cfg) {
super(connector, objectName); super(connector, objectName);
this.attribute = attribute; this.attribute = attribute;
this.asType = asType; this.asType = cfg.remove(AS_TYPE);
this.asName = asName; this.asName = cfg.remove(AS_NAME);
} }
@Override @Override
public void execute() { public void execute() {
try { Object value = readObject(attribute);
Object value = getMBeanConnection().getAttribute(objectName, this.attribute);
logger.trace("read attribute '" + value +"': " + value);
if (asType!=null) { if (asType != null) {
value = ValueConverter.convert(asType,value); value = ValueConverter.convert(asType, value);
}
String storedName = (asName==null) ? attribute : asName;
SharedState.tl_ObjectMap.get().put(storedName,value);
} catch (Exception e) {
throw new RuntimeException(e);
} }
String storedName = (asName == null) ? attribute : asName;
SharedState.tl_ObjectMap.get().put(storedName, value);
} }
} }

View File

@ -32,5 +32,15 @@ public abstract class JmxOp {
} }
} }
protected Object readObject(String attributeName) {
try {
Object value = getMBeanConnection().getAttribute(objectName, attributeName);
logger.trace("read attribute '" + value + "': " + value);
return value;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public abstract void execute(); public abstract void execute();
} }