remove confusing type and dimensions labeling methods

This commit is contained in:
Jonathan Shook
2023-09-09 20:31:04 -05:00
parent 4294758c52
commit bf3e9636c0
21 changed files with 32 additions and 96 deletions

View File

@@ -51,7 +51,7 @@ public class AmqpAdapterMetrics {
public AmqpAdapterMetrics(final AmqpBaseOpDispenser amqpBaseOpDispenser, final NBLabeledElement labeledParent) { public AmqpAdapterMetrics(final AmqpBaseOpDispenser amqpBaseOpDispenser, final NBLabeledElement labeledParent) {
this.amqpBaseOpDispenser = amqpBaseOpDispenser; this.amqpBaseOpDispenser = amqpBaseOpDispenser;
labels=labeledParent.getLabels().andTypes("name", AmqpAdapterMetrics.class.getSimpleName()); labels=labeledParent.getLabels().and("name", AmqpAdapterMetrics.class.getSimpleName());
} }
public void initS4JAdapterInstrumentation() { public void initS4JAdapterInstrumentation() {

View File

@@ -71,13 +71,13 @@ public class NamingFolio {
* by name, type, table, keyspace. For now it just returns everything in fully qualified form. * by name, type, table, keyspace. For now it just returns everything in fully qualified form.
*/ */
public String nameFor(NBLabeledElement labeled, String... fields) { public String nameFor(NBLabeledElement labeled, String... fields) {
NBLabels labelsPlus = labeled.getLabels().andTypes(fields); NBLabels labelsPlus = labeled.getLabels().and(fields);
String name = namer.apply(labelsPlus.asMap()); String name = namer.apply(labelsPlus.asMap());
return name; return name;
} }
public String nameFor(NBLabeledElement labeled, Map<String,String> fields) { public String nameFor(NBLabeledElement labeled, Map<String,String> fields) {
NBLabels labelsPlus = labeled.getLabels().andTypes(fields); NBLabels labelsPlus = labeled.getLabels().and(fields);
String name = namer.apply(labelsPlus.asMap()); String name = namer.apply(labelsPlus.asMap());
return name; return name;

View File

@@ -42,6 +42,6 @@ public class CqlTableColumn extends CqlColumnBase {
@Override @Override
public NBLabels getLabels() { public NBLabels getLabels() {
return super.getLabels().andTypes("table", table.getName()); return super.getLabels().and("table", table.getName());
} }
} }

View File

@@ -42,6 +42,6 @@ public class CqlTypeColumn extends CqlColumnBase {
@Override @Override
public NBLabels getLabels() { public NBLabels getLabels() {
return super.getLabels().andTypes("name", this.type.getName()); return super.getLabels().and("name", this.type.getName());
} }
} }

View File

@@ -171,6 +171,6 @@ public class DiagTask_gauge extends BaseDiagTask implements Gauge<Double> {
@Override @Override
public NBLabels getLabels() { public NBLabels getLabels() {
return super.getLabels().andTypes("stat",this.stat.toString()); return super.getLabels().and("stat",this.stat.toString());
} }
} }

View File

@@ -51,7 +51,7 @@ public class KafkaAdapterMetrics {
public KafkaAdapterMetrics(final KafkaBaseOpDispenser kafkaBaseOpDispenser, final NBLabeledElement labeledParent) { public KafkaAdapterMetrics(final KafkaBaseOpDispenser kafkaBaseOpDispenser, final NBLabeledElement labeledParent) {
this.kafkaBaseOpDispenser = kafkaBaseOpDispenser; this.kafkaBaseOpDispenser = kafkaBaseOpDispenser;
labels=labeledParent.getLabels().andTypes("name",KafkaAdapterMetrics.class.getSimpleName()); labels=labeledParent.getLabels().and("name",KafkaAdapterMetrics.class.getSimpleName());
} }
public void initS4JAdapterInstrumentation() { public void initS4JAdapterInstrumentation() {

View File

@@ -354,7 +354,7 @@ public class ParsedOp implements LongFunction<Map<String, ?>>, NBLabeledElement,
activityCfg.getMap()) activityCfg.getMap())
); );
NBLabels opLabels = parent.getLabels().andTypes("op", this.getName()); NBLabels opLabels = parent.getLabels().and("op", this.getName());
if (tmap.isStatic("labels")) { if (tmap.isStatic("labels")) {
Object labelSpecObject = tmap.takeStaticValue("labels", Object.class); Object labelSpecObject = tmap.takeStaticValue("labels", Object.class);
if (labelSpecObject instanceof String labelsSpec) { if (labelSpecObject instanceof String labelsSpec) {

View File

@@ -95,7 +95,7 @@ public class SimpleActivity implements Activity {
public SimpleActivity(ActivityDef activityDef, NBLabeledElement parentLabels) { public SimpleActivity(ActivityDef activityDef, NBLabeledElement parentLabels) {
NBLabels activityLabels = parentLabels.getLabels() NBLabels activityLabels = parentLabels.getLabels()
.andTypes("activity", activityDef.getAlias()); .and("activity", activityDef.getAlias());
Optional<String> auxLabelSpec = activityDef.getParams().getOptionalString("labels"); Optional<String> auxLabelSpec = activityDef.getParams().getOptionalString("labels");
if (auxLabelSpec.isPresent()) { if (auxLabelSpec.isPresent()) {
activityLabels = activityLabels.and(NBLabelSpec.parseLabels(auxLabelSpec.get())); activityLabels = activityLabels.and(NBLabelSpec.parseLabels(auxLabelSpec.get()));

View File

@@ -161,7 +161,7 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
this.sessionCode = SystemId.genSessionCode(sessionTime); this.sessionCode = SystemId.genSessionCode(sessionTime);
this.sessionName = SessionNamer.format(globalOptions.getSessionName(),sessionTime).replaceAll("SESSIONCODE",sessionCode); this.sessionName = SessionNamer.format(globalOptions.getSessionName(),sessionTime).replaceAll("SESSIONCODE",sessionCode);
this.labels = NBLabels.forKV("appname", "nosqlbench") this.labels = NBLabels.forKV("appname", "nosqlbench")
.andInstances("node",SystemId.getNodeId()) .and("node",SystemId.getNodeId())
.and(globalOptions.getLabelMap()); .and(globalOptions.getLabelMap());
NBCLI.loggerConfig NBCLI.loggerConfig

View File

@@ -59,10 +59,10 @@ public class GrafanaMetricsAnnotator implements Annotator, NBConfigurable {
ga.setTime(annotation.getStart()); ga.setTime(annotation.getStart());
ga.setTimeEnd(annotation.getEnd()); ga.setTimeEnd(annotation.getEnd());
annotation.getLabels().onlyTypes().asMap().forEach((k, v) -> { annotation.getLabels().asMap().forEach((k, v) -> {
ga.getTags().add(k + ":" + v); ga.getTags().add(k + ":" + v);
}); });
annotation.getLabels().onlyInstances().asMap().forEach((k,v)->{ annotation.getLabels().asMap().forEach((k,v)->{
ga.addText(" " + k + ":" + v); ga.addText(" " + k + ":" + v);
}); });
ga.getTags().add("layer:" + annotation.getLayer().toString()); ga.getTags().add("layer:" + annotation.getLayer().toString());

View File

@@ -82,7 +82,7 @@ public class Scenario implements Callable<ExecutionMetricsResult>, NBLabeledElem
@Override @Override
public NBLabels getLabels() { public NBLabels getLabels() {
return this.parentComponent.getLabels().andTypes("scenario", this.scenarioName); return this.parentComponent.getLabels().and("scenario", this.scenarioName);
} }
public enum State { public enum State {

View File

@@ -24,7 +24,7 @@ import java.util.Map;
public class AveragePrecision extends BaseRelevancyFunction { public class AveragePrecision extends BaseRelevancyFunction {
private final int k; private final int k;
public AveragePrecision(String name, int k, Map<String,String> labels) { public AveragePrecision(String name, int k, Map<String,String> labels) {
super(name, NBLabels.forKV("k",labels).andTypes(labels)); super(name, NBLabels.forKV("k",labels).and(labels));
this.k = k; this.k = k;
} }
public AveragePrecision(String name, int k, Object... labels) { public AveragePrecision(String name, int k, Object... labels) {

View File

@@ -25,7 +25,7 @@ public class F1 extends BaseRelevancyFunction {
private final int k; private final int k;
public F1(String name, int k, Map<String,String> labels) { public F1(String name, int k, Map<String,String> labels) {
super(name, NBLabels.forKV("k",labels).andTypes(labels)); super(name, NBLabels.forKV("k",labels).and(labels));
this.k = k; this.k = k;
} }
public F1(String name, int k, Object... labels) { public F1(String name, int k, Object... labels) {

View File

@@ -25,7 +25,7 @@ public class Precision extends BaseRelevancyFunction {
private final int k; private final int k;
public Precision(String name, int k, Map<String,String> labels) { public Precision(String name, int k, Map<String,String> labels) {
super(name,NBLabels.forKV("k",labels).andTypes(labels)); super(name,NBLabels.forKV("k",labels).and(labels));
this.k = k; this.k = k;
} }
public Precision(String name, int k, Object... labels) { public Precision(String name, int k, Object... labels) {

View File

@@ -29,7 +29,7 @@ public class Recall extends BaseRelevancyFunction {
this.k = k; this.k = k;
} }
public Recall(String name, int k, Map<String,String> labels) { public Recall(String name, int k, Map<String,String> labels) {
super(name, NBLabels.forKV("k",labels).andTypes(labels)); super(name, NBLabels.forKV("k",labels).and(labels));
this.k = k; this.k = k;
} }

View File

@@ -25,7 +25,7 @@ public class ReciprocalRank extends BaseRelevancyFunction {
private final int k; private final int k;
public ReciprocalRank(String name, int k, Map<String,String> labels) { public ReciprocalRank(String name, int k, Map<String,String> labels) {
super(name, NBLabels.forKV("k",labels).andTypes(labels)); super(name, NBLabels.forKV("k",labels).and(labels));
this.k = k; this.k = k;
} }
public ReciprocalRank(String name, int k, Object... labels) { public ReciprocalRank(String name, int k, Object... labels) {

View File

@@ -24,17 +24,15 @@ import java.util.regex.Pattern;
public class MapLabels implements NBLabels { public class MapLabels implements NBLabels {
private final Map<String,String> labels; private final Map<String,String> labels;
private String[] instanceFields = new String[0];
public MapLabels(final Map<String, String> labels, String... instanceFields) { public MapLabels(final Map<String, String> labels, String... instanceFields) {
verifyValidNamesAndValues(labels); verifyValidNamesAndValues(labels);
// verifyValidValues(labels); // verifyValidValues(labels);
this.labels = Collections.unmodifiableMap(labels); this.labels = Collections.unmodifiableMap(labels);
this.instanceFields = instanceFields;
} }
public MapLabels(final Map<String,String> parentLabels, final Map<String,String> childLabels, String... instanceFields) { public MapLabels(final Map<String,String> parentLabels, final Map<String,String> childLabels) {
final Map<String, String> combined = new LinkedHashMap<>(parentLabels); final Map<String, String> combined = new LinkedHashMap<>(parentLabels);
childLabels.forEach((k,v) -> { childLabels.forEach((k,v) -> {
if (combined.containsKey(k)) if (combined.containsKey(k))
@@ -43,7 +41,6 @@ public class MapLabels implements NBLabels {
}); });
verifyValidNamesAndValues(combined); verifyValidNamesAndValues(combined);
// verifyValidValues(combined); // verifyValidValues(combined);
this.instanceFields = instanceFields;
labels=Collections.unmodifiableMap(combined); labels=Collections.unmodifiableMap(combined);
} }
@@ -124,27 +121,14 @@ public class MapLabels implements NBLabels {
} }
@Override @Override
public MapLabels andTypes(final Object... labelsAndValues) { public MapLabels and(final Object... labelsAndValues) {
final Map<String,String> childLabels = getStringStringMap(labelsAndValues); final Map<String,String> childLabels = getStringStringMap(labelsAndValues);
return new MapLabels(labels,childLabels); return new MapLabels(labels,childLabels);
} }
@Override @Override
public MapLabels and(NBLabels labels) { public MapLabels and(NBLabels labels) {
return new MapLabels(this.labels,labels.asMap(), concat(this.instanceFields,labels.getInstanceFields())); return new MapLabels(this.labels,labels.asMap());
}
@Override
public MapLabels andInstances(final Object... labelsAndValues) {
final Map<String,String> childLabels = getStringStringMap(labelsAndValues);
String[] childInstanceFields = getNamesArray(labelsAndValues);
return new MapLabels(this.labels,childLabels,concat(this.instanceFields,getNamesArray(labelsAndValues)));
}
@Override
public MapLabels andInstances(Map<String, String> instanceLabelsAndValues) {
return new MapLabels(this.labels,instanceLabelsAndValues,instanceLabelsAndValues.keySet().toArray(new String[0]));
} }
@Override @Override
public NBLabels modifyName(final String nameToModify, final Function<String, String> transform) { public NBLabels modifyName(final String nameToModify, final Function<String, String> transform) {
@@ -194,30 +178,7 @@ public class MapLabels implements NBLabels {
} }
@Override @Override
public NBLabels onlyTypes() { public NBLabels and(final Map<String, String> moreLabels) {
Map<String,String> typesOnlyMap = new LinkedHashMap<>(this.labels);
for (String instanceField : this.instanceFields) {
typesOnlyMap.remove(instanceField);
}
return new MapLabels(typesOnlyMap);
}
@Override
public NBLabels onlyInstances() {
Map<String,String> instancesOnlyMap = new LinkedHashMap<>();
for (String instanceField : this.instanceFields) {
instancesOnlyMap.put(instanceField,this.labels.get(instanceField));
}
return new MapLabels(instancesOnlyMap);
}
@Override
public String[] getInstanceFields() {
return instanceFields;
}
@Override
public NBLabels andTypes(final Map<String, String> moreLabels) {
return new MapLabels(this.labels, moreLabels); return new MapLabels(this.labels, moreLabels);
} }

View File

@@ -142,7 +142,7 @@ public interface NBLabels {
* Keys and values in "key1", "value1", "key2", "value2", ... form * Keys and values in "key1", "value1", "key2", "value2", ... form
* @return A new NBLabels instance * @return A new NBLabels instance
*/ */
NBLabels andTypes(Object... typeLabelsAndValues); NBLabels and(Object... typeLabelsAndValues);
NBLabels and(NBLabels labels); NBLabels and(NBLabels labels);
/** /**
@@ -150,10 +150,7 @@ public interface NBLabels {
* @param typeLabelsAndValues a map of keys and values * @param typeLabelsAndValues a map of keys and values
* @return A new NBLabels instance * @return A new NBLabels instance
*/ */
NBLabels andTypes(Map<String, String> typeLabelsAndValues); NBLabels and(Map<String, String> typeLabelsAndValues);
NBLabels andInstances(Object... instanceLabelsAndValues);
NBLabels andInstances(Map<String,String> instanceLabelsAndValues);
/** /**
* Return the value of the specified label key. * Return the value of the specified label key.
@@ -176,9 +173,5 @@ public interface NBLabels {
/** /**
* @return a new set of labels which includes only those which are not using per-instance semantics. * @return a new set of labels which includes only those which are not using per-instance semantics.
*/ */
NBLabels onlyTypes();
NBLabels onlyInstances();
String[] getInstanceFields();
} }

View File

@@ -106,7 +106,7 @@ public class ActivityMetrics {
* @return the timer, perhaps a different one if it has already been registered * @return the timer, perhaps a different one if it has already been registered
*/ */
public static Timer timer(NBLabeledElement parent, String metricFamilyName, int hdrdigits) { public static Timer timer(NBLabeledElement parent, String metricFamilyName, int hdrdigits) {
final NBLabels labels = parent.getLabels().andTypes("name",sanitize(metricFamilyName)); final NBLabels labels = parent.getLabels().and("name",sanitize(metricFamilyName));
Timer registeredTimer = (Timer) register(labels, () -> Timer registeredTimer = (Timer) register(labels, () ->
@@ -135,7 +135,7 @@ public class ActivityMetrics {
* @return the histogram, perhaps a different one if it has already been registered * @return the histogram, perhaps a different one if it has already been registered
*/ */
public static Histogram histogram(NBLabeledElement labeled, String metricFamilyName, int hdrdigits) { public static Histogram histogram(NBLabeledElement labeled, String metricFamilyName, int hdrdigits) {
final NBLabels labels = labeled.getLabels().andTypes("name", sanitize(metricFamilyName)); final NBLabels labels = labeled.getLabels().and("name", sanitize(metricFamilyName));
return (Histogram) register(labels, () -> return (Histogram) register(labels, () ->
new NBMetricHistogram( new NBMetricHistogram(
labels, labels,
@@ -158,7 +158,7 @@ public class ActivityMetrics {
* @return the counter, perhaps a different one if it has already been registered * @return the counter, perhaps a different one if it has already been registered
*/ */
public static Counter counter(NBLabeledElement parent, String metricFamilyName) { public static Counter counter(NBLabeledElement parent, String metricFamilyName) {
final NBLabels labels = parent.getLabels().andTypes("name",metricFamilyName); final NBLabels labels = parent.getLabels().and("name",metricFamilyName);
return (Counter) register(labels, () -> new NBMetricCounter(labels)); return (Counter) register(labels, () -> new NBMetricCounter(labels));
} }
@@ -174,7 +174,7 @@ public class ActivityMetrics {
* @return the meter, perhaps a different one if it has already been registered * @return the meter, perhaps a different one if it has already been registered
*/ */
public static Meter meter(NBLabeledElement parent, String metricFamilyName) { public static Meter meter(NBLabeledElement parent, String metricFamilyName) {
final NBLabels labels = parent.getLabels().andTypes("name",sanitize(metricFamilyName)); final NBLabels labels = parent.getLabels().and("name",sanitize(metricFamilyName));
return (Meter) register(labels, () -> new NBMetricMeter(labels)); return (Meter) register(labels, () -> new NBMetricMeter(labels));
} }
@@ -204,7 +204,7 @@ public class ActivityMetrics {
DoubleSummaryGauge anyGauge = null; DoubleSummaryGauge anyGauge = null;
for (DoubleSummaryGauge.Stat statName: DoubleSummaryGauge.Stat.values()){ for (DoubleSummaryGauge.Stat statName: DoubleSummaryGauge.Stat.values()){
final NBLabels labels = parent.getLabels() final NBLabels labels = parent.getLabels()
.andTypes("name",sanitize(metricFamilyName)) .and("name",sanitize(metricFamilyName))
.modifyValue("name", n -> n+"_"+statName.name().toLowerCase()); .modifyValue("name", n -> n+"_"+statName.name().toLowerCase());
anyGauge= (DoubleSummaryGauge) register(labels, () -> new DoubleSummaryGauge(labels,statName,stats)); anyGauge= (DoubleSummaryGauge) register(labels, () -> new DoubleSummaryGauge(labels,statName,stats));
} }
@@ -213,7 +213,7 @@ public class ActivityMetrics {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static <T> Gauge<T> gauge(NBLabeledElement parent, String metricFamilyName, Gauge<T> gauge) { public static <T> Gauge<T> gauge(NBLabeledElement parent, String metricFamilyName, Gauge<T> gauge) {
final NBLabels labels = parent.getLabels().andTypes("name",sanitize(metricFamilyName)); final NBLabels labels = parent.getLabels().and("name",sanitize(metricFamilyName));
return (Gauge<T>) register(labels, () -> new NBMetricGaugeWrapper<>(labels,gauge)); return (Gauge<T>) register(labels, () -> new NBMetricGaugeWrapper<>(labels,gauge));
} }

View File

@@ -85,13 +85,13 @@ public class PromExpositionFormat {
for (final double quantile : new double[]{0.5, 0.75, 0.90, 0.95, 0.98, 0.99, 0.999}) { for (final double quantile : new double[]{0.5, 0.75, 0.90, 0.95, 0.98, 0.99, 0.999}) {
final double value = snapshot.getValue(quantile); final double value = snapshot.getValue(quantile);
buffer buffer
.append(labels.modifyValue("name",n -> n+"_bucket").andTypes("le", String.valueOf(quantile)).linearize("name")) .append(labels.modifyValue("name",n -> n+"_bucket").and("le", String.valueOf(quantile)).linearize("name"))
// .append(labels.andTypes("quantile", String.valueOf(quantile)).linearize("name")) // .append(labels.andTypes("quantile", String.valueOf(quantile)).linearize("name"))
.append(' ') .append(' ')
.append(value) .append(value)
.append('\n'); .append('\n');
} }
buffer.append(labels.modifyValue("name",n->n+"_bucket").andTypes("le","+Inf").linearize("name")) buffer.append(labels.modifyValue("name",n->n+"_bucket").and("le","+Inf").linearize("name"))
.append(' ') .append(' ')
.append(snapshot.getMax()) .append(snapshot.getMax())
.append('\n'); .append('\n');

View File

@@ -32,24 +32,6 @@ public class MapLabelsTest {
assertThat(result).isEqualTo("value_a_value_c"); assertThat(result).isEqualTo("value_a_value_c");
} }
@Test
public void testInstances() {
final MapLabels l1 = new MapLabels(Map.of("key_a", "value_a", "key_c", "value_c"),"key_c");
NBLabels typesOnly = l1.onlyTypes();
assertThat(typesOnly.linearizeValues()).isEqualTo("value_a");
}
@Test
public void testInstanceCombination() {
final MapLabels l1 = new MapLabels(Map.of("key_a", "value_a"),Map.of("key_c", "value_c"),"key_c");
final MapLabels l2 = new MapLabels(Map.of("key_dog", "value_dog"),Map.of( "key_cat", "value_cat"),"key_dog");
final MapLabels l3 = l1.and(l2);
assertThat(l3.linearizeValues()).matches("value_a.value_c.value_dog.value_cat");
assertThat(l3.onlyTypes().linearizeValues()).matches("value_a.value_cat");
assertThat(l3.onlyInstances().linearizeValues()).matches("value_c.value_dog");
}
@Test @Test
public void testInvalidCharacters() { public void testInvalidCharacters() {