blob: 59c450c052b50ef01b3a9cf6d1752666ab6676a2 [file] [log] [blame]
Ray Milkeya34ed042014-07-17 16:19:52 -07001package net.onrc.onos.core.metrics.web;
Ray Milkey26921af2014-06-30 16:27:40 -07002
Ray Milkey14c46512014-07-08 18:30:31 -07003import com.codahale.metrics.Counter;
Ray Milkey26921af2014-06-30 16:27:40 -07004import com.codahale.metrics.Gauge;
Ray Milkey14c46512014-07-08 18:30:31 -07005import com.codahale.metrics.Histogram;
6import com.codahale.metrics.Meter;
7import com.codahale.metrics.Metric;
8import com.codahale.metrics.MetricFilter;
Ray Milkey26921af2014-06-30 16:27:40 -07009import com.codahale.metrics.Timer;
Ray Milkeya34ed042014-07-17 16:19:52 -070010import net.onrc.onos.core.metrics.OnosMetrics;
Ray Milkey26921af2014-06-30 16:27:40 -070011import org.restlet.representation.Representation;
12import org.restlet.resource.Get;
13import org.restlet.resource.ServerResource;
14
15import java.util.ArrayList;
Ray Milkey14c46512014-07-08 18:30:31 -070016import java.util.Arrays;
17import java.util.HashSet;
Ray Milkey26921af2014-06-30 16:27:40 -070018import java.util.List;
19import java.util.Map;
Ray Milkey40eb9c82014-07-18 10:28:11 -070020import java.util.Set;
Ray Milkey26921af2014-06-30 16:27:40 -070021
22/**
23 * REST APIs for Metrics objects.
24 */
25public class MetricsResource extends ServerResource {
26
27 /**
Ray Milkey14c46512014-07-08 18:30:31 -070028 * Metric filter to allow selecting metrics by name.
29 */
30 private static class MetricNameFilter implements MetricFilter {
Ray Milkey40eb9c82014-07-18 10:28:11 -070031 private final Set<String> names;
Ray Milkey14c46512014-07-08 18:30:31 -070032
33 /**
34 * Hide default constructor.
35 */
36 @SuppressWarnings("unused")
37 private MetricNameFilter() {
38 names = null;
39 }
40
41 /**
42 * Initializes a filter for the given name list.
43 *
44 * @param nameListString comma separated list of strings of the
45 * names of metrics to query
46 */
47 public MetricNameFilter(final String nameListString) {
48
49 if (nameListString == null) {
50 names = null;
51 } else {
52 List<String> nameList = Arrays.asList(nameListString.split(","));
53 names = new HashSet<>();
54 names.addAll(nameList);
55 }
56 }
57
58 @Override
59 public boolean matches(String s, Metric metric) {
60 return names == null || names.contains(s);
61 }
62 }
63 /**
Ray Milkey26921af2014-06-30 16:27:40 -070064 * REST API to get all of the system's metrics.
65 *
66 * @return a Representation object containing the metrics
67 */
68 @Get("json")
69 @SuppressWarnings("rawtypes")
Ray Milkey128651a2014-07-14 11:24:28 -070070 public Representation retrieve() {
Ray Milkey26921af2014-06-30 16:27:40 -070071 final MetricsObjectResource result = new MetricsObjectResource();
72
73 final List<MetricsObjectResource.TimerObjectResource> timers =
74 new ArrayList<>();
75 final List<MetricsObjectResource.GaugeObjectResource> gauges =
76 new ArrayList<>();
77 final List<MetricsObjectResource.CounterObjectResource> counters =
78 new ArrayList<>();
79 final List<MetricsObjectResource.MeterObjectResource> meters =
80 new ArrayList<>();
81 final List<MetricsObjectResource.HistogramObjectResource> histograms =
82 new ArrayList<>();
83
Ray Milkey14c46512014-07-08 18:30:31 -070084 final String metricIdsString = getQuery().getValues("ids");
85
86 final MetricFilter filter = new MetricNameFilter(metricIdsString);
87
Ray Milkey26921af2014-06-30 16:27:40 -070088 for (final Map.Entry<String, Timer> timer :
Ray Milkey128651a2014-07-14 11:24:28 -070089 OnosMetrics.getTimers(filter).entrySet()) {
Ray Milkey26921af2014-06-30 16:27:40 -070090 timers.add(new MetricsObjectResource.TimerObjectResource(
91 timer.getKey(), timer.getValue()));
92 }
93 result.setTimers(timers);
94
95 for (final Map.Entry<String, Gauge> gauge :
Ray Milkey128651a2014-07-14 11:24:28 -070096 OnosMetrics.getGauges(filter).entrySet()) {
Ray Milkey26921af2014-06-30 16:27:40 -070097 gauges.add(new MetricsObjectResource.GaugeObjectResource(
98 gauge.getKey(), gauge.getValue()));
99 }
100 result.setGauges(gauges);
101
102 for (final Map.Entry<String, Counter> counter :
Ray Milkey128651a2014-07-14 11:24:28 -0700103 OnosMetrics.getCounters(filter).entrySet()) {
Ray Milkey26921af2014-06-30 16:27:40 -0700104 counters.add(new MetricsObjectResource.CounterObjectResource(
105 counter.getKey(), counter.getValue()));
106 }
107 result.setCounters(counters);
108
109 for (final Map.Entry<String, Meter> meter :
Ray Milkey128651a2014-07-14 11:24:28 -0700110 OnosMetrics.getMeters(filter).entrySet()) {
Ray Milkey26921af2014-06-30 16:27:40 -0700111 meters.add(new MetricsObjectResource.MeterObjectResource(
112 meter.getKey(), meter.getValue()));
113 }
114 result.setMeters(meters);
115
116 for (final Map.Entry<String, Histogram> histogram :
Ray Milkey128651a2014-07-14 11:24:28 -0700117 OnosMetrics.getHistograms(filter).entrySet()) {
Ray Milkey26921af2014-06-30 16:27:40 -0700118 histograms.add(new MetricsObjectResource.HistogramObjectResource(
119 histogram.getKey(), histogram.getValue()));
120 }
121 result.setHistograms(histograms);
122
123 return toRepresentation(result, null);
124 }
125
126}