Jayasree Ghosh
Committed by Jian Li

FIX for ONOS-5296:Wrong MetricName throwing NPE

Change-Id: I625640fba84bd2fabd140d6449cdceb0079ad3f4
(cherry picked from commit f5c17fd7)
...@@ -27,8 +27,10 @@ import com.fasterxml.jackson.databind.node.ObjectNode; ...@@ -27,8 +27,10 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
27 import com.google.common.collect.Ordering; 27 import com.google.common.collect.Ordering;
28 import com.google.common.collect.TreeMultimap; 28 import com.google.common.collect.TreeMultimap;
29 import org.onlab.metrics.MetricsService; 29 import org.onlab.metrics.MetricsService;
30 +import org.onlab.util.ItemNotFoundException;
30 import org.onosproject.rest.AbstractWebResource; 31 import org.onosproject.rest.AbstractWebResource;
31 32
33 +
32 import javax.ws.rs.GET; 34 import javax.ws.rs.GET;
33 import javax.ws.rs.Path; 35 import javax.ws.rs.Path;
34 import javax.ws.rs.PathParam; 36 import javax.ws.rs.PathParam;
...@@ -44,6 +46,8 @@ import java.util.Map; ...@@ -44,6 +46,8 @@ import java.util.Map;
44 @Path("metrics") 46 @Path("metrics")
45 public class MetricsWebResource extends AbstractWebResource { 47 public class MetricsWebResource extends AbstractWebResource {
46 48
49 + private static final String E_METRIC_NAME_NOT_FOUND = "Metric Name is not found";
50 +
47 private final MetricsService service = get(MetricsService.class); 51 private final MetricsService service = get(MetricsService.class);
48 private final ObjectNode root = mapper().createObjectNode(); 52 private final ObjectNode root = mapper().createObjectNode();
49 53
...@@ -84,6 +88,10 @@ public class MetricsWebResource extends AbstractWebResource { ...@@ -84,6 +88,10 @@ public class MetricsWebResource extends AbstractWebResource {
84 MetricFilter filter = metricName != null ? (name, metric) -> name.equals(metricName) : MetricFilter.ALL; 88 MetricFilter filter = metricName != null ? (name, metric) -> name.equals(metricName) : MetricFilter.ALL;
85 TreeMultimap<String, Metric> matched = listMetrics(service, filter); 89 TreeMultimap<String, Metric> matched = listMetrics(service, filter);
86 90
91 + if (matched.isEmpty()) {
92 + throw new ItemNotFoundException(E_METRIC_NAME_NOT_FOUND);
93 + }
94 +
87 matched.asMap().get(metricName).forEach(m -> { 95 matched.asMap().get(metricName).forEach(m -> {
88 metricNode.set(metricName, codec(Metric.class).encode(m, this)); 96 metricNode.set(metricName, codec(Metric.class).encode(m, this));
89 }); 97 });
......