--- /dev/null
+/**********************************************************************
+ * Copyright (c) 2016 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Bruno Roy - Initial API and implementation
+ *********************************************************************/
+package org.eclipse.tracecompass.internal.lttng2.control.core.model;
+
+/**
+ * Log Level for Python enumeration.
+ *
+ * @author Bruno Roy
+ */
+@SuppressWarnings("nls")
+public enum TracePythonLogLevel implements ITraceLogLevel{
+
+ // ------------------------------------------------------------------------
+ // Enum definition
+ // ------------------------------------------------------------------------
+ /** Log level critical */
+ PYTHON_CRITICAL("Critical"),
+ /** Log level error */
+ PYTHON_ERROR("Error"),
+ /** Log level warning */
+ PYTHON_WARNING("Warning"),
+ /** Log level info */
+ PYTHON_INFO("Info"),
+ /** Log level debug */
+ PYTHON_DEBUG("Debug"),
+ /** Log level not set */
+ PYTHON_NOTSET("Notset"),
+ /** Log level unknown */
+ LEVEL_UNKNOWN("LEVEL_UNKNOWN");
+
+ // ------------------------------------------------------------------------
+ // Attributes
+ // ------------------------------------------------------------------------
+ /**
+ * Name of enum.
+ */
+ private final String fInName;
+
+ // ------------------------------------------------------------------------
+ // Constuctors
+ // ------------------------------------------------------------------------
+
+ /**
+ * Private constructor
+ *
+ * @param name
+ * the name of state
+ */
+ private TracePythonLogLevel(String name) {
+ fInName = name;
+ }
+
+ // ------------------------------------------------------------------------
+ // Accessors
+ // ------------------------------------------------------------------------
+
+ @Override
+ public String getInName() {
+ return fInName;
+ }
+
+ // ------------------------------------------------------------------------
+ // Utility
+ // ------------------------------------------------------------------------
+ /**
+ * Return the corresponding {@link TracePythonLogLevel} to String "name"
+ *
+ * @param name
+ * String to compare to retrieve the good {@link TracePythonLogLevel}
+ * @return the corresponding {@link TracePythonLogLevel}
+ */
+ public static TracePythonLogLevel valueOfString(String name) {
+ if (name == null) {
+ throw new IllegalArgumentException();
+ }
+ for (TracePythonLogLevel tllevel : TracePythonLogLevel.values()) {
+ if (tllevel.name().equals(name)) {
+ return tllevel;
+ }
+ }
+ // No match
+ return LEVEL_UNKNOWN;
+ }
+}
<command xmlns="http://lttng.org/xml/ns/lttng-mi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://lttng.org/xml/ns/lttng-mi http://lttng.org/xml/schemas/lttng-mi/3/lttng-mi-3.0.xsd" schemaVersion="3.0"><name>list</name><output><domains><domain><type>LOG4J</type><buffer_type>PER_PID</buffer_type><pids><pid><id>5600</id><name>java</name><events><event><name>Test</name><type>TRACEPOINT</type><enabled>true</enabled><loglevel>UNKNOWN</loglevel><loglevel_type>ALL</loglevel_type><exclusions/></event></events></pid></pids></domain></domains></output></command>
</COMMAND_OUTPUT>
<COMMAND_INPUT>
+lttng --mi xml list -p
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command xmlns="http://lttng.org/xml/ns/lttng-mi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://lttng.org/xml/ns/lttng-mi http://lttng.org/xml/schemas/lttng-mi/3/lttng-mi-3.0.xsd" schemaVersion="3.0"><name>list</name><output><domains><domain><type>PYTHON</type><buffer_type>PER_PID</buffer_type><pids><pid><id>18008</id><name>python3</name><events><event><name>my-logger</name><type>TRACEPOINT</type><enabled>true</enabled><loglevel>PYTHON_NOTSET</loglevel><loglevel_type>ALL</loglevel_type><exclusions/></event></events></pid></pids></domain></domains></output></command>
+</COMMAND_OUTPUT>
+<COMMAND_INPUT>
lttng --mi xml list
</COMMAND_INPUT>
<COMMAND_RESULT>
<command><name>list</name><output><domains><domain><type>LOG4J</type><buffer_type>PER_PID</buffer_type><pids><pid><id>18332</id><name>java</name><events><event><name>Test</name><type>TRACEPOINT</type><enabled>true</enabled><filter>false</filter><loglevel>UNKNOWN</loglevel><loglevel_type>ALL</loglevel_type><exclusion>false</exclusion></event></events></pid></pids></domain></domains></output></command>
</COMMAND_OUTPUT>
<COMMAND_INPUT>
+lttng --mi xml list -p
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command><name>list</name><output><domains><domain><type>PYTHON</type><buffer_type>PER_PID</buffer_type><pids><pid><id>4940</id><name>python3</name><events><event><name>my-logger</name><type>TRACEPOINT</type><enabled>true</enabled><filter>false</filter><loglevel>PYTHON_NOTSET</loglevel><loglevel_type>ALL</loglevel_type><exclusion>false</exclusion></event></events></pid></pids></domain></domains></output></command>
+</COMMAND_OUTPUT>
+<COMMAND_INPUT>
lttng --mi xml list
</COMMAND_INPUT>
<COMMAND_RESULT>
<command><name>list</name><output><domains><domain><type>LOG4J</type><buffer_type>PER_PID</buffer_type><pids><pid><id>18332</id><name>java</name><events><event><name>Test</name><type>TRACEPOINT</type><enabled>true</enabled><filter>false</filter><loglevel>UNKNOWN</loglevel><loglevel_type>ALL</loglevel_type><exclusion>false</exclusion></event></events></pid></pids></domain></domains></output></command>
</COMMAND_OUTPUT>
<COMMAND_INPUT>
+lttng --mi xml list -p
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command><name>list</name><output><domains><domain><type>PYTHON</type><buffer_type>PER_PID</buffer_type><pids><pid><id>4940</id><name>python3</name><events><event><name>my-logger</name><type>TRACEPOINT</type><enabled>true</enabled><filter>false</filter><loglevel>PYTHON_NOTSET</loglevel><loglevel_type>ALL</loglevel_type><exclusion>false</exclusion></event></events></pid></pids></domain></domains></output></command>
+</COMMAND_OUTPUT>
+<COMMAND_INPUT>
lttng --mi xml list
</COMMAND_INPUT>
<COMMAND_RESULT>
</output>
</command>
</COMMAND_OUTPUT>
+<COMMAND_INPUT>
+lttng --mi xml list -p
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command>
+ <name>list</name>
+ <output>
+ <domains>
+ <domain>
+ <type>PYTHON</type>
+ <buffer_type>PER_PID</buffer_type>
+ <pids>
+ <pid>
+ <id>4940</id>
+ <name>python3</name>
+ <events>
+ <event>
+ <name>my-logger</name>
+ <type>TRACEPOINT</type>
+ <enabled>true</enabled>
+ <filter>false</filter>
+ <loglevel>PYTHON_NOTSET</loglevel>
+ <loglevel_type>ALL</loglevel_type>
+ <exclusion>false</exclusion>
+ </event>
+ </events>
+ </pid>
+ </pids>
+ </domain>
+ </domains>
+ </output>
+</command>
+</COMMAND_OUTPUT>
</SCENARIO>
####################################################################
</output>
</command>
</COMMAND_OUTPUT>
+<COMMAND_INPUT>
+lttng --mi xml list -p
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command xmlns="http://lttng.org/xml/ns/lttng-mi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://lttng.org/xml/ns/lttng-mi http://lttng.org/xml/schemas/lttng-mi/3/lttng-mi-3.0.xsd" schemaVersion="3.0">
+ <name>list</name>
+ <output>
+ <domains>
+ <domain>
+ <type>PYTHON</type>
+ <buffer_type>PER_PID</buffer_type>
+ <pids>
+ <pid>
+ <id>18008</id>
+ <name>python3</name>
+ <events>
+ <event>
+ <name>my-logger</name>
+ <type>TRACEPOINT</type>
+ <enabled>true</enabled>
+ <loglevel>PYTHON_NOTSET</loglevel>
+ <loglevel_type>ALL</loglevel_type>
+ <exclusions />
+ </event>
+ </events>
+ </pid>
+ </pids>
+ </domain>
+ </domains>
+ </output>
+</command>
+</COMMAND_OUTPUT>
</SCENARIO>
####################################################################
</output>
</command>
</COMMAND_OUTPUT>
+<COMMAND_INPUT>
+lttng --mi xml list -p
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command xmlns="http://lttng.org/xml/ns/lttng-mi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://lttng.org/xml/ns/lttng-mi http://lttng.org/xml/schemas/lttng-mi/3/lttng-mi-3.0.xsd" schemaVersion="3.0">
+ <name>list</name>
+ <output>
+ <domains>
+ <domain>
+ <type>PYTHON</type>
+ <buffer_type>PER_PID</buffer_type>
+ <pids>
+ <pid>
+ <id>18008</id>
+ <name>python3</name>
+ <events>
+ <event>
+ <name>my-logger</name>
+ <type>TRACEPOINT</type>
+ <enabled>true</enabled>
+ <loglevel>PYTHON_NOTSET</loglevel>
+ <loglevel_type>ALL</loglevel_type>
+ <exclusions />
+ </event>
+ </events>
+ </pid>
+ </pids>
+ </domain>
+ </domains>
+ </output>
+</command>
+</COMMAND_OUTPUT>
</SCENARIO>
####################################################################
</output>
</command>
</COMMAND_OUTPUT>
+<COMMAND_INPUT>
+lttng --mi xml list -p
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command xmlns="http://lttng.org/xml/ns/lttng-mi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://lttng.org/xml/ns/lttng-mi http://lttng.org/xml/schemas/lttng-mi/3/lttng-mi-3.0.xsd" schemaVersion="3.0">
+ <name>list</name>
+ <output>
+ <domains>
+ <domain>
+ <type>PYTHON</type>
+ <buffer_type>PER_PID</buffer_type>
+ <pids>
+ <pid>
+ <id>18008</id>
+ <name>python3</name>
+ <events>
+ <event>
+ <name>my-logger</name>
+ <type>TRACEPOINT</type>
+ <enabled>true</enabled>
+ <loglevel>PYTHON_NOTSET</loglevel>
+ <loglevel_type>ALL</loglevel_type>
+ <exclusions />
+ </event>
+ </events>
+ </pid>
+ </pids>
+ </domain>
+ </domains>
+ </output>
+</command>
+</COMMAND_OUTPUT>
</SCENARIO>
####################################################################
# Scenario: Test "lttng create <session>
</output>
</command>
</COMMAND_OUTPUT>
+<COMMAND_INPUT>
+lttng --mi xml list -p
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command>
+ <name>list</name>
+ <output>
+ <domains>
+ <domain>
+ <type>PYTHON</type>
+ <buffer_type>PER_PID</buffer_type>
+ <pids>
+ <pid>
+ <id>4940</id>
+ <name>python3</name>
+ <events>
+ <event>
+ <name>my-logger</name>
+ <type>TRACEPOINT</type>
+ <enabled>true</enabled>
+ <filter>false</filter>
+ <loglevel>PYTHON_NOTSET</loglevel>
+ <loglevel_type>ALL</loglevel_type>
+ <exclusion>false</exclusion>
+ </event>
+ </events>
+ </pid>
+ </pids>
+ </domain>
+ </domains>
+ </output>
+</command>
+</COMMAND_OUTPUT>
</SCENARIO>
####################################################################
</output>
</command>
</COMMAND_OUTPUT>
+<COMMAND_INPUT>
+lttng --mi xml list -p
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command>
+ <name>list</name>
+ <output>
+ <domains>
+ <domain>
+ <type>PYTHON</type>
+ <buffer_type>PER_PID</buffer_type>
+ <pids>
+ <pid>
+ <id>4940</id>
+ <name>python3</name>
+ <events>
+ <event>
+ <name>my-logger</name>
+ <type>TRACEPOINT</type>
+ <enabled>true</enabled>
+ <filter>false</filter>
+ <loglevel>PYTHON_NOTSET</loglevel>
+ <loglevel_type>ALL</loglevel_type>
+ <exclusion>false</exclusion>
+ </event>
+ </events>
+ </pid>
+ </pids>
+ </domain>
+ </domains>
+ </output>
+</command>
+</COMMAND_OUTPUT>
</SCENARIO>
####################################################################
</output>
</command>
</COMMAND_OUTPUT>
+<COMMAND_INPUT>
+lttng --mi xml list -p
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command>
+ <name>list</name>
+ <output>
+ <domains>
+ <domain>
+ <type>PYTHON</type>
+ <buffer_type>PER_PID</buffer_type>
+ <pids>
+ <pid>
+ <id>4940</id>
+ <name>python3</name>
+ <events>
+ <event>
+ <name>my-logger</name>
+ <type>TRACEPOINT</type>
+ <enabled>true</enabled>
+ <filter>false</filter>
+ <loglevel>PYTHON_NOTSET</loglevel>
+ <loglevel_type>ALL</loglevel_type>
+ <exclusion>false</exclusion>
+ </event>
+ </events>
+ </pid>
+ </pids>
+ </domain>
+ </domains>
+ </output>
+</command>
+</COMMAND_OUTPUT>
</SCENARIO>
####################################################################
# Scenario: Test "lttng create <session>
* The composite with widgets for collecting information about LOG4J events.
*/
private EnableLoggersComposite fLog4jComposite;
+ /**
+ * The composite with widgets for collecting information about Python events.
+ */
+ private EnableLoggersComposite fPythonComposite;
/**
* Radio button for selecting kernel domain.
*/
* Radio button for selecting LOG4J domain.
*/
private Button fLog4jButton;
+ /**
+ * Radio button for selecting Python domain.
+ */
+ private Button fPythonButton;
/**
* The referenced trace provider group containing the kernel provider and UST
* provider component which contains a list of available tracepoints.
case LOG4J:
return fLog4jComposite.isAllTracePoints();
case PYTHON:
+ return fPythonComposite.isAllTracePoints();
case UNKNOWN:
default:
return false;
case LOG4J:
return fLog4jComposite.isAllTracePoints();
case PYTHON:
+ return fPythonComposite.isAllTracePoints();
case UNKNOWN:
default:
return false;
case LOG4J:
return fLog4jComposite.getEventNames();
case PYTHON:
+ return fPythonComposite.getEventNames();
case UNKNOWN:
default:
return null;
case LOG4J:
return fLog4jComposite.isLogLevel();
case PYTHON:
+ return fPythonComposite.isLogLevel();
case UNKNOWN:
default:
return false;
case LOG4J:
return fLog4jComposite.getLogLevelType();
case PYTHON:
+ return fPythonComposite.getLogLevelType();
case UNKNOWN:
default:
return null;
case LOG4J:
return fLog4jComposite.getLogLevel();
case PYTHON:
+ return fPythonComposite.getLogLevel();
case UNKNOWN:
default:
return null;
// ------------------------------------------------------------------------
Group domainGroup = new Group(fDialogComposite, SWT.SHADOW_NONE);
domainGroup.setText(Messages.TraceControl_DomainDisplayName);
- layout = new GridLayout(4, true);
+ layout = new GridLayout(5, true);
domainGroup.setLayout(layout);
fKernelButton = new Button(domainGroup, SWT.RADIO);
fJulButton.setText(Messages.TraceControl_JULDomainDisplayName);
fLog4jButton = new Button(domainGroup, SWT.RADIO);
fLog4jButton.setText(Messages.TraceControl_LOG4JDomainDisplayName);
+ fPythonButton = new Button(domainGroup, SWT.RADIO);
+ fPythonButton.setText(Messages.TraceControl_PythonDomainDisplayName);
switch (fDomain) {
case KERNEL:
fLog4jButton.setSelection(true);
break;
case PYTHON:
+ fPythonButton.setSelection(true);
+ break;
case UNKNOWN:
default:
break;
fUstButton.setEnabled(false);
fJulButton.setEnabled(false);
fLog4jButton.setEnabled(false);
+ fPythonButton.setEnabled(false);
} else if ((fProviderGroup != null) && (!fProviderGroup.hasKernelProvider())) {
fKernelButton.setEnabled(false);
fUstButton.setEnabled(true);
fJulButton.setEnabled(true);
fLog4jButton.setEnabled(true);
+ fPythonButton.setEnabled(true);
}
// layout widgets
fKernelComposite = null;
fJulComposite = null;
fLog4jComposite = null;
+ fPythonComposite= null;
switch (fDomain) {
case KERNEL:
createLog4jComposite();
break;
case PYTHON:
+ createPythonComposite();
+ break;
case UNKNOWN:
default:
break;
}
});
- getShell().setMinimumSize(new Point(550, 850));
+ fPythonButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if (fPythonButton.getSelection()) {
+ disposeAllComposite();
+ createPythonComposite();
+ fDialogComposite.layout();
+ }
+ }
+ });
+
+ getShell().setMinimumSize(new Point(550, 850));
return fDialogComposite;
}
fDomain = TraceDomainType.JUL;
} else if (fLog4jButton.getSelection()) {
fDomain= TraceDomainType.LOG4J;
+ } else if (fPythonButton.getSelection()) {
+ fDomain = TraceDomainType.PYTHON;
}
// Validate kernel composite in case of kernel domain
return;
}
- // Validate LOG4J composite in case of JUL domain
+ // Validate LOG4J composite in case of LOG4J domain
if (fLog4jComposite != null && !fLog4jComposite.isValid()) {
return;
}
+ // Validate Python composite in case of Python domain
+ if (fPythonComposite != null && !fPythonComposite.isValid()) {
+ return;
+ }
+
// validation successful -> call super.okPressed()
super.okPressed();
}
disposeUstComposite();
disposeJulComposite();
disposeLog4jComposite();
+ disposePythonComposite();
}
/**
fUstComposite.createContent();
}
- }
+ }
/**
* Disposes the UST composite (if existing)
fLog4jComposite = null;
}
}
+
+ /**
+ * Creates the Python composite (if not existing)
+ */
+ private void createPythonComposite() {
+ if (fPythonComposite == null) {
+ fPythonComposite = new EnableLoggersComposite(fDialogComposite, SWT.NONE, fProviderGroup, TraceDomainType.PYTHON);
+ GridLayout layout = new GridLayout(1, true);
+ fPythonComposite.setLayout(layout);
+ fPythonComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ fPythonComposite.createContent();
+ }
+ }
+
+ /**
+ * Disposes the Python composite (if existing)
+ */
+ private void disposePythonComposite() {
+ if (fPythonComposite != null) {
+ fPythonComposite.dispose();
+ fPythonComposite = null;
+ }
+ }
}
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceDomainType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceJulLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceLog4jLogLevel;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.TracePythonLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.messages.Messages;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.ITraceControlComponent;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.BaseLoggerComponent;
return TraceJulLogLevel.values();
case LOG4J:
return TraceLog4jLogLevel.values();
+ case PYTHON:
+ return TracePythonLogLevel.values();
//$CASES-OMITTED$
default:
return null;
int k = 0;
for (int i = 0; i < levels.length; i++) {
if (levels[i] != TraceJulLogLevel.LEVEL_UNKNOWN &&
- levels[i] != TraceLog4jLogLevel.LEVEL_UNKNOWN) {
+ levels[i] != TraceLog4jLogLevel.LEVEL_UNKNOWN &&
+ levels[i] != TracePythonLogLevel.LEVEL_UNKNOWN) {
levelNames[k++] = levels[i].getInName();
}
}
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceJulLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceLog4jLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceLogLevel;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.TracePythonLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.ITraceLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.ui.Activator;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.messages.Messages;
@Override
protected Control createDialogArea(Composite parent) {
+ fLogLevel = null;
+ fLogLevelType = null;
super.createDialogArea(parent);
// Main dialog panel
Composite dialogComposite = new Composite(parent, SWT.NONE);
data = new GridData(GridData.FILL_BOTH);
fLogLevelButton.setLayoutData(data);
- ITraceLogLevel[] levels = null;
String[] levelNames = null;
switch (fLoggerDomain) {
case JUL:
- levels = TraceJulLogLevel.values();
-
- levelNames = new String[levels.length - 1];
- int k = 0;
- for (int i = 0; i < levels.length; i++) {
- if (levels[i] != TraceJulLogLevel.LEVEL_UNKNOWN) {
- levelNames[k++] = levels[i].getInName();
- }
- }
+ levelNames = findLoglevelNames(TraceJulLogLevel.class);
break;
case LOG4J:
- levels = TraceLog4jLogLevel.values();
-
- levelNames = new String[levels.length - 1];
- int l = 0;
- for (int i = 0; i < levels.length; i++) {
- if (levels[i] != TraceLog4jLogLevel.LEVEL_UNKNOWN) {
- levelNames[l++] = levels[i].getInName();
- }
- }
+ levelNames = findLoglevelNames(TraceLog4jLogLevel.class);
+ break;
+ case PYTHON:
+ levelNames = findLoglevelNames(TracePythonLogLevel.class);
break;
//$CASES-OMITTED$
default:
case LOG4J:
levels = TraceLog4jLogLevel.values();
break;
+ case PYTHON:
+ levels = TracePythonLogLevel.values();
+ break;
//$CASES-OMITTED$
default:
levels = TraceLogLevel.values();
super.okPressed();
}
+ // ------------------------------------------------------------------------
+ // Helper methods
+ // ------------------------------------------------------------------------
+
+ /**
+ * Returns the values of a certain enum type.
+ *
+ * @param enumType
+ * a value of an enum type, this is to determine the type of the enum
+ * @return an array of String of the values of the enum type
+ */
+ private static String[] findLoglevelNames(Class<? extends ITraceLogLevel> enumType) {
+ ITraceLogLevel[] levels = enumType.getEnumConstants();
+ if (levels == null) {
+ return new String[0];
+ }
+ String[] levelNames = new String[levels.length - 1];
+ int l = 0;
+ for (int i = 0; i < levels.length; i++) {
+ if ((!levels[i].equals(TraceLog4jLogLevel.LEVEL_UNKNOWN)) &&
+ (!levels[i].equals(TracePythonLogLevel.LEVEL_UNKNOWN)) &&
+ (!levels[i].equals(TraceJulLogLevel.LEVEL_UNKNOWN))) {
+ levelNames[l++] = levels[i].getInName();
+ }
+ }
+ return levelNames;
+ }
+
}
break;
case JUL:
case LOG4J:
+ case PYTHON:
eventNames = dialog.getEventNames();
if (dialog.isAllEvents()) {
eventNames = null;
// different session or domain they need to be enabled in two different lttng commands. At this moment,
// it is simpler to disable the context menu. This issue will be addressed later as an enhancement.
if ((!sessionName.equals(logger.getSessionName())) ||
- (!domain.getName().equals(logger.getDomain().name()))) {
+ (!domain.getName().equalsIgnoreCase(logger.getDomain().name()))) {
loggers.clear();
break;
}
public static String TraceControl_UnknownDomainDisplayName;
public static String TraceControl_JULDomainDisplayName;
public static String TraceControl_LOG4JDomainDisplayName;
+ public static String TraceControl_PythonDomainDisplayName;
public static String TraceControl_AllSessionsDisplayName;
public static String TraceControl_SessionDisplayName;
public static String TraceControl_DomainDisplayName;
TraceControl_KernelDomainDisplayName=Kernel
TraceControl_JULDomainDisplayName=JUL
TraceControl_LOG4JDomainDisplayName=LOG4J
+TraceControl_PythonDomainDisplayName=Python
TraceControl_UstGlobalDomainDisplayName=UST global
TraceControl_UstDisplayName=UST
TraceControl_UnknownDomainDisplayName=Unknown domain
}
// Since the loggers are not in a channel, the loggers won't be added by the previous loop
- if (TraceDomainType.JUL.equals(domainInfo.getDomain()) || TraceDomainType.LOG4J.equals(domainInfo.getDomain())) {
+ if (TraceDomainType.JUL.equals(domainInfo.getDomain()) ||
+ TraceDomainType.LOG4J.equals(domainInfo.getDomain()) ||
+ TraceDomainType.PYTHON.equals(domainInfo.getDomain())) {
List<ILoggerInfo> loggers = fDomainInfo.getLoggers();
for (ILoggerInfo loggerInfo : loggers) {
TraceLoggerComponent logger = new TraceLoggerComponent(loggerInfo.getName(), this);
* UST domain event created by a Java application.
*/
private static final String LTTNG_LOG4J_EVENT = "lttng_log4j:event"; //$NON-NLS-1$
+ /**
+ * UST domain event created by a Python application.
+ */
+ private static final String LTTNG_PYTHON_EVENT = "lttng_python:event"; //$NON-NLS-1$
// ------------------------------------------------------------------------
// Attributes
!events[i].getName().equals(LTTNG_LOG4J_USER_EVENT) &&
!events[i].getName().equals(LTTNG_LOG4J_SYS_EVENT) &&
!events[i].getName().equals(LTTNG_JUL_EVENT) &&
- !events[i].getName().equals(LTTNG_LOG4J_EVENT) ) {
+ !events[i].getName().equals(LTTNG_LOG4J_EVENT) &&
+ !events[i].getName().equals(LTTNG_PYTHON_EVENT)) {
eventComponents.add(component);
}
}
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceJulLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceLog4jLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceLogLevel;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.TracePythonLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.impl.BaseEventInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.impl.BufferType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.impl.ChannelInfo;
domain = new DomainInfo(Messages.TraceControl_LOG4JDomainDisplayName);
domain.setDomain(TraceDomainType.LOG4J);
break;
+ case PYTHON:
+ domain = new DomainInfo(Messages.TraceControl_PythonDomainDisplayName);
+ domain.setDomain(TraceDomainType.PYTHON);
+ break;
case UNKNOWN:
domain = new DomainInfo(Messages.TraceControl_UnknownDomainDisplayName);
domain.setDomain(TraceDomainType.UNKNOWN);
getUstProviderLoggers(allProviders, TraceDomainType.JUL, monitor);
getUstProviderLoggers(allProviders, TraceDomainType.LOG4J, monitor);
+ getUstProviderLoggers(allProviders, TraceDomainType.PYTHON, monitor);
return allProviders;
}
case LOG4J:
loggerInfo.setLogLevel(TraceLog4jLogLevel.valueOfString(infoNode.getTextContent()));
break;
+ case PYTHON:
+ loggerInfo.setLogLevel(TracePythonLogLevel.valueOfString(infoNode.getTextContent()));
+ break;
//$CASES-OMITTED$
default:
break;