683daec537312f2dd8f8b915903bd1fb0c164a73
[docs.git] / manuals / developer-guide / src / main / asciidoc / openflowplugin / odl-ofp-message-spy.adoc
1 === Internal message statistics API
2
3 To aid in testing and diagnosis, the OpenFlow plugin provides information about the number and rate of different internal events.
4
5 === Implemented strategy
6
7 The implementation does two things: collects event counts and exposes counts. Event counts are grouped by message type, e.g., *PacketInMessage*, and checkpoint, e.g., _TO_SWITCH_ENQUEUED_SUCCESS_. Once gathered, the results are logged as well as being exposed using OSGi command line (deprecated) and JMX.
8
9 [[collect]]
10 ==== Collect
11
12 Each message is counted as it passes through various processing checkpoints. The following checkpoints are defined as a Java enum and tracked:
13
14 [source, java]
15 ----
16   /**
17     * statistic groups overall in OFPlugin
18     */
19   enum STATISTIC_GROUP {
20        /** message from switch, enqueued for processing */
21        FROM_SWITCH_ENQUEUED,
22        /** message from switch translated successfully - source */
23        FROM_SWITCH_TRANSLATE_IN_SUCCESS,
24        /** message from switch translated successfully - target */
25        FROM_SWITCH_TRANSLATE_OUT_SUCCESS,
26        /** message from switch where translation failed - source */
27        FROM_SWITCH_TRANSLATE_SRC_FAILURE,
28        /** message from switch finally published into MD-SAL */
29        FROM_SWITCH_PUBLISHED_SUCCESS,
30        /** message from switch - publishing into MD-SAL failed */
31        FROM_SWITCH_PUBLISHED_FAILURE,
32        
33        /** message from MD-SAL to switch via RPC enqueued */
34        TO_SWITCH_ENQUEUED_SUCCESS,
35        /** message from MD-SAL to switch via RPC NOT enqueued */
36        TO_SWITCH_ENQUEUED_FAILED,
37        /** message from MD-SAL to switch - sent to OFJava successfully */
38        TO_SWITCH_SUBMITTED_SUCCESS,
39        /** message from MD-SAL to switch - sent to OFJava but failed*/
40        TO_SWITCH_SUBMITTED_FAILURE
41   }
42 ----
43
44 When a message passes through any of those checkpoints then counter assigned to
45 corresponding checkpoint and message is incremented by 1.
46
47 [[expose-results]]
48 ==== Expose statistics
49
50 As described above, there are three ways to access the statistics:
51
52 * OSGi command line (this is considered deprecated)
53 +
54 ::
55   `osgi> dumpMsgCount`
56 * OpenDaylight logging console (statistics are logged here every 10 seconds)
57 +
58 ::
59   required logback settings :
60   `<logger name="org.opendaylight.openflowplugin.openflow.md.queue.MessageSpyCounterImpl" level="DEBUG"\/>`
61 * JMX (via JConsole)
62 ::
63   start OpenFlow plugin with the +-jmx+ parameter
64 ::
65   start JConsole by running `jconsole`
66 ::
67   the JConsole MBeans tab should contain org.opendaylight.controller
68 ::
69   RuntimeBean has a msg-spy-service-impl
70 ::
71   Operations provides makeMsgStatistics report functionality
72
73 [[example-result]]
74 ===== Example results
75
76 image::openflowplugin/odl-ofp-ofplugin-debug-stats.png[OFplugin Debug stats.png,title="OFplugin Debug stats.png" width="500"]
77
78 ----
79 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_ENQUEUED: MSG[PortStatusMessage] -> +0 | 1
80 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_ENQUEUED: MSG[MultipartReplyMessage] -> +24 | 81
81 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_ENQUEUED: MSG[PacketInMessage] -> +8 | 111
82 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_IN_SUCCESS: MSG[PortStatusMessage] -> +0 | 1
83 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_IN_SUCCESS: MSG[MultipartReplyMessage] -> +24 | 81
84 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_IN_SUCCESS: MSG[PacketInMessage] -> +8 | 111
85 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[QueueStatisticsUpdate] -> +3 | 7
86 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[NodeUpdated] -> +0 | 3
87 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[NodeConnectorStatisticsUpdate] -> +3 | 7
88 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[GroupDescStatsUpdated] -> +3 | 7
89 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[FlowsStatisticsUpdate] -> +3 | 19
90 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[PacketReceived] -> +8 | 111
91 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[MeterFeaturesUpdated] -> +0 | 3
92 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[GroupStatisticsUpdated] -> +3 | 7
93 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[GroupFeaturesUpdated] -> +0 | 3
94 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[MeterConfigStatsUpdated] -> +3 | 7
95 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[MeterStatisticsUpdated] -> +3 | 7
96 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[NodeConnectorUpdated] -> +0 | 12
97 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[FlowTableStatisticsUpdate] -> +3 | 8
98 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_SRC_FAILURE: no activity detected
99 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[QueueStatisticsUpdate] -> +3 | 7
100 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[NodeUpdated] -> +0 | 3
101 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[NodeConnectorStatisticsUpdate] -> +3 | 7
102 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[GroupDescStatsUpdated] -> +3 | 7
103 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[FlowsStatisticsUpdate] -> +3 | 19
104 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[PacketReceived] -> +8 | 111
105 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[MeterFeaturesUpdated] -> +0 | 3
106 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[GroupStatisticsUpdated] -> +3 | 7
107 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[GroupFeaturesUpdated] -> +0 | 3
108 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[MeterConfigStatsUpdated] -> +3 | 7
109 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[MeterStatisticsUpdated] -> +3 | 7
110 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[NodeConnectorUpdated] -> +0 | 12
111 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[FlowTableStatisticsUpdate] -> +3 | 8
112 DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_FAILURE: no activity detected
113 DEBUG o.o.o.s.MessageSpyCounterImpl - TO_SWITCH_ENQUEUED_SUCCESS: MSG[AddFlowInput] -> +0 | 12
114 DEBUG o.o.o.s.MessageSpyCounterImpl - TO_SWITCH_ENQUEUED_FAILED: no activity detected
115 DEBUG o.o.o.s.MessageSpyCounterImpl - TO_SWITCH_SUBMITTED_SUCCESS: MSG[AddFlowInput] -> +0 | 12
116 DEBUG o.o.o.s.MessageSpyCounterImpl - TO_SWITCH_SUBMITTED_FAILURE: no activity detected
117 ----