package io.pcp.parfait.dxm; import java.util.regex.Matcher; import java.util.regex.Pattern; public final class MetricName { private static final String IDENTIFIER_SECTION = "[\\p{Alnum}_/]+"; private static final String VALID_METRIC_NAME = "\\A((_ID_)(\\._ID_)*)(\\[(_ID_)\\])?((\\._ID_)*)\\z" .replace("_ID_", IDENTIFIER_SECTION); private static final Pattern METRIC_PATTERN = Pattern.compile(VALID_METRIC_NAME); private static final int METRIC_PREFIX_INDEX = 1; private static final int METRIC_INSTANCE_INDEX = 5; private static final int METRIC_SUFFIX_INDEX = 6; private final String prefix; private final String suffix; private final String instance; private MetricName(String prefix, String suffix, String instance) { this.prefix = prefix; this.suffix = suffix; this.instance = instance; } public String getMetric() { return prefix + suffix; } String getInstance() { return instance; } public String getInstanceDomainTag() { return prefix; } boolean hasInstance() { return instance != null; } public static MetricName parse(String metric) { Matcher m = METRIC_PATTERN.matcher(metric); if (!m.matches()) { throw new IllegalArgumentException(String.format("invalid metric name '%s'", metric)); } return new MetricName(m.group(METRIC_PREFIX_INDEX), m.group(METRIC_SUFFIX_INDEX), m .group(METRIC_INSTANCE_INDEX)); } @Override public int hashCode() { final int prime = 191; int result = 1; result = prime * result + ((instance == null) ? 0 : instance.hashCode()); result = prime * result + ((prefix == null) ? 0 : prefix.hashCode()); result = prime * result + ((suffix == null) ? 0 : suffix.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null || getClass() != obj.getClass()) { return false; } MetricName other = (MetricName) obj; if (instance == null) { if (other.instance != null) { return false; } } else if (!instance.equals(other.instance)) { return false; } return prefix.equals(other.prefix) && suffix.equals(other.suffix); } @Override public String toString() { return (instance == null) ? prefix + suffix : prefix + "[" + instance + "]" + suffix; } }