aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java19
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/Metric.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/MetricSet.java6
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/MetricsConsumer.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/Metrics.java27
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/PredefinedMetricSets.java29
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/xml/MetricsBuilder.java55
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java11
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java2
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java2
10 files changed, 143 insertions, 12 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java
index a4275879c93..2b60b4d12e7 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java
@@ -12,6 +12,7 @@ import com.yahoo.config.provision.Zone;
import com.yahoo.vespa.model.*;
import com.yahoo.vespa.model.admin.monitoring.MetricsConsumer;
import com.yahoo.vespa.model.admin.monitoring.Yamas;
+import com.yahoo.vespa.model.admin.monitoring.builder.Metrics;
import com.yahoo.vespa.model.container.ContainerCluster;
import com.yahoo.vespa.model.filedistribution.FileDistributionConfigProducer;
import com.yahoo.vespa.model.filedistribution.FileDistributor;
@@ -36,7 +37,8 @@ public class Admin extends AbstractConfigProducer implements Serializable {
private static final long serialVersionUID = 1L;
private final Yamas yamas;
- private final Map<String, MetricsConsumer> metricsConsumers;
+ private final Metrics metrics;
+ private final Map<String, MetricsConsumer> legacyMetricsConsumers;
private final List<Configserver> configservers = new ArrayList<>();
private final List<Slobrok> slobroks = new ArrayList<>();
@@ -53,10 +55,15 @@ public class Admin extends AbstractConfigProducer implements Serializable {
private FileDistributionConfigProducer fileDistribution;
private final boolean multitenant;
- public Admin(AbstractConfigProducer parent, Yamas yamas, Map<String, MetricsConsumer> metricsConsumers, boolean multitenant) {
+ public Admin(AbstractConfigProducer parent,
+ Yamas yamas,
+ Metrics metrics,
+ Map<String, MetricsConsumer> legacyMetricsConsumers,
+ boolean multitenant) {
super(parent, "admin");
this.yamas = yamas;
- this.metricsConsumers = metricsConsumers;
+ this.metrics = metrics;
+ this.legacyMetricsConsumers = legacyMetricsConsumers;
this.multitenant = multitenant;
}
@@ -69,9 +76,11 @@ public class Admin extends AbstractConfigProducer implements Serializable {
return yamas;
}
+ public Metrics getUserMetrics() { return metrics; }
+
/** Returns the configured userMetricConsumers. Null if not configured */
- public Map<String, MetricsConsumer> getUserMetricsConsumers(){
- return metricsConsumers;
+ public Map<String, MetricsConsumer> getLegacyUserMetricsConsumers(){
+ return legacyMetricsConsumers;
}
/** Returns a list of all config servers */
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/Metric.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/Metric.java
index 14997ed5872..3a48b51b640 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/Metric.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/Metric.java
@@ -1,6 +1,7 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.admin.monitoring;
+import javax.annotation.concurrent.Immutable;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
@@ -12,6 +13,7 @@ import java.util.Map;
* @author trygve
* @author gjoranv
*/
+@Immutable
public class Metric {
public final String name;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/MetricSet.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/MetricSet.java
index 5e498ee207a..ad1cb4ab5ae 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/MetricSet.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/MetricSet.java
@@ -1,6 +1,7 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.admin.monitoring;
+import javax.annotation.concurrent.Immutable;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
@@ -16,6 +17,7 @@ import static java.util.Collections.unmodifiableMap;
*
* @author gjoranv
*/
+@Immutable
public class MetricSet {
private final String id;
@@ -84,9 +86,7 @@ public class MetricSet {
private Map<String, Metric> toMapByName(Collection<Metric> metrics) {
Map<String, Metric> metricMap = new LinkedHashMap<>();
- for (Metric metric : metrics) {
- metricMap.put(metric.name, metric);
- }
+ metrics.forEach(metric -> metricMap.put(metric.name, metric));
return metricMap;
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/MetricsConsumer.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/MetricsConsumer.java
index d71f3d18e28..250a84c55c7 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/MetricsConsumer.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/MetricsConsumer.java
@@ -1,6 +1,7 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.admin.monitoring;
+import javax.annotation.concurrent.Immutable;
import java.util.Map;
/**
@@ -8,6 +9,7 @@ import java.util.Map;
*
* @author trygve
*/
+@Immutable
public class MetricsConsumer {
private final String id;
private final MetricSet metricSet;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/Metrics.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/Metrics.java
new file mode 100644
index 00000000000..b6b0dedc6b1
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/Metrics.java
@@ -0,0 +1,27 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.model.admin.monitoring.builder;
+
+import com.yahoo.vespa.model.admin.monitoring.MetricsConsumer;
+
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * A mutable helper class representing the user defined metrics and consumers.
+ *
+ * @author gjoranv
+ */
+public class Metrics {
+
+ private final Map<String, MetricsConsumer> consumers = new LinkedHashMap<>();
+
+ public void addConsumer(MetricsConsumer consumer) {
+ consumers.put(consumer.getId(), consumer);
+ }
+
+ public Map<String, MetricsConsumer> getConsumers() {
+ return Collections.unmodifiableMap(consumers);
+ }
+
+}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/PredefinedMetricSets.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/PredefinedMetricSets.java
new file mode 100644
index 00000000000..bbeccb52bcb
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/PredefinedMetricSets.java
@@ -0,0 +1,29 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.model.admin.monitoring.builder;
+
+import com.yahoo.vespa.model.admin.monitoring.MetricSet;
+import com.yahoo.vespa.model.admin.monitoring.VespaMetricSet;
+
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * A data object for predefined metric sets.
+ *
+ * @author gjoranv
+ */
+public class PredefinedMetricSets {
+
+ public static final Map<String, MetricSet> predefinedMetricSets = toMapById(
+ new VespaMetricSet()
+ );
+
+ private static Map<String, MetricSet> toMapById(MetricSet... metricSets) {
+ Map<String, MetricSet> availableMetricSets = new LinkedHashMap<>();
+ for (MetricSet metricSet : metricSets)
+ availableMetricSets.put(metricSet.getId(), metricSet);
+ return Collections.unmodifiableMap(availableMetricSets);
+ }
+
+}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/xml/MetricsBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/xml/MetricsBuilder.java
new file mode 100644
index 00000000000..a577ae6dcab
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/xml/MetricsBuilder.java
@@ -0,0 +1,55 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.model.admin.monitoring.builder.xml;
+
+import com.yahoo.text.XML;
+import com.yahoo.vespa.model.admin.monitoring.Metric;
+import com.yahoo.vespa.model.admin.monitoring.MetricSet;
+import com.yahoo.vespa.model.admin.monitoring.MetricsConsumer;
+import com.yahoo.vespa.model.admin.monitoring.builder.Metrics;
+import org.w3c.dom.Element;
+
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author gjoranv
+ */
+public class MetricsBuilder {
+
+ private static final String ID_ATTRIBUTE = "id";
+ private final Map<String, MetricSet> availableMetricSets;
+
+ public MetricsBuilder(Map<String, MetricSet> availableMetricSets) {
+ this.availableMetricSets = availableMetricSets;
+ }
+
+ public Metrics buildMetrics(Element metricsElement) {
+ Metrics metrics = new Metrics();
+ for (Element consumerElement : XML.getChildren(metricsElement, "consumer")) {
+ String consumerId = consumerElement.getAttribute(ID_ATTRIBUTE);
+ MetricSet metricSet = buildMetricSet(consumerId, consumerElement);
+ metrics.addConsumer(new MetricsConsumer(consumerId, metricSet));
+ }
+ return metrics;
+ }
+
+ private MetricSet buildMetricSet(String consumerId, Element consumerElement) {
+ List<Metric> metrics = XML.getChildren(consumerElement, "metric").stream()
+ .map(metricElement -> new Metric(metricElement.getAttribute(ID_ATTRIBUTE)))
+ .collect(Collectors.toCollection(LinkedList::new));
+
+ List<MetricSet> metricSets = XML.getChildren(consumerElement, "metric-set").stream()
+ .map(metricSetElement -> availableMetricSets.get(metricSetElement.getAttribute(ID_ATTRIBUTE)))
+ .collect(Collectors.toCollection(LinkedList::new));
+
+ return new MetricSet(metricSetId(consumerId), metrics, metricSets);
+ }
+
+ private static String metricSetId(String consumerName) {
+ return "user-metrics-" + consumerName;
+ }
+
+}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java
index ae70efb8a3b..6b619bff829 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java
@@ -10,12 +10,17 @@ import com.yahoo.vespa.model.HostSystem;
import com.yahoo.vespa.model.admin.*;
import com.yahoo.vespa.model.admin.monitoring.MetricsConsumer;
import com.yahoo.vespa.model.admin.monitoring.Yamas;
+import com.yahoo.vespa.model.admin.monitoring.builder.Metrics;
+import com.yahoo.vespa.model.admin.monitoring.builder.PredefinedMetricSets;
+import com.yahoo.vespa.model.admin.monitoring.builder.xml.MetricsBuilder;
import com.yahoo.vespa.model.filedistribution.FileDistributionConfigProducer;
import com.yahoo.config.application.api.FileRegistry;
import org.w3c.dom.Element;
import java.util.*;
+import static com.yahoo.vespa.model.admin.monitoring.builder.PredefinedMetricSets.predefinedMetricSets;
+
/**
* A base class for admin model builders, to support common functionality across versions.
*
@@ -56,9 +61,11 @@ public abstract class DomAdminBuilderBase extends VespaDomBuilder.DomConfigProdu
@Override
protected Admin doBuild(AbstractConfigProducer parent, Element adminE) {
Yamas yamas = getYamas(XML.getChild(adminE, "yamas"));
- Map<String, MetricsConsumer> metricsConsumers = DomMetricBuilderHelper.buildMetricsConsumers(XML.getChild(adminE, "metric-consumers"));
- Admin admin = new Admin(parent, yamas, metricsConsumers, multitenant);
+ Metrics metrics = new MetricsBuilder(predefinedMetricSets).buildMetrics(XML.getChild(adminE, "metrics"));
+ Map<String, MetricsConsumer> legacyMetricsConsumers = DomMetricBuilderHelper.buildMetricsConsumers(XML.getChild(adminE, "metric-consumers"));
+
+ Admin admin = new Admin(parent, yamas, metrics, legacyMetricsConsumers, multitenant);
doBuildAdmin(admin, adminE);
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java
index b70dfb6cfaa..c80d17f8202 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java
@@ -658,7 +658,7 @@ public class ContentCluster extends AbstractConfigProducer implements StorDistri
removedtags("thread").
tags("disk"));
- Map<String, MetricsConsumer> consumers = getRoot().getAdmin().getUserMetricsConsumers();
+ Map<String, MetricsConsumer> consumers = getRoot().getAdmin().getLegacyUserMetricsConsumers();
if (consumers != null) {
for (Map.Entry<String, MetricsConsumer> e : consumers.entrySet()) {
MetricsmanagerConfig.Consumer.Builder b = getMetricBuilder(e.getKey(), builder);
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java
index 79c41b487a3..9b4219a87cf 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java
@@ -84,7 +84,7 @@ public class DedicatedAdminV4Test {
assertEquals("vespa.routing", yamas.getClustername());
assertEquals(60L, (long)yamas.getIntervalSeconds());
- MetricsConsumer consumer = model.getAdmin().getUserMetricsConsumers().get("yamas");
+ MetricsConsumer consumer = model.getAdmin().getLegacyUserMetricsConsumers().get("yamas");
assertNotNull(consumer);
assertEquals(3, consumer.getMetrics().size());
Metric metric = consumer.getMetrics().get("nginx.upstreams.down.last");