lttng: Fix filters not shown with LTTng 2.8
authorMarc-Andre Laperle <marc-andre.laperle@ericsson.com>
Mon, 18 Apr 2016 19:37:06 +0000 (15:37 -0400)
committerMarc-Andre Laperle <marc-andre.laperle@ericsson.com>
Thu, 21 Apr 2016 17:00:51 +0000 (13:00 -0400)
In LTTng 2.8, a new MI field was added, filter_expression.
This needs to be handled by Trace Compass.

Bug: 491941
Change-Id: If1e796ca24d5542422f61f63c91cb4c37d702edd
Signed-off-by: Marc-Andre Laperle <marc-andre.laperle@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/70905
Reviewed-by: Hudson CI
Reviewed-by: Patrick Tasse <patrick.tasse@gmail.com>
Tested-by: Patrick Tasse <patrick.tasse@gmail.com>
lttng/org.eclipse.tracecompass.lttng2.control.ui.tests/src/org/eclipse/tracecompass/lttng2/control/ui/tests/service/LTTngControlServiceMiTest.java
lttng/org.eclipse.tracecompass.lttng2.control.ui.tests/testfiles/LTTngServiceMiTest.cfg
lttng/org.eclipse.tracecompass.lttng2.control.ui/src/org/eclipse/tracecompass/internal/lttng2/control/ui/views/service/LTTngControlServiceMI.java
lttng/org.eclipse.tracecompass.lttng2.control.ui/src/org/eclipse/tracecompass/internal/lttng2/control/ui/views/service/MIStrings.java

index 488a18c528649151a006b23d1868a771b34de610..3d06be2b6b25f2679cada89ad879626fc9c361a8 100644 (file)
@@ -49,6 +49,7 @@ public class LTTngControlServiceMiTest extends LTTngControlServiceTest {
 
     private static final String SCEN_SESSION_WITH_SYSCALLS = "GetSessionWithSyscalls";
     private static final String SCEN_LIST_SESSION_2_7_COMPAT = "ListSession2.7Compat";
+    private static final String SCEN_GET_SESSION_FILTER_EXPRESSION = "GetSessionFilterExpression";
 
     @Override
     protected ILttngControlService getControlService() {
@@ -306,4 +307,76 @@ public class LTTngControlServiceMiTest extends LTTngControlServiceTest {
             fail(e.toString());
         }
     }
+
+    @Test
+    public void testGetSessionWithFilterExpression() throws ExecutionException {
+        // FIXME: Disable scheme validation for now until MI 3.0 is integrated
+        LTTngControlServiceMI service = new LTTngControlServiceMI(getShell(), null);
+
+        fShell.setScenario(SCEN_GET_SESSION_FILTER_EXPRESSION);
+        ISessionInfo session = service.getSession("mysession", new NullProgressMonitor());
+
+        // Verify Session
+        assertNotNull(session);
+        assertEquals("mysession", session.getName());
+        assertEquals("/home/user/lttng-traces/mysession-20120129-084256", session.getSessionPath());
+        assertEquals(TraceSessionState.ACTIVE, session.getSessionState());
+
+        IDomainInfo[] domains = session.getDomains();
+        assertNotNull(domains);
+        assertEquals(2, domains.length);
+
+        // Verify Kernel domain
+        assertEquals("Kernel", domains[0].getName());
+        IChannelInfo[] channels =  domains[0].getChannels();
+        assertNotNull(channels);
+        assertEquals(1, channels.length);
+
+        // Verify Kernel's channel0
+        assertEquals("channel0", channels[0].getName());
+        assertEquals(4, channels[0].getNumberOfSubBuffers());
+        assertEquals("splice()", channels[0].getOutputType().getInName());
+        assertEquals(TraceChannelOutputType.SPLICE, channels[0].getOutputType());
+        assertEquals(false, channels[0].isOverwriteMode());
+        assertEquals(200, channels[0].getReadTimer());
+        assertEquals(TraceEnablement.ENABLED, channels[0].getState());
+        assertEquals(262144, channels[0].getSubBufferSize());
+        assertEquals(0, channels[0].getSwitchTimer());
+
+        // Verify event info
+        IEventInfo[] channel0Events = channels[0].getEvents();
+        assertNotNull(channel0Events);
+        assertEquals(1, channel0Events.length);
+        assertEquals("block_rq_remap", channel0Events[0].getName());
+        assertEquals(TraceLogLevel.TRACE_EMERG, channel0Events[0].getLogLevel());
+        assertEquals(TraceEventType.TRACEPOINT, channel0Events[0].getEventType());
+        assertEquals(TraceEnablement.ENABLED, channel0Events[0].getState());
+        assertEquals("foo > 10", channel0Events[0].getFilterExpression());
+
+        // Verify domain UST global
+        assertEquals("UST global", domains[1].getName());
+
+        IChannelInfo[] ustChannels =  domains[1].getChannels();
+
+        // Verify UST global's channel0
+        assertEquals("channel0", ustChannels[0].getName());
+        assertEquals(4, ustChannels[0].getNumberOfSubBuffers());
+        assertEquals("mmap()", ustChannels[0].getOutputType().getInName());
+        assertEquals(TraceChannelOutputType.MMAP, ustChannels[0].getOutputType());
+        assertEquals(false, ustChannels[0].isOverwriteMode());
+        assertEquals(200, ustChannels[0].getReadTimer());
+        assertEquals(TraceEnablement.ENABLED, ustChannels[0].getState());
+        assertEquals(4096, ustChannels[0].getSubBufferSize());
+        assertEquals(0, ustChannels[0].getSwitchTimer());
+
+        // Verify event info
+        IEventInfo[] ustEvents = ustChannels[0].getEvents();
+        assertEquals(1, ustEvents.length);
+
+        assertEquals("ust_tests_hello:tptest_sighandler", ustEvents[0].getName());
+        assertEquals(TraceLogLevel.TRACE_DEBUG_LINE, ustEvents[0].getLogLevel());
+        assertEquals(TraceEventType.TRACEPOINT, ustEvents[0].getEventType());
+        assertEquals(TraceEnablement.DISABLED, ustEvents[0].getState());
+        assertEquals("foo > 10", ustEvents[0].getFilterExpression());
+    }
 }
index 1e0da9128a650e167f50533c9c559cc61d87d457..969cee7491668eec05f08c846eba3d110625599d 100644 (file)
@@ -457,6 +457,101 @@ lttng --mi xml list mysession1
 </COMMAND_OUTPUT>
 </SCENARIO>
 
+####################################################################
+# Scenario: Test lttng list <name> in the presence of filter expressions
+####################################################################
+<SCENARIO>
+GetSessionFilterExpression
+<COMMAND_INPUT>
+lttng --mi xml list mysession
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command>
+  <name>list</name>
+  <output>
+    <sessions>
+      <session>
+        <name>mysession</name>
+        <path>/home/user/lttng-traces/mysession-20120129-084256</path>
+        <enabled>true</enabled>
+        <snapshot_mode>0</snapshot_mode>
+        <live_timer_interval>0</live_timer_interval>
+        <domains>
+          <domain>
+            <type>KERNEL</type>
+            <buffer_type>PER_PID</buffer_type>
+            <channels>
+              <channel>
+                <name>channel0</name>
+                <enabled>true</enabled>
+                <attributes>
+                  <overwrite_mode>DISCARD</overwrite_mode>
+                  <subbuffer_size>262144</subbuffer_size>
+                  <subbuffer_count>4</subbuffer_count>
+                  <switch_timer_interval>0</switch_timer_interval>
+                  <read_timer_interval>200</read_timer_interval>
+                  <output_type>SPLICE</output_type>
+                  <tracefile_size>0</tracefile_size>
+                  <tracefile_count>0</tracefile_count>
+                  <live_timer_interval>0</live_timer_interval>
+                </attributes>
+                <events>
+                  <event>
+                    <name>block_rq_remap</name>
+                    <type>TRACEPOINT</type>
+                    <enabled>true</enabled>
+                    <filter_expression>foo &gt; 10</filter_expression>
+                    <loglevel>TRACE_EMERG</loglevel>
+                    <loglevel_type>ALL</loglevel_type>
+                    <exclusion>false</exclusion>
+                  </event>
+                </events>
+              </channel>
+            </channels>
+          </domain>
+          <domain>
+            <type>UST</type>
+            <buffer_type>PER_UID</buffer_type>
+            <channels>
+              <channel>
+                <name>channel0</name>
+                <enabled>true</enabled>
+                <attributes>
+                  <overwrite_mode>DISCARD</overwrite_mode>
+                  <subbuffer_size>4096</subbuffer_size>
+                  <subbuffer_count>4</subbuffer_count>
+                  <switch_timer_interval>0</switch_timer_interval>
+                  <read_timer_interval>200</read_timer_interval>
+                  <output_type>MMAP</output_type>
+                  <tracefile_size>0</tracefile_size>
+                  <tracefile_count>0</tracefile_count>
+                  <live_timer_interval>0</live_timer_interval>
+                </attributes>
+                <events>
+                  <event>
+                    <name>ust_tests_hello:tptest_sighandler</name>
+                    <type>TRACEPOINT</type>
+                    <enabled>false</enabled>
+                    <filter_expression>foo &gt; 10</filter_expression>
+                    <loglevel>TRACE_DEBUG_LINE</loglevel>
+                    <loglevel_type>ALL</loglevel_type>
+                    <exclusion>false</exclusion>
+                  </event>
+                </events>
+              </channel>
+            </channels>
+          </domain>
+        </domains>
+      </session>
+    </sessions>
+  </output>
+</command>
+</COMMAND_OUTPUT>
+</SCENARIO>
 
 ####################################################################
 # Scenario: Test lttng list <name> (with live time interval)
index 928c3516bd7cd2ae94fc7530c27a3ed4763397d6..bb36ea6059d043b48cf4bc8f0868d497bea85a07 100644 (file)
@@ -851,15 +851,15 @@ public class LTTngControlServiceMI extends LTTngControlService {
                         eventInfo.setState(TraceEnablement.valueOfString(infoNode.getTextContent()));
                         break;
                     case MIStrings.FILTER:
-                        // TODO
-                        // See bug 334 http://bugs.lttng.org/issues/334 from
-                        // LTTng
-                        // For now we emulate the non-mi behavior and simply put
+                        // Before LTTng 2.8: We emulate the non-mi behavior and simply put
                         // "with filter"
                         if (Boolean.TRUE.toString().equals(infoNode.getTextContent())) {
                             eventInfo.setFilterExpression(Messages.TraceControl_DefaultEventFilterString);
                         }
                         break;
+                    case MIStrings.FILTER_EXPRESSION:
+                        eventInfo.setFilterExpression(infoNode.getTextContent());
+                        break;
                     case MIStrings.EXCLUSION:
                         // TODO: Currently not supported by tmf
                         // ExclusionS element is ignored
index 15c69efee70864ebc7dafdd61345b64cda4d96c0..d01cc7ed49c5d745625b82e85a258849e5149408 100644 (file)
@@ -536,6 +536,11 @@ public interface MIStrings {
      */
      String FILTER = "filter";
 
+     /**
+      * Represent the filter_expression xml element
+      */
+     String FILTER_EXPRESSION = "filter_expression";
+
     /**
      * Represent the snapshot_outputs xml element
      */
This page took 0.029899 seconds and 5 git commands to generate.