blob: a13c5431a67705933ac7fe4578b70d441b783d0f [file] [log] [blame]
Karthik Vegesna99012712017-07-20 12:07:23 -07001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
Karthik Vegesna99012712017-07-20 12:07:23 -07003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.packetstats;
18import com.codahale.metrics.Counter;
19import com.codahale.metrics.MetricFilter;
20import com.fasterxml.jackson.databind.node.ObjectNode;
21import com.google.common.collect.ImmutableSet;
22import org.onosproject.net.ConnectPoint;
23import org.onlab.metrics.MetricsService;
24import org.onosproject.ui.RequestHandler;
25import org.onosproject.ui.UiMessageHandler;
26import org.slf4j.Logger;
27import org.slf4j.LoggerFactory;
28import java.util.ArrayList;
29import java.util.Collection;
30import java.util.List;
31import java.util.Map;
32
33/**
34 * ONOS UI Custom-View message handler.
35 * <p>
36 * This class contains the request handlers that handle the response
37 * to each event. In this particular implementation the second message
38 * handler creates the patch and the first message handler loads the data.
39 */
40
41public class PacketStatsUiMessageHandler extends UiMessageHandler {
42
43 private static final String ARP_REQ = "arpRequest";
44 private static final String ARP_RESP = "arpResponse";
45 private static final String DHCP_REQ = "dhcpRequest";
46 private static final String DHCP_RESP = "dhcpResponse";
47 private static final String ICMP_REQ = "icmpRequest";
48 private static final String ICMP_RESP = "icmpResponse";
49 private static final String LLDP_REQ = "lldpRequest";
50 private static final String LLDP_RESP = "lldpResponse";
51 private static final String VLAN_REQ = "vlanRequest";
52 private static final String VLAN_RESP = "vlanResponse";
53 private static final String IGMP_REQ = "igmpRequest";
54 private static final String IGMP_RESP = "igmpResponse";
55 private static final String PIM_REQ = "pimRequest";
56 private static final String PIM_RESP = "pimResponse";
57 private static final String BSN_REQ = "bsnRequest";
58 private static final String BSN_RESP = "bsnResponse";
59 private static final String UNKNOWN_REQ = "unknownRequest";
60 private static final String UNKNOWN_RESP = "unknownResponse";
61 private static final String MPLS_REQ = "mplsRequest";
62 private static final String MPLS_RESP = "mplsResponse";
63
64
65
66
67 private static final String METRIC_NAME = null;
68 private static String total = "";
69
70 private List<ConnectPoint> previous = new ArrayList<>();
71 private final Logger log = LoggerFactory.getLogger(getClass());
72 MetricFilter filter = METRIC_NAME != null ? (name, metric) -> name.equals(METRIC_NAME) : MetricFilter.ALL;
73
74 @Override
75 protected Collection<RequestHandler> createRequestHandlers() {
76 return ImmutableSet.of(
77 new ArpRequestHandler(),
78 new DhcpRequestHandler(),
79 new IcmpRequestHandler(),
80 new LldpRequestHandler(),
81 new VlanRequestHandler(),
82 new IgmpRequestHandler(),
83 new PimRequestHandler(),
84 new BsnRequestHandler(),
85 new UnknownRequestHandler(),
86 new MplsRequestHandler()
87
88 );
89
90 }
91
92 //Looking for ARP Packets
93 private final class ArpRequestHandler extends RequestHandler {
94 private ArpRequestHandler() {
95 super(ARP_REQ);
96 }
97
98 @Override
99 public void process(ObjectNode payload) {
100 MetricsService service = get(MetricsService.class);
101 Map<String, Counter> counters = service.getCounters(filter);
102 Counter arpCounter = counters.get("packetStatisticsComponent.arpFeature.arpPC");
103 long arpCount = arpCounter.getCount();
104 ObjectNode arpJson = objectNode();
105 arpJson.put("ArpCounter", arpCount);
106 sendMessage(ARP_RESP, arpJson);
107 }
108 }
109
110 //Looking for DHCP Packets
111 private final class DhcpRequestHandler extends RequestHandler {
112 private DhcpRequestHandler() {
113 super(DHCP_REQ);
114 }
115
116 @Override
117 public void process(ObjectNode payload) {
118 MetricsService service = get(MetricsService.class);
119 Map<String, Counter> counters = service.getCounters(filter);
120 Counter dhcpCounter = counters.get("packetStatisticsComponent.dhcpFeature.dhcpPC");
121 long dhcpCount = dhcpCounter.getCount();
122 ObjectNode dhcpJson = objectNode();
123 dhcpJson.put("DhcpCounter", dhcpCount);
124 log.info("Received DHCP Request");
125 sendMessage(DHCP_RESP, dhcpJson);
126 }
127 }
128 //Looking for ICMP Packets
129 private final class IcmpRequestHandler extends RequestHandler {
130 private IcmpRequestHandler() {
131 super(ICMP_REQ);
132 }
133
134 @Override
135 public void process(ObjectNode payload) {
136 MetricsService service = get(MetricsService.class);
137 Map<String, Counter> counters = service.getCounters(filter);
138 Counter icmpCounter = counters.get("packetStatisticsComponent.icmpFeature.icmpPC");
139 long icmpCount = icmpCounter.getCount();
140 ObjectNode icmpJson = objectNode();
141 icmpJson.put("IcmpCounter", icmpCount);
142 log.info("Received ICMP Request");
143 sendMessage(ICMP_RESP, icmpJson);
144 }
145 }
146 //Looking for LLDP Packets
147 private final class LldpRequestHandler extends RequestHandler {
148 private LldpRequestHandler() {
149 super(LLDP_REQ);
150 }
151
152 @Override
153 public void process(ObjectNode payload) {
154 MetricsService service = get(MetricsService.class);
155 Map<String, Counter> counters = service.getCounters(filter);
156 Counter lldpCounter = counters.get("packetStatisticsComponent.lldpFeature.lldpPC");
157 long lldpCount = lldpCounter.getCount();
158 ObjectNode lldpJson = objectNode();
159 lldpJson.put("LldpCounter", lldpCount);
160 log.info("Received LLDP Request");
161 sendMessage(LLDP_RESP, lldpJson);
162 }
163 }
164 //Looking for VLAN Packets
165 private final class VlanRequestHandler extends RequestHandler {
166 private VlanRequestHandler() {
167 super(VLAN_REQ);
168 }
169
170 @Override
171 public void process(ObjectNode payload) {
172 MetricsService service = get(MetricsService.class);
173 Map<String, Counter> counters = service.getCounters(filter);
174 Counter vlanCounter = counters.get("packetStatisticsComponent.vlanFeature.vlanPC");
175 long vlanCount = vlanCounter.getCount();
176 ObjectNode vlanJson = objectNode();
177 vlanJson.put("VlanCounter", vlanCount);
178 log.info("Received VLAN Request");
179 sendMessage(VLAN_RESP, vlanJson);
180 }
181 }
182 //Looking for IGMP Packets
183 private final class IgmpRequestHandler extends RequestHandler {
184 private IgmpRequestHandler() {
185 super(IGMP_REQ);
186 }
187
188 @Override
189 public void process(ObjectNode payload) {
190 MetricsService service = get(MetricsService.class);
191 Map<String, Counter> counters = service.getCounters(filter);
192 Counter igmpCounter = counters.get("packetStatisticsComponent.igmpFeature.igmpPC");
193 long igmpCount = igmpCounter.getCount();
194 ObjectNode igmpJson = objectNode();
195 igmpJson.put("IgmpCounter", igmpCount);
196 log.info("Received IGMP Request");
197 sendMessage(IGMP_RESP, igmpJson);
198 }
199 }
200 //Looking for PIM Packets
201 private final class PimRequestHandler extends RequestHandler {
202 private PimRequestHandler() {
203 super(PIM_REQ);
204 }
205
206 @Override
207 public void process(ObjectNode payload) {
208 MetricsService service = get(MetricsService.class);
209 Map<String, Counter> counters = service.getCounters(filter);
210 Counter pimCounter = counters.get("packetStatisticsComponent.pimFeature.pimPC");
211 long pimCount = pimCounter.getCount();
212 ObjectNode pimJson = objectNode();
213 pimJson.put("PimCounter", pimCount);
214 log.info("Received PIM Request");
215 sendMessage(PIM_RESP, pimJson);
216 }
217 }
218 //Looking for PIM Packets
219 private final class BsnRequestHandler extends RequestHandler {
220 private BsnRequestHandler() {
221 super(BSN_REQ);
222 }
223
224 @Override
225 public void process(ObjectNode payload) {
226 MetricsService service = get(MetricsService.class);
227 Map<String, Counter> counters = service.getCounters(filter);
228 Counter bsnCounter = counters.get("packetStatisticsComponent.bsnFeature.bsnPC");
229 long bsnCount = bsnCounter.getCount();
230 ObjectNode bsnJson = objectNode();
231 bsnJson.put("BsnCounter", bsnCount);
232 log.info("Received BSN Request");
233 sendMessage(BSN_RESP, bsnJson);
234 }
235 }
236 //Looking for PIM Packets
237 private final class UnknownRequestHandler extends RequestHandler {
238 private UnknownRequestHandler() {
239 super(UNKNOWN_REQ);
240 }
241
242 @Override
243 public void process(ObjectNode payload) {
244 MetricsService service = get(MetricsService.class);
245 Map<String, Counter> counters = service.getCounters(filter);
246 Counter unknownCounter = counters.get("packetStatisticsComponent.unknownFeature.unknownPC");
247 long unknownCount = unknownCounter.getCount();
248 ObjectNode unknownJson = objectNode();
249 unknownJson.put("UnknownCounter", unknownCount);
250 log.info("Received UNKNOWN Request");
251 sendMessage(UNKNOWN_RESP, unknownJson);
252 }
253 }
254 //Looking for PIM Packets
255 private final class MplsRequestHandler extends RequestHandler {
256 private MplsRequestHandler() {
257 super(MPLS_REQ);
258 }
259
260 @Override
261 public void process(ObjectNode payload) {
262 MetricsService service = get(MetricsService.class);
263 Map<String, Counter> counters = service.getCounters(filter);
264 Counter mplsCounter = counters.get("packetStatisticsComponent.mplsFeature.mplsPC");
265 long mplsCount = mplsCounter.getCount();
266 ObjectNode mplsJson = objectNode();
267 mplsJson.put("MplsCounter", mplsCount);
268 log.info("Received MPLS Request");
269 sendMessage(MPLS_RESP, mplsJson);
270 }
271 }
272
273
274}