Committed by
Gerrit Code Review
Change the data type of Data Point value from Double to Object
Change-Id: If5243fcb25c9893601695743b562ce88b844c64d
Showing
5 changed files
with
63 additions
and
38 deletions
... | @@ -62,6 +62,8 @@ public class CpmanViewMessageHandler extends UiMessageHandler { | ... | @@ -62,6 +62,8 @@ public class CpmanViewMessageHandler extends UiMessageHandler { |
62 | 62 | ||
63 | private static final int MILLI_CONV_UNIT = 1000; | 63 | private static final int MILLI_CONV_UNIT = 1000; |
64 | 64 | ||
65 | + private static final String TIME_FORMAT = "HH:mm"; | ||
66 | + | ||
65 | private long timestamp = 0L; | 67 | private long timestamp = 0L; |
66 | 68 | ||
67 | @Override | 69 | @Override |
... | @@ -101,15 +103,13 @@ public class CpmanViewMessageHandler extends UiMessageHandler { | ... | @@ -101,15 +103,13 @@ public class CpmanViewMessageHandler extends UiMessageHandler { |
101 | for (String deviceId : deviceIds) { | 103 | for (String deviceId : deviceIds) { |
102 | Map<ControlMetricType, Long> data = | 104 | Map<ControlMetricType, Long> data = |
103 | populateDeviceMetrics(cpms, cs, DeviceId.deviceId(deviceId)); | 105 | populateDeviceMetrics(cpms, cs, DeviceId.deviceId(deviceId)); |
104 | - Map<String, Long> local = Maps.newHashMap(); | 106 | + Map<String, Object> local = Maps.newHashMap(); |
105 | for (ControlMetricType cmt : CONTROL_MESSAGE_METRICS) { | 107 | for (ControlMetricType cmt : CONTROL_MESSAGE_METRICS) { |
106 | local.put(StringUtils.lowerCase(cmt.name()), data.get(cmt)); | 108 | local.put(StringUtils.lowerCase(cmt.name()), data.get(cmt)); |
107 | } | 109 | } |
108 | - // TODO: need to find a way to present device id using long type | 110 | + |
109 | - String shortId = StringUtils.substring(deviceId, | 111 | + local.put(LABEL, deviceId); |
110 | - deviceId.length() - 2, deviceId.length()); | 112 | + populateMetric(cm.addDataPoint(deviceId), local); |
111 | - local.put(LABEL, Long.valueOf(shortId)); | ||
112 | - populateMetric(cm.addDataPoint(Long.valueOf(shortId)), local); | ||
113 | } | 113 | } |
114 | } | 114 | } |
115 | } | 115 | } |
... | @@ -171,24 +171,25 @@ public class CpmanViewMessageHandler extends UiMessageHandler { | ... | @@ -171,24 +171,25 @@ public class CpmanViewMessageHandler extends UiMessageHandler { |
171 | } | 171 | } |
172 | } | 172 | } |
173 | 173 | ||
174 | - private void populateMetrics(ChartModel cm, Map<ControlMetricType, | 174 | + private void populateMetrics(ChartModel cm, |
175 | - Long[]> data, LocalDateTime time, int numOfDp) { | 175 | + Map<ControlMetricType, Long[]> data, |
176 | + LocalDateTime time, int numOfDp) { | ||
176 | for (int i = 0; i < numOfDp; i++) { | 177 | for (int i = 0; i < numOfDp; i++) { |
177 | - Map<String, Long> local = Maps.newHashMap(); | 178 | + Map<String, Object> local = Maps.newHashMap(); |
178 | for (ControlMetricType cmt : CONTROL_MESSAGE_METRICS) { | 179 | for (ControlMetricType cmt : CONTROL_MESSAGE_METRICS) { |
179 | local.put(StringUtils.lowerCase(cmt.name()), data.get(cmt)[i]); | 180 | local.put(StringUtils.lowerCase(cmt.name()), data.get(cmt)[i]); |
180 | } | 181 | } |
181 | 182 | ||
182 | - local.put(LABEL, time.minusMinutes(numOfDp - i).toDateTime().getMillis()); | 183 | + String calculated = time.minusMinutes(numOfDp - i).toString(TIME_FORMAT); |
183 | 184 | ||
184 | - populateMetric(cm.addDataPoint(time.minusMinutes(numOfDp - i) | 185 | + local.put(LABEL, calculated); |
185 | - .toDateTime().getMillis()), local); | 186 | + populateMetric(cm.addDataPoint(calculated), local); |
186 | } | 187 | } |
187 | } | 188 | } |
188 | 189 | ||
189 | private void populateMetric(ChartModel.DataPoint dataPoint, | 190 | private void populateMetric(ChartModel.DataPoint dataPoint, |
190 | - Map<String, Long> data) { | 191 | + Map<String, Object> data) { |
191 | - data.forEach((k, v) -> dataPoint.data(k, v.doubleValue())); | 192 | + data.forEach((k, v) -> dataPoint.data(k, v)); |
192 | } | 193 | } |
193 | } | 194 | } |
194 | } | 195 | } | ... | ... |
... | @@ -31,7 +31,7 @@ | ... | @@ -31,7 +31,7 @@ |
31 | data[i] = new Array(1); | 31 | data[i] = new Array(1); |
32 | } | 32 | } |
33 | 33 | ||
34 | - var date, max, merged; | 34 | + var max; |
35 | 35 | ||
36 | function ceil(num) { | 36 | function ceil(num) { |
37 | if (isNaN(num)) { | 37 | if (isNaN(num)) { |
... | @@ -42,6 +42,11 @@ | ... | @@ -42,6 +42,11 @@ |
42 | return (Math.ceil(num / pow)) * pow; | 42 | return (Math.ceil(num / pow)) * pow; |
43 | } | 43 | } |
44 | 44 | ||
45 | + function maxInArray(array) { | ||
46 | + var merged = [].concat.apply([], array); | ||
47 | + return Math.max.apply(null, merged); | ||
48 | + } | ||
49 | + | ||
45 | angular.module('ovCpman', ["chart.js"]) | 50 | angular.module('ovCpman', ["chart.js"]) |
46 | .controller('OvCpmanCtrl', | 51 | .controller('OvCpmanCtrl', |
47 | ['$log', '$scope', '$location', 'FnService', 'ChartBuilderService', 'NavService', | 52 | ['$log', '$scope', '$location', 'FnService', 'ChartBuilderService', 'NavService', |
... | @@ -88,37 +93,30 @@ | ... | @@ -88,37 +93,30 @@ |
88 | data[4][idx] = cm.request_packet; | 93 | data[4][idx] = cm.request_packet; |
89 | data[5][idx] = cm.reply_packet; | 94 | data[5][idx] = cm.reply_packet; |
90 | 95 | ||
91 | - if(hasDeviceId) { | 96 | + labels[idx] = cm.label; |
92 | - date = new Date(cm.label); | ||
93 | - labels[idx] = date.getHours() + ":" + date.getMinutes(); | ||
94 | - } else { | ||
95 | - labels[idx] = cm.label; | ||
96 | - } | ||
97 | }); | 97 | }); |
98 | } | 98 | } |
99 | 99 | ||
100 | - merged = [].concat.apply([], data); | 100 | + max = maxInArray(data) |
101 | - max = Math.max.apply(null, merged); | ||
102 | $scope.labels = labels; | 101 | $scope.labels = labels; |
103 | $scope.data = data; | 102 | $scope.data = data; |
104 | $scope.options = { | 103 | $scope.options = { |
105 | scaleOverride : true, | 104 | scaleOverride : true, |
106 | scaleSteps : 10, | 105 | scaleSteps : 10, |
107 | scaleStepWidth : ceil(max) / 10, | 106 | scaleStepWidth : ceil(max) / 10, |
108 | - scaleStartValue : 0 | 107 | + scaleStartValue : 0, |
108 | + scaleFontSize : 16 | ||
109 | }; | 109 | }; |
110 | $scope.onClick = function (points, evt) { | 110 | $scope.onClick = function (points, evt) { |
111 | if (points[0]) { | 111 | if (points[0]) { |
112 | - // TODO: this will be replaced with real device id | 112 | + ns.navTo('cpman', { devId: points[0].label }); |
113 | - var tmpId = 'of:000000000000020' + points[0].label; | ||
114 | - ns.navTo('cpman', { devId: tmpId }); | ||
115 | $log.log(points[0].label); | 113 | $log.log(points[0].label); |
116 | } | 114 | } |
117 | }; | 115 | }; |
118 | }); | 116 | }); |
119 | 117 | ||
120 | $scope.series = ['INBOUND', 'OUTBOUND', 'FLOW-MOD', | 118 | $scope.series = ['INBOUND', 'OUTBOUND', 'FLOW-MOD', |
121 | - 'FLOW-REMOVED', 'STATS-REQUEST', 'STATS-REPLY']; | 119 | + 'FLOW-REMOVED', 'REQUEST', 'REPLY']; |
122 | $scope.labels = labels; | 120 | $scope.labels = labels; |
123 | $scope.data = data; | 121 | $scope.data = data; |
124 | 122 | ... | ... |
... | @@ -43,7 +43,7 @@ public class ChartModel { | ... | @@ -43,7 +43,7 @@ public class ChartModel { |
43 | 43 | ||
44 | private final Set<String> seriesSet; | 44 | private final Set<String> seriesSet; |
45 | private final String[] seriesArray; | 45 | private final String[] seriesArray; |
46 | - private final List<Long> labels = Lists.newArrayList(); | 46 | + private final List<Object> labels = Lists.newArrayList(); |
47 | private final List<DataPoint> dataPoints = Lists.newArrayList(); | 47 | private final List<DataPoint> dataPoints = Lists.newArrayList(); |
48 | private final Map<String, Annot> annotations = new HashMap<>(); | 48 | private final Map<String, Annot> annotations = new HashMap<>(); |
49 | 49 | ||
... | @@ -94,9 +94,10 @@ public class ChartModel { | ... | @@ -94,9 +94,10 @@ public class ChartModel { |
94 | /** | 94 | /** |
95 | * Adds a data point to the chart model. | 95 | * Adds a data point to the chart model. |
96 | * | 96 | * |
97 | + * @param label label instance | ||
97 | * @return the data point, for chaining | 98 | * @return the data point, for chaining |
98 | */ | 99 | */ |
99 | - public DataPoint addDataPoint(Long label) { | 100 | + public DataPoint addDataPoint(Object label) { |
100 | DataPoint dp = new DataPoint(); | 101 | DataPoint dp = new DataPoint(); |
101 | labels.add(label); | 102 | labels.add(label); |
102 | dataPoints.add(dp); | 103 | dataPoints.add(dp); |
... | @@ -127,7 +128,7 @@ public class ChartModel { | ... | @@ -127,7 +128,7 @@ public class ChartModel { |
127 | * @return an array of labels | 128 | * @return an array of labels |
128 | */ | 129 | */ |
129 | public Object[] getLabels() { | 130 | public Object[] getLabels() { |
130 | - return labels.toArray(new Long[labels.size()]); | 131 | + return labels.toArray(new Object[labels.size()]); |
131 | } | 132 | } |
132 | 133 | ||
133 | /** | 134 | /** |
... | @@ -219,7 +220,7 @@ public class ChartModel { | ... | @@ -219,7 +220,7 @@ public class ChartModel { |
219 | */ | 220 | */ |
220 | public class DataPoint { | 221 | public class DataPoint { |
221 | // values for all series | 222 | // values for all series |
222 | - private final Map<String, Double> data = Maps.newHashMap(); | 223 | + private final Map<String, Object> data = Maps.newHashMap(); |
223 | 224 | ||
224 | /** | 225 | /** |
225 | * Sets the data value for the given series of this data point. | 226 | * Sets the data value for the given series of this data point. |
... | @@ -228,7 +229,7 @@ public class ChartModel { | ... | @@ -228,7 +229,7 @@ public class ChartModel { |
228 | * @param value value to set | 229 | * @param value value to set |
229 | * @return self, for chaining | 230 | * @return self, for chaining |
230 | */ | 231 | */ |
231 | - public DataPoint data(String series, Double value) { | 232 | + public DataPoint data(String series, Object value) { |
232 | checkSeries(series); | 233 | checkSeries(series); |
233 | data.put(series, value); | 234 | data.put(series, value); |
234 | return this; | 235 | return this; |
... | @@ -237,9 +238,10 @@ public class ChartModel { | ... | @@ -237,9 +238,10 @@ public class ChartModel { |
237 | /** | 238 | /** |
238 | * Returns the data value with the given series for this data point. | 239 | * Returns the data value with the given series for this data point. |
239 | * | 240 | * |
241 | + * @param series series name | ||
240 | * @return data value | 242 | * @return data value |
241 | */ | 243 | */ |
242 | - public Double get(String series) { | 244 | + public Object get(String series) { |
243 | return data.get(series); | 245 | return data.get(series); |
244 | } | 246 | } |
245 | 247 | ||
... | @@ -248,8 +250,8 @@ public class ChartModel { | ... | @@ -248,8 +250,8 @@ public class ChartModel { |
248 | * | 250 | * |
249 | * @return an array of ordered data values | 251 | * @return an array of ordered data values |
250 | */ | 252 | */ |
251 | - public Double[] getAll() { | 253 | + public Object[] getAll() { |
252 | - Double[] value = new Double[getSeries().length]; | 254 | + Object[] value = new Object[getSeries().length]; |
253 | int idx = 0; | 255 | int idx = 0; |
254 | for (String s : getSeries()) { | 256 | for (String s : getSeries()) { |
255 | value[idx] = get(s); | 257 | value[idx] = get(s); |
... | @@ -266,5 +268,29 @@ public class ChartModel { | ... | @@ -266,5 +268,29 @@ public class ChartModel { |
266 | public int size() { | 268 | public int size() { |
267 | return data.size(); | 269 | return data.size(); |
268 | } | 270 | } |
271 | + | ||
272 | + /** | ||
273 | + * Returns the value of the data point as a string, using the | ||
274 | + * formatter appropriate for the series. | ||
275 | + * | ||
276 | + * @param series series | ||
277 | + * @return formatted data point value | ||
278 | + */ | ||
279 | + public String getAsString(String series) { | ||
280 | + return get(series).toString(); | ||
281 | + } | ||
282 | + | ||
283 | + /** | ||
284 | + * Returns the row as an array of formatted strings. | ||
285 | + * | ||
286 | + * @return the string format of data points | ||
287 | + */ | ||
288 | + public String[] getAsStrings() { | ||
289 | + List<String> formatted = new ArrayList<>(size()); | ||
290 | + for (String c : seriesArray) { | ||
291 | + formatted.add(getAsString(c)); | ||
292 | + } | ||
293 | + return formatted.toArray(new String[formatted.size()]); | ||
294 | + } | ||
269 | } | 295 | } |
270 | } | 296 | } | ... | ... |
... | @@ -69,7 +69,7 @@ public final class ChartUtils { | ... | @@ -69,7 +69,7 @@ public final class ChartUtils { |
69 | public static JsonNode toJsonNode(ChartModel.DataPoint dp, ChartModel cm) { | 69 | public static JsonNode toJsonNode(ChartModel.DataPoint dp, ChartModel cm) { |
70 | ObjectNode result = MAPPER.createObjectNode(); | 70 | ObjectNode result = MAPPER.createObjectNode(); |
71 | String[] series = cm.getSeries(); | 71 | String[] series = cm.getSeries(); |
72 | - Double[] values = dp.getAll(); | 72 | + String[] values = dp.getAsStrings(); |
73 | int n = series.length; | 73 | int n = series.length; |
74 | for (int i = 0; i < n; i++) { | 74 | for (int i = 0; i < n; i++) { |
75 | result.put(series[i], values[i]); | 75 | result.put(series[i], values[i]); | ... | ... |
... | @@ -29,7 +29,7 @@ public class ChartUtilsTest { | ... | @@ -29,7 +29,7 @@ public class ChartUtilsTest { |
29 | private static final String BAR = "bar"; | 29 | private static final String BAR = "bar"; |
30 | 30 | ||
31 | private static final String ARRAY_AS_STRING = | 31 | private static final String ARRAY_AS_STRING = |
32 | - "[{\"foo\":1.0,\"bar\":2.0},{\"foo\":3.0,\"bar\":4.0}]"; | 32 | + "[{\"foo\":\"1.0\",\"bar\":\"2.0\"},{\"foo\":\"3.0\",\"bar\":\"4.0\"}]"; |
33 | private static final String NODE_AS_STRING = | 33 | private static final String NODE_AS_STRING = |
34 | "{\"dev1\":\"of:0000000000000001\",\"dev2\":\"of:0000000000000002\"}"; | 34 | "{\"dev1\":\"of:0000000000000001\",\"dev2\":\"of:0000000000000002\"}"; |
35 | 35 | ... | ... |
-
Please register or login to post a comment