Skip to content

Commit

Permalink
Merge pull request #2913 from jGauravGupta/PAYARA-2863
Browse files Browse the repository at this point in the history
PAYARA-2863 Metrics endpoint displays internal error in case an invalid metric is defined
  • Loading branch information
MattGill98 committed Jul 5, 2018
2 parents 5443643 + 9ccab52 commit fe476b4
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 11 deletions.
Expand Up @@ -43,6 +43,8 @@
import java.lang.management.ManagementFactory;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
Expand All @@ -61,6 +63,8 @@ public class MBeanExpression {

private final MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();

private static final Logger LOGGER = Logger.getLogger(MBeanExpression.class.getName());

public MBeanExpression(String expression) {
if (expression == null || expression.trim().isEmpty()) {
throw new IllegalArgumentException("MBean Expression is null");
Expand Down Expand Up @@ -124,7 +128,8 @@ public Number getNumberValue() {
throw new IllegalArgumentException(getMbean());
}
} catch (Exception ex) {
throw new RuntimeException(ex);
LOGGER.log(Level.WARNING, ex.getMessage());
throw new IllegalStateException(ex);
}
}

Expand Down
Expand Up @@ -115,6 +115,10 @@ public void resolveDynamicMetadata(List<MBeanMetadata> metadataList) {
List<MBeanMetadata> resolvedMetadataList = new ArrayList<>();
List<Metadata> removedMetadataList = new ArrayList<>(metadataList.size());
for (MBeanMetadata metadata : metadataList) {
if (!validateMetadata(metadata)) {
removedMetadataList.add(metadata);
continue;
}
if (metadata.getName().contains(SPECIFIER)) {
MBeanExpression mBeanExpression;
try {
Expand All @@ -126,24 +130,26 @@ public void resolveDynamicMetadata(List<MBeanMetadata> metadataList) {
}
for (ObjectName objName : mBeanObjects) {
String dynamicValue = objName.getKeyPropertyList().get(dynamicKey);

StringBuilder builder = new StringBuilder();
builder.append(objName.getCanonicalName());
builder.append("/");
builder.append(mBeanExpression.getAttributeName());
String subAttrName = mBeanExpression.getSubAttributeName();
if (subAttrName != null){
if (subAttrName != null) {
builder.append("#");
builder.append(subAttrName);
}

resolvedMetadataList.add(new MBeanMetadata(
builder.toString(),
metadata.getName().replace(SPECIFIER, dynamicValue),
metadata.getDisplayName().replace(SPECIFIER, dynamicValue),
metadata.getDescription().replace(SPECIFIER, dynamicValue),
metadata.getTypeRaw(),
metadata.getUnit())

resolvedMetadataList.add(
new MBeanMetadata(
builder.toString(),
metadata.getName().replace(SPECIFIER, dynamicValue),
metadata.getDisplayName().replace(SPECIFIER, dynamicValue),
metadata.getDescription().replace(SPECIFIER, dynamicValue),
metadata.getTypeRaw(),
metadata.getUnit()
)
);
}
} catch (IllegalArgumentException ex) {
Expand All @@ -153,8 +159,40 @@ public void resolveDynamicMetadata(List<MBeanMetadata> metadataList) {
}
}
}

metadataList.removeAll(removedMetadataList);
metadataList.addAll(resolvedMetadataList);
}

private boolean validateMetadata(MBeanMetadata metadata) {
boolean valid = true;

if (metadata.getName() == null) {
LOGGER.log(Level.WARNING, "'name' property not defined in {0} mbean metadata", metadata.getMBean());
valid = false;
}
if (metadata.getMBean() == null) {
LOGGER.log(Level.WARNING, "'mbean' property not defined in {0} metadata", metadata.getName());
valid = false;
}
if (metadata.getDisplayName() == null) {
LOGGER.log(Level.WARNING, "'displayName' property not defined in {0} metadata", metadata.getName());
valid = false;
}
if (metadata.getDescription() == null) {
LOGGER.log(Level.WARNING, "'description' property not defined in {0} metadata", metadata.getName());
valid = false;
}
if (metadata.getType() == null) {
LOGGER.log(Level.WARNING, "'type' property not defined in {0} metadata", metadata.getName());
valid = false;
}
if (metadata.getUnit() == null) {
LOGGER.log(Level.WARNING, "'unit' property not defined for {0} metadata", metadata.getName());
valid = false;
}

return valid;
}

}

0 comments on commit fe476b4

Please sign in to comment.